101 & LBi, UBi, LBj, UBj, &
102 & IminS, ImaxS, JminS, JmaxS, &
103 & nrhs, nstp, nnew, &
107#ifdef WET_DRY_NOT_YET
108 & umask_wet, vmask_wet, &
110 & om_v, on_u, pm, pn, &
114# ifdef TS_U3ADV_SPLIT
115 & diff3d_u, diff3d_v, &
137 integer,
intent(in) :: ng, tile
138 integer,
intent(in) :: LBi, UBi, LBj, UBj
139 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
140 integer,
intent(in) :: nrhs, nstp, nnew
144 real(r8),
intent(in) :: umask(LBi:,LBj:)
145 real(r8),
intent(in) :: vmask(LBi:,LBj:)
147# ifdef WET_DRY_NOT_YET
148 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
149 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
152# ifdef TS_U3ADV_SPLIT
153 real(r8),
intent(in) :: diff3d_u(LBi:,LBj:,:)
154 real(r8),
intent(in) :: diff3d_v(LBi:,LBj:,:)
156 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
159 real(r8),
intent(in) :: diff4(LBi:,LBj:,:)
161 real(r8),
intent(in) :: om_v(LBi:,LBj:)
162 real(r8),
intent(in) :: on_u(LBi:,LBj:)
163 real(r8),
intent(in) :: pm(LBi:,LBj:)
164 real(r8),
intent(in) :: pn(LBi:,LBj:)
165 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
166 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
167 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
169 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
171 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
172 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
173# ifdef DIAGNOSTICS_TS
174 real(r8),
intent(inout) :: DiaTwrk(LBi:,LBj:,:,:,:)
176 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
179 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
182# ifdef WET_DRY_NOT_YET
183 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
184 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
187# ifdef TS_U3ADV_SPLIT
188 real(r8),
intent(in) :: diff3d_u(LBi:UBi,LBj:UBj,N(ng))
189 real(r8),
intent(in) :: diff3d_v(LBi:UBi,LBj:UBj,N(ng))
191 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
194 real(r8),
intent(in) :: diff4(LBi:UBi,LBj:UBj,NT(ng))
196 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
197 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
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) :: Hz(LBi:UBi,LBj:UBj,N(ng))
201 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
202 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
204 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
206 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
207 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
208# ifdef DIAGNOSTICS_TS
212 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
217 integer :: Imin, Imax, Jmin, Jmax
218 integer :: i, itrc, j, k, k1, k2
220 real(r8) :: cff, cff1, cff2, cff3, cff4, dife, difx
221 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
223 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapT
225 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: tl_LapT
227 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
228 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
230 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
231 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
233 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: FS
234 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTde
235 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdx
236 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdz
237 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde
238 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx
240 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_FS
241 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTde
242 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTdx
243 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTdz
244 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZde
245 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZdx
247#include "set_bounds.h"
262 imax=min(iend+1,
lm(ng))
269 jmax=min(jend+1,
mm(ng))
281#ifdef TS_MIX_STABILITY
287 t_loop :
DO itrc=1,nt(ng)
289 k_loop1 :
DO k=0,n(ng)
295 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
299#ifdef WET_DRY_NOT_YET
300 cff=cff*umask_wet(i,j)
302 dzdx(i,j,k2)=cff*(z_r(i ,j,k+1)- &
304 tl_dzdx(i,j,k2)=cff*(tl_z_r(i ,j,k+1)- &
306#if defined TS_MIX_STABILITY
307 dtdx(i,j,k2)=cff*(0.75_r8*(t(i ,j,k+1,nrhs,itrc)- &
308 & t(i-1,j,k+1,nrhs,itrc))+ &
309 & 0.25_r8*(t(i ,j,k+1,nstp,itrc)- &
310 & t(i-1,j,k+1,nstp,itrc)))
312 & (0.75_r8*(tl_t(i ,j,k+1,nrhs,itrc)- &
313 & tl_t(i-1,j,k+1,nrhs,itrc))+ &
314 & 0.25_r8*(tl_t(i ,j,k+1,nstp,itrc)- &
315 & tl_t(i-1,j,k+1,nstp,itrc)))
316#elif defined TS_MIX_CLIMA
318 dtdx(i,j,k2)=cff*((t(i ,j,k+1,nrhs,itrc)- &
319 & tclm(i ,j,k+1,itrc))- &
320 & (t(i-1,j,k+1,nrhs,itrc)- &
321 & tclm(i-1,j,k+1,itrc)))
323 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
324 & t(i-1,j,k+1,nrhs,itrc))
326 tl_dtdx(i,j,k2)=cff*(tl_t(i ,j,k+1,nrhs,itrc)- &
327 & tl_t(i-1,j,k+1,nrhs,itrc))
329 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
330 & t(i-1,j,k+1,nrhs,itrc))
331 tl_dtdx(i,j,k2)=cff*(tl_t(i ,j,k+1,nrhs,itrc)- &
332 & tl_t(i-1,j,k+1,nrhs,itrc))
338 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
342#ifdef WET_DRY_NOT_YET
343 cff=cff*vmask_wet(i,j)
345 dzde(i,j,k2)=cff*(z_r(i,j ,k+1)- &
347 tl_dzde(i,j,k2)=cff*(tl_z_r(i,j ,k+1)- &
349#if defined TS_MIX_STABILITY
350 dtde(i,j,k2)=cff*(0.75_r8*(t(i,j ,k+1,nrhs,itrc)- &
351 & t(i,j-1,k+1,nrhs,itrc))+ &
352 & 0.25_r8*(t(i,j ,k+1,nstp,itrc)- &
353 & t(i,j-1,k+1,nstp,itrc)))
355 & (0.75_r8*(tl_t(i,j ,k+1,nrhs,itrc)- &
356 & tl_t(i,j-1,k+1,nrhs,itrc))+ &
357 & 0.25_r8*(tl_t(i,j ,k+1,nstp,itrc)- &
358 & tl_t(i,j-1,k+1,nstp,itrc)))
359#elif defined TS_MIX_CLIMA
361 dtde(i,j,k2)=cff*((t(i,j ,k+1,nrhs,itrc)- &
362 & tclm(i,j ,k+1,itrc))- &
363 & (t(i,j-1,k+1,nrhs,itrc)- &
364 & tclm(i,j-1,k+1,itrc)))
366 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
367 & t(i,j-1,k+1,nrhs,itrc))
369 tl_dtde(i,j,k2)=cff*(tl_t(i,j ,k+1,nrhs,itrc)- &
370 & tl_t(i,j-1,k+1,nrhs,itrc))
372 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
373 & t(i,j-1,k+1,nrhs,itrc))
374 tl_dtde(i,j,k2)=cff*(tl_t(i,j ,k+1,nrhs,itrc)- &
375 & tl_t(i,j-1,k+1,nrhs,itrc))
380 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
384 tl_dtdz(i,j,k2)=0.0_r8
392 cff=1.0_r8/(z_r(i,j,k+1)- &
394 tl_cff=-cff*cff*(tl_z_r(i,j,k+1)- &
399#if defined TS_MIX_STABILITY
400 dtdz(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
401 & t(i,j,k ,nrhs,itrc))+ &
402 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
403 & t(i,j,k ,nstp,itrc)))
404 tl_dtdz(i,j,k2)=tl_cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
405 & t(i,j,k ,nrhs,itrc))+ &
406 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
407 & t(i,j,k ,nstp,itrc)))+&
408 & cff*(0.75_r8*(tl_t(i,j,k+1,nrhs,itrc)- &
409 & tl_t(i,j,k ,nrhs,itrc))+ &
410 & 0.25_r8*(tl_t(i,j,k+1,nstp,itrc)- &
411 & tl_t(i,j,k ,nstp,itrc)))-&
415#elif defined TS_MIX_CLIMA
417 dtdz(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
418 & tclm(i,j,k+1,itrc))- &
419 & (t(i,j,k ,nrhs,itrc)- &
420 & tclm(i,j,k ,itrc)))
421 tl_dtdz(i,j,k2)=tl_cff*((t(i,j,k+1,nrhs,itrc)- &
422 & tclm(i,j,k+1,itrc))- &
423 & (t(i,j,k ,nrhs,itrc)- &
424 & tclm(i,j,k ,itrc)))+ &
425 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
426 & tl_t(i,j,k ,nrhs,itrc))- &
431 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
432 & t(i,j,k ,nrhs,itrc))
433 tl_dtdz(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
434 & t(i,j,k ,nrhs,itrc))+ &
435 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
436 & tl_t(i,j,k ,nrhs,itrc))- &
442 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
443 & t(i,j,k ,nrhs,itrc))
444 tl_dtdz(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
445 & t(i,j,k ,nrhs,itrc))+ &
446 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
447 & tl_t(i,j,k ,nrhs,itrc))- &
459# ifdef TS_U3ADV_SPLIT
460 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
462 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
466 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
470 & (hz(i,j,k)+hz(i-1,j,k))* &
472 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
475 & max(dzdx(i,j,k1),0.0_r8)* &
479 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
481 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
484 & max(dzdx(i,j,k1),0.0_r8)* &
486 & dtdz(i ,j,k1))))+ &
487 & (hz(i,j,k)+hz(i-1,j,k))* &
488 & (tl_dtdx(i,j,k1)- &
489 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
490 & (tl_dtdz(i-1,j,k1)+ &
491 & tl_dtdz(i ,j,k2))+ &
492 & max(dzdx(i,j,k1),0.0_r8)* &
493 & (tl_dtdz(i-1,j,k2)+ &
494 & tl_dtdz(i ,j,k1)))- &
496 & sign(0.5_r8,-dzdx(i,j,k1)))* &
498 & (dtdz(i-1,j,k1)+dtdz(i,j,k2))+ &
500 & sign(0.5_r8, dzdx(i,j,k1)))* &
502 & (dtdz(i-1,j,k2)+dtdz(i,j,k1)))))- &
505 & (hz(i,j,k)+hz(i-1,j,k))* &
507 & (min(dzdx(i,j,k1),0.0_r8)* &
510 & max(dzdx(i,j,k1),0.0_r8)* &
519# ifdef TS_U3ADV_SPLIT
520 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
522 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
526 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
530 & (hz(i,j,k)+hz(i,j-1,k))* &
532 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
535 & max(dzde(i,j,k1),0.0_r8)* &
539 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
541 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
544 & max(dzde(i,j,k1),0.0_r8)* &
546 & dtdz(i,j ,k1))))+ &
547 & (hz(i,j,k)+hz(i,j-1,k))* &
548 & (tl_dtde(i,j,k1)- &
549 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
550 & (tl_dtdz(i,j-1,k1)+ &
551 & tl_dtdz(i,j ,k2))+ &
552 & max(dzde(i,j,k1),0.0_r8)* &
553 & (tl_dtdz(i,j-1,k2)+ &
554 & tl_dtdz(i,j ,k1)))- &
556 & sign(0.5_r8,-dzde(i,j,k1)))* &
558 & (dtdz(i,j-1,k1)+dtdz(i,j,k2))+ &
560 & sign(0.5_r8, dzde(i,j,k1)))* &
562 & (dtdz(i,j-1,k2)+dtdz(i,j,k1)))))- &
565 & (hz(i,j,k)+hz(i,j-1,k))* &
567 & (min(dzde(i,j,k1),0.0_r8)* &
570 & max(dzde(i,j,k1),0.0_r8)* &
580# ifdef TS_U3ADV_SPLIT
581 difx=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
582 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
583 dife=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
584 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
586 difx=0.5_r8*diff3d_r(i,j,k)
590 difx=0.5_r8*diff4(i,j,itrc)
593 cff1=min(dzdx(i ,j,k1),0.0_r8)
594 cff2=min(dzdx(i+1,j,k2),0.0_r8)
595 cff3=max(dzdx(i ,j,k2),0.0_r8)
596 cff4=max(dzdx(i+1,j,k1),0.0_r8)
597 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx(i ,j,k1)))* &
599 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx(i+1,j,k2)))* &
601 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx(i ,j,k2)))* &
603 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx(i+1,j,k1)))* &
606 & (cff1*(cff1*dtdz(i,j,k2)- &
608 & cff2*(cff2*dtdz(i,j,k2)- &
610 & cff3*(cff3*dtdz(i,j,k2)- &
612 & cff4*(cff4*dtdz(i,j,k2)- &
614 tl_fs(i,j,k2)=difx* &
615 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
617 & tl_cff2*(cff2*dtdz(i,j,k2)- &
619 & tl_cff3*(cff3*dtdz(i,j,k2)- &
621 & tl_cff4*(cff4*dtdz(i,j,k2)- &
623 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
624 & cff1*tl_dtdz(i,j,k2)- &
625 & tl_dtdx(i ,j,k1))+ &
626 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
627 & cff2*tl_dtdz(i,j,k2)- &
628 & tl_dtdx(i+1,j,k2))+ &
629 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
630 & cff3*tl_dtdz(i,j,k2)- &
631 & tl_dtdx(i ,j,k2))+ &
632 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
633 & cff4*tl_dtdz(i,j,k2)- &
634 & tl_dtdx(i+1,j,k1)))- &
637 & (cff1*(2.0_r8*cff1*dtdz(i,j,k2)- &
639 & cff2*(2.0_r8*cff2*dtdz(i,j,k2)- &
641 & cff3*(2.0_r8*cff3*dtdz(i,j,k2)- &
643 & cff4*(2.0_r8*cff4*dtdz(i,j,k2)- &
647 cff1=min(dzde(i,j ,k1),0.0_r8)
648 cff2=min(dzde(i,j+1,k2),0.0_r8)
649 cff3=max(dzde(i,j ,k2),0.0_r8)
650 cff4=max(dzde(i,j+1,k1),0.0_r8)
651 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde(i,j ,k1)))* &
653 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde(i,j+1,k2)))* &
655 tl_cff3=(0.5_r8+sign(0.5_r8, dzde(i,j ,k2)))* &
657 tl_cff4=(0.5_r8+sign(0.5_r8, dzde(i,j+1,k1)))* &
659 fs(i,j,k2)=fs(i,j,k2)+ &
661 & (cff1*(cff1*dtdz(i,j,k2)- &
663 & cff2*(cff2*dtdz(i,j,k2)- &
665 & cff3*(cff3*dtdz(i,j,k2)- &
667 & cff4*(cff4*dtdz(i,j,k2)- &
669 tl_fs(i,j,k2)=tl_fs(i,j,k2)+ &
671 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
673 & tl_cff2*(cff2*dtdz(i,j,k2)- &
675 & tl_cff3*(cff3*dtdz(i,j,k2)- &
677 & tl_cff4*(cff4*dtdz(i,j,k2)- &
679 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
680 & cff1*tl_dtdz(i,j,k2)- &
681 & tl_dtde(i,j ,k1))+ &
682 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
683 & cff2*tl_dtdz(i,j,k2)- &
684 & tl_dtde(i,j+1,k2))+ &
685 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
686 & cff3*tl_dtdz(i,j,k2)- &
687 & tl_dtde(i,j ,k2))+ &
688 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
689 & cff4*tl_dtdz(i,j,k2)- &
690 & tl_dtde(i,j+1,k1)))- &
693 & (cff1*(2.0_r8*cff1*dtdz(i,j,k2)- &
695 & cff2*(2.0_r8*cff2*dtdz(i,j,k2)- &
697 & cff3*(2.0_r8*cff3*dtdz(i,j,k2)- &
699 & cff4*(2.0_r8*cff4*dtdz(i,j,k2)- &
713 cff1=1.0_r8/hz(i,j,k)
714 tl_cff1=-cff1*cff1*tl_hz(i,j,k)+ &
718 lapt(i,j,k)=cff1*(cff* &
719 & (fx(i+1,j)-fx(i,j)+ &
720 & fe(i,j+1)-fe(i,j))+ &
721 & (fs(i,j,k2)-fs(i,j,k1)))
722 tl_lapt(i,j,k)=tl_cff1*(cff* &
723 & (fx(i+1,j)-fx(i,j)+ &
724 & fe(i,j+1)-fe(i,j))+ &
725 & (fs(i,j,k2)-fs(i,j,k1)))+ &
727 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
728 & tl_fe(i,j+1)-tl_fe(i,j))+ &
729 & (tl_fs(i,j,k2)-tl_fs(i,j,k1)))- &
742 IF (
domain(ng)%Western_Edge(tile))
THEN
746 lapt(istr-1,j,k)=0.0_r8
747 tl_lapt(istr-1,j,k)=0.0_r8
753 lapt(istr-1,j,k)=lapt(istr,j,k)
754 tl_lapt(istr-1,j,k)=tl_lapt(istr,j,k)
762 IF (
domain(ng)%Eastern_Edge(tile))
THEN
766 lapt(iend+1,j,k)=0.0_r8
767 tl_lapt(iend+1,j,k)=0.0_r8
773 lapt(iend+1,j,k)=lapt(iend,j,k)
774 tl_lapt(iend+1,j,k)=tl_lapt(iend,j,k)
782 IF (
domain(ng)%Southern_Edge(tile))
THEN
786 lapt(i,jstr-1,k)=0.0_r8
787 tl_lapt(i,jstr-1,k)=0.0_r8
793 lapt(i,jstr-1,k)=lapt(i,jstr,k)
794 tl_lapt(i,jstr-1,k)=tl_lapt(i,jstr,k)
802 IF (
domain(ng)%Northern_Edge(tile))
THEN
806 lapt(i,jend+1,k)=0.0_r8
807 tl_lapt(i,jend+1,k)=0.0_r8
813 lapt(i,jend+1,k)=lapt(i,jend,k)
814 tl_lapt(i,jend+1,k)=tl_lapt(i,jend,k)
823 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
825 lapt(istr-1,jstr-1,k)=0.5_r8* &
826 & (lapt(istr ,jstr-1,k)+ &
827 & lapt(istr-1,jstr ,k))
828 tl_lapt(istr-1,jstr-1,k)=0.5_r8* &
829 & (tl_lapt(istr ,jstr-1,k)+ &
830 & tl_lapt(istr-1,jstr ,k))
837 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
839 lapt(iend+1,jstr-1,k)=0.5_r8* &
840 & (lapt(iend ,jstr-1,k)+ &
841 & lapt(iend+1,jstr ,k))
842 tl_lapt(iend+1,jstr-1,k)=0.5_r8* &
843 & (tl_lapt(iend ,jstr-1,k)+ &
844 & tl_lapt(iend+1,jstr ,k))
851 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
853 lapt(istr-1,jend+1,k)=0.5_r8* &
854 & (lapt(istr ,jend+1,k)+ &
855 & lapt(istr-1,jend ,k))
856 tl_lapt(istr-1,jend+1,k)=0.5_r8* &
857 & (tl_lapt(istr ,jend+1,k)+ &
858 & tl_lapt(istr-1,jend ,k))
865 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
867 lapt(iend+1,jend+1,k)=0.5_r8* &
868 & (lapt(iend ,jend+1,k)+ &
869 & lapt(iend+1,jend ,k))
870 tl_lapt(iend+1,jend+1,k)=0.5_r8* &
871 & (tl_lapt(iend ,jend+1,k)+ &
872 & tl_lapt(iend+1,jend ,k))
881 k_loop2:
DO k=0,n(ng)
887 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
891#ifdef WET_DRY_NOT_YET
892 cff=cff*umask_wet(i,j)
894 dzdx(i,j,k2)=cff*(z_r(i ,j,k+1)- &
896 tl_dzdx(i,j,k2)=cff*(tl_z_r(i ,j,k+1)- &
898 dtdx(i,j,k2)=cff*(lapt(i ,j,k+1)- &
900 tl_dtdx(i,j,k2)=cff*(tl_lapt(i ,j,k+1)- &
901 & tl_lapt(i-1,j,k+1))
906 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
910#ifdef WET_DRY_NOT_YET
911 cff=cff*vmask_wet(i,j)
913 dzde(i,j,k2)=cff*(z_r(i,j ,k+1)- &
915 tl_dzde(i,j,k2)=cff*(tl_z_r(i,j ,k+1)- &
917 dtde(i,j,k2)=cff*(lapt(i,j ,k+1)- &
919 tl_dtde(i,j,k2)=cff*(tl_lapt(i,j ,k+1)- &
920 & tl_lapt(i,j-1,k+1))
924 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
928 tl_dtdz(i,j,k2)=0.0_r8
936 cff=1.0_r8/(z_r(i,j,k+1)- &
938 tl_cff=-cff*cff*(tl_z_r(i,j,k+1)- &
943 dtdz(i,j,k2)=cff*(lapt(i,j,k+1)- &
945 tl_dtdz(i,j,k2)=tl_cff*(lapt(i,j,k+1)- &
947 & cff*(tl_lapt(i,j,k+1)- &
948 & tl_lapt(i,j,k ))- &
963# ifdef TS_U3ADV_SPLIT
964 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
966 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
970 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
984 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
986 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
989 & max(dzdx(i,j,k1),0.0_r8)* &
991 & dtdz(i ,j,k1))))+ &
992 & (hz(i,j,k)+hz(i-1,j,k))* &
993 & (tl_dtdx(i,j,k1)- &
994 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
995 & (tl_dtdz(i-1,j,k1)+ &
996 & tl_dtdz(i ,j,k2))+ &
997 & max(dzdx(i,j,k1),0.0_r8)* &
998 & (tl_dtdz(i-1,j,k2)+ &
999 & tl_dtdz(i ,j,k1)))- &
1000 & 0.5_r8*((0.5_r8+ &
1001 & sign(0.5_r8,-dzdx(i,j,k1)))* &
1002 & tl_dzdx(i,j,k1)* &
1003 & (dtdz(i-1,j,k1)+dtdz(i,j,k2))+ &
1005 & sign(0.5_r8, dzdx(i,j,k1)))* &
1006 & tl_dzdx(i,j,k1)* &
1007 & (dtdz(i-1,j,k2)+dtdz(i,j,k1)))))- &
1010 & (hz(i,j,k)+hz(i-1,j,k))* &
1012 & (min(dzdx(i,j,k1),0.0_r8)* &
1013 & (dtdz(i-1,j,k1)+ &
1015 & max(dzdx(i,j,k1),0.0_r8)* &
1016 & (dtdz(i-1,j,k2)+ &
1024# ifdef TS_U3ADV_SPLIT
1025 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
1027 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
1031 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
1045 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
1047 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
1048 & (dtdz(i,j-1,k1)+ &
1050 & max(dzde(i,j,k1),0.0_r8)* &
1051 & (dtdz(i,j-1,k2)+ &
1052 & dtdz(i,j ,k1))))+ &
1053 & (hz(i,j,k)+hz(i,j-1,k))* &
1054 & (tl_dtde(i,j,k1)- &
1055 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
1056 & (tl_dtdz(i,j-1,k1)+ &
1057 & tl_dtdz(i,j ,k2))+ &
1058 & max(dzde(i,j,k1),0.0_r8)* &
1059 & (tl_dtdz(i,j-1,k2)+ &
1060 & tl_dtdz(i,j ,k1)))- &
1061 & 0.5_r8*((0.5_r8+ &
1062 & sign(0.5_r8,-dzde(i,j,k1)))* &
1063 & tl_dzde(i,j,k1)* &
1064 & (dtdz(i,j-1,k1)+dtdz(i,j,k2))+ &
1066 & sign(0.5_r8, dzde(i,j,k1)))* &
1067 & tl_dzde(i,j,k1)* &
1068 & (dtdz(i,j-1,k2)+dtdz(i,j,k1)))))- &
1071 & (hz(i,j,k)+hz(i,j-1,k))* &
1073 & (min(dzde(i,j,k1),0.0_r8)* &
1074 & (dtdz(i,j-1,k1)+ &
1076 & max(dzde(i,j,k1),0.0_r8)* &
1077 & (dtdz(i,j-1,k2)+ &
1082 IF (k.lt.n(ng))
THEN
1086# ifdef TS_U3ADV_SPLIT
1087 difx=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
1088 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
1089 dife=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
1090 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
1092 difx=0.5_r8*diff3d_r(i,j,k)
1096 difx=0.5_r8*diff4(i,j,itrc)
1099 cff1=min(dzdx(i ,j,k1),0.0_r8)
1100 cff2=min(dzdx(i+1,j,k2),0.0_r8)
1101 cff3=max(dzdx(i ,j,k2),0.0_r8)
1102 cff4=max(dzdx(i+1,j,k1),0.0_r8)
1103 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx(i ,j,k1)))* &
1105 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx(i+1,j,k2)))* &
1107 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx(i ,j,k2)))* &
1109 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx(i+1,j,k1)))* &
1122 tl_fs(i,j,k2)=difx* &
1123 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
1125 & tl_cff2*(cff2*dtdz(i,j,k2)- &
1126 & dtdx(i+1,j,k2))+ &
1127 & tl_cff3*(cff3*dtdz(i,j,k2)- &
1129 & tl_cff4*(cff4*dtdz(i,j,k2)- &
1130 & dtdx(i+1,j,k1))+ &
1131 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
1132 & cff1*tl_dtdz(i,j,k2)- &
1133 & tl_dtdx(i ,j,k1))+ &
1134 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
1135 & cff2*tl_dtdz(i,j,k2)- &
1136 & tl_dtdx(i+1,j,k2))+ &
1137 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
1138 & cff3*tl_dtdz(i,j,k2)- &
1139 & tl_dtdx(i ,j,k2))+ &
1140 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
1141 & cff4*tl_dtdz(i,j,k2)- &
1142 & tl_dtdx(i+1,j,k1)))- &
1145 & (cff1*(2.0_r8*cff1*dtdz(i,j,k2)- &
1147 & cff2*(2.0_r8*cff2*dtdz(i,j,k2)- &
1148 & dtdx(i+1,j,k2))+ &
1149 & cff3*(2.0_r8*cff3*dtdz(i,j,k2)- &
1151 & cff4*(2.0_r8*cff4*dtdz(i,j,k2)- &
1155 cff1=min(dzde(i,j ,k1),0.0_r8)
1156 cff2=min(dzde(i,j+1,k2),0.0_r8)
1157 cff3=max(dzde(i,j ,k2),0.0_r8)
1158 cff4=max(dzde(i,j+1,k1),0.0_r8)
1159 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde(i,j ,k1)))* &
1161 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde(i,j+1,k2)))* &
1163 tl_cff3=(0.5_r8+sign(0.5_r8, dzde(i,j ,k2)))* &
1165 tl_cff4=(0.5_r8+sign(0.5_r8, dzde(i,j+1,k1)))* &
1178 tl_fs(i,j,k2)=tl_fs(i,j,k2)+ &
1180 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
1182 & tl_cff2*(cff2*dtdz(i,j,k2)- &
1183 & dtde(i,j+1,k2))+ &
1184 & tl_cff3*(cff3*dtdz(i,j,k2)- &
1186 & tl_cff4*(cff4*dtdz(i,j,k2)- &
1187 & dtde(i,j+1,k1))+ &
1188 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
1189 & cff1*tl_dtdz(i,j,k2)- &
1190 & tl_dtde(i,j ,k1))+ &
1191 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
1192 & cff2*tl_dtdz(i,j,k2)- &
1193 & tl_dtde(i,j+1,k2))+ &
1194 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
1195 & cff3*tl_dtdz(i,j,k2)- &
1196 & tl_dtde(i,j ,k2))+ &
1197 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
1198 & cff4*tl_dtdz(i,j,k2)- &
1199 & tl_dtde(i,j+1,k1)))- &
1202 & (cff1*(2.0_r8*cff1*dtdz(i,j,k2)- &
1204 & cff2*(2.0_r8*cff2*dtdz(i,j,k2)- &
1205 & dtde(i,j+1,k2))+ &
1206 & cff3*(2.0_r8*cff3*dtdz(i,j,k2)- &
1208 & cff4*(2.0_r8*cff4*dtdz(i,j,k2)- &
1224 tl_cff=
dt(ng)*pm(i,j)*pn(i,j)* &
1225 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
1226 & tl_fe(i,j+1)-tl_fe(i,j))+ &
1227 &
dt(ng)*(tl_fs(i,j,k2)-tl_fs(i,j,k1))
1230 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)-tl_cff
1231#ifdef DIAGNOSTICS_TS