114 & LBi, UBi, LBj, UBj, &
115 & IminS, ImaxS, JminS, JmaxS, &
121 & om_p, om_r, on_p, on_r, &
122 & pm, pmon_p, pmon_r, &
123 & pn, pnom_p, pnom_r, &
124 & visc2_p, visc2_r, &
125!!#ifdef DIAGNOSTICS_UV
126!! & DiaRUfrc, DiaRVfrc, &
127!! & DiaU3wrk, DiaV3wrk, &
130 & ad_rufrc, ad_rvfrc, &
139 integer,
intent(in) :: ng, tile
140 integer,
intent(in) :: LBi, UBi, LBj, UBj
141 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
142 integer,
intent(in) :: nrhs, nnew
146 real(r8),
intent(in) :: pmask(LBi:,LBj:)
148 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
149 real(r8),
intent(in) :: om_p(LBi:,LBj:)
150 real(r8),
intent(in) :: om_r(LBi:,LBj:)
151 real(r8),
intent(in) :: on_p(LBi:,LBj:)
152 real(r8),
intent(in) :: on_r(LBi:,LBj:)
153 real(r8),
intent(in) :: pm(LBi:,LBj:)
154 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
155 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
156 real(r8),
intent(in) :: pn(LBi:,LBj:)
157 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
158 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
159 real(r8),
intent(in) :: visc2_p(LBi:,LBj:)
160 real(r8),
intent(in) :: visc2_r(LBi:,LBj:)
162 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
163 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
165 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
166 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
167 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
168 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
169 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
172 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
174 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
175 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
176 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
177 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
178 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
179 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
181 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
182 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
183 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
184 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
185 real(r8),
intent(in) :: visc2_p(LBi:UBi,LBj:UBj)
186 real(r8),
intent(in) :: visc2_r(LBi:UBi,LBj:UBj)
188 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
189 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
191 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
192 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
193 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
194 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
195 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
202 real(r8) :: cff, ad_cff, ad_cff1, ad_cff2
203 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4
205 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
206 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
207 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
208 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
210#include "set_bounds.h"
220 ad_ufe(imins:imaxs,jmins:jmaxs)=0.0_r8
221 ad_vfe(imins:imaxs,jmins:jmaxs)=0.0_r8
222 ad_ufx(imins:imaxs,jmins:jmaxs)=0.0_r8
223 ad_vfx(imins:imaxs,jmins:jmaxs)=0.0_r8
229 k_loop :
DO k=1,n(ng)
237 cff=0.25_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
240 ad_cff2=ad_cff2+ad_v(i,j,k,nnew)
243 ad_cff1=ad_cff1+ad_rvfrc(i,j)
246 ad_cff1=ad_cff1+
dt(ng)*cff*ad_cff2
254 adfac1=adfac*(pn(i,j-1)+pn(i,j))
255 adfac2=adfac*(pm(i,j-1)+pm(i,j))
256 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac1
257 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac1
258 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac2
259 ad_vfe(i,j )=ad_vfe(i,j )-adfac2
265 cff=0.25_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
268 ad_cff2=ad_cff2+ad_u(i,j,k,nnew)
271 ad_cff1=ad_cff1+ad_rufrc(i,j)
274 ad_cff1=ad_cff1+
dt(ng)*cff*ad_cff2
283 adfac1=adfac*(pn(i-1,j)+pn(i,j))
284 adfac2=adfac*(pm(i-1,j)+pm(i,j))
285 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac1
286 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac1
287 ad_ufe(i,j )=ad_ufe(i,j )-adfac2
288 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac2
302 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
303 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
309 ad_cff=ad_cff*pmask(i,j)
330 adfac=visc2_p(i,j)*0.125_r8*ad_cff
333 & ((pn(i ,j-1)+pn(i ,j))*v(i ,j,k,nrhs)- &
334 & (pn(i-1,j-1)+pn(i-1,j))*v(i-1,j,k,nrhs))+ &
336 & ((pm(i-1,j )+pm(i,j ))*u(i,j ,k,nrhs)- &
337 & (pm(i-1,j-1)+pm(i,j-1))*u(i,j-1,k,nrhs)))
338 adfac2=adfac*(hz(i-1,j ,k)+hz(i,j ,k)+ &
339 & hz(i-1,j-1,k)+hz(i,j-1,k))
340 adfac3=adfac2*pmon_p(i,j)
341 adfac4=adfac2*pnom_p(i,j)
342 ad_hz(i-1,j-1,k)=ad_hz(i-1,j-1,k)+adfac1
343 ad_hz(i ,j-1,k)=ad_hz(i ,j-1,k)+adfac1
344 ad_hz(i-1,j ,k)=ad_hz(i-1,j ,k)+adfac1
345 ad_hz(i ,j ,k)=ad_hz(i ,j ,k)+adfac1
346 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)- &
347 & (pn(i-1,j-1)+pn(i-1,j))*adfac3
348 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+ &
349 & (pn(i ,j-1)+pn(i ,j))*adfac3
350 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)- &
351 & (pm(i-1,j-1)+pm(i,j-1))*adfac4
352 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+ &
353 & (pm(i-1,j )+pm(i,j ))*adfac4
363 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
364 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
383 adfac=visc2_r(i,j)*0.5_r8*ad_cff
384 adfac1=adfac*hz(i,j,k)
385 adfac2=adfac1*pmon_r(i,j)
386 adfac3=adfac1*pnom_r(i,j)
387 ad_hz(i,j,k)=ad_hz(i,j,k)+ &
389 & ((pn(i ,j)+pn(i+1,j))*u(i+1,j,k,nrhs)- &
390 & (pn(i-1,j)+pn(i ,j))*u(i ,j,k,nrhs))- &
392 & ((pm(i,j )+pm(i,j+1))*v(i,j+1,k,nrhs)- &
393 & (pm(i,j-1)+pm(i,j ))*v(i,j ,k,nrhs)))* &
395 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)- &
396 & (pn(i-1,j)+pn(i ,j))*adfac2
397 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+ &
398 & (pn(i ,j)+pn(i+1,j))*adfac2
399 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+ &
400 & (pm(i,j-1)+pm(i,j ))*adfac3
401 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)- &
402 & (pm(i,j )+pm(i,j+1))*adfac3