99     &                             LBi, UBi, LBj, UBj,                  &
 
  100     &                             IminS, ImaxS, JminS, JmaxS,          &
 
  107#ifdef TIDE_GENERATING_FORCES
 
  108     &                             eq_tide, tl_eq_tide,                 &
 
  124      integer, 
intent(in) :: ng, tile
 
  125      integer, 
intent(in) :: LBi, UBi, LBj, UBj
 
  126      integer, 
intent(in) :: IminS, ImaxS, JminS, JmaxS
 
  127      integer, 
intent(in) :: nrhs
 
  130      real(r8), 
intent(in) :: om_v(LBi:,LBj:)
 
  131      real(r8), 
intent(in) :: on_u(LBi:,LBj:)
 
  132      real(r8), 
intent(in) :: Hz(LBi:,LBj:,:)
 
  133      real(r8), 
intent(in) :: z_r(LBi:,LBj:,:)
 
  134      real(r8), 
intent(in) :: z_w(LBi:,LBj:,0:)
 
  135      real(r8), 
intent(in) :: rho(LBi:,LBj:,:)
 
  137      real(r8), 
intent(in) :: tl_Hz(LBi:,LBj:,:)
 
  138      real(r8), 
intent(in) :: tl_z_r(LBi:,LBj:,:)
 
  139      real(r8), 
intent(in) :: tl_z_w(LBi:,LBj:,0:)
 
  140      real(r8), 
intent(in) :: tl_rho(LBi:,LBj:,:)
 
  142# ifdef TIDE_GENERATING_FORCES 
  143      real(r8), 
intent(in) :: eq_tide(LBi:,LBj:)
 
  144      real(r8), 
intent(in) :: tl_eq_tide(LBi:,LBj:)
 
  147      real(r8), 
intent(in) :: Pair(LBi:,LBj:)
 
  149# ifdef DIAGNOSTICS_UV 
  153      real(r8), 
intent(inout) :: tl_ru(LBi:,LBj:,0:,:)
 
  154      real(r8), 
intent(inout) :: tl_rv(LBi:,LBj:,0:,:)
 
  156      real(r8), 
intent(in) :: om_v(LBi:UBi,LBj:UBj)
 
  157      real(r8), 
intent(in) :: on_u(LBi:UBi,LBj:UBj)
 
  158      real(r8), 
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
 
  159      real(r8), 
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
 
  160      real(r8), 
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
 
  161      real(r8), 
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
 
  163      real(r8), 
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
 
  164      real(r8), 
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
 
  165      real(r8), 
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
 
  166      real(r8), 
intent(in) :: tl_rho(LBi:UBi,LBj:UBj,N(ng))
 
  168# ifdef TIDE_GENERATING_FORCES 
  169      real(r8), 
intent(in) :: eq_tide(LBi:,LBj:)
 
  170      real(r8), 
intent(in) :: tl_eq_tide(LBi:,LBj:)
 
  173      real(r8), 
intent(in) :: Pair(LBi:UBi,LBj:UBj)
 
  175# ifdef DIAGNOSTICS_UV 
  179      real(r8), 
intent(inout) :: tl_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
 
  180      real(r8), 
intent(inout) :: tl_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
 
  187      real(r8) :: fac, fac1, fac2, fac3
 
  188      real(r8) :: cff1, cff2, cff3, cff4
 
  189      real(r8) :: tl_cff1, tl_cff2, tl_cff3, tl_cff4
 
  191      real(r8) :: gamma, tl_gamma
 
  194      real(r8), 
dimension(IminS:ImaxS) :: phie
 
  195      real(r8), 
dimension(IminS:ImaxS) :: phix
 
  197      real(r8), 
dimension(IminS:ImaxS) :: tl_phie
 
  198      real(r8), 
dimension(IminS:ImaxS) :: tl_phix
 
  200#include "set_bounds.h" 
  212      fac2=1000.0_r8*
