115 & LBi, UBi, LBj, UBj, &
116 & IminS, ImaxS, JminS, JmaxS, &
125 & om_p, om_r, on_p, on_r, &
126 & pm, pmon_p, pmon_r, &
127 & pn, pnom_p, pnom_r, &
131 & visc2_p, visc2_r, &
134 & DiaRUfrc, DiaRVfrc, &
135 & DiaU3wrk, DiaV3wrk, &
137 & rufrc, rvfrc, u, v)
145 integer,
intent(in) :: ng, tile
146 integer,
intent(in) :: LBi, UBi, LBj, UBj
147 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
148 integer,
intent(in) :: nrhs, nnew
152 real(r8),
intent(in) :: pmask(LBi:,LBj:)
155 real(r8),
intent(in) :: pmask_wet(LBi:,LBj:)
157 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
158 real(r8),
intent(in) :: om_p(LBi:,LBj:)
159 real(r8),
intent(in) :: om_r(LBi:,LBj:)
160 real(r8),
intent(in) :: on_p(LBi:,LBj:)
161 real(r8),
intent(in) :: on_r(LBi:,LBj:)
162 real(r8),
intent(in) :: pm(LBi:,LBj:)
163 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
164 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
165 real(r8),
intent(in) :: pn(LBi:,LBj:)
166 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
167 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
169 real(r8),
intent(in) :: visc3d_r(LBi:,LBj:,:)
171 real(r8),
intent(in) :: visc2_p(LBi:,LBj:)
172 real(r8),
intent(in) :: visc2_r(LBi:,LBj:)
174# ifdef DIAGNOSTICS_UV
175 real(r8),
intent(inout) :: DiaRUfrc(LBi:,LBj:,:,:)
176 real(r8),
intent(inout) :: DiaRVfrc(LBi:,LBj:,:,:)
177 real(r8),
intent(inout) :: DiaU3wrk(LBi:,LBj:,:,:)
178 real(r8),
intent(inout) :: DiaV3wrk(LBi:,LBj:,:,:)
180 real(r8),
intent(inout) :: rufrc(LBi:,LBj:)
181 real(r8),
intent(inout) :: rvfrc(LBi:,LBj:)
182 real(r8),
intent(inout) :: u(LBi:,LBj:,:,:)
183 real(r8),
intent(inout) :: v(LBi:,LBj:,:,:)
186 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
189 real(r8),
intent(in) :: pmask_wet(LBi:UBi,LBj:UBj)
191 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
192 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
193 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
194 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
195 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
196 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
197 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
198 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
199 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
200 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
201 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
203 real(r8),
intent(in) :: visc3d_r(LBi:UBi,LBj:UBj,N(ng))
205 real(r8),
intent(in) :: visc2_p(LBi:UBi,LBj:UBj)
206 real(r8),
intent(in) :: visc2_r(LBi:UBi,LBj:UBj)
208# ifdef DIAGNOSTICS_UV
209 real(r8),
intent(inout) :: DiaRUfrc(LBi:UBi,LBj:UBj,3,NDM2d-1)
210 real(r8),
intent(inout) :: DiaRVfrc(LBi:UBi,LBj:UBj,3,NDM2d-1)
211 real(r8),
intent(inout) :: DiaU3wrk(LBi:UBi,LBj:UBj,N(ng),NDM3d)
212 real(r8),
intent(inout) :: DiaV3wrk(LBi:UBi,LBj:UBj,N(ng),NDM3d)
214 real(r8),
intent(inout) :: rufrc(LBi:UBi,LBj:UBj)
215 real(r8),
intent(inout) :: rvfrc(LBi:UBi,LBj:UBj)
216 real(r8),
intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
217 real(r8),
intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
224 real(r8) :: cff, cff1, cff2, cff3
228 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
229 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
230 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
231 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
233#include "set_bounds.h"
239 k_loop :
DO k=1,n(ng)
246 cff=hz(i,j,k)*0.5_r8* &
248 & ((pn(i ,j)+pn(i+1,j))*u(i+1,j,k,nrhs)- &
249 & (pn(i-1,j)+pn(i ,j))*u(i ,j,k,nrhs))- &
251 & ((pm(i,j )+pm(i,j+1))*v(i,j+1,k,nrhs)- &
252 & (pm(i,j-1)+pm(i,j ))*v(i,j ,k,nrhs)))
254 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc3d_r(i,j,k)*cff
255 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc3d_r(i,j,k)*cff
257 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc2_r(i,j)*cff
258 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc2_r(i,j)*cff
264 cff=0.125_r8*(hz(i-1,j ,k)+hz(i,j ,k)+ &
265 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
267 & ((pn(i ,j-1)+pn(i ,j))*v(i ,j,k,nrhs)- &
268 & (pn(i-1,j-1)+pn(i-1,j))*v(i-1,j,k,nrhs))+ &
270 & ((pm(i-1,j )+pm(i,j ))*u(i,j ,k,nrhs)- &
271 & (pm(i-1,j-1)+pm(i,j-1))*u(i,j-1,k,nrhs)))
276 cff=cff*pmask_wet(i,j)
279 visc_p=0.25_r8*(visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
280 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
281 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc_p*cff
282 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc_p*cff
284 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc2_p(i,j)*cff
285 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc2_p(i,j)*cff
296 cff=
dt(ng)*0.25_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
297 cff1=0.5_r8*(pn(i-1,j)+pn(i,j))*(ufx(i,j )-ufx(i-1,j))
298 cff2=0.5_r8*(pm(i-1,j)+pm(i,j))*(ufe(i,j+1)-ufe(i ,j))
300 rufrc(i,j)=rufrc(i,j)+cff1+cff2
301 u(i,j,k,nnew)=u(i,j,k,nnew)+cff3
306 diau3wrk(i,j,k,
m3hvis)=cff3
307 diau3wrk(i,j,k,
m3xvis)=cff*cff1
308 diau3wrk(i,j,k,
m3yvis)=cff*cff2
314 cff=
dt(ng)*0.25_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
315 cff1=0.5_r8*(pn(i,j-1)+pn(i,j))*(vfx(i+1,j)-vfx(i,j ))
316 cff2=0.5_r8*(pm(i,j-1)+pm(i,j))*(vfe(i ,j)-vfe(i,j-1))
318 rvfrc(i,j)=rvfrc(i,j)+cff1-cff2
319 v(i,j,k,nnew)=v(i,j,k,nnew)+cff3
324 diav3wrk(i,j,k,
m3hvis)=cff3
325 diav3wrk(i,j,k,
m3xvis)= cff*cff1
326 diav3wrk(i,j,k,
m3yvis)=-cff*cff2
subroutine uv3dmix2_s_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nrhs, nnew, pmask, pmask_wet, hz, om_p, om_r, on_p, on_r, pm, pmon_p, pmon_r, pn, pnom_p, pnom_r, visc3d_r, visc2_p, visc2_r, diarufrc, diarvfrc, diau3wrk, diav3wrk, rufrc, rvfrc, u, v)