115 & LBi, UBi, LBj, UBj, &
116 & IminS, ImaxS, JminS, JmaxS, &
122 & om_p, om_r, on_p, on_r, &
123 & pm, pmon_p, pmon_r, &
124 & pn, pnom_p, pnom_r, &
125 & visc2_p, visc2_r, &
126!!#ifdef DIAGNOSTICS_UV
127!! & DiaRUfrc, DiaRVfrc, &
128!! & DiaU3wrk, DiaV3wrk, &
131 & tl_rufrc, tl_rvfrc, &
140 integer,
intent(in) :: ng, tile
141 integer,
intent(in) :: LBi, UBi, LBj, UBj
142 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
143 integer,
intent(in) :: nrhs, nnew
147 real(r8),
intent(in) :: pmask(LBi:,LBj:)
149 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
150 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
151 real(r8),
intent(in) :: om_p(LBi:,LBj:)
152 real(r8),
intent(in) :: om_r(LBi:,LBj:)
153 real(r8),
intent(in) :: on_p(LBi:,LBj:)
154 real(r8),
intent(in) :: on_r(LBi:,LBj:)
155 real(r8),
intent(in) :: pm(LBi:,LBj:)
156 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
157 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
158 real(r8),
intent(in) :: pn(LBi:,LBj:)
159 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
160 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
161 real(r8),
intent(in) :: visc2_p(LBi:,LBj:)
162 real(r8),
intent(in) :: visc2_r(LBi:,LBj:)
164 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
165 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
167 real(r8),
intent(inout) :: tl_rufrc(LBi:,LBj:)
168 real(r8),
intent(inout) :: tl_rvfrc(LBi:,LBj:)
169 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
170 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
173 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
175 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
176 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
177 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
178 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
179 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
181 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
182 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
183 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
184 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
185 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
186 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
187 real(r8),
intent(in) :: visc2_p(LBi:UBi,LBj:UBj)
188 real(r8),
intent(in) :: visc2_r(LBi:UBi,LBj:UBj)
190 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
191 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
193 real(r8),
intent(inout) :: tl_rufrc(LBi:UBi,LBj:UBj)
194 real(r8),
intent(inout) :: tl_rvfrc(LBi:UBi,LBj:UBj)
195 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
196 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
203 real(r8) :: cff, tl_cff, tl_cff1, tl_cff2
205 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFe
206 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFe
207 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFx
208 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFx
210#include "set_bounds.h"
217 k_loop :
DO k=1,n(ng)
224 cff=visc2_r(i,j)*hz(i,j,k)*0.5_r8* &
226 & ((pn(i ,j)+pn(i+1,j))*u(i+1,j,k,nrhs)- &
227 & (pn(i-1,j)+pn(i ,j))*u(i ,j,k,nrhs))- &
229 & ((pm(i,j )+pm(i,j+1))*v(i,j+1,k,nrhs)- &
230 & (pm(i,j-1)+pm(i,j ))*v(i,j ,k,nrhs)))
231 tl_cff=visc2_r(i,j)*0.5_r8* &
234 & ((pn(i ,j)+pn(i+1,j))*u(i+1,j,k,nrhs)- &
235 & (pn(i-1,j)+pn(i ,j))*u(i ,j,k,nrhs))- &
237 & ((pm(i,j )+pm(i,j+1))*v(i,j+1,k,nrhs)- &
238 & (pm(i,j-1)+pm(i,j ))*v(i,j ,k,nrhs)))+ &
241 & ((pn(i ,j)+pn(i+1,j))*tl_u(i+1,j,k,nrhs)- &
242 & (pn(i-1,j)+pn(i ,j))*tl_u(i ,j,k,nrhs))- &
244 & ((pm(i,j )+pm(i,j+1))*tl_v(i,j+1,k,nrhs)- &
245 & (pm(i,j-1)+pm(i,j ))*tl_v(i,j ,k,nrhs))))- &
251 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
254 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
259 cff=visc2_p(i,j)*0.125_r8*(hz(i-1,j ,k)+hz(i,j ,k)+ &
260 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
262 & ((pn(i ,j-1)+pn(i ,j))*v(i ,j,k,nrhs)- &
263 & (pn(i-1,j-1)+pn(i-1,j))*v(i-1,j,k,nrhs))+ &
265 & ((pm(i-1,j )+pm(i,j ))*u(i,j ,k,nrhs)- &
266 & (pm(i-1,j-1)+pm(i,j-1))*u(i,j-1,k,nrhs)))
267 tl_cff=visc2_p(i,j)*0.125_r8* &
268 & ((tl_hz(i-1,j ,k)+tl_hz(i,j ,k)+ &
269 & tl_hz(i-1,j-1,k)+tl_hz(i,j-1,k))* &
271 & ((pn(i ,j-1)+pn(i ,j))*v(i ,j,k,nrhs)- &
272 & (pn(i-1,j-1)+pn(i-1,j))*v(i-1,j,k,nrhs))+ &
274 & ((pm(i-1,j )+pm(i,j ))*u(i,j ,k,nrhs)- &
275 & (pm(i-1,j-1)+pm(i,j-1))*u(i,j-1,k,nrhs)))+ &
276 & (hz(i-1,j ,k)+hz(i,j ,k)+ &
277 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
279 & ((pn(i ,j-1)+pn(i ,j))*tl_v(i ,j,k,nrhs)- &
280 & (pn(i-1,j-1)+pn(i-1,j))*tl_v(i-1,j,k,nrhs))+ &
282 & ((pm(i-1,j )+pm(i,j ))*tl_u(i,j ,k,nrhs)- &
283 & (pm(i-1,j-1)+pm(i,j-1))*tl_u(i,j-1,k,nrhs))))- &
290 tl_cff=tl_cff*pmask(i,j)
294 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
297 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
307 cff=0.25_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
313 tl_cff1=0.5_r8*((pn(i-1,j)+pn(i,j))* &
314 & (tl_ufx(i,j )-tl_ufx(i-1,j))+ &
315 & (pm(i-1,j)+pm(i,j))* &
316 & (tl_ufe(i,j+1)-tl_ufe(i ,j)))
319 tl_cff2=
dt(ng)*cff*tl_cff1
322 tl_rufrc(i,j)=tl_rufrc(i,j)+tl_cff1
330 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)+tl_cff2
335 cff=0.25_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
341 tl_cff1=0.5_r8*((pn(i,j-1)+pn(i,j))* &
342 & (tl_vfx(i+1,j)-tl_vfx(i,j ))- &
343 & (pm(i,j-1)+pm(i,j))* &
344 & (tl_vfe(i ,j)-tl_vfe(i,j-1)))
347 tl_cff2=
dt(ng)*cff*tl_cff1
350 tl_rvfrc(i,j)=tl_rvfrc(i,j)+tl_cff1
357 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)+tl_cff2