96 & LBi, UBi, LBj, UBj, &
97 & IminS, ImaxS, JminS, JmaxS, &
102#ifdef WET_DRY_NOT_YET
103 & umask_wet, vmask_wet, &
105 & om_v, on_u, pm, pn, &
127 integer,
intent(in) :: ng, tile
128 integer,
intent(in) :: LBi, UBi, LBj, UBj
129 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
130 integer,
intent(in) :: nrhs, nstp, nnew
134 real(r8),
intent(in) :: umask(LBi:,LBj:)
135 real(r8),
intent(in) :: vmask(LBi:,LBj:)
137# ifdef WET_DRY_NOT_YET
138 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
139 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
142 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
144 real(r8),
intent(in) :: diff2(LBi:,LBj:,:)
146 real(r8),
intent(in) :: om_v(LBi:,LBj:)
147 real(r8),
intent(in) :: on_u(LBi:,LBj:)
148 real(r8),
intent(in) :: pm(LBi:,LBj:)
149 real(r8),
intent(in) :: pn(LBi:,LBj:)
150 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
151 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
152 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
154 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
156 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
157 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
158# ifdef DIAGNOSTICS_TS
162 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
165 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
166 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
169 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
170 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
173 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
175 real(r8),
intent(in) :: diff2(LBi:UBi,LBj:UBj,NT(ng))
177 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
178 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
179 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
181 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
182 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
183 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
185 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
187 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
188 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
189# ifdef DIAGNOSTICS_TS
193 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
198 integer :: i, itrc, j, k, k1, k2
200 real(r8) :: cff, cff1, cff2, cff3, cff4
201 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
203 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
204 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
206 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdz
207 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdx
208 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTde
209 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx
210 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde
212 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_FS
213 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTdz
214 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTdx
215 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dTde
216 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZdx
217 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZde
219#include "set_bounds.h"
233#ifdef TS_MIX_STABILITY
239 t_loop :
DO itrc=1,nt(ng)
241 k_loop :
DO k=0,n(ng)
247 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
251#ifdef WET_DRY_NOT_YET
252 cff=cff*umask_wet(i,j)
254 dzdx(i,j,k2)=cff*(z_r(i ,j,k+1)- &
256 tl_dzdx(i,j,k2)=cff*(tl_z_r(i ,j,k+1)- &
258#if defined TS_MIX_STABILITY
259 dtdx(i,j,k2)=cff*(0.75_r8*(t(i ,j,k+1,nrhs,itrc)- &
260 & t(i-1,j,k+1,nrhs,itrc))+ &
261 & 0.25_r8*(t(i ,j,k+1,nstp,itrc)- &
262 & t(i-1,j,k+1,nstp,itrc)))
263 tl_dtdx(i,j,k2)=cff* &
264 & (0.75_r8*(tl_t(i ,j,k+1,nrhs,itrc)- &
265 & tl_t(i-1,j,k+1,nrhs,itrc))+ &
266 & 0.25_r8*(tl_t(i ,j,k+1,nstp,itrc)- &
267 & tl_t(i-1,j,k+1,nstp,itrc)))
268#elif defined TS_MIX_CLIMA
270 dtdx(i,j,k2)=cff*((t(i ,j,k+1,nrhs,itrc)- &
271 & tclm(i ,j,k+1,itrc))- &
272 & (t(i-1,j,k+1,nrhs,itrc)- &
273 & tclm(i-1,j,k+1,itrc)))
275 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
276 & t(i-1,j,k+1,nrhs,itrc))
278 tl_dtdx(i,j,k2)=cff*(tl_t(i ,j,k+1,nrhs,itrc)- &
279 & tl_t(i-1,j,k+1,nrhs,itrc))
281 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
282 & t(i-1,j,k+1,nrhs,itrc))
283 tl_dtdx(i,j,k2)=cff*(tl_t(i ,j,k+1,nrhs,itrc)- &
284 & tl_t(i-1,j,k+1,nrhs,itrc))
290 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
294#ifdef WET_DRY_NOT_YET
295 cff=cff*vmask_wet(i,j)
297 dzde(i,j,k2)=cff*(z_r(i,j ,k+1)- &
299 tl_dzde(i,j,k2)=cff*(tl_z_r(i,j ,k+1)- &
301#if defined TS_MIX_STABILITY
302 dtde(i,j,k2)=cff*(0.75_r8*(t(i,j ,k+1,nrhs,itrc)- &
303 & t(i,j-1,k+1,nrhs,itrc))+ &
304 & 0.25_r8*(t(i,j ,k+1,nstp,itrc)- &
305 & t(i,j-1,k+1,nstp,itrc)))
306 tl_dtde(i,j,k2)=cff* &
307 & (0.75_r8*(tl_t(i,j ,k+1,nrhs,itrc)- &
308 & tl_t(i,j-1,k+1,nrhs,itrc))+ &
309 & 0.25_r8*(tl_t(i,j ,k+1,nstp,itrc)- &
310 & tl_t(i,j-1,k+1,nstp,itrc)))
311#elif defined TS_MIX_CLIMA
313 dtde(i,j,k2)=cff*((t(i,j ,k+1,nrhs,itrc)- &
314 & tclm(i,j ,k+1,itrc))- &
315 & (t(i,j-1,k+1,nrhs,itrc)- &
316 & tclm(i,j-1,k+1,itrc)))
318 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
319 & t(i,j-1,k+1,nrhs,itrc))
321 tl_dtde(i,j,k2)=cff*(tl_t(i,j ,k+1,nrhs,itrc)- &
322 & tl_t(i,j-1,k+1,nrhs,itrc))
324 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
325 & t(i,j-1,k+1,nrhs,itrc))
326 tl_dtde(i,j,k2)=cff*(tl_t(i,j ,k+1,nrhs,itrc)- &
327 & tl_t(i,j-1,k+1,nrhs,itrc))
332 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
336 tl_dtdz(i,j,k2)=0.0_r8
345 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
346 tl_cff=-cff*cff*(tl_z_r(i,j,k+1)-tl_z_r(i,j,k))+ &
350#if defined TS_MIX_STABILITY
351 dtdz(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
352 & t(i,j,k ,nrhs,itrc))+ &
353 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
354 & t(i,j,k ,nstp,itrc)))
355 tl_dtdz(i,j,k2)=tl_cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
356 & t(i,j,k ,nrhs,itrc))+ &
357 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
358 & t(i,j,k ,nstp,itrc)))+&
359 & cff*(0.75_r8*(tl_t(i,j,k+1,nrhs,itrc)- &
360 & tl_t(i,j,k ,nrhs,itrc))+ &
361 & 0.25_r8*(tl_t(i,j,k+1,nstp,itrc)- &
362 & tl_t(i,j,k ,nstp,itrc)))-&
366#elif defined TS_MIX_CLIMA
368 dtdz(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
369 & tclm(i,j,k+1,itrc))- &
370 & (t(i,j,k ,nrhs,itrc)- &
371 & tclm(i,j,k ,itrc)))
372 tl_dtdz(i,j,k2)=tl_cff*((t(i,j,k+1,nrhs,itrc)- &
373 & tclm(i,j,k+1,itrc))- &
374 & (t(i,j,k ,nrhs,itrc)- &
375 & tclm(i,j,k ,itrc)))+ &
376 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
377 & tl_t(i,j,k ,nrhs,itrc))- &
382 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
383 & t(i,j,k ,nrhs,itrc))
384 tl_dtdz(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
385 & t(i,j,k ,nrhs,itrc))+ &
386 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
387 & tl_t(i,j,k ,nrhs,itrc))- &
393 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
394 & t(i,j,k ,nrhs,itrc))
395 tl_dtdz(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
396 & t(i,j,k ,nrhs,itrc))+ &
397 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
398 & tl_t(i,j,k ,nrhs,itrc))- &
414 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
417 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i-1,j,itrc))* &
431 & (((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
433 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
436 & max(dzdx(i,j,k1),0.0_r8)* &
438 & dtdz(i ,j,k1)))))+ &
439 & ((hz(i,j,k)+hz(i-1,j,k))* &
440 & (tl_dtdx(i,j,k1)- &
441 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
442 & (tl_dtdz(i-1,j,k1)+ &
443 & tl_dtdz(i ,j,k2))+ &
444 & max(dzdx(i,j,k1),0.0_r8)* &
445 & (tl_dtdz(i-1,j,k2)+ &
446 & tl_dtdz(i ,j,k1)))- &
448 & sign(0.5_r8,-dzdx(i,j,k1)))* &
450 & (dtdz(i-1,j,k1)+dtdz(i,j,k2))+ &
452 & sign(0.5_r8, dzdx(i,j,k1)))* &
454 & (dtdz(i-1,j,k2)+dtdz(i,j,k1))))))-&
457 & (hz(i,j,k)+hz(i-1,j,k))* &
459 & (min(dzdx(i,j,k1),0.0_r8)* &
462 & max(dzdx(i,j,k1),0.0_r8)* &
471 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
474 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i,j-1,itrc))* &
488 & (((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
490 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
493 & max(dzde(i,j,k1),0.0_r8)* &
495 & dtdz(i,j ,k1)))))+ &
496 & ((hz(i,j,k)+hz(i,j-1,k))* &
497 & (tl_dtde(i,j,k1)- &
498 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
499 & (tl_dtdz(i,j-1,k1)+ &
500 & tl_dtdz(i,j ,k2))+ &
501 & max(dzde(i,j,k1),0.0_r8)* &
502 & (tl_dtdz(i,j-1,k2)+ &
503 & tl_dtdz(i,j ,k1)))- &
505 & sign(0.5_r8,-dzde(i,j,k1)))* &
507 & (dtdz(i,j-1,k1)+dtdz(i,j,k2))+ &
509 & sign(0.5_r8, dzde(i,j,k1)))* &
511 & (dtdz(i,j-1,k2)+dtdz(i,j,k1))))))-&
514 & (hz(i,j,k)+hz(i,j-1,k))* &
516 & (min(dzde(i,j,k1),0.0_r8)* &
519 & max(dzde(i,j,k1),0.0_r8)* &
529 cff=0.5_r8*diff3d_r(i,j,k)
531 cff=0.5_r8*diff2(i,j,itrc)
533 cff1=min(dzdx(i ,j,k1),0.0_r8)
534 cff2=min(dzdx(i+1,j,k2),0.0_r8)
535 cff3=max(dzdx(i ,j,k2),0.0_r8)
536 cff4=max(dzdx(i+1,j,k1),0.0_r8)
537 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx(i ,j,k1)))* &
539 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx(i+1,j,k2)))* &
541 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx(i ,j,k2)))* &
543 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx(i+1,j,k1)))* &
552 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
554 & tl_cff2*(cff2*dtdz(i,j,k2)- &
556 & tl_cff3*(cff3*dtdz(i,j,k2)- &
558 & tl_cff4*(cff4*dtdz(i,j,k2)- &
560 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
561 & cff1*tl_dtdz(i,j,k2)- &
562 & tl_dtdx(i ,j,k1))+ &
563 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
564 & cff2*tl_dtdz(i,j,k2)- &
565 & tl_dtdx(i+1,j,k2))+ &
566 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
567 & cff3*tl_dtdz(i,j,k2)- &
568 & tl_dtdx(i ,j,k2))+ &
569 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
570 & cff4*tl_dtdz(i,j,k2)- &
571 & tl_dtdx(i+1,j,k1)))- &
574 & (cff1*(2.0_r8*cff1*dtdz(i,j,k2)- &
576 & cff2*(2.0_r8*cff2*dtdz(i ,j,k2)- &
578 & cff3*(2.0_r8*cff3*dtdz(i,j,k2)- &
580 & cff4*(2.0_r8*cff4*dtdz(i ,j,k2)- &
584 cff1=min(dzde(i,j ,k1),0.0_r8)
585 cff2=min(dzde(i,j+1,k2),0.0_r8)
586 cff3=max(dzde(i,j ,k2),0.0_r8)
587 cff4=max(dzde(i,j+1,k1),0.0_r8)
588 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde(i,j ,k1)))* &
590 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde(i,j+1,k2)))* &
592 tl_cff3=(0.5_r8+sign(0.5_r8, dzde(i,j ,k2)))* &
594 tl_cff4=(0.5_r8+sign(0.5_r8, dzde(i,j+1,k1)))* &
603 tl_fs(i,j,k2)=tl_fs(i,j,k2)+ &
605 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
607 & tl_cff2*(cff2*dtdz(i,j,k2)- &
609 & tl_cff3*(cff3*dtdz(i,j,k2)- &
611 & tl_cff4*(cff4*dtdz(i,j,k2)- &
613 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
614 & cff1*tl_dtdz(i,j,k2)- &
615 & tl_dtde(i,j ,k1))+ &
616 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
617 & cff2*tl_dtdz(i,j,k2)- &
618 & tl_dtde(i,j+1,k2))+ &
619 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
620 & cff3*tl_dtdz(i,j,k2)- &
621 & tl_dtde(i,j ,k2))+ &
622 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
623 & cff4*tl_dtdz(i,j,k2)- &
624 & tl_dtde(i,j+1,k1)))- &
627 & (cff1*(2.0_r8*cff1*dtdz(i,j,k2)- &
629 & cff2*(2.0_r8*cff2*dtdz(i,j ,k2)- &
631 & cff3*(2.0_r8*cff3*dtdz(i,j,k2)- &
633 & cff4*(2.0_r8*cff4*dtdz(i,j ,k2)- &
649 tl_cff=
dt(ng)*pm(i,j)*pn(i,j)* &
650 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
651 & tl_fe(i,j+1)-tl_fe(i,j))+ &
652 &
dt(ng)*(tl_fs(i,j,k2)-tl_fs(i,j,k1))
655 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)+tl_cff