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))
347#if defined TS_MIX_STABILITY
348 dtdz(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
349 & t(i,j,k ,nrhs,itrc))+ &
350 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
351 & t(i,j,k ,nstp,itrc)))
352 tl_dtdz(i,j,k2)=tl_cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
353 & t(i,j,k ,nrhs,itrc))+ &
354 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
355 & t(i,j,k ,nstp,itrc)))+&
356 & cff*(0.75_r8*(tl_t(i,j,k+1,nrhs,itrc)- &
357 & tl_t(i,j,k ,nrhs,itrc))+ &
358 & 0.25_r8*(tl_t(i,j,k+1,nstp,itrc)- &
359 & tl_t(i,j,k ,nstp,itrc)))
360#elif defined TS_MIX_CLIMA
362 dtdz(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
363 & tclm(i,j,k+1,itrc))- &
364 & (t(i,j,k ,nrhs,itrc)- &
365 & tclm(i,j,k ,itrc)))
366 tl_dtdz(i,j,k2)=tl_cff*((t(i,j,k+1,nrhs,itrc)- &
367 & tclm(i,j,k+1,itrc))- &
368 & (t(i,j,k ,nrhs,itrc)- &
369 & tclm(i,j,k ,itrc)))+ &
370 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
371 & tl_t(i,j,k ,nrhs,itrc))
374 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
375 & t(i,j,k ,nrhs,itrc))
376 tl_dtdz(i,j,k2)=tl_cff*(t(i,j,k+1,nrhs,itrc)- &
377 & t(i,j,k ,nrhs,itrc))+ &
378 & cff*(tl_t(i,j,k+1,nrhs,itrc)- &
379 & 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))
400 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
403 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i-1,j,itrc))* &
417 & (((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
419 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
422 & max(dzdx(i,j,k1),0.0_r8)* &
424 & dtdz(i ,j,k1)))))+ &
425 & ((hz(i,j,k)+hz(i-1,j,k))* &
426 & (tl_dtdx(i,j,k1)- &
427 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
428 & (tl_dtdz(i-1,j,k1)+ &
429 & tl_dtdz(i ,j,k2))+ &
430 & max(dzdx(i,j,k1),0.0_r8)* &
431 & (tl_dtdz(i-1,j,k2)+ &
432 & tl_dtdz(i ,j,k1)))- &
434 & sign(0.5_r8,-dzdx(i,j,k1)))* &
436 & (dtdz(i-1,j,k1)+dtdz(i,j,k2))+ &
438 & sign(0.5_r8, dzdx(i,j,k1)))* &
440 & (dtdz(i-1,j,k2)+dtdz(i,j,k1))))))
446 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
449 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i,j-1,itrc))* &
463 & (((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
465 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
468 & max(dzde(i,j,k1),0.0_r8)* &
470 & dtdz(i,j ,k1)))))+ &
471 & ((hz(i,j,k)+hz(i,j-1,k))* &
472 & (tl_dtde(i,j,k1)- &
473 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
474 & (tl_dtdz(i,j-1,k1)+ &
475 & tl_dtdz(i,j ,k2))+ &
476 & max(dzde(i,j,k1),0.0_r8)* &
477 & (tl_dtdz(i,j-1,k2)+ &
478 & tl_dtdz(i,j ,k1)))- &
480 & sign(0.5_r8,-dzde(i,j,k1)))* &
482 & (dtdz(i,j-1,k1)+dtdz(i,j,k2))+ &
484 & sign(0.5_r8, dzde(i,j,k1)))* &
486 & (dtdz(i,j-1,k2)+dtdz(i,j,k1))))))
493 cff=0.5_r8*diff3d_r(i,j,k)
495 cff=0.5_r8*diff2(i,j,itrc)
497 cff1=min(dzdx(i ,j,k1),0.0_r8)
498 cff2=min(dzdx(i+1,j,k2),0.0_r8)
499 cff3=max(dzdx(i ,j,k2),0.0_r8)
500 cff4=max(dzdx(i+1,j,k1),0.0_r8)
501 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx(i ,j,k1)))* &
503 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx(i+1,j,k2)))* &
505 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx(i ,j,k2)))* &
507 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx(i+1,j,k1)))* &
516 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
518 & tl_cff2*(cff2*dtdz(i,j,k2)- &
520 & tl_cff3*(cff3*dtdz(i,j,k2)- &
522 & tl_cff4*(cff4*dtdz(i,j,k2)- &
524 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
525 & cff1*tl_dtdz(i,j,k2)- &
526 & tl_dtdx(i ,j,k1))+ &
527 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
528 & cff2*tl_dtdz(i,j,k2)- &
529 & tl_dtdx(i+1,j,k2))+ &
530 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
531 & cff3*tl_dtdz(i,j,k2)- &
532 & tl_dtdx(i ,j,k2))+ &
533 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
534 & cff4*tl_dtdz(i,j,k2)- &
535 & tl_dtdx(i+1,j,k1)))
537 cff1=min(dzde(i,j ,k1),0.0_r8)
538 cff2=min(dzde(i,j+1,k2),0.0_r8)
539 cff3=max(dzde(i,j ,k2),0.0_r8)
540 cff4=max(dzde(i,j+1,k1),0.0_r8)
541 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde(i,j ,k1)))* &
543 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde(i,j+1,k2)))* &
545 tl_cff3=(0.5_r8+sign(0.5_r8, dzde(i,j ,k2)))* &
547 tl_cff4=(0.5_r8+sign(0.5_r8, dzde(i,j+1,k1)))* &
556 tl_fs(i,j,k2)=tl_fs(i,j,k2)+ &
558 & (tl_cff1*(cff1*dtdz(i,j,k2)- &
560 & tl_cff2*(cff2*dtdz(i,j,k2)- &
562 & tl_cff3*(cff3*dtdz(i,j,k2)- &
564 & tl_cff4*(cff4*dtdz(i,j,k2)- &
566 & cff1*(tl_cff1*dtdz(i,j,k2)+ &
567 & cff1*tl_dtdz(i,j,k2)- &
568 & tl_dtde(i,j ,k1))+ &
569 & cff2*(tl_cff2*dtdz(i,j,k2)+ &
570 & cff2*tl_dtdz(i,j,k2)- &
571 & tl_dtde(i,j+1,k2))+ &
572 & cff3*(tl_cff3*dtdz(i,j,k2)+ &
573 & cff3*tl_dtdz(i,j,k2)- &
574 & tl_dtde(i,j ,k2))+ &
575 & cff4*(tl_cff4*dtdz(i,j,k2)+ &
576 & cff4*tl_dtdz(i,j,k2)- &
577 & tl_dtde(i,j+1,k1)))
591 tl_cff=
dt(ng)*pm(i,j)*pn(i,j)* &
592 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
593 & tl_fe(i,j+1)-tl_fe(i,j))+ &
594 &
dt(ng)*(tl_fs(i,j,k2)-tl_fs(i,j,k1))
597 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)+tl_cff