98     &                             LBi, UBi, LBj, UBj,                  &
 
   99     &                             IminS, ImaxS, JminS, JmaxS,          &
 
  106#ifdef TIDE_GENERATING_FORCES
 
  107     &                             eq_tide, tl_eq_tide,                 &
 
  123      integer, 
intent(in) :: ng, tile
 
  124      integer, 
intent(in) :: LBi, UBi, LBj, UBj
 
  125      integer, 
intent(in) :: IminS, ImaxS, JminS, JmaxS
 
  126      integer, 
intent(in) :: nrhs
 
  129      real(r8), 
intent(in) :: om_v(LBi:,LBj:)
 
  130      real(r8), 
intent(in) :: on_u(LBi:,LBj:)
 
  131      real(r8), 
intent(in) :: Hz(LBi:,LBj:,:)
 
  132      real(r8), 
intent(in) :: z_r(LBi:,LBj:,:)
 
  133      real(r8), 
intent(in) :: z_w(LBi:,LBj:,0:)
 
  134      real(r8), 
intent(in) :: rho(LBi:,LBj:,:)
 
  136      real(r8), 
intent(in) :: tl_Hz(LBi:,LBj:,:)
 
  137      real(r8), 
intent(in) :: tl_z_r(LBi:,LBj:,:)
 
  138      real(r8), 
intent(in) :: tl_z_w(LBi:,LBj:,0:)
 
  139      real(r8), 
intent(in) :: tl_rho(LBi:,LBj:,:)
 
  141# ifdef TIDE_GENERATING_FORCES 
  142      real(r8), 
intent(in) :: eq_tide(LBi:,LBj:)
 
  143      real(r8), 
intent(in) :: tl_eq_tide(LBi:,LBj:)
 
  146      real(r8), 
intent(in) :: Pair(LBi:,LBj:)
 
  148# ifdef DIAGNOSTICS_UV 
  152      real(r8), 
intent(inout) :: tl_ru(LBi:,LBj:,0:,:)
 
  153      real(r8), 
intent(inout) :: tl_rv(LBi:,LBj:,0:,:)
 
  155      real(r8), 
intent(in) :: om_v(LBi:UBi,LBj:UBj)
 
  156      real(r8), 
intent(in) :: on_u(LBi:UBi,LBj:UBj)
 
  157      real(r8), 
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
 
  158      real(r8), 
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
 
  159      real(r8), 
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
 
  160      real(r8), 
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
 
  162      real(r8), 
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
 
  163      real(r8), 
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
 
  164      real(r8), 
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
 
  165      real(r8), 
intent(in) :: tl_rho(LBi:UBi,LBj:UBj,N(ng))
 
  167# ifdef TIDE_GENERATING_FORCES 
  168      real(r8), 
intent(in) :: eq_tide(LBi:,LBj:)
 
  169      real(r8), 
intent(in) :: tl_eq_tide(LBi:,LBj:)
 
  172      real(r8), 
intent(in) :: Pair(LBi:UBi,LBj:UBj)
 
  174# ifdef DIAGNOSTICS_UV 
  178      real(r8), 
intent(inout) :: tl_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
 
  179      real(r8), 
intent(inout) :: tl_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
 
  186      real(r8) :: fac, fac1, fac2, fac3
 
  187      real(r8) :: cff1, cff2, cff3, cff4
 
  188      real(r8) :: tl_cff1, tl_cff2, tl_cff3, tl_cff4
 
  190      real(r8) :: gamma, tl_gamma
 
  193      real(r8), 
dimension(IminS:ImaxS) :: phie
 
  194      real(r8), 
dimension(IminS:ImaxS) :: phix
 
  196      real(r8), 
dimension(IminS:ImaxS) :: tl_phie
 
  197      real(r8), 
dimension(IminS:ImaxS) :: tl_phix
 
  199#include "set_bounds.h" 
  211      fac2=1000.0_r8*
