69 & LBi, UBi, LBj, UBj, &
70 & IminS, ImaxS, JminS, JmaxS, &
75 & ad_DU_avg1, ad_DV_avg1, &
93 integer,
intent(in) :: ng, tile
94 integer,
intent(in) :: LBi, UBi, LBj, UBj
95 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
96 integer,
intent(in) :: Ninp
99 real(r8),
intent(in) :: pm(LBi:,LBj:)
100 real(r8),
intent(in) :: pn(LBi:,LBj:)
101 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
102 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
103 real(r8),
intent(in) :: DU_avg1(LBi:,LBj:)
104 real(r8),
intent(in) :: DV_avg1(LBi:,LBj:)
105 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
106 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
107 real(r8),
intent(in) :: W(LBi:,LBj:,0:)
108 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
109 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
110 real(r8),
intent(inout) :: ad_DU_avg1(LBi:,LBj:)
111 real(r8),
intent(inout) :: ad_DV_avg1(LBi:,LBj:)
112 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
113 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
114 real(r8),
intent(inout) :: ad_W(LBi:,LBj:,0:)
115 real(r8),
intent(inout) :: ad_wvel(LBi:,LBj:,0:)
117 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
118 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
119 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
120 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
121 real(r8),
intent(in) :: DU_avg1(LBi:UBi,LBj:UBj)
122 real(r8),
intent(in) :: DV_avg1(LBi:UBi,LBj:UBj)
123 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
124 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
125 real(r8),
intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
126 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
127 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
128 real(r8),
intent(inout) :: ad_DU_avg1(LBi:UBi,LBj:UBj)
129 real(r8),
intent(inout) :: ad_DV_avg1(LBi:UBi,LBj:UBj)
130 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
131 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
132 real(r8),
intent(inout) :: ad_W(LBi:UBi,LBj:UBj,0:N(ng))
133 real(r8),
intent(inout) :: ad_wvel(LBi:UBi,LBj:UBj,0:N(ng))
141 real(r8) :: cff1, cff2, cff3, cff4, cff5, slope , ad_slope
142 real(r8) :: adfac, adfac1, adfac2, adfac3
144 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: vert
145 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: ad_vert
147 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wrk
148 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_wrk
150# include "set_bounds.h"
158 & lbi, ubi, lbj, ubj, 0, n(ng), &
167 & lbi, ubi, lbj, ubj, 0, n(ng), &
182 ad_vert(i,j,k)=0.0_r8
192 wrk(i,j)=u(i,j,k,ninp)*(z_r(i,j,k)-z_r(i-1,j,k))* &
193 & (pm(i-1,j)+pm(i,j))
196 vert(i,j,k)=0.25_r8*(wrk(i,j)+wrk(i+1,j))
201 wrk(i,j)=v(i,j,k,ninp)*(z_r(i,j,k)-z_r(i,j-1,k))* &
202 & (pn(i,j-1)+pn(i,j))
207 vert(i,j,k)=vert(i,j,k)+0.25_r8*(wrk(i,j)+wrk(i,j+1))
218 j_loop :
DO j=jstr,jend
220 wrk(i,j)=(du_avg1(i,j)-du_avg1(i+1,j)+ &
221 & dv_avg1(i,j)-dv_avg1(i,j+1))/ &
222 & (z_w(i,j,n(ng))-z_w(i,j,0))
225 slope=(z_w(i,j,n(ng))-z_r(i,j,n(ng) ))/ &
226 & (z_r(i,j,n(ng))-z_r(i,j,n(ng)-1))
237 adfac=pm(i,j)*pn(i,j)*ad_wvel(i,j,n(ng)-1)
238 adfac1=wrk(i,j)*adfac
239 ad_w(i,j,n(ng)-1)=ad_w(i,j,n(ng)-1)+adfac
240 ad_wrk(i,j)=ad_wrk(i,j)+(z_w(i,j,n(ng)-1)-z_w(i,j,0))*adfac
241 ad_z_w(i,j,n(ng)-1)=ad_z_w(i,j,n(ng)-1)+adfac1
242 ad_z_w(i,j,0)=ad_z_w(i,j,0)-adfac1
243 ad_vert(i,j,n(ng) )=ad_vert(i,j,n(ng))+ &
244 & cff1*ad_wvel(i,j,n(ng)-1)
245 ad_vert(i,j,n(ng)-1)=ad_vert(i,j,n(ng)-1)+ &
246 & cff2*ad_wvel(i,j,n(ng)-1)
247 ad_vert(i,j,n(ng)-2)=ad_vert(i,j,n(ng)-2)- &
248 & cff3*ad_wvel(i,j,n(ng)-1)
249 ad_wvel(i,j,n(ng)-1)=0.0_r8
263 adfac=pm(i,j)*pn(i,j)*ad_wvel(i,j,n(ng))
264 adfac1=wrk(i,j)*adfac
265 adfac2=cff1*ad_wvel(i,j,n(ng))
267 ad_wrk(i,j)=ad_wrk(i,j)+(z_w(i,j,n(ng))-z_w(i,j,0))*adfac
268 ad_z_w(i,j,n(ng))=ad_z_w(i,j,n(ng))+adfac1
269 ad_z_w(i,j,0 )=ad_z_w(i,j,0 )-adfac1
270 ad_vert(i,j,n(ng))=ad_vert(i,j,n(ng))+adfac2
272 & (vert(i,j,n(ng) )-vert(i,j,n(ng)-1))*adfac2
273 ad_vert(i,j,n(ng) )=ad_vert(i,j,n(ng) )+ &
274 & adfac3+cff2*ad_wvel(i,j,n(ng))
275 ad_vert(i,j,n(ng)-1)=ad_vert(i,j,n(ng)-1)- &
276 & adfac3-cff3*ad_wvel(i,j,n(ng))
277 ad_wvel(i,j,n(ng))=0.0_r8
283 adfac1=ad_slope/(z_r(i,j,n(ng))-z_r(i,j,n(ng)-1))
285 ad_z_w(i,j,n(ng))=ad_z_w(i,j,n(ng))+adfac1
286 ad_z_r(i,j,n(ng) )=ad_z_r(i,j,n(ng) )-adfac1-adfac2
287 ad_z_r(i,j,n(ng)-1)=ad_z_r(i,j,n(ng)-1)+adfac2
299 adfac=pm(i,j)*pn(i,j)*ad_wvel(i,j,k)
300 adfac1=wrk(i,j)*adfac
301 adfac2=cff4*ad_wvel(i,j,k)
302 adfac3=cff5*ad_wvel(i,j,k)
303 ad_w(i,j,k)=ad_w(i,j,k)+adfac
304 ad_wrk(i,j)=ad_wrk(i,j)+(z_w(i,j,k)-z_w(i,j,0))*adfac
305 ad_z_w(i,j,k)=ad_z_w(i,j,k)+adfac1
306 ad_z_w(i,j,0)=ad_z_w(i,j,0)-adfac1
307 ad_vert(i,j,k )=ad_vert(i,j,k )+adfac2
308 ad_vert(i,j,k+1)=ad_vert(i,j,k+1)+adfac2
309 ad_vert(i,j,k-1)=ad_vert(i,j,k-1)-adfac3
310 ad_vert(i,j,k+2)=ad_vert(i,j,k+2)-adfac3
311 ad_wvel(i,j,k)=0.0_r8
315 slope=(z_r(i,j,1)-z_w(i,j,0))/ &
316 & (z_r(i,j,2)-z_r(i,j,1))
325 adfac=pm(i,j)*pn(i,j)*ad_wvel(i,j,1)
326 adfac1=wrk(i,j)*adfac
327 ad_w(i,j,1)=ad_w(i,j,1)+adfac
328 ad_wrk(i,j)=ad_wrk(i,j)+(z_w(i,j,1)-z_w(i,j,0))*adfac
329 ad_z_w(i,j,1)=ad_z_w(i,j,1)+adfac1
330 ad_z_w(i,j,0)=ad_z_w(i,j,0)-adfac1
331 ad_vert(i,j,1)=ad_vert(i,j,1)+cff1*ad_wvel(i,j,1)
332 ad_vert(i,j,2)=ad_vert(i,j,2)+cff2*ad_wvel(i,j,1)
333 ad_vert(i,j,3)=ad_vert(i,j,3)-cff3*ad_wvel(i,j,1)
334 ad_wvel(i,j,1)=0.0_r8
343 adfac=cff1*ad_wvel(i,j,0)
345 ad_vert(i,j,1)=ad_vert(i,j,1)+adfac
346 ad_slope=ad_slope-(vert(i,j,2)-vert(i,j,1))*adfac
347 ad_vert(i,j,2)=ad_vert(i,j,2)-adfac1
348 ad_vert(i,j,1)=ad_vert(i,j,1)+adfac1
349 ad_vert(i,j,1)=ad_vert(i,j,1)+cff2*ad_wvel(i,j,0)
350 ad_vert(i,j,2)=ad_vert(i,j,2)-cff3*ad_wvel(i,j,0)
351 ad_wvel(i,j,0)=0.0_r8
357 adfac=ad_slope/(z_r(i,j,2)-z_r(i,j,1))
359 ad_z_r(i,j,1)=ad_z_r(i,j,1)+adfac
360 ad_z_w(i,j,0)=ad_z_w(i,j,0)-adfac
361 ad_z_r(i,j,2)=ad_z_r(i,j,2)-adfac1
362 ad_z_r(i,j,1)=ad_z_r(i,j,1)+adfac1
372 adfac=ad_wrk(i,j)/(z_w(i,j,n(ng))-z_w(i,j,0))
373 adfac1=wrk(i,j)*adfac
374 ad_du_avg1(i ,j)=ad_du_avg1(i ,j)+adfac
375 ad_du_avg1(i+1,j)=ad_du_avg1(i+1,j)-adfac
376 ad_dv_avg1(i,j )=ad_dv_avg1(i,j )+adfac
377 ad_dv_avg1(i,j+1)=ad_dv_avg1(i,j+1)-adfac
378 ad_z_w(i,j,n(ng))=ad_z_w(i,j,n(ng))-adfac1
379 ad_z_w(i,j,0)=ad_z_w(i,j,0)+adfac1
390 adfac=0.25_r8*ad_vert(i,j,k)
391 ad_wrk(i,j )=ad_wrk(i,j )+adfac
392 ad_wrk(i,j+1)=ad_wrk(i,j+1)+adfac
401 adfac=(pn(i,j-1)+pn(i,j))*ad_wrk(i,j)
402 adfac1=v(i,j,k,ninp)*adfac
403 ad_v(i,j,k,ninp)=ad_v(i,j,k,ninp)+ &
404 & (z_r(i,j,k)-z_r(i,j-1,k))*adfac
405 ad_z_r(i,j ,k)=ad_z_r(i,j ,k)+adfac1
406 ad_z_r(i,j-1,k)=ad_z_r(i,j-1,k)-adfac1
414 adfac=0.25_r8*ad_vert(i,j,k)
415 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac
416 ad_wrk(i+1,j)=ad_wrk(i+1,j)+adfac
417 ad_vert(i,j,k)=0.0_r8
424 adfac=(pm(i-1,j)+pm(i,j))*ad_wrk(i,j)
425 adfac1=u(i,j,k,ninp)*adfac
426 ad_u(i,j,k,ninp)=ad_u(i,j,k,ninp)+ &
427 & (z_r(i,j,k)-z_r(i-1,j,k))*adfac
428 ad_z_r(i ,j,k)=ad_z_r(i ,j,k)+adfac1
429 ad_z_r(i-1,j,k)=ad_z_r(i-1,j,k)-adfac1
439 & lbi, ubi, lbj, ubj, &
442 & ad_du_avg1, ad_dv_avg1)
447 & lbi, ubi, lbj, ubj, &
450 & lbi, ubi, lbj, ubj, &