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))))
291#elif defined TS_MIX_CLIMA
294 & (hz(i,j,k)+hz(i-1,j,k))* &
295 & ((t(i ,j,k,nrhs,itrc)-tclm(i ,j,k,itrc))- &
296 & (t(i-1,j,k,nrhs,itrc)-tclm(i-1,j,k,itrc)))
298 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
299 & ((t(i ,j,k,nrhs,itrc)- &
300 & tclm(i ,j,k,itrc))- &
301 & (t(i-1,j,k,nrhs,itrc)- &
302 & tclm(i-1,j,k,itrc)))+ &
303 & (hz(i,j,k)+hz(i-1,j,k))* &
304 & (tl_t(i ,j,k,nrhs,itrc)- &
305 & tl_t(i-1,j,k,nrhs,itrc)))
308 & (hz(i,j,k)+hz(i-1,j,k))* &
309 & (t(i ,j,k,nrhs,itrc)- &
310 & t(i-1,j,k,nrhs,itrc))
312 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
313 & (t(i ,j,k,nrhs,itrc)- &
314 & t(i-1,j,k,nrhs,itrc))+ &
315 & (hz(i,j,k)+hz(i-1,j,k))* &
316 & (tl_t(i ,j,k,nrhs,itrc)- &
317 & tl_t(i-1,j,k,nrhs,itrc)))
321 & (hz(i,j,k)+hz(i-1,j,k))* &
322 & (t(i ,j,k,nrhs,itrc)- &
323 & t(i-1,j,k,nrhs,itrc))
325 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
326 & (t(i ,j,k,nrhs,itrc)- &
327 & t(i-1,j,k,nrhs,itrc))+ &
328 & (hz(i,j,k)+hz(i-1,j,k))* &
329 & (tl_t(i ,j,k,nrhs,itrc)- &
330 & tl_t(i-1,j,k,nrhs,itrc)))
337# ifdef TS_U3ADV_SPLIT_NOT_YET
338 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
340 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
344 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
350#ifdef WET_DRY_NOT_YET
351 cff=cff*vmask_wet(i,j)
353#if defined TS_MIX_STABILITY
355 & (hz(i,j,k)+hz(i,j-1,k))* &
356 & (0.75_r8*(t(i,j ,k,nrhs,itrc)- &
357 & t(i,j-1,k,nrhs,itrc))+ &
358 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
359 & t(i,j-1,k,nstp,itrc)))
361 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
362 & (0.75_r8*(t(i,j ,k,nrhs,itrc)- &
363 & t(i,j-1,k,nrhs,itrc))+ &
364 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
365 & t(i,j-1,k,nstp,itrc)))+ &
366 & (hz(i,j,k)+hz(i,j-1,k))* &
367 & (0.75_r8*(tl_t(i,j ,k,nrhs,itrc)- &
368 & tl_t(i,j-1,k,nrhs,itrc))+ &
369 & 0.25_r8*(tl_t(i,j ,k,nstp,itrc)- &
370 & tl_t(i,j-1,k,nstp,itrc))))
371#elif defined TS_MIX_CLIMA
374 & (hz(i,j,k)+hz(i,j-1,k))* &
375 & ((t(i,j ,k,nrhs,itrc)-tclm(i,j ,k,itrc))- &
376 & (t(i,j-1,k,nrhs,itrc)-tclm(i,j-1,k,itrc)))
378 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
379 & ((t(i,j ,k,nrhs,itrc)- &
380 & tclm(i,j ,k,itrc))- &
381 & (t(i,j-1,k,nrhs,itrc)- &
382 & tclm(i,j-1,k,itrc)))+ &
383 & (hz(i,j,k)+hz(i,j-1,k))* &
384 & (tl_t(i,j ,k,nrhs,itrc)- &
385 & tl_t(i,j-1,k,nrhs,itrc)))
388 & (hz(i,j,k)+hz(i,j-1,k))* &
389 & (t(i,j ,k,nrhs,itrc)- &
390 & t(i,j-1,k,nrhs,itrc))
392 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
393 & (t(i,j ,k,nrhs,itrc)- &
394 & t(i,j-1,k,nrhs,itrc))+ &
395 & (hz(i,j,k)+hz(i,j-1,k))* &
396 & (tl_t(i,j ,k,nrhs,itrc)- &
397 & tl_t(i,j-1,k,nrhs,itrc)))
401 & (hz(i,j,k)+hz(i,j-1,k))* &
402 & (t(i,j ,k,nrhs,itrc)- &
403 & t(i,j-1,k,nrhs,itrc))
405 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
406 & (t(i,j ,k,nrhs,itrc)- &
407 & t(i,j-1,k,nrhs,itrc))+ &
408 & (hz(i,j,k)+hz(i,j-1,k))* &
409 & (tl_t(i,j ,k,nrhs,itrc)- &
410 & tl_t(i,j-1,k,nrhs,itrc)))
421 tl_cff=-cff*cff*tl_hz(i,j,k)
422 lapt(i,j)=pm(i,j)*pn(i,j)*cff* &
423 & (fx(i+1,j)-fx(i,j)+ &
425 tl_lapt(i,j)=pm(i,j)*pn(i,j)* &
427 & (fx(i+1,j)-fx(i,j)+ &
428 & fe(i,j+1)-fe(i,j))+ &
430 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
431 & tl_fe(i,j+1)-tl_fe(i,j)))
439 IF (
domain(ng)%Western_Edge(tile))
THEN
442 lapt(istr-1,j)=0.0_r8
443 tl_lapt(istr-1,j)=0.0_r8
447 lapt(istr-1,j)=lapt(istr,j)
448 tl_lapt(istr-1,j)=tl_lapt(istr,j)
455 IF (
domain(ng)%Eastern_Edge(tile))
THEN
458 lapt(iend+1,j)=0.0_r8
459 tl_lapt(iend+1,j)=0.0_r8
463 lapt(iend+1,j)=lapt(iend,j)
464 tl_lapt(iend+1,j)=tl_lapt(iend,j)
471 IF (
domain(ng)%Southern_Edge(tile))
THEN
474 lapt(i,jstr-1)=0.0_r8
475 tl_lapt(i,jstr-1)=0.0_r8
479 lapt(i,jstr-1)=lapt(i,jstr)
480 tl_lapt(i,jstr-1)=tl_lapt(i,jstr)
487 IF (
domain(ng)%Northern_Edge(tile))
THEN
490 lapt(i,jend+1)=0.0_r8
491 tl_lapt(i,jend+1)=0.0_r8
495 lapt(i,jend+1)=lapt(i,jend)
496 tl_lapt(i,jend+1)=tl_lapt(i,jend)
507# ifdef TS_U3ADV_SPLIT_NOT_YET
508 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
510 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
514 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
522 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
523 & (lapt(i,j)-lapt(i-1,j))+ &
524 & (hz(i,j,k)+hz(i-1,j,k))* &
525 & (tl_lapt(i,j)-tl_lapt(i-1,j)))
529 tl_fx(i,j)=tl_fx(i,j)*umask(i,j)
531#ifdef WET_DRY_NOT_YET
532 fx(i,j)=fx(i,j)*umask_wet(i,j)
539# ifdef TS_U3ADV_SPLIT_NOT_YET
540 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
542 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
546 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
554 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
555 & (lapt(i,j)-lapt(i,j-1))+ &
556 & (hz(i,j,k)+hz(i,j-1,k))* &
557 & (tl_lapt(i,j)-tl_lapt(i,j-1)))
561 tl_fe(i,j)=tl_fe(i,j)*vmask(i,j)
563#ifdef WET_DRY_NOT_YET
564 fe(i,j)=fe(i,j)*vmask_wet(i,j)
577 tl_cff=
dt(ng)*pm(i,j)*pn(i,j)* &
578 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
579 & tl_fe(i,j+1)-tl_fe(i,j))
582 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)-tl_cff