g/
rho0 
  216#ifdef TIDE_GENERATING_FORCES 
  217          cff1=z_w(i  ,j,n(ng))-eq_tide(i  ,j)-z_r(i  ,j,n(ng))+        &
 
  218     &         z_w(i-1,j,n(ng))-eq_tide(i-1,j)-z_r(i-1,j,n(ng))
 
  219          tl_cff1=tl_z_w(i  ,j,n(ng))-tl_eq_tide(i  ,j)-                &
 
  220     &            tl_z_r(i  ,j,n(ng))+                                  &
 
  221     &            tl_z_w(i-1,j,n(ng))-tl_eq_tide(i-1,j)-                &
 
  222     &            tl_z_r(i-1,j,n(ng))
 
  224          cff1=z_w(i  ,j,n(ng))-z_r(i  ,j,n(ng))+                       &
 
  225     &         z_w(i-1,j,n(ng))-z_r(i-1,j,n(ng))
 
  226          tl_cff1=tl_z_w(i  ,j,n(ng))-tl_z_r(i  ,j,n(ng))+              &
 
  227     &            tl_z_w(i-1,j,n(ng))-tl_z_r(i-1,j,n(ng))
 
  229          phix(i)=fac1*(rho(i,j,n(ng))-rho(i-1,j,n(ng)))*cff1
 
  231     &               ((tl_rho(i,j,n(ng))-tl_rho(i-1,j,n(ng)))*cff1+     &
 
  232     &                (rho(i,j,n(ng))-rho(i-1,j,n(ng)))*tl_cff1)
 
  234          phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
 
  238     &            (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))*        &
 
  239     &            (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
 
  240          tl_phix(i)=tl_phix(i)+                                        &
 
  241     &               (fac1*(tl_rho(i,j,n(ng))+tl_rho(i-1,j,n(ng))))*    &
 
  242     &               (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))+                 &
 
  243     &               (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))*     &
 
  244     &               (tl_z_w(i,j,n(ng))-tl_z_w(i-1,j,n(ng)))
 
  249          tl_ru(i,j,n(ng),nrhs)=-0.5_r8*on_u(i,j)*                      &
 
  250     &                          ((tl_hz(i  ,j,n(ng))+                   &
 
  251     &                            tl_hz(i-1,j,n(ng)))*phix(i)+          &
 
  253     &                            hz(i-1,j,n(ng)))*tl_phix(i))
 
  265            cff1=1.0_r8/((z_r(i  ,j,k+1)-z_r(i  ,j,k))*                 &
 
  266     &                   (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
 
  267            tl_cff1=-cff1*cff1*((tl_z_r(i  ,j,k+1)-tl_z_r(i  ,j,k))*    &
 
  268     &                          (z_r(i-1,j,k+1)-z_r(i-1,j,k))+          &
 
  269     &                          (z_r(i  ,j,k+1)-z_r(i  ,j,k))*          &
 
  270     &                          (tl_z_r(i-1,j,k+1)-tl_z_r(i-1,j,k)))
 
  271            cff2=z_r(i  ,j,k  )-z_r(i-1,j,k  )+                         &
 
  272     &           z_r(i  ,j,k+1)-z_r(i-1,j,k+1)
 
  273            tl_cff2=tl_z_r(i  ,j,k  )-tl_z_r(i-1,j,k  )+                &
 
  274     &              tl_z_r(i  ,j,k+1)-tl_z_r(i-1,j,k+1)
 
  275            cff3=z_r(i  ,j,k+1)-z_r(i  ,j,k  )-                         &
 
  276     &           z_r(i-1,j,k+1)+z_r(i-1,j,k  )
 
  277            tl_cff3=tl_z_r(i  ,j,k+1)-tl_z_r(i  ,j,k  )-                &
 
  278     &              tl_z_r(i-1,j,k+1)+tl_z_r(i-1,j,k  )
 
  279            gamma=0.125_r8*cff1*cff2*cff3
 
  280            tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+                       &
 
  281     &                         cff1*(tl_cff2*cff3+                      &
 
  284            cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i-1,j,k+1))+          &
 
  285     &           (1.0_r8-gamma)*(rho(i,j,k  )-rho(i-1,j,k  ))
 
  286            tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i-1,j,k+1)-              &
 
  287     &                        rho(i,j,k  )+rho(i-1,j,k  ))+             &
 
  288     &              (1.0_r8+gamma)*(tl_rho(i  ,j,k+1)-                  &
 
  289     &                              tl_rho(i-1,j,k+1))+                 &
 
  290     &              (1.0_r8-gamma)*(tl_rho(i  ,j,k  )-                  &
 
  292            cff2=rho(i,j,k+1)+rho(i-1,j,k+1)-                           &
 
  293     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  294            tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)-                  &
 
  295     &              tl_rho(i,j,k  )-tl_rho(i-1,j,k  )
 
  296            cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)-                           &
 
  297     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  298            tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)-                  &
 
  299     &              tl_z_r(i,j,k  )-tl_z_r(i-1,j,k  )
 
  300            cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i-1,j,k+1))+          &
 
  301     &           (1.0_r8-gamma)*(z_r(i,j,k  )-z_r(i-1,j,k  ))
 
  302            tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i-1,j,k+1)-              &
 
  303     &                        z_r(i,j,k  )+z_r(i-1,j,k  ))+             &
 
  304     &              (1.0_r8+gamma)*(tl_z_r(i  ,j,k+1)-                  &
 
  305     &                              tl_z_r(i-1,j,k+1))+                 &
 
  306     &              (1.0_r8-gamma)*(tl_z_r(i  ,j,k  )-                  &
 
  309     &              fac3*(cff1*cff3-cff2*cff4)
 
  310            tl_phix(i)=tl_phix(i)+                                      &
 
  311     &                 fac3*(tl_cff1*cff3+                              &
 
  316            cff1=rho(i,j,k+1)-rho(i-1,j,k+1)+                           &
 
  317     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  318            cff2=rho(i,j,k+1)+rho(i-1,j,k+1)-                           &
 
  319     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  320            tl_cff1=tl_rho(i,j,k+1)-tl_rho(i-1,j,k+1)+                  &
 
  321     &              tl_rho(i,j,k  )-tl_rho(i-1,j,k  )
 
  322            tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)-                  &
 
  323     &              tl_rho(i,j,k  )-tl_rho(i-1,j,k  )
 
  324            cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)-                           &
 
  325     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  326            cff4=z_r(i,j,k+1)-z_r(i-1,j,k+1)+                           &
 
  327     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  328            tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)-                  &
 
  329     &              tl_z_r(i,j,k  )-tl_z_r(i-1,j,k  )
 
  330            tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i-1,j,k+1)+                  &
 
  331     &              tl_z_r(i,j,k  )-tl_z_r(i-1,j,k  )
 
  333     &              fac3*(cff1*cff3-cff2*cff4)
 
  334            tl_phix(i)=tl_phix(i)+                                      &
 
  335     &                 fac3*(tl_cff1*cff3+                              &
 
  343            tl_ru(i,j,k,nrhs)=-0.5_r8*on_u(i,j)*                        &
 
  344     &                        ((tl_hz(i,j,k)+tl_hz(i-1,j,k))*           &
 
  346     &                         (hz(i,j,k)+hz(i-1,j,k))*                 &
 
  362#ifdef TIDE_GENERATING_FORCES 
  363            cff1=z_w(i,j  ,n(ng))-eq_tide(i,j  )-z_r(i,j  ,n(ng))+      &
 
  364     &           z_w(i,j-1,n(ng))-eq_tide(i,j-1)-z_r(i,j-1,n(ng))
 
  365            tl_cff1=tl_z_w(i,j  ,n(ng))-tl_eq_tide(i,j  )-              &
 
  366     &              tl_z_r(i,j  ,n(ng))+                                &
 
  367     &              tl_z_w(i,j-1,n(ng))-tl_eq_tide(i,j-1)-              &
 
  368     &              tl_z_r(i,j-1,n(ng))
 
  370            cff1=z_w(i,j  ,n(ng))-z_r(i,j  ,n(ng))+                     &
 
  371     &           z_w(i,j-1,n(ng))-z_r(i,j-1,n(ng))
 
  372            tl_cff1=tl_z_w(i,j  ,n(ng))-tl_z_r(i,j  ,n(ng))+            &
 
  373     &              tl_z_w(i,j-1,n(ng))-tl_z_r(i,j-1,n(ng))
 
  375            phie(i)=fac1*(rho(i,j,n(ng))-rho(i,j-1,n(ng)))*cff1
 
  377     &                 ((tl_rho(i,j,n(ng))-tl_rho(i,j-1,n(ng)))*cff1+   &
 
  378     &                  (rho(i,j,n(ng))-rho(i,j-1,n(ng)))*tl_cff1)
 
  380            phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
 
  384     &              (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))*      &
 
  385     &              (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
 
  386            tl_phie(i)=tl_phie(i)+                                      &
 
  387     &                 (fac1*(tl_rho(i,j,n(ng))+tl_rho(i,j-1,n(ng))))*  &
 
  388     &                 (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))+               &
 
  389     &                 (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))*   &
 
  390     &                 (tl_z_w(i,j,n(ng))-tl_z_w(i,j-1,n(ng)))
 
  395            tl_rv(i,j,n(ng),nrhs)=-0.5_r8*om_v(i,j)*                    &
 
  396     &                            ((tl_hz(i,j  ,n(ng))+                 &
 
  397     &                              tl_hz(i,j-1,n(ng)))*phie(i)+        &
 
  399     &                              hz(i,j-1,n(ng)))*tl_phie(i))
 
  400# ifdef DIAGNOSTICS_UV 
  411              cff1=1.0_r8/((z_r(i,j  ,k+1)-z_r(i,j  ,k))*               &
 
  412     &                     (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
 
  413              tl_cff1=-cff1*cff1*((tl_z_r(i,j  ,k+1)-tl_z_r(i,j  ,k))*  &
 
  414     &                            (z_r(i,j-1,k+1)-z_r(i,j-1,k))+        &
 
  415     &                            (z_r(i,j  ,k+1)-z_r(i,j  ,k))*        &
 
  416     &                            (tl_z_r(i,j-1,k+1)-tl_z_r(i,j-1,k)))
 
  417              cff2=z_r(i,j  ,k  )-z_r(i,j-1,k  )+                       &
 
  418     &             z_r(i,j  ,k+1)-z_r(i,j-1,k+1)
 
  419              tl_cff2=tl_z_r(i,j  ,k  )-tl_z_r(i,j-1,k  )+              &
 
  420     &                tl_z_r(i,j  ,k+1)-tl_z_r(i,j-1,k+1)
 
  421              cff3=z_r(i,j  ,k+1)-z_r(i,j  ,k  )-                       &
 
  422     &             z_r(i,j-1,k+1)+z_r(i,j-1,k  )
 
  423              tl_cff3=tl_z_r(i,j  ,k+1)-tl_z_r(i,j  ,k  )-              &
 
  424     &                tl_z_r(i,j-1,k+1)+tl_z_r(i,j-1,k  )
 
  425              gamma=0.125_r8*cff1*cff2*cff3
 
  426              tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+                     &
 
  427     &                           cff1*(tl_cff2*cff3+                    &
 
  430              cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i,j-1,k+1))+        &
 
  431     &             (1.0_r8-gamma)*(rho(i,j,k  )-rho(i,j-1,k  ))
 
  432              tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i,j-1,k+1)-            &
 
  433     &                          rho(i,j,k  )+rho(i,j-1,k  ))+           &
 
  434     &                (1.0_r8+gamma)*(tl_rho(i,j  ,k+1)-                &
 
  435     &                                tl_rho(i,j-1,k+1))+               &
 
  436     &                (1.0_r8-gamma)*(tl_rho(i,j  ,k  )-                &
 
  438              cff2=rho(i,j,k+1)+rho(i,j-1,k+1)-                         &
 
  439     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  440              tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)-                &
 
  441     &                tl_rho(i,j,k  )-tl_rho(i,j-1,k  )
 
  442              cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)-                         &
 
  443     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  444              tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)-                &
 
  445     &                tl_z_r(i,j,k  )-tl_z_r(i,j-1,k  )
 
  446              cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i,j-1,k+1))+        &
 
  447     &             (1.0_r8-gamma)*(z_r(i,j,k  )-z_r(i,j-1,k  ))
 
  448              tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i,j-1,k+1)-            &
 
  449     &                          z_r(i,j,k  )+z_r(i,j-1,k  ))+           &
 
  450     &                (1.0_r8+gamma)*(tl_z_r(i,j  ,k+1)-                &
 
  451     &                                tl_z_r(i,j-1,k+1))+               &
 
  452     &                (1.0_r8-gamma)*(tl_z_r(i,j  ,k  )-                &
 
  455     &                fac3*(cff1*cff3-cff2*cff4)
 
  456              tl_phie(i)=tl_phie(i)+                                    &
 
  457     &                   fac3*(tl_cff1*cff3+                            &
 
  462              cff1=rho(i,j,k+1)-rho(i,j-1,k+1)+                         &
 
  463     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  464              cff2=rho(i,j,k+1)+rho(i,j-1,k+1)-                         &
 
  465     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  466              tl_cff1=tl_rho(i,j,k+1)-tl_rho(i,j-1,k+1)+                &
 
  467     &                tl_rho(i,j,k  )-tl_rho(i,j-1,k  )
 
  468              tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)-                &
 
  469     &                tl_rho(i,j,k  )-tl_rho(i,j-1,k  )
 
  470              cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)-                         &
 
  471     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  472              cff4=z_r(i,j,k+1)-z_r(i,j-1,k+1)+                         &
 
  473     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  474              tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)-                &
 
  475     &                tl_z_r(i,j,k  )-tl_z_r(i,j-1,k  )
 
  476              tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i,j-1,k+1)+                &
 
  477     &                tl_z_r(i,j,k  )-tl_z_r(i,j-1,k  )
 
  479     &                fac3*(cff1*cff3-cff2*cff4)
 
  480              tl_phie(i)=tl_phie(i)+                                    &
 
  481     &                   fac3*(tl_cff1*cff3+                            &
 
  489              tl_rv(i,j,k,nrhs)=-0.5_r8*om_v(i,j)*                      &
 
  490     &                          ((tl_hz(i,j,k)+tl_hz(i,j-1,k))*         &
 
  492     &                           (hz(i,j,k)+hz(i,j-1,k))*               &