101     &                          LBi, UBi, LBj, UBj,                     &
 
  102     &                          IminS, ImaxS, JminS, JmaxS,             &
 
  105     &                          umask_wet, vmask_wet,                   &
 
  107     &                          Hz, om_v, on_u, z_r, z_w,               &
 
  109#ifdef TIDE_GENERATING_FORCES
 
  129      integer, 
intent(in) :: ng, tile
 
  130      integer, 
intent(in) :: LBi, UBi, LBj, UBj
 
  131      integer, 
intent(in) :: IminS, ImaxS, JminS, JmaxS
 
  132      integer, 
intent(in) :: nrhs
 
  136      real(r8), 
intent(in) :: umask_wet(LBi:,LBj:)
 
  137      real(r8), 
intent(in) :: vmask_wet(LBi:,LBj:)
 
  139      real(r8), 
intent(in) :: Hz(LBi:,LBj:,:)
 
  140      real(r8), 
intent(in) :: om_v(LBi:,LBj:)
 
  141      real(r8), 
intent(in) :: on_u(LBi:,LBj:)
 
  142      real(r8), 
intent(in) :: z_r(LBi:,LBj:,:)
 
  143      real(r8), 
intent(in) :: z_w(LBi:,LBj:,0:)
 
  144      real(r8), 
intent(in) :: rho(LBi:,LBj:,:)
 
  145# ifdef TIDE_GENERATING_FORCES 
  146      real(r8), 
intent(in) :: eq_tide(LBi:,LBj:)
 
  149      real(r8), 
intent(in) :: zetat(LBi:,LBj:)
 
  152      real(r8), 
intent(in) :: Pair(LBi:,LBj:)
 
  154# ifdef DIAGNOSTICS_UV 
  155      real(r8), 
intent(inout) :: DiaRU(LBi:,LBj:,:,:,:)
 
  156      real(r8), 
intent(inout) :: DiaRV(LBi:,LBj:,:,:,:)
 
  158      real(r8), 
intent(inout) :: ru(LBi:,LBj:,0:,:)
 
  159      real(r8), 
intent(inout) :: rv(LBi:,LBj:,0:,:)
 
  162      real(r8), 
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
 
  163      real(r8), 
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
 
  165      real(r8), 
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
 
  166      real(r8), 
intent(in) :: om_v(LBi:UBi,LBj:UBj)
 
  167      real(r8), 
intent(in) :: on_u(LBi:UBi,LBj:UBj)
 
  168      real(r8), 
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
 
  169      real(r8), 
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
 
  170      real(r8), 
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
 
  171# ifdef TIDE_GENERATING_FORCES 
  172      real(r8), 
intent(in) :: eq_tide(LBi:UBi,LBj:UBj)
 
  175      real(r8), 
intent(in) :: zetat(LBi:UBi,LBj:UBj)
 
  178      real(r8), 
intent(in) :: Pair(LBi:UBi,LBj:UBj)
 
  180# ifdef DIAGNOSTICS_UV 
  181      real(r8), 
intent(inout) :: DiaRU(LBi:UBi,LBj:UBj,N(ng),2,NDrhs)
 
  182      real(r8), 
intent(inout) :: DiaRV(LBi:UBi,LBj:UBj,N(ng),2,NDrhs)
 
  184      real(r8), 
intent(inout) :: ru(LBi:UBi,LBj:UBj,0:N(ng),2)
 
  185      real(r8), 
intent(inout) :: rv(LBi:UBi,LBj:UBj,0:N(ng),2)
 
  191      real(r8) :: fac, fac1, fac2, fac3
 
  192      real(r8) :: cff1, cff2, cff3, cff4
 
  197      real(r8), 
dimension(IminS:ImaxS) :: phie
 
  198      real(r8), 
