97 & LBi, UBi, LBj, UBj, &
98 & IminS, ImaxS, JminS, JmaxS, &
103#ifdef WET_DRY_NOT_YET
104 & umask_wet, vmask_wet, &
107 & pmon_u, pnom_v, pm, pn, &
109# ifdef TS_U3ADV_SPLIT_NOT_YET
110 & diff3d_u, diff3d_v, &
132 integer,
intent(in) :: ng, tile
133 integer,
intent(in) :: LBi, UBi, LBj, UBj
134 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
135 integer,
intent(in) :: nrhs, nstp, nnew
139 real(r8),
intent(in) :: umask(LBi:,LBj:)
140 real(r8),
intent(in) :: vmask(LBi:,LBj:)
142# ifdef WET_DRY_NOT_YET
143 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
144 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
147# ifdef TS_U3ADV_SPLIT_NOT_YET
148 real(r8),
intent(in) :: diff3d_u(LBi:,LBj:,:)
149 real(r8),
intent(in) :: diff3d_v(LBi:,LBj:,:)
151 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
154 real(r8),
intent(in) :: diff4(LBi:,LBj:,:)
156 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
157 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
158 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
159 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
160 real(r8),
intent(in) :: pm(LBi:,LBj:)
161 real(r8),
intent(in) :: pn(LBi:,LBj:)
162 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
164 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
166# ifdef DIAGNOSTICS_TS
169 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
172 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
173 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
175# ifdef WET_DRY_NOT_YET
176 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
177 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
180# ifdef TS_U3ADV_SPLIT_NOT_YET
181 real(r8),
intent(in) :: diff3d_u(LBi:UBi,LBj:UBj,N(ng))
182 real(r8),
intent(in) :: diff3d_v(LBi:UBi,LBj:UBj,N(ng))
184 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
187 real(r8),
intent(in) :: diff4(LBi:UBi,LBj:UBj,NT(ng))
189 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
190 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
191 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
192 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
193 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
194 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
195 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
197 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
199# ifdef DIAGNOSTICS_TS
203 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
208 integer :: Imin, Imax, Jmin, Jmax
209 integer :: i, itrc, j, k
211 real(r8) :: cff, cff1, tl_cff, tl_cff1
213 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
214 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
215 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapT
217 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
218 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
219 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_LapT
221#include "set_bounds.h"
227#ifdef TS_MIX_STABILITY
240 imax=min(iend+1,
lm(ng))
247 jmax=min(jend+1,
mm(ng))
257# ifdef TS_U3ADV_SPLIT_NOT_YET
258 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
260 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
264 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
270#ifdef WET_DRY_NOT_YET
271 cff=cff*umask_wet(i,j)
273#if defined TS_MIX_STABILITY
275 & (hz(i,j,k)+hz(i-1,j,k))* &
276 & (0.75_r8*(t(i ,j,k,nrhs,itrc)- &
277 & t(i-1,j,k,nrhs,itrc))+ &
278 & 0.25_r8*(t(i ,j,k,nstp,itrc)- &
279 & t(i-1,j,k,nstp,itrc)))
281 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
282 & (0.75_r8*(t(i ,j,k,nrhs,itrc)- &
283 & t(i-1,j,k,nrhs,itrc))+ &
284 & 0.25_r8*(t(i ,j,k,nstp,itrc)- &
285 & t(i-1,j,k,nstp,itrc)))+ &
286 & (hz(i,j,k)+hz(i-1,j,k))* &
287 & (0.75_r8*(tl_t(i ,j,k,nrhs,itrc)- &
288 & tl_t(i-1,j,k,nrhs,itrc))+ &
289 & 0.25_r8*(tl_t(i ,j,k,nstp,itrc)- &
290 & tl_t(i-1,j,k,nstp,itrc))))- &
294#elif defined TS_MIX_CLIMA
297 & (hz(i,j,k)+hz(i-1,j,k))* &
298 & ((t(i ,j,k,nrhs,itrc)-tclm(i ,j,k,itrc))- &
299 & (t(i-1,j,k,nrhs,itrc)-tclm(i-1,j,k,itrc)))
301 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
302 & ((t(i ,j,k,nrhs,itrc)- &
303 & tclm(i ,j,k,itrc))- &
304 & (t(i-1,j,k,nrhs,itrc)- &
305 & tclm(i-1,j,k,itrc)))+ &
306 & (hz(i,j,k)+hz(i-1,j,k))* &
307 & (tl_t(i ,j,k,nrhs,itrc)- &
308 & tl_t(i-1,j,k,nrhs,itrc)))- &
314 & (hz(i,j,k)+hz(i-1,j,k))* &
315 & (t(i ,j,k,nrhs,itrc)- &
316 & t(i-1,j,k,nrhs,itrc))
318 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
319 & (t(i ,j,k,nrhs,itrc)- &
320 & t(i-1,j,k,nrhs,itrc))+ &
321 & (hz(i,j,k)+hz(i-1,j,k))* &
322 & (tl_t(i ,j,k,nrhs,itrc)- &
323 & tl_t(i-1,j,k,nrhs,itrc)))- &
330 & (hz(i,j,k)+hz(i-1,j,k))* &
331 & (t(i ,j,k,nrhs,itrc)- &
332 & t(i-1,j,k,nrhs,itrc))
334 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
335 & (t(i ,j,k,nrhs,itrc)- &
336 & t(i-1,j,k,nrhs,itrc))+ &
337 & (hz(i,j,k)+hz(i-1,j,k))* &
338 & (tl_t(i ,j,k,nrhs,itrc)- &
339 & tl_t(i-1,j,k,nrhs,itrc)))- &
349# ifdef TS_U3ADV_SPLIT_NOT_YET
350 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
352 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
356 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
362#ifdef WET_DRY_NOT_YET
363 cff=cff*vmask_wet(i,j)
365#if defined TS_MIX_STABILITY
367 & (hz(i,j,k)+hz(i,j-1,k))* &
368 & (0.75_r8*(t(i,j ,k,nrhs,itrc)- &
369 & t(i,j-1,k,nrhs,itrc))+ &
370 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
371 & t(i,j-1,k,nstp,itrc)))
373 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
374 & (0.75_r8*(t(i,j ,k,nrhs,itrc)- &
375 & t(i,j-1,k,nrhs,itrc))+ &
376 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
377 & t(i,j-1,k,nstp,itrc)))+ &
378 & (hz(i,j,k)+hz(i,j-1,k))* &
379 & (0.75_r8*(tl_t(i,j ,k,nrhs,itrc)- &
380 & tl_t(i,j-1,k,nrhs,itrc))+ &
381 & 0.25_r8*(tl_t(i,j ,k,nstp,itrc)- &
382 & tl_t(i,j-1,k,nstp,itrc))))- &
386#elif defined TS_MIX_CLIMA
389 & (hz(i,j,k)+hz(i,j-1,k))* &
390 & ((t(i,j ,k,nrhs,itrc)-tclm(i,j ,k,itrc))- &
391 & (t(i,j-1,k,nrhs,itrc)-tclm(i,j-1,k,itrc)))
393 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
394 & ((t(i,j ,k,nrhs,itrc)- &
395 & tclm(i,j ,k,itrc))- &
396 & (t(i,j-1,k,nrhs,itrc)- &
397 & tclm(i,j-1,k,itrc)))+ &
398 & (hz(i,j,k)+hz(i,j-1,k))* &
399 & (tl_t(i,j ,k,nrhs,itrc)- &
400 & tl_t(i,j-1,k,nrhs,itrc)))- &
406 & (hz(i,j,k)+hz(i,j-1,k))* &
407 & (t(i,j ,k,nrhs,itrc)- &
408 & t(i,j-1,k,nrhs,itrc))
410 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
411 & (t(i,j ,k,nrhs,itrc)- &
412 & t(i,j-1,k,nrhs,itrc))+ &
413 & (hz(i,j,k)+hz(i,j-1,k))* &
414 & (tl_t(i,j ,k,nrhs,itrc)- &
415 & tl_t(i,j-1,k,nrhs,itrc)))- &
422 & (hz(i,j,k)+hz(i,j-1,k))* &
423 & (t(i,j ,k,nrhs,itrc)- &
424 & t(i,j-1,k,nrhs,itrc))
426 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
427 & (t(i,j ,k,nrhs,itrc)- &
428 & t(i,j-1,k,nrhs,itrc))+ &
429 & (hz(i,j,k)+hz(i,j-1,k))* &
430 & (tl_t(i,j ,k,nrhs,itrc)- &
431 & tl_t(i,j-1,k,nrhs,itrc)))- &
445 tl_cff=-cff*cff*tl_hz(i,j,k)+ &
449 lapt(i,j)=pm(i,j)*pn(i,j)*cff* &
450 & (fx(i+1,j)-fx(i,j)+ &
452 tl_lapt(i,j)=pm(i,j)*pn(i,j)* &
454 & (fx(i+1,j)-fx(i,j)+ &
455 & fe(i,j+1)-fe(i,j))+ &
457 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
458 & tl_fe(i,j+1)-tl_fe(i,j)))- &
469 IF (
domain(ng)%Western_Edge(tile))
THEN
472 lapt(istr-1,j)=0.0_r8
473 tl_lapt(istr-1,j)=0.0_r8
477 lapt(istr-1,j)=lapt(istr,j)
478 tl_lapt(istr-1,j)=tl_lapt(istr,j)
485 IF (
domain(ng)%Eastern_Edge(tile))
THEN
488 lapt(iend+1,j)=0.0_r8
489 tl_lapt(iend+1,j)=0.0_r8
493 lapt(iend+1,j)=lapt(iend,j)
494 tl_lapt(iend+1,j)=tl_lapt(iend,j)
501 IF (
domain(ng)%Southern_Edge(tile))
THEN
504 lapt(i,jstr-1)=0.0_r8
505 tl_lapt(i,jstr-1)=0.0_r8
509 lapt(i,jstr-1)=lapt(i,jstr)
510 tl_lapt(i,jstr-1)=tl_lapt(i,jstr)
517 IF (
domain(ng)%Northern_Edge(tile))
THEN
520 lapt(i,jend+1)=0.0_r8
521 tl_lapt(i,jend+1)=0.0_r8
525 lapt(i,jend+1)=lapt(i,jend)
526 tl_lapt(i,jend+1)=tl_lapt(i,jend)
537# ifdef TS_U3ADV_SPLIT_NOT_YET
538 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
540 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
544 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
552 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
553 & (lapt(i,j)-lapt(i-1,j))+ &
554 & (hz(i,j,k)+hz(i-1,j,k))* &
555 & (tl_lapt(i,j)-tl_lapt(i-1,j)))- &
558 & (hz(i,j,k)+hz(i-1,j,k))* &
559 & (lapt(i,j)-lapt(i-1,j))
564 tl_fx(i,j)=tl_fx(i,j)*umask(i,j)
566#ifdef WET_DRY_NOT_YET
567 fx(i,j)=fx(i,j)*umask_wet(i,j)
574# ifdef TS_U3ADV_SPLIT_NOT_YET
575 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
577 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
581 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
589 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
590 & (lapt(i,j)-lapt(i,j-1))+ &
591 & (hz(i,j,k)+hz(i,j-1,k))* &
592 & (tl_lapt(i,j)-tl_lapt(i,j-1)))- &
595 & (hz(i,j,k)+hz(i,j-1,k))* &
596 & (lapt(i,j)-lapt(i,j-1))
601 tl_fe(i,j)=tl_fe(i,j)*vmask(i,j)
603#ifdef WET_DRY_NOT_YET
604 fe(i,j)=fe(i,j)*vmask_wet(i,j)
617 tl_cff=
dt(ng)*pm(i,j)*pn(i,j)* &
618 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
619 & tl_fe(i,j+1)-tl_fe(i,j))
622 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)-tl_cff