100 & LBi, UBi, LBj, UBj, &
101 & IminS, ImaxS, JminS, JmaxS, &
119 integer,
intent(in) :: ng, tile
120 integer,
intent(in) :: LBi, UBi, LBj, UBj
121 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
122 Integer,
intent(in) :: nstp
125 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
127 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
129 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
130 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
131 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
133 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
134 real(r8),
intent(in) :: alfaobeta(LBi:,LBj:,0:)
136 real(r8),
intent(in) :: bvf(LBi:,LBj:,0:)
138 real(r8),
intent(inout) :: Akt(LBi:,LBj:,0:,:)
139 real(r8),
intent(inout) :: Akv(LBi:,LBj:,0:)
141 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
143 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
145 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
146 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),3)
147 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),3)
149 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
150 real(r8),
intent(in) :: alfaobeta(LBi:UBi,LBj:UBj,0:N(ng))
152 real(r8),
intent(in) :: bvf(LBi:UBi,LBj:UBj,0:N(ng))
154 real(r8),
intent(inout) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
155 real(r8),
intent(inout) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
160 integer :: i, itrc, j, k
162 real(r8),
parameter :: eps = 1.0e-14_r8
164 real(r8) :: cff, lmd_iwm, lmd_iws, nu_sx, nu_sxc, shear2
166 real(r8) :: Rrho, ddDS, ddDT, nu_dds, nu_ddt
169 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: Rig
171 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
172 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dR
173 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dU
174 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dV
176# include "set_bounds.h"
189 DO j=max(1,jstr-1),min(jend+1,
mm(ng))
190 DO i=max(1,istr-1),min(iend+1,
lm(ng))
197 DO i=max(1,istr-1),min(iend+1,
lm(ng))
198 cff=1.0_r8/(2.0_r8*hz(i,j,k+1)+ &
199 & hz(i,j,k)*(2.0_r8-fc(i,k-1)))
200 fc(i,k)=cff*hz(i,j,k+1)
201 dr(i,k)=cff*(6.0_r8*(rho(i,j,k+1)-rho(i,j,k))- &
202 & hz(i,j,k)*dr(i,k-1))
203 du(i,k)=cff*(3.0_r8*(u(i ,j,k+1,nstp)-u(i ,j,k,nstp)+ &
204 & u(i+1,j,k+1,nstp)-u(i+1,j,k,nstp))- &
205 & hz(i,j,k)*du(i,k-1))
206 dv(i,k)=cff*(3.0_r8*(v(i,j ,k+1,nstp)-v(i,j ,k,nstp)+ &
207 & v(i,j+1,k+1,nstp)-v(i,j+1,k,nstp))- &
208 & hz(i,j,k)*dv(i,k-1))
211 DO i=max(1,istr-1),min(iend+1,
lm(ng))
217 DO i=max(1,istr-1),min(iend+1,
lm(ng))
218 dr(i,k)=dr(i,k)-fc(i,k)*dr(i,k+1)
219 du(i,k)=du(i,k)-fc(i,k)*du(i,k+1)
220 dv(i,k)=dv(i,k)-fc(i,k)*dv(i,k+1)
224 DO i=max(1,istr-1),min(iend+1,
lm(ng))
225 shear2=du(i,k)*du(i,k)+dv(i,k)*dv(i,k)
226 rig(i,j,k)=bvf(i,j,k)/(shear2+eps)
233 DO j=max(1,jstr-1),min(jend+1,
mm(ng))
234 DO i=max(1,istr-1),min(iend+1,
lm(ng))
235 cff=0.5_r8/(z_r(i,j,k+1)-z_r(i,j,k))
236 shear2=(cff*(u(i ,j,k+1,nstp)-u(i ,j,k,nstp)+ &
237 & u(i+1,j,k+1,nstp)-u(i+1,j,k,nstp)))**2+ &
238 & (cff*(v(i,j ,k+1,nstp)-v(i,j ,k,nstp)+ &
239 & v(i,j+1,k+1,nstp)-v(i,j+1,k,nstp)))**2
240 rig(i,j,k)=bvf(i,j,k)/(shear2+eps)
247 IF (
domain(ng)%Western_Edge(tile))
THEN
248 DO j=max(1,jstr-1),min(jend+1,
mm(ng))
249 rig(istr-1,j,k)=rig(istr,j,k)
252 IF (
domain(ng)%Eastern_Edge(tile))
THEN
253 DO j=max(1,jstr-1),min(jend+1,
mm(ng))
254 rig(iend+1,j,k)=rig(iend,j,k)
257 IF (
domain(ng)%Southern_Edge(tile))
THEN
258 DO i=max(1,istr-1),min(iend+1,
lm(ng))
259 rig(i,jstr-1,k)=rig(i,jstr,k)
262 IF (
domain(ng)%Northern_Edge(tile))
THEN
263 DO i=max(1,istr-1),min(iend+1,
lm(ng))
264 rig(i,jend+1,k)=rig(i,jend,k)
267 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
268 rig(istr-1,jstr-1,k)=rig(istr,jstr,k)
270 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
271 rig(istr-1,jend+1,k)=rig(istr,jend,k)
273 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
274 rig(iend+1,jstr-1,k)=rig(iend,jstr,k)
276 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
277 rig(iend+1,jend+1,k)=rig(iend,jend,k)
285 rig(i,j,0)=0.25_r8*(rig(i,j ,k)+rig(i+1,j ,k)+ &
286 & rig(i,j+1,k)+rig(i+1,j+1,k))
291 rig(i,j,k)=0.25_r8*(rig(i,j ,0)+rig(i-1,j ,0)+ &
292 & rig(i,j-1,0)+rig(i-1,j-1,0))
304 rig(i,j,k)=0.25_r8*rig(i,j,k-1)+ &
305 & 0.50_r8*rig(i,j,k )+ &
306 & 0.25_r8*rig(i,j,k+1)
327 cff=min(1.0_r8,max(0.0_r8,rig(i,j,k))/
lmd_ri0)
329 nu_sx=nu_sx*nu_sx*nu_sx
334 shear2=bvf(i,j,k)/(rig(i,j,k)+eps)
335 cff=shear2*shear2/(shear2*shear2+16.0e-10_r8)
344 cff=1.0_r8/sqrt(max(bvf(i,j,k),1.0e-7_r8))
345 lmd_iwm=1.0e-6_r8*cff
346 lmd_iws=1.0e-7_r8*cff
373 dddt=t(i,j,k+1,nstp,
itemp)-t(i,j,k,nstp,
itemp)
374 ddds=t(i,j,k+1,nstp,
isalt)-t(i,j,k,nstp,
isalt)
375 ddds=sign(1.0_r8,ddds)*max(abs(ddds),1.0e-14_r8)
376 rrho=alfaobeta(i,j,k)*dddt/ddds
380 IF ((rrho.gt.1.0_r8).and.(ddds.gt.0.0_r8))
THEN
387 nu_dds=1.0_r8-((rrho-1.0_r8)/(
lmd_rrho0-1.0_r8))**2
388 nu_dds=
lmd_nuf*nu_dds*nu_dds*nu_dds
397 ELSE IF ((0.0_r8.lt.rrho).and.(rrho.lt.1.0_r8).and. &
398 & (ddds.lt.0.0_r8))
THEN
406 & exp(-
lmd_tdd3*((1.0_r8/rrho)-1.0_r8)))
411 IF (rrho.lt.0.5_r8)
THEN
466 & LBi, UBi, LBj, UBj, &
482 integer,
intent(in) :: ng, tile
483 integer,
intent(in) :: LBi, UBi, LBj, UBj
484 Integer,
intent(in) :: nstp
487 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
488 real(r8),
intent(in) :: bvf(LBi:,LBj:,0:)
490 real(r8),
intent(inout) :: Akt(LBi:,LBj:,0:,:)
491 real(r8),
intent(inout) :: Akv(LBi:,LBj:,0:)
493 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
494 real(r8),
intent(in) :: bvf(LBi:UBi,LBj:UBj,0:N(ng))
496 real(r8),
intent(inout) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
497 real(r8),
intent(inout) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
502 integer :: i, itrc, j, k
504 real(r8),
parameter :: eps = 1.0e-14_r8
506 real(r8) :: cff, lmd_iwm, lmd_iws, nu_sx, nu_sxc, shear2
508# include "set_bounds.h"
527 nu_sxc=1.0_r8-cff*cff
528 nu_sxc=nu_sxc*nu_sxc*nu_sxc
536 akv(i,j,k)=akv(i,j,k)+
lmd_nu0c*nu_sxc
541# if defined LIMIT_VDIFF || defined LIMIT_VVISC
549 akv(i,j,k)=min(
akv_limit(ng), akv(i,j,k))
565 IF (
domain(ng)%Western_Edge(tile))
THEN
568 akt(istr-1,j,k,itrc)=akt(istr,j,k,itrc)
570 akv(istr-1,j,k)=akv(istr,j,k)
573 IF (
domain(ng)%Eastern_Edge(tile))
THEN
576 akt(iend+1,j,k,itrc)=akt(iend,j,k,itrc)
578 akv(iend+1,j,k)=akv(iend,j,k)
582 IF (
domain(ng)%Southern_Edge(tile))
THEN
585 akt(i,jstr-1,k,itrc)=akt(i,jstr,k,itrc)
587 akv(i,jstr-1,k)=akv(i,jstr,k)
590 IF (
domain(ng)%Northern_Edge(tile))
THEN
593 akt(i,jend+1,k,itrc)=akt(i,jend,k,itrc)
595 akv(i,jend+1,k)=akv(i,jend,k)
598 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
600 akt(istr-1,jstr-1,k,itrc)=0.5_r8* &
601 & (akt(istr ,jstr-1,k,itrc)+ &
602 & akt(istr-1,jstr ,k,itrc))
604 akv(istr-1,jstr-1,k)=0.5_r8* &
605 & (akv(istr ,jstr-1,k)+ &
606 & akv(istr-1,jstr ,k))
608 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
610 akt(iend+1,jstr-1,k,itrc)=0.5_r8* &
611 & (akt(iend ,jstr-1,k,itrc)+ &
612 & akt(iend+1,jstr ,k,itrc))
614 akv(iend+1,jstr-1,k)=0.5_r8* &
615 & (akv(iend ,jstr-1,k)+ &
616 & akv(iend+1,jstr ,k))
618 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
620 akt(istr-1,jend+1,k,itrc)=0.5_r8* &
621 & (akt(istr ,jend+1,k,itrc)+ &
622 & akt(istr-1,jend ,k,itrc))
624 akv(istr-1,jend+1,k)=0.5_r8* &
625 & (akv(istr ,jend+1,k)+ &
626 & akv(istr-1,jend ,k))
628 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
630 akt(iend+1,jend+1,k,itrc)=0.5_r8* &
631 & (akt(iend ,jend+1,k,itrc)+ &
632 & akt(iend+1,jend ,k,itrc))
634 akv(iend+1,jend+1,k)=0.5_r8* &
635 & (akv(iend ,jend+1,k)+ &
636 & akv(iend+1,jend ,k))
641 & lbi, ubi, lbj, ubj, 0, n(ng), &
645 & lbi, ubi, lbj, ubj, 0, n(ng), &
650 & lbi, ubi, lbj, ubj, 0, n(ng), &
655 & lbi, ubi, lbj, ubj, 0, n(ng), 1, nat, &