125 & LBi, UBi, LBj, UBj, &
126 & IminS, ImaxS, JminS, JmaxS, &
133 & pmask, umask, vmask, &
135 & f, h, om_u, on_v, pm, pn, &
139 & ubar, vbar, zeta, &
143 & pvor_bar, rvor_bar)
163 integer,
intent(in) :: ng, tile
164 integer,
intent(in) :: lbi, ubi, lbj, ubj
165 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
167 integer,
intent(in) :: kout, nout
169 integer,
intent(in) :: kout
174 real(r8),
intent(in) :: pmask(lbi:,lbj:)
175 real(r8),
intent(in) :: umask(lbi:,lbj:)
176 real(r8),
intent(in) :: vmask(lbi:,lbj:)
178 real(r8),
intent(in) :: f(lbi:,lbj:)
179 real(r8),
intent(in) :: h(lbi:,lbj:)
180 real(r8),
intent(in) :: om_u(lbi:,lbj:)
181 real(r8),
intent(in) :: on_v(lbi:,lbj:)
182 real(r8),
intent(in) :: pm(lbi:,lbj:)
183 real(r8),
intent(in) :: pn(lbi:,lbj:)
185 real(r8),
intent(in) :: z_r(lbi:,lbj:,:)
186 real(r8),
intent(in) :: pden(lbi:,lbj:,:)
187 real(r8),
intent(in) :: u(lbi:,lbj:,:,:)
188 real(r8),
intent(in) :: v(lbi:,lbj:,:,:)
190 real(r8),
intent(in) :: ubar(lbi:,lbj:,:)
191 real(r8),
intent(in) :: vbar(lbi:,lbj:,:)
192 real(r8),
intent(in) :: zeta(lbi:,lbj:,:)
194 real(r8),
intent(out) :: pvor_bar(lbi:,lbj:)
195 real(r8),
intent(out) :: rvor_bar(lbi:,lbj:)
197 real(r8),
intent(out) :: pvor(lbi:,lbj:,:)
198 real(r8),
intent(out) :: rvor(lbi:,lbj:,:)
204 real(r8),
intent(in) :: pmask(lbi:ubi,lbj:ubj)
205 real(r8),
intent(in) :: umask(lbi:ubi,lbj:ubj)
206 real(r8),
intent(in) :: vmask(lbi:ubi,lbj:ubj)
208 real(r8),
intent(in) :: f(lbi:ubi,lbj:ubj)
209 real(r8),
intent(in) :: h(lbi:ubi,lbj:ubj)
210 real(r8),
intent(in) :: om_u(lbi:ubi,lbj:ubj)
211 real(r8),
intent(in) :: on_v(lbi:ubi,lbj:ubj)
212 real(r8),
intent(in) :: pm(lbi:ubi,lbj:ubj)
213 real(r8),
intent(in) :: pn(lbi:ubi,lbj:ubj)
215 real(r8),
intent(in) :: z_r(lbi:ubi,lbj:ubj,
n(ng))
216 real(r8),
intent(in) :: pden(lbi:ubi,lbj:ubj,
n(ng))
217 real(r8),
intent(in) :: u(lbi:ubi,lbj:ubj,
n(ng),2)
218 real(r8),
intent(in) :: v(lbi:ubi,lbj:ubj,
n(ng),2)
220 real(r8),
intent(in) :: ubar(lbi:ubi,lbj:ubj,:)
221 real(r8),
intent(in) :: vbar(lbi:ubi,lbj:ubj,:)
222 real(r8),
intent(in) :: zeta(lbi:ubi,lbj:ubj,:)
224 real(r8),
intent(out) :: pvor_bar(lbi:ubi,lbj:ubj)
225 real(r8),
intent(out) :: rvor_bar(lbi:ubi,lbj:ubj)
227 real(r8),
intent(out) :: pvor(lbi:ubi,lbj:ubj,
n(ng))
228 real(r8),
intent(out) :: rvor(lbi:ubi,lbj:ubj,
n(ng))
239 real(r8) :: dvdx_p, dude_p, fomn_p
241 real(r8) :: drde_pr, drdx_pr, drdz_pr, dudz_pr, dvdz_pr
244 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: drde
245 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: drdx
246 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dude
247 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dvdx
249 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: drdz
250 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dudz
251 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dvdz
254# include "set_bounds.h"
271 k_loop :
DO k=0,
n(ng)
277 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
281 drdx(i,j)=cff*(pden(i ,j,k)- &
287 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
291 drde(i,j)=cff*(pden(i,j ,k)- &
297 dude(i,j)=om_u(i,j )*u(i,j ,k,nout)- &
298 & om_u(i,j-1)*u(i,j-1,k,nout)
300 dude(i,j)=dude(i,j)*pmask(i,j)
302 dvdx(i,j)=on_v(i ,j)*v(i ,j,k,nout)- &
303 & on_v(i-1,j)*v(i-1,j,k,nout)
305 dvdx(i,j)=dvdx(i,j)*pmask(i,j)
310 IF ((k.eq.0).or.(k.eq.
n(ng)))
THEN
329 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
330 drdz(i,j,k2)=cff*(pden(i,j,k+1)- &
336 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)-z_r(i-1,j,k)+ &
337 & z_r(i ,j,k+1)-z_r(i ,j,k)))
338 dudz(i,j,k2)=cff*(u(i,j,k+1,nout)- &
344 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)-z_r(i,j-1,k)+ &
345 & z_r(i,j ,k+1)-z_r(i,j ,k)))
346 dvdz(i,j,k2)=cff*(v(i,j,k+1,nout)- &
359 & (pm(i-1,j-1)+pm(i-1,j)+pm(i,j-1)+pm(i,j))* &
360 & (pn(i-1,j-1)+pn(i-1,j)+pn(i,j-1)+pn(i,j))
361 fomn_p=0.25_r8*(f(i-1,j-1)+f(i-1,j)+f(i,j-1)+f(i,j))/cff
362 drde_pr=drde(i-1,j )+drde(i,j)
363 drdx_pr=drdx(i ,j-1)+drdx(i,j)
364 drdz_pr=0.125_r8*(drdz(i-1,j-1,k1)+drdz(i-1,j-1,k2)+ &
365 & drdz(i ,j-1,k1)+drdz(i ,j-1,k2)+ &
366 & drdz(i-1,j ,k1)+drdz(i-1,j ,k2)+ &
367 & drdz(i ,j ,k1)+drdz(i ,j ,k2))
368 dudz_pr=dudz(i ,j-1,k1)+dudz(i ,j-1,k2)+ &
369 & dudz(i ,j ,k1)+dudz(i ,j ,k2)
370 dvdz_pr=dvdz(i-1,j ,k1)+dvdz(i-1,j ,k2)+ &
371 & dvdz(i ,j ,k1)+dvdz(i ,j ,k2)
372 rvor(i,j,k)=cff*(dvdx(i,j)-dude(i,j))
374 & (cff*drdz_pr*(fomn_p+ &
375 & dvdx(i,j)-dude(i,j))+ &
376 & 0.125_r8*(dudz_pr*drde_pr-dvdz_pr*drdx_pr))
386 & lbi, ubi, lbj, ubj, 1,
n(ng), &
389 & lbi, ubi, lbj, ubj, 1,
n(ng), &
395 & lbi, ubi, lbj, ubj, 1,
n(ng), &
412 & (pm(i-1,j-1)+pm(i-1,j)+pm(i,j-1)+pm(i,j))* &
413 & (pn(i-1,j-1)+pn(i-1,j)+pn(i,j-1)+pn(i,j))
414 fomn_p=0.25_r8*(f(i-1,j-1)+f(i-1,j)+f(i,j-1)+f(i,j))/cff
416 dvdx_p=on_v(i ,j)*vbar(i ,j,kout)- &
417 & on_v(i-1,j)*vbar(i-1,j,kout)
419 dvdx_p=dvdx_p*pmask(i,j)
421 dude_p=om_u(i,j )*ubar(i,j ,kout)- &
422 & om_u(i,j-1)*ubar(i,j-1,kout)
424 dude_p=dude_p*pmask(i,j)
426 rvor_bar(i,j)=cff*(dvdx_p-dude_p)
427 pvor_bar(i,j)=cff*((fomn_p+dvdx_p-dude_p)/ &
428 & (h(i,j)+zeta(i,j,kout)))
436 & lbi, ubi, lbj, ubj, &
439 & lbi, ubi, lbj, ubj, &
445 & lbi, ubi, lbj, ubj, &
subroutine, public vorticity_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kout, nout, pmask, umask, vmask, f, h, om_u, on_v, pm, pn, z_r, pden, u, v, ubar, vbar, zeta, pvor, rvor, pvor_bar, rvor_bar)