g/
rho0 
  217#ifdef TIDE_GENERATING_FORCES 
  218          cff1=z_w(i  ,j,n(ng))-eq_tide(i  ,j)-z_r(i  ,j,n(ng))+        &
 
  219     &         z_w(i-1,j,n(ng))-eq_tide(i-1,j)-z_r(i-1,j,n(ng))
 
  220          tl_cff1=tl_z_w(i  ,j,n(ng))-tl_eq_tide(i  ,j)-                &
 
  221     &            tl_z_r(i  ,j,n(ng))+                                  &
 
  222     &            tl_z_w(i-1,j,n(ng))-tl_eq_tide(i-1,j)-                &
 
  223     &            tl_z_r(i-1,j,n(ng))
 
  225          cff1=z_w(i  ,j,n(ng))-z_r(i  ,j,n(ng))+                       &
 
  226     &         z_w(i-1,j,n(ng))-z_r(i-1,j,n(ng))
 
  227          tl_cff1=tl_z_w(i  ,j,n(ng))-tl_z_r(i  ,j,n(ng))+              &
 
  228     &            tl_z_w(i-1,j,n(ng))-tl_z_r(i-1,j,n(ng))
 
  230          phix(i)=fac1*(rho(i,j,n(ng))-rho(i-1,j,n(ng)))*cff1
 
  232     &               ((tl_rho(i,j,n(ng))-tl_rho(i-1,j,n(ng)))*cff1+     &
 
  233     &                (rho(i,j,n(ng))-rho(i-1,j,n(ng)))*tl_cff1)-       &
 
  238          phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
 
  242     &            (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))*        &
 
  243     &            (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
 
  244          tl_phix(i)=tl_phix(i)+                                        &
 
  245     &               (fac1*(tl_rho(i,j,n(ng))+tl_rho(i-1,j,n(ng))))*    &
 
  246     &               (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))+                 &
 
  247     &               (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))*     &
 
  248     &               (tl_z_w(i,j,n(ng))-tl_z_w(i-1,j,n(ng)))-           &
 
  250     &               fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng)))*            &
 
  251     &                    (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
 
  257          tl_ru(i,j,n(ng),nrhs)=-0.5_r8*on_u(i,j)*                      &
 
  258     &                          ((tl_hz(i  ,j,n(ng))+                   &
 
  259     &                            tl_hz(i-1,j,n(ng)))*phix(i)+          &
 
  261     &                            hz(i-1,j,n(ng)))*tl_phix(i))+         &
 
  263     &                          0.5_r8*on_u(i,j)*                       &
 
  265     &                           hz(i-1,j,n(ng)))*phix(i)
 
  278            cff1=1.0_r8/((z_r(i  ,j,k+1)-z_r(i  ,j,k))*                 &
 
  279     &                   (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
 
  280            tl_cff1=-cff1*cff1*((tl_z_r(i  ,j,k+1)-tl_z_r(i  ,j,k))*    &
 
  281     &                          (z_r(i-1,j,k+1)-z_r(i-1,j,k))+          &
 
  282     &                          (z_r(i  ,j,k+1)-z_r(i  ,j,k))*          &
 
  283     &                          (tl_z_r(i-1,j,k+1)-tl_z_r(i-1,j,k)))+   &
 
  287            cff2=z_r(i  ,j,k  )-z_r(i-1,j,k  )+                         &
 
  288     &           z_r(i  ,j,k+1)-z_r(i-1,j,k+1)
 
  289            tl_cff2=tl_z_r(i  ,j,k  )-tl_z_r(i-1,j,k  )+                &
 
  290     &              tl_z_r(i  ,j,k+1)-tl_z_r(i-1,j,k+1)
 
  291            cff3=z_r(i  ,j,k+1)-z_r(i  ,j,k  )-                         &
 
  292     &           z_r(i-1,j,k+1)+z_r(i-1,j,k  )
 
  293            tl_cff3=tl_z_r(i  ,j,k+1)-tl_z_r(i  ,j,k  )-                &
 
  294     &              tl_z_r(i-1,j,k+1)+tl_z_r(i-1,j,k  )
 
  295            gamma=0.125_r8*cff1*cff2*cff3
 
  296            tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+                       &
 
  297     &                         cff1*(tl_cff2*cff3+                      &
 
  303            cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i-1,j,k+1))+          &
 
  304     &           (1.0_r8-gamma)*(rho(i,j,k  )-rho(i-1,j,k  ))
 
  305            tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i-1,j,k+1)-              &
 
  306     &                        rho(i,j,k  )+rho(i-1,j,k  ))+             &
 
  307     &              (1.0_r8+gamma)*(tl_rho(i  ,j,k+1)-                  &
 
  308     &                              tl_rho(i-1,j,k+1))+                 &
 
  309     &              (1.0_r8-gamma)*(tl_rho(i  ,j,k  )-                  &
 
  310     &                              tl_rho(i-1,j,k  ))-                 &
 
  312     &              gamma*((rho(i,j,k+1)-rho(i-1,j,k+1))-               &
 
  313     &                     (rho(i,j,k  )-rho(i-1,j,k  )))
 
  315            cff2=rho(i,j,k+1)+rho(i-1,j,k+1)-                           &
 
  316     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  317            tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)-                  &
 
  318     &              tl_rho(i,j,k  )-tl_rho(i-1,j,k  )
 
  319            cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)-                           &
 
  320     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  321            tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)-                  &
 
  322     &              tl_z_r(i,j,k  )-tl_z_r(i-1,j,k  )
 
  323            cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i-1,j,k+1))+          &
 
  324     &           (1.0_r8-gamma)*(z_r(i,j,k  )-z_r(i-1,j,k  ))
 
  325            tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i-1,j,k+1)-              &
 
  326     &                        z_r(i,j,k  )+z_r(i-1,j,k  ))+             &
 
  327     &              (1.0_r8+gamma)*(tl_z_r(i  ,j,k+1)-                  &
 
  328     &                              tl_z_r(i-1,j,k+1))+                 &
 
  329     &              (1.0_r8-gamma)*(tl_z_r(i  ,j,k  )-                  &
 
  330     &                              tl_z_r(i-1,j,k  ))-                 &
 
  332     &              gamma*((z_r(i,j,k+1)-z_r(i-1,j,k+1))-               &
 
  333     &                     (z_r(i,j,k  )-z_r(i-1,j,k  )))
 
  336     &              fac3*(cff1*cff3-cff2*cff4)
 
  337            tl_phix(i)=tl_phix(i)+                                      &
 
  338     &                 fac3*(tl_cff1*cff3+                              &
 
  347            cff1=rho(i,j,k+1)-rho(i-1,j,k+1)+                           &
 
  348     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  349            cff2=rho(i,j,k+1)+rho(i-1,j,k+1)-                           &
 
  350     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  351            tl_cff1=tl_rho(i,j,k+1)-tl_rho(i-1,j,k+1)+                  &
 
  352     &              tl_rho(i,j,k  )-tl_rho(i-1,j,k  )
 
  353            tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)-                  &
 
  354     &              tl_rho(i,j,k  )-tl_rho(i-1,j,k  )
 
  355            cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)-                           &
 
  356     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  357            cff4=z_r(i,j,k+1)-z_r(i-1,j,k+1)+                           &
 
  358     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  359            tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)-                  &
 
  360     &              tl_z_r(i,j,k  )-tl_z_r(i-1,j,k  )
 
  361            tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i-1,j,k+1)+                  &
 
  362     &              tl_z_r(i,j,k  )-tl_z_r(i-1,j,k  )
 
  364     &              fac3*(cff1*cff3-cff2*cff4)
 
  365            tl_phix(i)=tl_phix(i)+                                      &
 
  366     &                 fac3*(tl_cff1*cff3+                              &
 
  378            tl_ru(i,j,k,nrhs)=-0.5_r8*on_u(i,j)*                        &
 
  379     &                        ((tl_hz(i,j,k)+tl_hz(i-1,j,k))*           &
 
  381     &                         (hz(i,j,k)+hz(i-1,j,k))*                 &
 
  384     &                        0.5_r8*on_u(i,j)*                         &
 
  385     &                        (hz(i,j,k)+hz(i-1,j,k))*phix(i)
 
  401            cff1=z_w(i,j  ,n(ng))-z_r(i,j  ,n(ng))+                     &
 
  402     &           z_w(i,j-1,n(ng))-z_r(i,j-1,n(ng))
 
  403            tl_cff1=tl_z_w(i,j  ,n(ng))-tl_z_r(i,j  ,n(ng))+            &
 
  404     &              tl_z_w(i,j-1,n(ng))-tl_z_r(i,j-1,n(ng))
 
  405            phie(i)=fac1*(rho(i,j,n(ng))-rho(i,j-1,n(ng)))*cff1
 
  407     &                 ((tl_rho(i,j,n(ng))-tl_rho(i,j-1,n(ng)))*cff1+   &
 
  408     &                  (rho(i,j,n(ng))-rho(i,j-1,n(ng)))*tl_cff1)-     &
 
  413            phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
 
  417     &              (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))*      &
 
  418     &              (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
 
  419            tl_phie(i)=tl_phie(i)+                                      &
 
  420     &                 (fac1*(tl_rho(i,j,n(ng))+tl_rho(i,j-1,n(ng))))*  &
 
  421     &                 (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))+               &
 
  422     &                 (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))*   &
 
  423     &                 (tl_z_w(i,j,n(ng))-tl_z_w(i,j-1,n(ng)))-         &
 
  425     &                 fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng)))*          &
 
  426     &                      (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
 
  432            tl_rv(i,j,n(ng),nrhs)=-0.5_r8*om_v(i,j)*                    &
 
  433     &                            ((tl_hz(i,j  ,n(ng))+                 &
 
  434     &                              tl_hz(i,j-1,n(ng)))*phie(i)+        &
 
  436     &                              hz(i,j-1,n(ng)))*tl_phie(i))+       &
 
  438     &                            0.5_r8*om_v(i,j)*                     &
 
  440     &                             hz(i,j-1,n(ng)))*phie(i)
 
  453              cff1=1.0_r8/((z_r(i,j  ,k+1)-z_r(i,j  ,k))*               &
 
  454     &                     (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
 
  455              tl_cff1=-cff1*cff1*((tl_z_r(i,j  ,k+1)-tl_z_r(i,j  ,k))*  &
 
  456     &                            (z_r(i,j-1,k+1)-z_r(i,j-1,k))+        &
 
  457     &                            (z_r(i,j  ,k+1)-z_r(i,j  ,k))*        &
 
  458     &                            (tl_z_r(i,j-1,k+1)-tl_z_r(i,j-1,k)))+ &
 
  462              cff2=z_r(i,j  ,k  )-z_r(i,j-1,k  )+                       &
 
  463     &             z_r(i,j  ,k+1)-z_r(i,j-1,k+1)
 
  464              tl_cff2=tl_z_r(i,j  ,k  )-tl_z_r(i,j-1,k  )+              &
 
  465     &                tl_z_r(i,j  ,k+1)-tl_z_r(i,j-1,k+1)
 
  466              cff3=z_r(i,j  ,k+1)-z_r(i,j  ,k  )-                       &
 
  467     &             z_r(i,j-1,k+1)+z_r(i,j-1,k  )
 
  468              tl_cff3=tl_z_r(i,j  ,k+1)-tl_z_r(i,j  ,k  )-              &
 
  469     &                tl_z_r(i,j-1,k+1)+tl_z_r(i,j-1,k  )
 
  470              gamma=0.125_r8*cff1*cff2*cff3
 
  471              tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+                     &
 
  472     &                           cff1*(tl_cff2*cff3+                    &
 
  478              cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i,j-1,k+1))+        &
 
  479     &             (1.0_r8-gamma)*(rho(i,j,k  )-rho(i,j-1,k  ))
 
  480              tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i,j-1,k+1)-            &
 
  481     &                          rho(i,j,k  )+rho(i,j-1,k  ))+           &
 
  482     &                (1.0_r8+gamma)*(tl_rho(i,j  ,k+1)-                &
 
  483     &                                tl_rho(i,j-1,k+1))+               &
 
  484     &                (1.0_r8-gamma)*(tl_rho(i,j  ,k  )-                &
 
  485     &                                tl_rho(i,j-1,k  ))-               &
 
  487     &                gamma*((rho(i,j,k+1)-rho(i,j-1,k+1))-             &
 
  488     &                       (rho(i,j,k  )-rho(i,j-1,k  )))
 
  490              cff2=rho(i,j,k+1)+rho(i,j-1,k+1)-                         &
 
  491     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  492              tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)-                &
 
  493     &                tl_rho(i,j,k  )-tl_rho(i,j-1,k  )
 
  494              cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)-                         &
 
  495     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  496              tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)-                &
 
  497     &                tl_z_r(i,j,k  )-tl_z_r(i,j-1,k  )
 
  498              cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i,j-1,k+1))+        &
 
  499     &             (1.0_r8-gamma)*(z_r(i,j,k  )-z_r(i,j-1,k  ))
 
  500              tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i,j-1,k+1)-            &
 
  501     &                          z_r(i,j,k  )+z_r(i,j-1,k  ))+           &
 
  502     &                (1.0_r8+gamma)*(tl_z_r(i,j  ,k+1)-                &
 
  503     &                                tl_z_r(i,j-1,k+1))+               &
 
  504     &                (1.0_r8-gamma)*(tl_z_r(i,j  ,k  )-                &
 
  505     &                                tl_z_r(i,j-1,k  ))-               &
 
  507     &                gamma*((z_r(i,j,k+1)-z_r(i,j-1,k+1))-             &
 
  508     &                       (z_r(i,j,k  )-z_r(i,j-1,k  )))
 
  511     &                fac3*(cff1*cff3-cff2*cff4)
 
  512              tl_phie(i)=tl_phie(i)+                                    &
 
  513     &                   fac3*(tl_cff1*cff3+                            &
 
  522              cff1=rho(i,j,k+1)-rho(i,j-1,k+1)+                         &
 
  523     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  524              cff2=rho(i,j,k+1)+rho(i,j-1,k+1)-                         &
 
  525     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  526              tl_cff1=tl_rho(i,j,k+1)-tl_rho(i,j-1,k+1)+                &
 
  527     &                tl_rho(i,j,k  )-tl_rho(i,j-1,k  )
 
  528              tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)-                &
 
  529     &                tl_rho(i,j,k  )-tl_rho(i,j-1,k  )
 
  530              cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)-                         &
 
  531     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  532              cff4=z_r(i,j,k+1)-z_r(i,j-1,k+1)+                         &
 
  533     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  534              tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)-                &
 
  535     &                tl_z_r(i,j,k  )-tl_z_r(i,j-1,k  )
 
  536              tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i,j-1,k+1)+                &
 
  537     &                tl_z_r(i,j,k  )-tl_z_r(i,j-1,k  )
 
  539     &                fac3*(cff1*cff3-cff2*cff4)
 
  540              tl_phie(i)=tl_phie(i)+                                    &
 
  541     &                   fac3*(tl_cff1*cff3+                            &
 
  553              tl_rv(i,j,k,nrhs)=-0.5_r8*om_v(i,j)*                      &
 
  554     &                          ((tl_hz(i,j,k)+tl_hz(i,j-1,k))*         &
 
  556     &                           (hz(i,j,k)+hz(i,j-1,k))*               &
 
  559     &                          0.5_r8*om_v(i,j)*                       &
 
  560     &                          (hz(i,j,k)+hz(i,j-1,k))*phie(i)