95 & LBi, UBi, LBj, UBj, &
96 & IminS, ImaxS, JminS, JmaxS, &
102#ifdef TIDE_GENERATING_FORCES
103 & eq_tide, ad_eq_tide, &
119 integer,
intent(in) :: ng, tile
120 integer,
intent(in) :: LBi, UBi, LBj, UBj
121 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
122 integer,
intent(in) :: nrhs
125 real(r8),
intent(in) :: om_v(LBi:,LBj:)
126 real(r8),
intent(in) :: on_u(LBi:,LBj:)
127 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
128 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
129 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
131 real(r8),
intent(in) :: Pair(LBi:,LBj:)
133# ifdef TIDE_GENERATING_FORCES
134 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
135 real(r8),
intent(inout) :: ad_eq_tide(LBi:,LBj:)
137# ifdef DIAGNOSTICS_UV
141 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
142 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
143 real(r8),
intent(inout) :: ad_rho(LBi:,LBj:,:)
144 real(r8),
intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
145 real(r8),
intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
147 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
148 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
149 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
150 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
151 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
153 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
155# ifdef TIDE_GENERATING_FORCES
156 real(r8),
intent(in) :: eq_tide(LBi:UBi,LBj:UBj)
157 real(r8),
intent(inout) :: ad_eq_tide(LBi:UBi,LBj:UBj)
159# ifdef DIAGNOSTICS_UV
163 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
164 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
165 real(r8),
intent(inout) :: ad_rho(LBi:UBi,LBj:UBj,N(ng))
166 real(r8),
intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
167 real(r8),
intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
174 real(r8) :: cff, cff1, dh
177 real(r8) :: OneAtm, fac
179 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
181 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: ad_FX
183 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: P
184 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: ad_P
186#include "set_bounds.h"
223 p(i,j,n(ng))=p(i,j,n(ng))+fac*(pair(i,j)-oneatm)
225#ifdef TIDE_GENERATING_FORCES
226 p(i,j,n(ng))=p(i,j,n(ng))-
g*eq_tide(i,j)
231 p(i,j,k-1)=p(i,j,k)+hz(i,j,k)*rho(i,j,k)
238 j_loop:
DO j=jend,jstrv-1,-1
244 dh=z_w(i,j,k-1)-z_w(i,j-1,k-1)
261 adfac=om_v(i,j)*ad_rv(i,j,k,nrhs)
263 adfac2=adfac1*(z_w(i,j-1,n(ng))- &
265 adfac3=adfac1*(hz(i,j-1,k)+ &
268 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac2
269 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac2
270 ad_z_w(i,j-1,n(ng))=ad_z_w(i,j-1,n(ng))+adfac3
271 ad_z_w(i,j ,n(ng))=ad_z_w(i,j ,n(ng))-adfac3
272 ad_fx(i,j-1,k)=ad_fx(i,j-1,k)+adfac4
273 ad_fx(i,j ,k)=ad_fx(i,j ,k)-adfac4
274 ad_fc(i,k-1)=ad_fc(i,k-1)-adfac4
275 ad_fc(i,k )=ad_fc(i,k )+adfac4
276 ad_rv(i,j,k,nrhs)=0.0_r8
281 adfac=0.5_r8*ad_fc(i,k-1)
283 ad_dh=ad_dh+(p(i,j,k-1)+p(i,j-1,k-1))*adfac
284 ad_p(i,j-1,k-1)=ad_p(i,j-1,k-1)+adfac1
285 ad_p(i,j ,k-1)=ad_p(i,j ,k-1)+adfac1
289 ad_z_w(i,j-1,k-1)=ad_z_w(i,j-1,k-1)-ad_dh
290 ad_z_w(i,j ,k-1)=ad_z_w(i,j ,k-1)+ad_dh
297 ad_fc(i,n(ng))=0.0_r8
308 dh=z_w(i,j,k-1)-z_w(i-1,j,k-1)
325 adfac=on_u(i,j)*tl_ru(i,j,k,nrhs)
327 adfac2=adfac1*(z_w(i-1,j,n(ng))- &
329 adfac3=adfac1*(hz(i-1,j,k)+ &
332 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac2
333 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac2
334 ad_z_w(i-1,j,n(ng))=ad_z_w(i-1,j,n(ng))+adfac3
335 ad_z_w(i ,j,n(ng))=ad_z_w(i ,j,n(ng))-adfac3
336 ad_fx(i-1,j,k)=ad_fx(i-1,j,k)+adfac4
337 ad_fx(i ,j,k)=ad_fx(i ,j,k)-adfac4
338 ad_fc(i,k )=ad_fc(i,k )+adfac4
339 ad_fc(i,k-1)=ad_fc(i,k-1)-adfac4
340 ad_ru(i,j,k,nrhs)=0.0_r8
345 adfac=0.5_r8*tl_fc(i,k-1)
347 ad_dh=ad_dh+(p(i,j,k-1)+p(i-1,j,k-1))*adfac
348 ad_p(i-1,j,k-1)=ad_p(i-1,j,k-1)+adfac1
349 ad_p(i ,j,k-1)=ad_p(i ,j,k-1)+adfac1
353 ad_z_w(i-1,j,k-1)=ad_z_w(i-1,j,k-1)-ad_dh
354 ad_z_w(i ,j,k-1)=ad_z_w(i ,j,k-1)+ad_dh
360 ad_fc(i,n(ng))=0.0_r8
372 adfac=0.5_r8*ad_fx(i,j,k)
373 adfac1=adfac*hz(i,j,k)
374 ad_hz(i,j,k)=ad_hz(i,j,k)+(p(i,j,k)+p(i,j,k-1))*adfac
375 ad_p(i,j,k-1)=ad_p(i,j,k-1)+adfac1
376 ad_p(i,j,k )=ad_p(i,j,k )+adfac1
382 ad_p(i,j,k)=ad_p(i,j,k)+ad_p(i,j,k-1)
383 ad_hz(i,j,k)=ad_hz(i,j,k)+rho(i,j,k)*ad_p(i,j,k-1)
384 ad_rho(i,j,k)=ad_rho(i,j,k)+hz(i,j,k)*ad_p(i,j,k-1)
388#ifdef TIDE_GENERATING_FORCES
391 ad_eq_tide(i,j)=ad_eq_tide(i,j)-
g*ad_p(i,j,n(ng))
395 ad_p(i,j,n(ng))=0.0_r8