111 & LBi, UBi, LBj, UBj, &
112 & IminS, ImaxS, JminS, JmaxS, &
117 & Huon, Hvom, Hz, pm, pn, z_r, z_w, &
123 & bustr, bvstr, sustr, svstr, &
128 & Dissip_break, Dissip_wcap, &
131 & Akk, Akp, Lscale, gls, tke)
146 integer,
intent(in) :: ng, tile
147 integer,
intent(in) :: LBi, UBi, LBj, UBj
148 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
149 integer,
intent(in) :: nstp, nnew
153 real(r8),
intent(in) :: umask(LBi:,LBj:)
154 real(r8),
intent(in) :: vmask(LBi:,LBj:)
156 real(r8),
intent(in) :: Huon(LBi:,LBj:,:)
157 real(r8),
intent(in) :: Hvom(LBi:,LBj:,:)
158 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
159 real(r8),
intent(in) :: pm(LBi:,LBj:)
160 real(r8),
intent(in) :: pn(LBi:,LBj:)
161 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
162 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
163 real(r8),
intent(in) :: ZoBot(LBi:,LBj:)
164 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
165 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
166 real(r8),
intent(in) :: W(LBi:,LBj:,0:)
168 real(r8),
intent(in) :: W_stokes(LBi:,LBj:,0:)
170 real(r8),
intent(in) :: bustr(LBi:,LBj:)
171 real(r8),
intent(in) :: bvstr(LBi:,LBj:)
172 real(r8),
intent(in) :: sustr(LBi:,LBj:)
173 real(r8),
intent(in) :: svstr(LBi:,LBj:)
175 real(r8),
intent(in) :: Hwave(LBi:,LBj:)
178 real(r8),
intent(in) :: Dissip_break(LBi:,LBj:)
179 real(r8),
intent(in) :: Dissip_wcap(LBi:,LBj:)
181 real(r8),
intent(in) :: bvf(LBi:,LBj:,0:)
183 real(r8),
intent(inout) :: Akt(LBi:,LBj:,0:,:)
184 real(r8),
intent(inout) :: Akv(LBi:,LBj:,0:)
185 real(r8),
intent(inout) :: Akk(LBi:,LBj:,0:)
186 real(r8),
intent(inout) :: Akp(LBi:,LBj:,0:)
187 real(r8),
intent(inout) :: Lscale(LBi:,LBj:,0:)
188 real(r8),
intent(inout) :: gls(LBi:,LBj:,0:,:)
189 real(r8),
intent(inout) :: tke(LBi:,LBj:,0:,:)
192 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
193 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
195 real(r8),
intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
196 real(r8),
intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
197 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
198 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
199 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
200 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
201 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
202 real(r8),
intent(in) :: ZoBot(LBi:UBi,LBj:UBj)
203 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
204 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
205 real(r8),
intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
207 real(r8),
intent(in) :: W_stokes(LBi:UBi,LBj:UBj,0:N(ng))
209 real(r8),
intent(in) :: bustr(LBi:UBi,LBj:UBj)
210 real(r8),
intent(in) :: bvstr(LBi:UBi,LBj:UBj)
211 real(r8),
intent(in) :: sustr(LBi:UBi,LBj:UBj)
212 real(r8),
intent(in) :: svstr(LBi:UBi,LBj:UBj)
214 real(r8),
intent(in) :: Hwave(LBi:UBi,LBj:UBj)
217 real(r8),
intent(in) :: Dissip_break(LBi:UBi,LBj:UBj)
218 real(r8),
intent(in) :: Dissip_wcap(LBi:UBi,LBj:UBj)
220 real(r8),
intent(in) :: bvf(LBi:UBi,LBj:UBj,0:N(ng))
222 real(r8),
intent(inout) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
223 real(r8),
intent(inout) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
224 real(r8),
intent(inout) :: Akk(LBi:UBi,LBj:UBj,0:N(ng))
225 real(r8),
intent(inout) :: Akp(LBi:UBi,LBj:UBj,0:N(ng))
226 real(r8),
intent(inout) :: Lscale(LBi:UBi,LBj:UBj,0:N(ng))
227 real(r8),
intent(inout) :: gls(LBi:UBi,LBj:UBj,0:N(ng),3)
228 real(r8),
intent(inout) :: tke(LBi:UBi,LBj:UBj,0:N(ng),3)
234 integer :: i, itrc, j, k
236 real(r8),
parameter :: Gadv = 1.0_r8/3.0_r8
237 real(r8),
parameter :: eps = 1.0e-10_r8
240 real(r8) :: Gh, Gm, Kprod, Ls_unlmt, Ls_lmt, Pprod, Sh, Sm
241 real(r8) :: cff, cff1, cff2, cff3
242 real(r8) :: cmu_fac1, cmu_fac2, cmu_fac3, cmu_fac4
243 real(r8) :: gls_c3, gls_exp1, gls_fac1, gls_fac2, gls_fac3
244 real(r8) :: gls_fac4, gls_fac5, gls_fac6, ql, sqrt2, strat2
245 real(r8) :: tke_exp1, tke_exp2, tke_exp3, tke_exp4, wall_fac
246 real(r8) :: gls_d, gls_sigp_cb, ogls_sigp, sig_eff
248# if defined CRAIG_BANNER || defined TKE_WAVEDISS
252 real(r8),
dimension(IminS:ImaxS) :: tke_fluxt
253 real(r8),
dimension(IminS:ImaxS) :: tke_fluxb
254 real(r8),
dimension(IminS:ImaxS) :: gls_fluxt
255 real(r8),
dimension(IminS:ImaxS) :: gls_fluxb
256 real(r8),
dimension(IminS:ImaxS) :: Zos_eff
258 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BCK
259 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BCP
260 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
261 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FCK
262 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FCP
263 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dU
264 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dV
266 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: shear2
267 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: buoy2
269 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FEK
270 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FEP
271 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FXK
272 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FXP
273 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Zob_min
274 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: curvK
275 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: curvP
276 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gradK
277 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gradP
279# include "set_bounds.h"
285 zos_min=max(
zos(ng),0.0001_r8)
288 zob_min(i,j)=max(zobot(i,j),0.0001_r8)
293 IF ((
gls_p(ng).eq.0.0_r8).and. &
294 & (
gls_n(ng).eq.1.0_r8).and. &
295 & (
gls_m(ng).eq.1.0_r8))
THEN
299# if defined CRAIG_BANNER || defined TKE_WAVEDISS
310 & cff1*
gls_n(ng)/3.0_r8*(4.0_r8*
gls_m(ng)+1.0_r8)+ &
311 & cff1**2*
gls_m(ng)/9.0_r8*(2.0_r8+4.0_r8*
gls_m(ng)))
316 ogls_sigp=1.0_r8/gls_sigp_cb
321 cmu_fac3=1.0_r8/
gls_cmu0(ng)**2.0_r8
322 cmu_fac4=(1.5_r8*
gls_sigk(ng))**(1.0_r8/3.0_r8)/ &
330 gls_fac6=8.0_r8/
gls_cmu0(ng)**6.0_r8
332 gls_exp1=1.0_r8/
gls_n(ng)
335 tke_exp3=0.5_r8+
gls_m(ng)
351 cff=1.0_r8/(2.0_r8*hz(i,j,k+1)+ &
352 & hz(i,j,k)*(2.0_r8-cf(i,k-1)))
353 cf(i,k)=cff*hz(i,j,k+1)
354 du(i,k)=cff*(3.0_r8*(u(i ,j,k+1,nstp)-u(i, j,k,nstp)+ &
355 & u(i+1,j,k+1,nstp)-u(i+1,j,k,nstp))- &
356 & hz(i,j,k)*du(i,k-1))
357 dv(i,k)=cff*(3.0_r8*(v(i,j ,k+1,nstp)-v(i,j ,k,nstp)+ &
358 & v(i,j+1,k+1,nstp)-v(i,j+1,k,nstp))- &
359 & hz(i,j,k)*dv(i,k-1))
368 du(i,k)=du(i,k)-cf(i,k)*du(i,k+1)
369 dv(i,k)=dv(i,k)-cf(i,k)*dv(i,k+1)
374 shear2(i,j,k)=du(i,k)*du(i,k)+dv(i,k)*dv(i,k)
382 cff=0.5_r8/(z_r(i,j,k+1)-z_r(i,j,k))
383 shear2(i,j,k)=(cff*(u(i ,j,k+1,nstp)-u(i ,j,k,nstp)+ &
384 & u(i+1,j,k+1,nstp)-u(i+1,j,k,nstp)))**2+ &
385 & (cff*(v(i,j ,k+1,nstp)-v(i,j ,k,nstp)+ &
386 & v(i,j+1,k+1,nstp)-v(i,j+1,k,nstp)))**2
397 buoy2(i,j,k)=bvf(i,j,k)
409 IF (
domain(ng)%Western_Edge(tile))
THEN
410 DO j=max(1,jstr-1),min(jend+1,
mm(ng))
411 shear2(istr-1,j,k)=shear2(istr,j,k)
414 IF (
domain(ng)%Eastern_Edge(tile))
THEN
415 DO j=max(1,jstr-1),min(jend+1,
mm(ng))
416 shear2(iend+1,j,k)=shear2(iend,j,k)
419 IF (
domain(ng)%Southern_Edge(tile))
THEN
420 DO i=max(1,istr-1),min(iend+1,
lm(ng))
421 shear2(i,jstr-1,k)=shear2(i,jstr,k)
424 IF (
domain(ng)%Northern_Edge(tile))
THEN
425 DO i=max(1,istr-1),min(iend+1,
lm(ng))
426 shear2(i,jend+1,k)=shear2(i,jend,k)
429 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
430 shear2(istr-1,jstr-1,k)=shear2(istr,jstr,k)
432 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
433 shear2(istr-1,jend+1,k)=shear2(istr,jend,k)
435 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
436 shear2(iend+1,jstr-1,k)=shear2(iend,jstr,k)
438 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
439 shear2(iend+1,jend+1,k)=shear2(iend,jend,k)
446 buoy2(i,j,0)=0.25_r8*(buoy2(i,j ,k)+buoy2(i+1,j ,k)+ &
447 & buoy2(i,j+1,k)+buoy2(i+1,j+1,k))
448 shear2(i,j,0)=0.25_r8*(shear2(i,j ,k)+shear2(i+1,j ,k)+ &
449 & shear2(i,j+1,k)+shear2(i+1,j+1,k))
454 buoy2(i,j,k)=0.25_r8*(buoy2(i,j ,0)+buoy2(i-1,j ,0)+ &
455 & buoy2(i,j-1,0)+buoy2(i-1,j-1,0))
456 shear2(i,j,k)=0.25_r8*(shear2(i,j ,0)+shear2(i-1,j ,0)+ &
457 & shear2(i,j-1,0)+shear2(i-1,j-1,0))
479 cff=0.25_r8*(huon(i,j,k)+huon(i,j,k+1))
480 fxk(i,j)=cff*(tke(i,j,k,3)+tke(i-1,j,k,3))
481 fxp(i,j)=cff*(gls(i,j,k,3)+gls(i-1,j,k,3))
486 cff=0.25_r8*(hvom(i,j,k)+hvom(i,j,k+1))
487 fek(i,j)=cff*(tke(i,j,k,3)+tke(i,j-1,k,3))
488 fep(i,j)=cff*(gls(i,j,k,3)+gls(i,j-1,k,3))
494 gradk(i,j)=(tke(i,j,k,3)-tke(i-1,j,k,3))
496 gradk(i,j)=gradk(i,j)*umask(i,j)
498 gradp(i,j)=(gls(i,j,k,3)-gls(i-1,j,k,3))
500 gradp(i,j)=gradp(i,j)*umask(i,j)
505 IF (
domain(ng)%Western_Edge(tile))
THEN
507 gradk(istr-1,j)=gradk(istr,j)
508 gradp(istr-1,j)=gradp(istr,j)
513 IF (
domain(ng)%Eastern_Edge(tile))
THEN
515 gradk(iend+2,j)=gradk(iend+1,j)
516 gradp(iend+2,j)=gradp(iend+1,j)
527 cff=0.5_r8*(huon(i,j,k)+huon(i,j,k+1))
528 fxk(i,j)=cff*0.5_r8*(tke(i-1,j,k,3)+tke(i,j,k,3)- &
529 & cff1*(gradk(i+1,j)-gradk(i-1,j)))
530 fxp(i,j)=cff*0.5_r8*(gls(i-1,j,k,3)+gls(i,j,k,3)- &
531 & cff1*(gradp(i+1,j)-gradp(i-1,j)))
541 curvk(i,j)=gradk(i+1,j)-gradk(i,j)
542 curvp(i,j)=gradp(i+1,j)-gradp(i,j)
547 cff=0.5_r8*(huon(i,j,k)+huon(i,j,k+1))
548 IF (cff.gt.0.0_r8)
THEN
555 fxk(i,j)=cff*0.5_r8*(tke(i-1,j,k,3)+tke(i,j,k,3)- &
557 fxp(i,j)=cff*0.5_r8*(gls(i-1,j,k,3)+gls(i,j,k,3)- &
564 gradk(i,j)=(tke(i,j,k,3)-tke(i,j-1,k,3))
566 gradk(i,j)=gradk(i,j)*vmask(i,j)
568 gradp(i,j)=(gls(i,j,k,3)-gls(i,j-1,k,3))
570 gradp(i,j)=gradp(i,j)*vmask(i,j)
575 IF (
domain(ng)%Southern_Edge(tile))
THEN
577 gradk(i,jstr-1)=gradk(i,jstr)
578 gradp(i,jstr-1)=gradp(i,jstr)
583 IF (
domain(ng)%Northern_Edge(tile))
THEN
585 gradk(i,jend+2)=gradk(i,jend+1)
586 gradp(i,jend+2)=gradp(i,jend+1)
594 cff=0.5_r8*(hvom(i,j,k)+hvom(i,j,k+1))
595 fek(i,j)=cff*0.5_r8*(tke(i,j-1,k,3)+tke(i,j,k,3)- &
596 & cff1*(gradk(i,j+1)-gradk(i,j-1)))
597 fep(i,j)=cff*0.5_r8*(gls(i,j-1,k,3)+gls(i,j,k,3)- &
598 & cff1*(gradp(i,j+1)-gradp(i,j-1)))
604 curvk(i,j)=gradk(i,j+1)-gradk(i,j)
605 curvp(i,j)=gradp(i,j+1)-gradp(i,j)
610 cff=0.5_r8*(hvom(i,j,k)+hvom(i,j,k+1))
611 IF (cff.gt.0.0_r8)
THEN
618 fek(i,j)=cff*0.5_r8*(tke(i,j-1,k,3)+tke(i,j,k,3)- &
620 fep(i,j)=cff*0.5_r8*(gls(i,j-1,k,3)+gls(i,j,k,3)- &
631 cff=
dt(ng)*pm(i,j)*pn(i,j)
632 tke(i,j,k,nnew)=tke(i,j,k,nnew)- &
633 & cff*(fxk(i+1,j)-fxk(i,j)+ &
634 & fek(i,j+1)-fek(i,j))
635 tke(i,j,k,nnew)=max(tke(i,j,k,nnew),
gls_kmin(ng))
636 gls(i,j,k,nnew)=gls(i,j,k,nnew)- &
637 & cff*(fxp(i+1,j)-fxp(i,j)+ &
638 & fep(i,j+1)-fep(i,j))
639 gls(i,j,k,nnew)=max(gls(i,j,k,nnew),
gls_pmin(ng))
650 cff=0.25_r8*(w(i,j,k)+w(i,j,k-1))
652 cff=cff+0.25_r8*(w_stokes(i,j,k)+w_stokes(i,j,k-1))
654 fck(i,k)=cff*(tke(i,j,k,3)+tke(i,j,k-1,3))
655 fcp(i,k)=cff*(gls(i,j,k,3)+gls(i,j,k-1,3))
663 cff=0.5*(w(i,j,k)+w(i,j,k-1))
665 cff=cff+0.5_r8*(w_stokes(i,j,k)+w_stokes(i,j,k-1))
667 fck(i,k)=cff*(cff1*(tke(i,j,k-1,3)+ &
669 & cff2*(tke(i,j,k-2,3)+ &
671 fcp(i,k)=cff*(cff1*(gls(i,j,k-1,3)+ &
673 & cff2*(gls(i,j,k-2,3)+ &
681 cff=0.5_r8*(w(i,j,0)+w(i,j,1))
683 cff=cff+0.5_r8*(w_stokes(i,j,0)+w_stokes(i,j,1))
685 fck(i,1)=cff*(cff1*tke(i,j,0,3)+ &
686 & cff2*tke(i,j,1,3)- &
688 fcp(i,1)=cff*(cff1*gls(i,j,0,3)+ &
689 & cff2*gls(i,j,1,3)- &
691 cff=0.5_r8*(w(i,j,n(ng))+w(i,j,n(ng)-1))
693 cff=cff+0.5_r8*(w_stokes(i,j,n(ng))+w_stokes(i,j,n(ng)-1))
695 fck(i,n(ng))=cff*(cff1*tke(i,j,n(ng) ,3)+ &
696 & cff2*tke(i,j,n(ng)-1,3)- &
697 & cff3*tke(i,j,n(ng)-2,3))
698 fcp(i,n(ng))=cff*(cff1*gls(i,j,n(ng) ,3)+ &
699 & cff2*gls(i,j,n(ng)-1,3)- &
700 & cff3*gls(i,j,n(ng)-2,3))
708 cff=
dt(ng)*pm(i,j)*pn(i,j)
709 tke(i,j,k,nnew)=tke(i,j,k,nnew)- &
710 & cff*(fck(i,k+1)-fck(i,k))
711 tke(i,j,k,nnew)=max(tke(i,j,k,nnew),
gls_kmin(ng))
712 gls(i,j,k,nnew)=gls(i,j,k,nnew)- &
713 & cff*(fcp(i,k+1)-fcp(i,k))
714 gls(i,j,k,nnew)=max(gls(i,j,k,nnew),
gls_pmin(ng))
728 fck(i,k)=cff*(akk(i,j,k)+akk(i,j,k-1))/hz(i,j,k)
729 fcp(i,k)=cff*(akp(i,j,k)+akp(i,j,k-1))/hz(i,j,k)
747 IF (strat2.gt.0.0_r8)
THEN
752 kprod=shear2(i,j,k)*(akv(i,j,k)-
akv_bak(ng))- &
761 IF (kprod.lt.0.0_r8)
THEN
766 IF (pprod.lt.0.0_r8)
THEN
767 pprod=pprod+gls_c3*strat2*(akt(i,j,k,
itemp)- &
774 cff=0.5_r8*(hz(i,j,k)+hz(i,j,k+1))
775 tke(i,j,k,nnew)=tke(i,j,k,nnew)+ &
777 gls(i,j,k,nnew)=gls(i,j,k,nnew)+ &
778 &
dt(ng)*cff*pprod*gls(i,j,k,nstp)/ &
812 & (gls(i,j,k,nstp)**( gls_exp1)*cmu_fac1* &
813 & tke(i,j,k,nstp)**(-tke_exp1)* &
814 & (1.0_r8/ (z_w(i,j,k)-z_w(i,j,0))))**2+ &
816 & (gls(i,j,k,nstp)**( gls_exp1)*cmu_fac1* &
817 & tke(i,j,k,nstp)**(-tke_exp1)* &
818 & (1.0_r8/ (z_w(i,j,n(ng))-z_w(i,j,k))))**2
821 bck(i,k)=cff*(1.0_r8+
dt(ng)* &
822 & gls(i,j,k,nstp)**(-gls_exp1)*cmu_fac2* &
823 & tke(i,j,k,nstp)**( tke_exp2)+ &
824 &
dt(ng)*(1.0_r8-cff1)*strat2* &
826 & tke(i,j,k,nstp))- &
827 & fck(i,k)-fck(i,k+1)
828 bcp(i,k)=cff*(1.0_r8+
dt(ng)*
gls_c2(ng)*wall_fac* &
829 & gls(i,j,k,nstp)**(-gls_exp1)*cmu_fac2* &
830 & tke(i,j,k,nstp)**( tke_exp2)+ &
831 &
dt(ng)*(1.0_r8-cff2)*gls_c3*strat2* &
833 & tke(i,j,k,nstp))- &
834 & fcp(i,k)-fcp(i,k+1)
847# if defined CRAIG_BANNER
848 tke(i,j,n(ng),nnew)=max(cmu_fac4*0.5_r8* &
849 & sqrt((sustr(i,j)+sustr(i+1,j))**2+ &
850 & (svstr(i,j)+svstr(i,j+1))**2)* &
853# elif defined TKE_WAVEDISS
854 tke(i,j,n(ng),nnew)=max(cmu_fac4*(
sz_alpha(ng)* &
855 & (dissip_break(i,j)+ &
856 & dissip_wcap(i,j)))** &
859 tke(i,j,n(ng),nnew)=max(cmu_fac3*0.5_r8* &
860 & sqrt((sustr(i,j)+sustr(i+1,j))**2+ &
861 & (svstr(i,j)+svstr(i,j+1))**2), &
864 tke(i,j,0,nnew)=max(cmu_fac3*0.5_r8* &
865 & sqrt((bustr(i,j)+bustr(i+1,j))**2+ &
866 & (bvstr(i,j)+bvstr(i,j+1))**2), &
870 & sqrt((sustr(i,j)+sustr(i+1,j))**2+ &
871 & (svstr(i,j)+svstr(i,j+1))**2), &
873# elif defined ZOS_HSIG
879 & tke(i,j,n(ng),nnew)**
gls_m(ng)* &
880 & (l_sft*zos_eff(i))**
gls_n(ng), &
883 gls(i,j,0,nnew)=max(cff*tke(i,j,0,nnew)**(
gls_m(ng)), &
890# if defined CRAIG_BANNER
893 & sqrt((sustr(i,j)+sustr(i+1,j))**2+ &
894 & (svstr(i,j)+svstr(i,j+1))**2))**1.5_r8
895# elif defined TKE_WAVEDISS
896 tke_fluxt(i)=
dt(ng)*
sz_alpha(ng)*(dissip_break(i,j)+ &
903 cff=1.0_r8/bck(i,n(ng)-1)
904 cf(i,n(ng)-1)=cff*fck(i,n(ng)-1)
905 tke(i,j,n(ng)-1,nnew)=cff*(tke(i,j,n(ng)-1,nnew)+tke_fluxt(i))
909 cff=1.0_r8/(bck(i,k)-cf(i,k+1)*fck(i,k+1))
911 tke(i,j,k,nnew)=cff*(tke(i,j,k,nnew)- &
912 & fck(i,k+1)*tke(i,j,k+1,nnew))
914 tke(i,j,1,nnew)=tke(i,j,1,nnew)-cff*tke_fluxb(i)
918 tke(i,j,k,nnew)=tke(i,j,k,nnew)-cf(i,k)*tke(i,j,k-1,nnew)
925 cff=0.5_r8*(tke(i,j,n(ng),nnew)+tke(i,j,n(ng)-1,nnew))
926 gls_fluxt(i)=
dt(ng)*gls_fac3*cff**
gls_m(ng)* &
927 & l_sft**(
gls_n(ng))* &
928 & (zos_eff(i)+0.5_r8*hz(i,j,n(ng)))** &
929 & (
gls_n(ng)-1.0_r8)* &
930 & 0.5_r8*(akp(i,j,n(ng))+akp(i,j,n(ng)-1))
932 gls_fluxt(i)=gls_fluxt(i)-
dt(ng)* &
934 & cff**(
gls_m(ng)-1.0_r8)* &
935 & ((zos_eff(i)+0.5_r8*hz(i,j,n(ng)))*l_sft)** &
939 & sqrt((sustr(i,j)+sustr(i+1,j))**2+ &
940 & (svstr(i,j)+svstr(i,j+1))**2))**1.5_r8
941# elif defined TKE_WAVEDISS
942 gls_fluxt(i)=gls_fluxt(i)-
dt(ng)* &
944 & cff**(
gls_m(ng)-1.0_r8)* &
945 & ((zos_eff(i)+0.5_r8*hz(i,j,n(ng)))*l_sft)** &
948 & (dissip_break(i,j)+dissip_wcap(i,j))
950 cff=0.5_r8*(tke(i,j,0,nnew)+tke(i,j,1,nnew))
951 gls_fluxb(i)=
dt(ng)*gls_fac2*(cff**
gls_m(ng))* &
952 & (0.5_r8*hz(i,j,1)+zob_min(i,j))** &
953 & (
gls_n(ng)-1.0_r8)* &
954 & 0.5_r8*(akp(i,j,0)+akp(i,j,1))
956 cff=1.0_r8/bcp(i,n(ng)-1)
957 cf(i,n(ng)-1)=cff*fcp(i,n(ng)-1)
958 gls(i,j,n(ng)-1,nnew)=cff*(gls(i,j,n(ng)-1,nnew)-gls_fluxt(i))
962 cff=1.0_r8/(bcp(i,k)-cf(i,k+1)*fcp(i,k+1))
964 gls(i,j,k,nnew)=cff*(gls(i,j,k,nnew)- &
965 & fcp(i,k+1)*gls(i,j,k+1,nnew))
967 gls(i,j,1,nnew)=gls(i,j,1,nnew)-cff*gls_fluxb(i)
972 gls(i,j,k,nnew)=gls(i,j,k,nnew)-cf(i,k)*gls(i,j,k-1,nnew)
986 tke(i,j,k,nnew)=max(tke(i,j,k,nnew),
gls_kmin(ng))
987 gls(i,j,k,nnew)=max(gls(i,j,k,nnew),
gls_pmin(ng))
988 IF (
gls_n(ng).ge.0.0_r8)
THEN
989 gls(i,j,k,nnew)=min(gls(i,j,k,nnew),gls_fac5* &
990 & tke(i,j,k,nnew)**(tke_exp4)* &
991 & (sqrt(max(0.0_r8, &
992 & buoy2(i,j,k)))+eps)** &
995 gls(i,j,k,nnew)=max(gls(i,j,k,nnew),gls_fac5* &
996 & tke(i,j,k,nnew)**(tke_exp4)* &
997 & (sqrt(max(0.0_r8, &
998 & buoy2(i,j,k)))+eps)** &
1002 & gls(i,j,k,nnew)**( gls_exp1)*cmu_fac1* &
1003 & tke(i,j,k,nnew)**(-tke_exp1))
1004 IF (buoy2(i,j,k).gt.0.0_r8)
THEN
1005 ls_lmt=min(ls_unlmt, &
1006 & sqrt(0.56_r8*tke(i,j,k,nnew)/ &
1007 & (max(0.0_r8,buoy2(i,j,k))+eps)))
1015 & tke(i,j,k,nnew)**
gls_m(ng)* &
1021 gh=min(
gls_gh0,-buoy2(i,j,k)*ls_lmt*ls_lmt/ &
1022 & (2.0_r8*tke(i,j,k,nnew)))
1026# if defined CANUTO_A || defined CANUTO_B
1032 gm=min(gm,shear2(i,j,k)*ls_lmt*ls_lmt/ &
1033 & (2.0_r8*tke(i,j,k,nnew)))
1040 &
gls_b5*gls_fac6**2*gm*gm
1050# elif defined KANTHA_CLAYSON
1054# else /* Galperin */
1064 ql=sqrt2*0.5_r8*(ls_lmt*sqrt(tke(i,j,k,nnew))+ &
1065 & lscale(i,j,k)*sqrt(tke(i,j,k,nstp)))
1068 akt(i,j,k,itrc)=
akt_bak(itrc,ng)+sh*ql
1077# if defined CRAIG_BANNER || defined TKE_WAVEDISS
1082 pprod=
gls_c1(ng)*shear2(i,j,k)*akv(i,j,k)
1083 cff=cmu_fac2*tke(i,j,k,nnew)**(1.5_r8+tke_exp1)* &
1084 & gls(i,j,k,nnew)**(-1.0_r8/
gls_n(ng))
1085 cff2=min(pprod/cff, 1.0_r8)
1086 sig_eff=cff2*
gls_sigp(ng)+(1.0_r8-cff2)*gls_sigp_cb
1087 akp(i,j,k)=
akp_bak(ng)+sm*ql/sig_eff
1089 akp(i,j,k)=
akp_bak(ng)+sm*ql*ogls_sigp
1094 lscale(i,j,k)=ls_lmt
1101 & sqrt(tke(i,j,n(ng),nnew))
1103 & sqrt(tke(i,j,0,nnew))
1107 akp(i,j,n(ng))=
akp_bak(ng)+akv(i,j,n(ng))*ogls_sigp
1111 akt(i,j,n(ng),itrc)=
akt_bak(itrc,ng)
1112 akt(i,j,0,itrc)=
akt_bak(itrc,ng)
1115# if defined LIMIT_VDIFF || defined LIMIT_VVISC
1125 akt(i,j,k,itrc)=min(
akt_limit(itrc,ng), akt(i,j,k,itrc))
1129 akv(i,j,k)=min(
akv_limit(ng), akv(i,j,k))
1141 IF (
domain(ng)%Western_Edge(tile))
THEN
1144 akt(istr-1,j,k,itrc)=akt(istr,j,k,itrc)
1146 akv(istr-1,j,k)=akv(istr,j,k)
1149 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1152 akt(iend+1,j,k,itrc)=akt(iend,j,k,itrc)
1154 akv(iend+1,j,k)=akv(iend,j,k)
1158 IF (
domain(ng)%Southern_Edge(tile))
THEN
1161 akt(i,jstr-1,k,itrc)=akt(i,jstr,k,itrc)
1163 akv(i,jstr-1,k)=akv(i,jstr,k)
1166 IF (
domain(ng)%Northern_Edge(tile))
THEN
1169 akt(i,jend+1,k,itrc)=akt(i,jend,k,itrc)
1171 akv(i,jend+1,k)=akv(i,jend,k)
1174 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1176 akt(istr-1,jstr-1,k,itrc)=0.5_r8* &
1177 & (akt(istr ,jstr-1,k,itrc)+ &
1178 & akt(istr-1,jstr ,k,itrc))
1180 akv(istr-1,jstr-1,k)=0.5_r8* &
1181 & (akv(istr ,jstr-1,k)+ &
1182 & akv(istr-1,jstr ,k))
1184 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1186 akt(iend+1,jstr-1,k,itrc)=0.5_r8* &
1187 & (akt(iend ,jstr-1,k,itrc)+ &
1188 & akt(iend+1,jstr ,k,itrc))
1190 akv(iend+1,jstr-1,k)=0.5_r8* &
1191 & (akv(iend ,jstr-1,k)+ &
1192 & akv(iend+1,jstr ,k))
1194 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1196 akt(istr-1,jend+1,k,itrc)=0.5_r8* &
1197 & (akt(istr ,jend+1,k,itrc)+ &
1198 & akt(istr-1,jend ,k,itrc))
1200 akv(istr-1,jend+1,k)=0.5_r8* &
1201 & (akv(istr ,jend+1,k)+ &
1202 & akv(istr-1,jend ,k))
1204 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1206 akt(iend+1,jend+1,k,itrc)=0.5_r8* &
1207 & (akt(iend ,jend+1,k,itrc)+ &
1208 & akt(iend+1,jend ,k,itrc))
1210 akv(iend+1,jend+1,k)=0.5_r8* &
1211 & (akv(iend ,jend+1,k)+ &
1212 & akv(iend+1,jend ,k))
1217 & lbi, ubi, lbj, ubj, n(ng), &
1218 & imins, imaxs, jmins, jmaxs, &
1224 & lbi, ubi, lbj, ubj, 0, n(ng), &
1227 & lbi, ubi, lbj, ubj, 0, n(ng), &
1230 & lbi, ubi, lbj, ubj, 0, n(ng), &
1234 & lbi, ubi, lbj, ubj, 0, n(ng), &
1241 & lbi, ubi, lbj, ubj, 0, n(ng), &
1244 & tke(:,:,:,nnew), &
1245 & gls(:,:,:,nnew), &
1248 & lbi, ubi, lbj, ubj, 0, n(ng), 1, nat, &