dimension(IminS:ImaxS) :: 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))
 
  221          cff1=z_w(i  ,j,n(ng))-z_r(i  ,j,n(ng))+                       &
 
  222     &         z_w(i-1,j,n(ng))-z_r(i-1,j,n(ng))
 
  224          phix(i)=fac1*(rho(i,j,n(ng))-rho(i-1,j,n(ng)))*cff1
 
  226          phix(i)=phix(i)+zetat(i,j)-zetat(i-1,j)
 
  229          phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
 
  233     &            (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))*        &
 
  234     &            (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
 
  236          ru(i,j,n(ng),nrhs)=-0.5_r8*(hz(i,j,n(ng))+hz(i-1,j,n(ng)))*   &
 
  239          ru(i,j,n(ng),nrhs)=ru(i,j,n(ng),nrhs)*umask_wet(i,j)
 
  242          diaru(i,j,n(ng),nrhs,
m3pgrd)=ru(i,j,n(ng),nrhs)
 
  252            cff1=1.0_r8/((z_r(i  ,j,k+1)-z_r(i  ,j,k))*                 &
 
  253     &                   (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
 
  254            cff2=z_r(i  ,j,k  )-z_r(i-1,j,k  )+                         &
 
  255     &           z_r(i  ,j,k+1)-z_r(i-1,j,k+1)
 
  256            cff3=z_r(i  ,j,k+1)-z_r(i  ,j,k  )-                         &
 
  257     &           z_r(i-1,j,k+1)+z_r(i-1,j,k  )
 
  258            gamma=0.125_r8*cff1*cff2*cff3
 
  260            cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i-1,j,k+1))+          &
 
  261     &           (1.0_r8-gamma)*(rho(i,j,k  )-rho(i-1,j,k  ))
 
  262            cff2=rho(i,j,k+1)+rho(i-1,j,k+1)-                           &
 
  263     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  264            cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)-                           &
 
  265     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  266            cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i-1,j,k+1))+          &
 
  267     &           (1.0_r8-gamma)*(z_r(i,j,k  )-z_r(i-1,j,k  ))
 
  269     &              fac3*(cff1*cff3-cff2*cff4)
 
  271            cff1=rho(i,j,k+1)-rho(i-1,j,k+1)+                           &
 
  272     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  273            cff2=rho(i,j,k+1)+rho(i-1,j,k+1)-                           &
 
  274     &           rho(i,j,k  )-rho(i-1,j,k  )
 
  275            cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)-                           &
 
  276     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  277            cff4=z_r(i,j,k+1)-z_r(i-1,j,k+1)+                           &
 
  278     &           z_r(i,j,k  )-z_r(i-1,j,k  )
 
  280     &              fac3*(cff1*cff3-cff2*cff4)
 
  282            ru(i,j,k,nrhs)=-0.5_r8*(hz(i,j,k)+hz(i-1,j,k))*             &
 
  285            ru(i,j,k,nrhs)=ru(i,j,k,nrhs)*umask_wet(i,j)
 
  288            diaru(i,j,k,nrhs,
m3pgrd)=ru(i,j,k,nrhs)
 
  301#ifdef TIDE_GENERATING_FORCES 
  302            cff1=z_w(i,j  ,n(ng))-eq_tide(i,j  )-z_r(i,j  ,n(ng))+      &
 
  303     &           z_w(i,j-1,n(ng))-eq_tide(i,j-1)-z_r(i,j-1,n(ng))
 
  305            cff1=z_w(i,j  ,n(ng))-z_r(i,j  ,n(ng))+                     &
 
  306     &           z_w(i,j-1,n(ng))-z_r(i,j-1,n(ng))
 
  308            phie(i)=fac1*(rho(i,j,n(ng))-rho(i,j-1,n(ng)))*cff1
 
  310            phie(i)=phie(i)+zetat(i,j)-zetat(i,j-1)
 
  313            phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
 
  317     &              (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))*      &
 
  318     &              (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
 
  320            rv(i,j,n(ng),nrhs)=-0.5_r8*(hz(i,j,n(ng))+hz(i,j-1,n(ng)))* &
 
  323            rv(i,j,n(ng),nrhs)=rv(i,j,n(ng),nrhs)*vmask_wet(i,j)
 
  326            diarv(i,j,n(ng),nrhs,
m3pgrd)=rv(i,j,n(ng),nrhs)
 
  336              cff1=1.0_r8/((z_r(i,j  ,k+1)-z_r(i,j  ,k))*               &
 
  337     &                     (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
 
  338              cff2=z_r(i,j  ,k  )-z_r(i,j-1,k  )+                       &
 
  339     &             z_r(i,j  ,k+1)-z_r(i,j-1,k+1)
 
  340              cff3=z_r(i,j  ,k+1)-z_r(i,j  ,k  )-                       &
 
  341     &             z_r(i,j-1,k+1)+z_r(i,j-1,k  )
 
  342              gamma=0.125_r8*cff1*cff2*cff3
 
  344              cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i,j-1,k+1))+        &
 
  345     &             (1.0_r8-gamma)*(rho(i,j,k  )-rho(i,j-1,k  ))
 
  346              cff2=rho(i,j,k+1)+rho(i,j-1,k+1)-                         &
 
  347     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  348              cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)-                         &
 
  349     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  350              cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i,j-1,k+1))+        &
 
  351     &             (1.0_r8-gamma)*(z_r(i,j,k  )-z_r(i,j-1,k  ))
 
  353     &                fac3*(cff1*cff3-cff2*cff4)
 
  355              cff1=rho(i,j,k+1)-rho(i,j-1,k+1)+                         &
 
  356     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  357              cff2=rho(i,j,k+1)+rho(i,j-1,k+1)-                         &
 
  358     &             rho(i,j,k  )-rho(i,j-1,k  )
 
  359              cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)-                         &
 
  360     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  361              cff4=z_r(i,j,k+1)-z_r(i,j-1,k+1)+                         &
 
  362     &             z_r(i,j,k  )-z_r(i,j-1,k  )
 
  364     &                fac3*(cff1*cff3-cff2*cff4)
 
  366              rv(i,j,k,nrhs)=-0.5_r8*(hz(i,j,k)+hz(i,j-1,k))*           &
 
  369              rv(i,j,k,nrhs)=rv(i,j,k,nrhs)*vmask_wet(i,j)
 
  372              diarv(i,j,k,nrhs,
m3pgrd)=rv(i,j,k,nrhs)