103 & LBi, UBi, LBj, UBj, &
104 & IminS, ImaxS, JminS, JmaxS, &
105 & nrhs, nstp, nnew, &
109#ifdef WET_DRY_NOT_YET
110 & umask_wet, vmask_wet, &
112 & om_v, on_u, pm, pn, &
116# ifdef TS_U3ADV_SPLIT
117 & diff3d_u, diff3d_v, &
140 integer,
intent(in) :: ng, tile
141 integer,
intent(in) :: LBi, UBi, LBj, UBj
142 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
143 integer,
intent(in) :: nrhs, nstp, nnew
147 real(r8),
intent(in) :: umask(LBi:,LBj:)
148 real(r8),
intent(in) :: vmask(LBi:,LBj:)
150# ifdef WET_DRY_NOT_YET
151 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
152 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
155# ifdef TS_U3ADV_SPLIT
156 real(r8),
intent(in) :: diff3d_u(LBi:,LBj:,:)
157 real(r8),
intent(in) :: diff3d_v(LBi:,LBj:,:)
159 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
162 real(r8),
intent(in) :: diff4(LBi:,LBj:,:)
164 real(r8),
intent(in) :: om_v(LBi:,LBj:)
165 real(r8),
intent(in) :: on_u(LBi:,LBj:)
166 real(r8),
intent(in) :: pm(LBi:,LBj:)
167 real(r8),
intent(in) :: pn(LBi:,LBj:)
168 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
169 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
170 real(r8),
intent(in) :: pden(LBi:,LBj:,:)
171 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
173 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
175 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
176 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
177 real(r8),
intent(in) :: tl_pden(LBi:,LBj:,:)
178# ifdef DIAGNOSTICS_TS
179 real(r8),
intent(inout) :: DiaTwrk(LBi:,LBj:,:,:,:)
182 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
185 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
186 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
188# ifdef WET_DRY_NOT_YET
189 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
190 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
193# ifdef TS_U3ADV_SPLIT
194 real(r8),
intent(in) :: diff3d_u(LBi:UBi,LBj:UBj,N(ng))
195 real(r8),
intent(in) :: diff3d_v(LBi:UBi,LBj:UBj,N(ng))
197 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
200 real(r8),
intent(in) :: diff4(LBi:UBi,LBj:UBj,NT(ng))
202 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
203 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
204 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
205 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
206 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
207 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
208 real(r8),
intent(in) :: pden(LBi:UBi,LBj:UBj,N(ng))
209 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
211 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
213 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
214 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
215 real(r8),
intent(in) :: tl_pden(LBi:UBi,LBj:UBj,N(ng))
216# ifdef DIAGNOSTICS_TS
220 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
225 integer :: Imin, Imax, Jmin, Jmax
226 integer :: i, itrc, j, k, k1, k2
228 real(r8),
parameter :: eps = 0.5_r8
229 real(r8),
parameter :: small = 1.0e-14_r8
230 real(r8),
parameter :: slope_max = 0.0001_r8
231 real(r8),
parameter :: strat_min = 0.1_r8
233 real(r8) :: cff, cff1, cff2, cff3, cff4, dife, difx
234 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
236 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapT
238 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: tl_LapT
240 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
241 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
243 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
244 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
246 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: FS
247 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dRde
248 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dRdx
249 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTde
250 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdr
251 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdx
253 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_FS
254 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dRde
255 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dRdx
256 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTde
257 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTdr
258 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTdx
260#include "set_bounds.h"
275 imax=min(iend+1,
lm(ng))
282 jmax=min(jend+1,
mm(ng))
293#ifdef TS_MIX_STABILITY
299 t_loop :
DO itrc=1,nt(ng)
301 k_loop1 :
DO k=0,n(ng)
307 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
311#ifdef WET_DRY_NOT_YET
312 cff=cff*umask_wet(i,j)
314 drdx(i,j,k2)=cff*(pden(i ,j,k+1)- &
316 tl_drdx(i,j,k2)=cff*(tl_pden(i ,j,k+1)- &
317 & tl_pden(i-1,j,k+1))
318#if defined TS_MIX_STABILITY
319 dtdx(i,j,k2)=cff*(0.75_r8*(t(i ,j,k+1,nrhs,itrc)- &
320 & t(i-1,j,k+1,nrhs,itrc))+ &
321 & 0.25_r8*(t(i ,j,k+1,nstp,itrc)- &
322 & t(i-1,j,k+1,nstp,itrc)))
323 tl_dtdx(i,j,k2)=cff* &
324 & (0.75_r8*(tl_t(i ,j,k+1,nrhs,itrc)- &
325 & tl_t(i-1,j,k+1,nrhs,itrc))+ &
326 & 0.25_r8*(tl_t(i ,j,k+1,nstp,itrc)- &
327 & tl_t(i-1,j,k+1,nstp,itrc)))
328#elif defined TS_MIX_CLIMA
330 dtdx(i,j,k2)=cff*((t(i ,j,k+1,nrhs,itrc)- &
331 & tclm(i ,j,k+1,itrc))- &
332 & (t(i-1,j,k+1,nrhs,itrc)- &
333 & tclm(i-1,j,k+1,itrc)))
335 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
336 & t(i-1,j,k+1,nrhs,itrc))
338 tl_dtdx(i,j,k2)=cff*(tl_t(i ,j,k+1,nrhs,itrc)- &
339 & tl_t(i-1,j,k+1,nrhs,itrc))
341 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
342 & t(i-1,j,k+1,nrhs,itrc))
343 tl_dtdx(i,j,k2)=cff*(tl_t(i ,j,k+1,nrhs,itrc)- &
344 & tl_t(i-1,j,k+1,nrhs,itrc))
350 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
354#ifdef WET_DRY_NOT_YET
355 cff=cff*vmask_wet(i,j)
357 drde(i,j,k2)=cff*(pden(i,j ,k+1)- &
359 tl_drde(i,j,k2)=cff*(tl_pden(i,j ,k+1)- &
360 & tl_pden(i,j-1,k+1))
361#if defined TS_MIX_STABILITY
362 dtde(i,j,k2)=cff*(0.75_r8*(t(i,j ,k+1,nrhs,itrc)- &
363 & t(i,j-1,k+1,nrhs,itrc))+ &
364 & 0.25_r8*(t(i,j ,k+1,nstp,itrc)- &
365 & t(i,j-1,k+1,nstp,itrc)))
366 tl_dtde(i,j,k2)=cff* &
367 & (0.75_r8*(tl_t(i,j ,k+1,nrhs,itrc)- &
368 & tl_t(i,j-1,k+1,nrhs,itrc))+ &
369 & 0.25_r8*(tl_t(i,j ,k+1,nstp,itrc)- &
370 & tl_t(i,j-1,k+1,nstp,itrc)))
371#elif defined TS_MIX_CLIMA
373 dtde(i,j,k2)=cff*((t(i,j ,k+1,nrhs,itrc)- &
374 & tclm(i,j ,k+1,itrc))- &
375 & (t(i,j-1,k+1,nrhs,itrc)- &
376 & tclm(i,j-1,k+1,itrc)))
378 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
379 & t(i,j-1,k+1,nrhs,itrc))
381 tl_dtde(i,j,k2)=cff*(tl_t(i,j ,k+1,nrhs,itrc)- &
382 & tl_t(i,j-1,k+1,nrhs,itrc))
384 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
385 & t(i,j-1,k+1,nrhs,itrc))
386 tl_dtde(i,j,k2)=cff*(tl_t(i,j ,k+1,nrhs,itrc)- &
387 & tl_t(i,j-1,k+1,nrhs,itrc))
392 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
396 tl_dtdr(i,j,k2)=0.0_r8
404#if defined TS_MIX_MAX_SLOPE
405 cff1=sqrt(drdx(i,j,k2)**2+drdx(i+1,j,k2)**2+ &
406 & drdx(i,j,k1)**2+drdx(i+1,j,k1)**2+ &
407 & drde(i,j,k2)**2+drde(i,j+1,k2)**2+ &
408 & drde(i,j,k1)**2+drde(i,j+1,k1)**2)
409 IF (cff1.ne.0.0_r8)
THEN
410 tl_cff1=(drdx(i ,j,k2)*tl_drdx(i ,j,k2)+ &
411 & drdx(i+1,j,k2)*tl_drdx(i+1,j,k2)+ &
412 & drdx(i ,j,k1)*tl_drdx(i ,j,k1)+ &
413 & drdx(i+1,j,k1)*tl_drdx(i+1,j,k1)+ &
414 & drde(i,j ,k2)*tl_drde(i,j ,k2)+ &
415 & drde(i,j+1,k2)*tl_drde(i,j+1,k2)+ &
416 & drde(i,j ,k1)*tl_drde(i,j ,k1)+ &
417 & drde(i,j+1,k1)*tl_drde(i,j+1,k1))/cff1
421 cff2=0.25_r8*slope_max* &
422 & (z_r(i,j,k+1)-z_r(i,j,k))*cff1
423 tl_cff2=0.25_r8*slope_max* &
424 & ((tl_z_r(i,j,k+1)-tl_z_r(i,j,k))*cff1+ &
425 & (z_r(i,j,k+1)-z_r(i,j,k))*tl_cff1)
426 cff3=max(pden(i,j,k)-pden(i,j,k+1),small)
427 tl_cff3=(0.5_r8+sign(0.5_r8,pden(i,j,k)-pden(i,j,k+1)- &
429 & (tl_pden(i,j,k)-tl_pden(i,j,k+1))
431 tl_cff4=(0.5_r8+sign(0.5_r8,cff2-cff3))*tl_cff2+ &
432 & (0.5_r8-sign(0.5_r8,cff2-cff3))*tl_cff3
434 tl_cff=cff*cff*tl_cff4
435#elif defined TS_MIX_MIN_STRAT
436 cff1=max(pden(i,j,k)-pden(i,j,k+1), &
437 & strat_min*(z_r(i,j,k+1)-z_r(i,j,k)))
438 tl_cff1=(0.5_r8+sign(0.5_r8, &
439 & pden(i,j,k)-pden(i,j,k+1)- &
440 & strat_min*(z_r(i,j,k+1)- &
442 & (tl_pden(i,j,k)-tl_pden(i,j,k+1))+ &
443 & (0.5_r8-sign(0.5_r8, &
444 & pden(i,j,k)-pden(i,j,k+1)- &
445 & strat_min*(z_r(i,j,k+1)- &
447 & (strat_min*(tl_z_r(i,j,k+1)-tl_z_r(i,j,k )))
449 tl_cff=cff*cff*tl_cff1
451 cff1=max(pden(i,j,k)-pden(i,j,k+1),eps)
452 tl_cff1=(0.5_r8+sign(0.5_r8, &
453 & pden(i,j,k)-pden(i,j,k+1)-eps))* &
454 & (tl_pden(i,j,k)-tl_pden(i,j,k+1))
456 tl_cff=cff*cff*tl_cff1
458#if defined TS_MIX_STABILITY
459 dtdr(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
460 & t(i,j,k ,nrhs,itrc))+ &
461 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
462 & t(i,j,k ,nstp,itrc)))
463 tl_dtdr(i,j,k2)=tl_cff* &
464 & (0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
465 & t(i,j,k ,nrhs,itrc))+ &
466 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
467 & t(i,j,k ,nstp,itrc)))+ &
469 & (0.75_r8*(tl_t(i,j,k+1,nrhs,itrc)- &
470 & tl_t(i,j,k ,nrhs,itrc))+ &
471 & 0.25_r8*(tl_t(i,j,k+1,nstp,itrc)- &
472 & tl_t(i,j,k ,nstp,itrc)))
473#elif defined TS_MIX_CLIMA
475 dtdr(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
476 & tclm(i,j,k+1,itrc))- &
477 & (t(i,j,k ,nrhs,itrc)- &
478 & tclm(i,j,k ,itrc)))
479 tl_dtdr(i,j,k2)=tl_cff*((t(i,j,k+1,nrhs,itrc)- &
480 & tclm(i,j,k+1,itrc))- &
481 & (t(i,j,k ,nrhs,itrc)- &
482 & tclm(i,j,k ,itrc)))+ &
483 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
484 & tl_t(i,j,k ,nrhs,itrc))
486 dtdr(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
487 & t(i,j,k ,nrhs,itrc))
488 tl_dtdr(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
489 & t(i,j,k ,nrhs,itrc))+ &
490 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
491 & tl_t(i,j,k ,nrhs,itrc))
494 dtdr(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
495 & t(i,j,k ,nrhs,itrc))
496 tl_dtdr(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
497 & t(i,j,k ,nrhs,itrc))+ &
498 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
499 & tl_t(i,j,k ,nrhs,itrc))
501 fs(i,j,k2)=cff*(z_r(i,j,k+1)- &
503 tl_fs(i,j,k2)=tl_cff*(z_r(i,j,k+1)- &
505 & cff*(tl_z_r(i,j,k+1)- &
514# ifdef TS_U3ADV_SPLIT
515 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
517 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
521 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
525 & (hz(i,j,k)+hz(i-1,j,k))* &
527 & 0.5_r8*(max(drdx(i,j,k1),0.0_r8)* &
530 & min(drdx(i,j,k1),0.0_r8)* &
534 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
536 & 0.5_r8*(max(drdx(i,j,k1),0.0_r8)* &
539 & min(drdx(i,j,k1),0.0_r8)* &
541 & dtdr(i ,j,k1))))+ &
542 & (hz(i,j,k)+hz(i-1,j,k))* &
543 & (tl_dtdx(i,j,k1)- &
544 & 0.5_r8*(max(drdx(i,j,k1),0.0_r8)* &
545 & (tl_dtdr(i-1,j,k1)+ &
546 & tl_dtdr(i ,j,k2))+ &
547 & min(drdx(i,j,k1),0.0_r8)* &
548 & (tl_dtdr(i-1,j,k2)+ &
549 & tl_dtdr(i ,j,k1)))- &
551 & sign(0.5_r8, drdx(i,j,k1)))* &
553 & (dtdr(i-1,j,k1)+dtdr(i,j,k2))+ &
555 & sign(0.5_r8,-drdx(i,j,k1)))* &
557 & (dtdr(i-1,j,k2)+dtdr(i,j,k1)))))
563# ifdef TS_U3ADV_SPLIT
564 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
566 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
570 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
574 & (hz(i,j,k)+hz(i,j-1,k))* &
576 & 0.5_r8*(max(drde(i,j,k1),0.0_r8)* &
579 & min(drde(i,j,k1),0.0_r8)* &
583 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
585 & 0.5_r8*(max(drde(i,j,k1),0.0_r8)* &
588 & min(drde(i,j,k1),0.0_r8)* &
590 & dtdr(i,j ,k1))))+ &
591 & (hz(i,j,k)+hz(i,j-1,k))* &
592 & (tl_dtde(i,j,k1)- &
593 & 0.5_r8*(max(drde(i,j,k1),0.0_r8)* &
594 & (tl_dtdr(i,j-1,k1)+ &
595 & tl_dtdr(i,j ,k2))+ &
596 & min(drde(i,j,k1),0.0_r8)* &
597 & (tl_dtdr(i,j-1,k2)+ &
598 & tl_dtdr(i,j ,k1)))- &
600 & sign(0.5_r8, drde(i,j,k1)))* &
602 & (dtdr(i,j-1,k1)+dtdr(i,j,k2))+ &
604 & sign(0.5_r8,-drde(i,j,k1)))* &
606 & (dtdr(i,j-1,k2)+dtdr(i,j,k1)))))
613# ifdef TS_U3ADV_SPLIT
614 difx=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
615 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
616 dife=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
617 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
619 difx=0.5_r8*diff3d_r(i,j,k)
623 difx=0.5_r8*diff4(i,j,itrc)
626 cff1=max(drdx(i ,j,k1),0.0_r8)
627 cff2=max(drdx(i+1,j,k2),0.0_r8)
628 cff3=min(drdx(i ,j,k2),0.0_r8)
629 cff4=min(drdx(i+1,j,k1),0.0_r8)
630 tl_cff1=(0.5_r8+sign(0.5_r8, drdx(i ,j,k1)))* &
632 tl_cff2=(0.5_r8+sign(0.5_r8, drdx(i+1,j,k2)))* &
634 tl_cff3=(0.5_r8+sign(0.5_r8,-drdx(i ,j,k2)))* &
636 tl_cff4=(0.5_r8+sign(0.5_r8,-drdx(i+1,j,k1)))* &
639 & (cff1*(cff1*dtdr(i,j,k2)-dtdx(i ,j,k1))+ &
640 & cff2*(cff2*dtdr(i,j,k2)-dtdx(i+1,j,k2))+ &
641 & cff3*(cff3*dtdr(i,j,k2)-dtdx(i ,j,k2))+ &
642 & cff4*(cff4*dtdr(i,j,k2)-dtdx(i+1,j,k1)))
644 & (tl_cff1*(cff1*dtdr(i ,j,k2)- &
646 & tl_cff2*(cff2*dtdr(i,j,k2)- &
648 & tl_cff3*(cff3*dtdr(i,j,k2)- &
650 & tl_cff4*(cff4*dtdr(i,j,k2)- &
652 & cff1*(tl_cff1*dtdr(i,j,k2)+ &
653 & cff1*tl_dtdr(i,j,k2)- &
654 & tl_dtdx(i ,j,k1))+ &
655 & cff2*(tl_cff2*dtdr(i,j,k2)+ &
656 & cff2*tl_dtdr(i,j,k2)- &
657 & tl_dtdx(i+1,j,k2))+ &
658 & cff3*(tl_cff3*dtdr(i,j,k2)+ &
659 & cff3*tl_dtdr(i,j,k2)- &
660 & tl_dtdx(i ,j,k2))+ &
661 & cff4*(tl_cff4*dtdr(i,j,k2)+ &
662 & cff4*tl_dtdr(i,j,k2)- &
663 & tl_dtdx(i+1,j,k1)))
664 cff1=max(drde(i,j ,k1),0.0_r8)
665 cff2=max(drde(i,j+1,k2),0.0_r8)
666 cff3=min(drde(i,j ,k2),0.0_r8)
667 cff4=min(drde(i,j+1,k1),0.0_r8)
668 tl_cff1=(0.5_r8+sign(0.5_r8, drde(i,j ,k1)))* &
670 tl_cff2=(0.5_r8+sign(0.5_r8, drde(i,j+1,k2)))* &
672 tl_cff3=(0.5_r8+sign(0.5_r8,-drde(i,j ,k2)))* &
674 tl_cff4=(0.5_r8+sign(0.5_r8,-drde(i,j+1,k1)))* &
678 & (cff1*(cff1*dtdr(i,j,k2)-dtde(i,j ,k1))+ &
679 & cff2*(cff2*dtdr(i,j,k2)-dtde(i,j+1,k2))+ &
680 & cff3*(cff3*dtdr(i,j,k2)-dtde(i,j ,k2))+ &
681 & cff4*(cff4*dtdr(i,j,k2)-dtde(i,j+1,k1)))
684 & (tl_cff1*(cff1*dtdr(i,j,k2)- &
686 & tl_cff2*(cff2*dtdr(i,j,k2)- &
688 & tl_cff3*(cff3*dtdr(i,j,k2)- &
690 & tl_cff4*(cff4*dtdr(i,j,k2)- &
692 & cff1*(tl_cff1*dtdr(i,j,k2)+ &
693 & cff1*tl_dtdr(i,j,k2)- &
694 & tl_dtde(i,j ,k1))+ &
695 & cff2*(tl_cff2*dtdr(i,j,k2)+ &
696 & cff2*tl_dtdr(i,j,k2)- &
697 & tl_dtde(i,j+1,k2))+ &
698 & cff3*(tl_cff3*dtdr(i,j,k2)+ &
699 & cff3*tl_dtdr(i,j,k2)- &
700 & tl_dtde(i,j ,k2))+ &
701 & cff4*(tl_cff4*dtdr(i,j,k2)+ &
702 & cff4*tl_dtdr(i,j,k2)- &
703 & tl_dtde(i,j+1,k1)))
707 tl_fs(i,j,k2)=tl_cff*fs(i,j,k2)+ &
709 fs(i,j,k2)=cff*fs(i,j,k2)
721 cff1=1.0_r8/hz(i,j,k)
722 tl_cff1=-cff1*cff1*tl_hz(i,j,k)
723 lapt(i,j,k)=cff1*(cff* &
724 & (fx(i+1,j)-fx(i,j)+ &
725 & fe(i,j+1)-fe(i,j))+ &
726 & (fs(i,j,k2)-fs(i,j,k1)))
727 tl_lapt(i,j,k)=tl_cff1*(cff* &
728 & (fx(i+1,j)-fx(i,j)+ &
729 & fe(i,j+1)-fe(i,j))+ &
730 & (fs(i,j,k2)-fs(i,j,k1)))+ &
732 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
733 & tl_fe(i,j+1)-tl_fe(i,j))+ &
734 & (tl_fs(i,j,k2)-tl_fs(i,j,k1)))
744 IF (
domain(ng)%Western_Edge(tile))
THEN
748 lapt(istr-1,j,k)=0.0_r8
749 tl_lapt(istr-1,j,k)=0.0_r8
755 lapt(istr-1,j,k)=lapt(istr,j,k)
756 tl_lapt(istr-1,j,k)=tl_lapt(istr,j,k)
764 IF (
domain(ng)%Eastern_Edge(tile))
THEN
768 lapt(iend+1,j,k)=0.0_r8
769 tl_lapt(iend+1,j,k)=0.0_r8
775 lapt(iend+1,j,k)=lapt(iend,j,k)
776 tl_lapt(iend+1,j,k)=tl_lapt(iend,j,k)
784 IF (
domain(ng)%Southern_Edge(tile))
THEN
788 lapt(i,jstr-1,k)=0.0_r8
789 tl_lapt(i,jstr-1,k)=0.0_r8
795 lapt(i,jstr-1,k)=lapt(i,jstr,k)
796 tl_lapt(i,jstr-1,k)=tl_lapt(i,jstr,k)
804 IF (
domain(ng)%Northern_Edge(tile))
THEN
808 lapt(i,jend+1,k)=0.0_r8
809 tl_lapt(i,jend+1,k)=0.0_r8
815 lapt(i,jend+1,k)=lapt(i,jend,k)
816 tl_lapt(i,jend+1,k)=tl_lapt(i,jend,k)
825 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
827 lapt(istr-1,jstr-1,k)=0.5_r8* &
828 & (lapt(istr ,jstr-1,k)+ &
829 & lapt(istr-1,jstr ,k))
830 tl_lapt(istr-1,jstr-1,k)=0.5_r8* &
831 & (tl_lapt(istr ,jstr-1,k)+ &
832 tl_lapt(istr-1,jstr ,k))
839 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
841 lapt(iend+1,jstr-1,k)=0.5_r8* &
842 & (lapt(iend ,jstr-1,k)+ &
843 & lapt(iend+1,jstr ,k))
844 tl_lapt(iend+1,jstr-1,k)=0.5_r8* &
845 & (tl_lapt(iend ,jstr-1,k)+ &
846 & tl_lapt(iend+1,jstr ,k))
853 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
855 lapt(istr-1,jend+1,k)=0.5_r8* &
856 & (lapt(istr ,jend+1,k)+ &
857 & lapt(istr-1,jend ,k))
858 tl_lapt(istr-1,jend+1,k)=0.5_r8* &
859 & (tl_lapt(istr ,jend+1,k)+ &
860 & tl_lapt(istr-1,jend ,k))
867 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
869 lapt(iend+1,jend+1,k)=0.5_r8* &
870 & (lapt(iend ,jend+1,k)+ &
871 & lapt(iend+1,jend ,k))
872 tl_lapt(iend+1,jend+1,k)=0.5_r8* &
873 & (tl_lapt(iend ,jend+1,k)+ &
874 & tl_lapt(iend+1,jend ,k))
883 k_loop2:
DO k=0,n(ng)
889 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
893#ifdef WET_DRY_NOT_YET
894 cff=cff*umask_wet(i,j)
896 drdx(i,j,k2)=cff*(pden(i ,j,k+1)- &
898 tl_drdx(i,j,k2)=cff*(tl_pden(i ,j,k+1)- &
899 & tl_pden(i-1,j,k+1))
900 dtdx(i,j,k2)=cff*(lapt(i ,j,k+1)- &
902 tl_dtdx(i,j,k2)=cff*(tl_lapt(i ,j,k+1)- &
903 & tl_lapt(i-1,j,k+1))
908 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
912#ifdef WET_DRY_NOT_YET
913 cff=cff*vmask_wet(i,j)
915 drde(i,j,k2)=cff*(pden(i,j ,k+1)- &
917 tl_drde(i,j,k2)=cff*(tl_pden(i,j ,k+1)- &
918 & tl_pden(i,j-1,k+1))
919 dtde(i,j,k2)=cff*(lapt(i,j ,k+1)- &
921 tl_dtde(i,j,k2)=cff*(tl_lapt(i,j ,k+1)- &
922 & tl_lapt(i,j-1,k+1))
926 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
930 tl_dtdr(i,j,k2)=0.0_r8
938#if defined TS_MIX_MAX_SLOPE
939 cff1=sqrt(drdx(i,j,k2)**2+drdx(i+1,j,k2)**2+ &
940 & drdx(i,j,k1)**2+drdx(i+1,j,k1)**2+ &
941 & drde(i,j,k2)**2+drde(i,j+1,k2)**2+ &
942 & drde(i,j,k1)**2+drde(i,j+1,k1)**2)
943 IF (cff1.ne.0.0_r8)
THEN
944 tl_cff1=(drdx(i ,j,k2)*tl_drdx(i ,j,k2)+ &
945 & drdx(i+1,j,k2)*tl_drdx(i+1,j,k2)+ &
946 & drdx(i ,j,k1)*tl_drdx(i ,j,k1)+ &
947 & drdx(i+1,j,k1)*tl_drdx(i+1,j,k1)+ &
948 & drde(i,j ,k2)*tl_drde(i,j ,k2)+ &
949 & drde(i,j+1,k2)*tl_drde(i,j+1,k2)+ &
950 & drde(i,j ,k1)*tl_drde(i,j ,k1)+ &
951 & drde(i,j+1,k1)*tl_drde(i,j+1,k1))/cff1
955 cff2=0.25_r8*slope_max* &
956 & (z_r(i,j,k+1)-z_r(i,j,k))*cff1
957 tl_cff2=0.25_r8*slope_max* &
958 & ((tl_z_r(i,j,k+1)-tl_z_r(i,j,k))*cff1+ &
959 & (z_r(i,j,k+1)-z_r(i,j,k))*tl_cff1)
960 cff3=max(pden(i,j,k)-pden(i,j,k+1),small)
961 tl_cff3=(0.5_r8+sign(0.5_r8,pden(i,j,k)-pden(i,j,k+1)- &
963 & (tl_pden(i,j,k)-tl_pden(i,j,k+1))
965 tl_cff4=(0.5_r8+sign(0.5_r8,cff2-cff3))*tl_cff2+ &
966 & (0.5_r8-sign(0.5_r8,cff2-cff3))*tl_cff3
968 tl_cff=cff*cff*tl_cff4
969#elif defined TS_MIX_MIN_STRAT
970 cff1=max(pden(i,j,k)-pden(i,j,k+1), &
971 & strat_min*(z_r(i,j,k+1)-z_r(i,j,k)))
972 tl_cff1=(0.5_r8+sign(0.5_r8, &
973 & pden(i,j,k)-pden(i,j,k+1)- &
974 & strat_min*(z_r(i,j,k+1)- &
976 & (tl_pden(i,j,k)-tl_pden(i,j,k+1))+ &
977 & (0.5_r8-sign(0.5_r8, &
978 & pden(i,j,k)-pden(i,j,k+1)- &
979 & strat_min*(z_r(i,j,k+1)- &
981 & (strat_min*(tl_z_r(i,j,k+1)-tl_z_r(i,j,k )))
983 tl_cff=cff*cff*tl_cff1
985 cff1=max(pden(i,j,k)-pden(i,j,k+1),eps)
986 tl_cff1=(0.5_r8+sign(0.5_r8, &
987 & pden(i,j,k)-pden(i,j,k+1)-eps))* &
988 & (tl_pden(i,j,k)-tl_pden(i,j,k+1))
990 tl_cff=cff*cff*tl_cff1
992 dtdr(i,j,k2)=cff*(lapt(i,j,k+1)- &
994 tl_dtdr(i,j,k2)=tl_cff*(lapt(i,j,k+1)- &
996 & cff*(tl_lapt(i,j,k+1)- &
998 fs(i,j,k2)=cff*(z_r(i,j,k+1)- &
1000 tl_fs(i,j,k2)=tl_cff*(z_r(i,j,k+1)- &
1002 & cff*(tl_z_r(i,j,k+1)- &
1015# ifdef TS_U3ADV_SPLIT
1016 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
1018 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
1022 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
1036 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
1038 & 0.5_r8*(max(drdx(i,j,k1),0.0_r8)* &
1039 & (dtdr(i-1,j,k1)+ &
1041 & min(drdx(i,j,k1),0.0_r8)* &
1042 & (dtdr(i-1,j,k2)+ &
1043 & dtdr(i ,j,k1))))+ &
1044 & (hz(i,j,k)+hz(i-1,j,k))* &
1045 & (tl_dtdx(i,j,k1)- &
1046 & 0.5_r8*(max(drdx(i,j,k1),0.0_r8)* &
1047 & (tl_dtdr(i-1,j,k1)+ &
1048 & tl_dtdr(i ,j,k2))+ &
1049 & min(drdx(i,j,k1),0.0_r8)* &
1050 & (tl_dtdr(i-1,j,k2)+ &
1051 & tl_dtdr(i ,j,k1)))- &
1052 & 0.5_r8*((0.5_r8+ &
1053 & sign(0.5_r8, drdx(i,j,k1)))* &
1054 & tl_drdx(i,j,k1)* &
1055 & (dtdr(i-1,j,k1)+dtdr(i,j,k2))+ &
1057 & sign(0.5_r8,-drdx(i,j,k1)))* &
1058 & tl_drdx(i,j,k1)* &
1059 & (dtdr(i-1,j,k2)+dtdr(i,j,k1)))))
1065# ifdef TS_U3ADV_SPLIT
1066 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
1068 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
1072 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
1086 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
1088 & 0.5_r8*(max(drde(i,j,k1),0.0_r8)* &
1089 & (dtdr(i,j-1,k1)+ &
1091 & min(drde(i,j,k1),0.0_r8)* &
1092 & (dtdr(i,j-1,k2)+ &
1093 & dtdr(i,j ,k1))))+ &
1094 & (hz(i,j,k)+hz(i,j-1,k))* &
1095 & (tl_dtde(i,j,k1)- &
1096 & 0.5_r8*(max(drde(i,j,k1),0.0_r8)* &
1097 & (tl_dtdr(i,j-1,k1)+ &
1098 & tl_dtdr(i,j ,k2))+ &
1099 & min(drde(i,j,k1),0.0_r8)* &
1100 & (tl_dtdr(i,j-1,k2)+ &
1101 & tl_dtdr(i,j ,k1)))- &
1102 & 0.5_r8*((0.5_r8+ &
1103 & sign(0.5_r8, drde(i,j,k1)))* &
1104 & tl_drde(i,j,k1)* &
1105 & (dtdr(i,j-1,k1)+dtdr(i,j,k2))+ &
1107 & sign(0.5_r8,-drde(i,j,k1)))* &
1108 & tl_drde(i,j,k1)* &
1109 & (dtdr(i,j-1,k2)+dtdr(i,j,k1)))))
1112 IF (k.lt.n(ng))
THEN
1116# ifdef TS_U3ADV_SPLIT
1117 difx=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
1118 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
1119 dife=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
1120 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
1122 difx=0.5_r8*diff3d_r(i,j,k)
1126 difx=0.5_r8*diff4(i,j,itrc)
1129 cff1=max(drdx(i ,j,k1),0.0_r8)
1130 cff2=max(drdx(i+1,j,k2),0.0_r8)
1131 cff3=min(drdx(i ,j,k2),0.0_r8)
1132 cff4=min(drdx(i+1,j,k1),0.0_r8)
1133 tl_cff1=(0.5_r8+sign(0.5_r8, drdx(i ,j,k1)))* &
1135 tl_cff2=(0.5_r8+sign(0.5_r8, drdx(i+1,j,k2)))* &
1137 tl_cff3=(0.5_r8+sign(0.5_r8,-drdx(i ,j,k2)))* &
1139 tl_cff4=(0.5_r8+sign(0.5_r8,-drdx(i+1,j,k1)))* &
1142 & (cff1*(cff1*dtdr(i,j,k2)-dtdx(i ,j,k1))+ &
1143 & cff2*(cff2*dtdr(i,j,k2)-dtdx(i+1,j,k2))+ &
1144 & cff3*(cff3*dtdr(i,j,k2)-dtdx(i ,j,k2))+ &
1145 & cff4*(cff4*dtdr(i,j,k2)-dtdx(i+1,j,k1)))
1147 & (tl_cff1*(cff1*dtdr(i ,j,k2)- &
1149 & tl_cff2*(cff2*dtdr(i,j,k2)- &
1150 & dtdx(i+1,j,k2))+ &
1151 & tl_cff3*(cff3*dtdr(i,j,k2)- &
1153 & tl_cff4*(cff4*dtdr(i,j,k2)- &
1154 & dtdx(i+1,j,k1))+ &
1155 & cff1*(tl_cff1*dtdr(i,j,k2)+ &
1156 & cff1*tl_dtdr(i,j,k2)- &
1157 & tl_dtdx(i ,j,k1))+ &
1158 & cff2*(tl_cff2*dtdr(i,j,k2)+ &
1159 & cff2*tl_dtdr(i,j,k2)- &
1160 & tl_dtdx(i+1,j,k2))+ &
1161 & cff3*(tl_cff3*dtdr(i,j,k2)+ &
1162 & cff3*tl_dtdr(i,j,k2)- &
1163 & tl_dtdx(i ,j,k2))+ &
1164 & cff4*(tl_cff4*dtdr(i,j,k2)+ &
1165 & cff4*tl_dtdr(i,j,k2)- &
1166 & tl_dtdx(i+1,j,k1)))
1167 cff1=max(drde(i,j ,k1),0.0_r8)
1168 cff2=max(drde(i,j+1,k2),0.0_r8)
1169 cff3=min(drde(i,j ,k2),0.0_r8)
1170 cff4=min(drde(i,j+1,k1),0.0_r8)
1171 tl_cff1=(0.5_r8+sign(0.5_r8, drde(i,j ,k1)))* &
1173 tl_cff2=(0.5_r8+sign(0.5_r8, drde(i,j+1,k2)))* &
1175 tl_cff3=(0.5_r8+sign(0.5_r8,-drde(i,j ,k2)))* &
1177 tl_cff4=(0.5_r8+sign(0.5_r8,-drde(i,j+1,k1)))* &
1181 & (cff1*(cff1*dtdr(i,j,k2)-dtde(i,j ,k1))+ &
1182 & cff2*(cff2*dtdr(i,j,k2)-dtde(i,j+1,k2))+ &
1183 & cff3*(cff3*dtdr(i,j,k2)-dtde(i,j ,k2))+ &
1184 & cff4*(cff4*dtdr(i,j,k2)-dtde(i,j+1,k1)))
1187 & (tl_cff1*(cff1*dtdr(i,j,k2)- &
1189 & tl_cff2*(cff2*dtdr(i,j,k2)- &
1190 & dtde(i,j+1,k2))+ &
1191 & tl_cff3*(cff3*dtdr(i,j,k2)- &
1193 & tl_cff4*(cff4*dtdr(i,j,k2)- &
1194 & dtde(i,j+1,k1))+ &
1195 & cff1*(tl_cff1*dtdr(i,j,k2)+ &
1196 & cff1*tl_dtdr(i,j,k2)- &
1197 & tl_dtde(i,j ,k1))+ &
1198 & cff2*(tl_cff2*dtdr(i,j,k2)+ &
1199 & cff2*tl_dtdr(i,j,k2)- &
1200 & tl_dtde(i,j+1,k2))+ &
1201 & cff3*(tl_cff3*dtdr(i,j,k2)+ &
1202 & cff3*tl_dtdr(i,j,k2)- &
1203 & tl_dtde(i,j ,k2))+ &
1204 & cff4*(tl_cff4*dtdr(i,j,k2)+ &
1205 & cff4*tl_dtdr(i,j,k2)- &
1206 & tl_dtde(i,j+1,k1)))
1210 tl_fs(i,j,k2)=tl_cff*fs(i,j,k2)+ &
1212 fs(i,j,k2)=cff*fs(i,j,k2)
1226 tl_cff=
dt(ng)*pm(i,j)*pn(i,j)* &
1227 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
1228 & tl_fe(i,j+1)-tl_fe(i,j))+ &
1229 &
dt(ng)*(tl_fs(i,j,k2)-tl_fs(i,j,k1))
1232 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)-tl_cff
1233#ifdef DIAGNOSTICS_TS