138 & LBi, UBi, LBj, UBj, &
139 & IminS, ImaxS, JminS, JmaxS, &
140 & nrhs, nstp, nnew, &
142 & rmask, umask, vmask, &
143# if defined SOLAR_SOURCE && defined WET_DRY
153 & tl_btflx, tl_bustr, tl_bvstr, &
154 & tl_stflx, tl_sustr, tl_svstr, &
160# ifdef LMD_NONLOCAL_NOT_YET
165# ifdef DIAGNOSTICS_TS
168# ifdef DIAGNOSTICS_UV
169!! & DiaU3wrk, DiaV3wrk, &
189 integer,
intent(in) :: ng, tile
190 integer,
intent(in) :: LBi, UBi, LBj, UBj
191 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
192 integer,
intent(in) :: nrhs, nstp, nnew
196 real(r8),
intent(in) :: rmask(LBi:,LBj:)
197 real(r8),
intent(in) :: umask(LBi:,LBj:)
198 real(r8),
intent(in) :: vmask(LBi:,LBj:)
199# if defined SOLAR_SOURCE && defined WET_DRY
200 real(r8),
intent(in) :: rmask_wet(LBi:,LBj:)
203 real(r8),
intent(in) :: pm(LBi:,LBj:)
204 real(r8),
intent(in) :: pn(LBi:,LBj:)
205 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
206 real(r8),
intent(in) :: Huon(LBi:,LBj:,:)
207 real(r8),
intent(in) :: Hvom(LBi:,LBj:,:)
208 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
209 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
211 real(r8),
intent(in) :: srflx(LBi:,LBj:)
214 real(r8),
intent(in) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
216 real(r8),
intent(in) :: Akt(LBi:,LBj:,0:,:)
218 real(r8),
intent(in) :: Akv(LBi:,LBj:,0:)
219 real(r8),
intent(in) :: W(LBi:,LBj:,0:)
221 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
223 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
225 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
226 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
228 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
229 real(r8),
intent(in) :: tl_Huon(LBi:,LBj:,:)
230 real(r8),
intent(in) :: tl_Hvom(LBi:,LBj:,:)
231 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
232 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
233 real(r8),
intent(in) :: tl_btflx(LBi:,LBj:,:)
234 real(r8),
intent(in) :: tl_bustr(LBi:,LBj:)
235 real(r8),
intent(in) :: tl_bvstr(LBi:,LBj:)
236 real(r8),
intent(in) :: tl_stflx(LBi:,LBj:,:)
237 real(r8),
intent(in) :: tl_sustr(LBi:,LBj:)
238 real(r8),
intent(in) :: tl_svstr(LBi:,LBj:)
239 real(r8),
intent(in) :: tl_ru(LBi:,LBj:,0:,:)
240 real(r8),
intent(in) :: tl_rv(LBi:,LBj:,0:,:)
241# ifdef LMD_NONLOCAL_NOT_YET
242 real(r8),
intent(in) :: tl_ghats(LBi:,LBj:,0:,:)
245 real(r8),
intent(in) :: tl_Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
247 real(r8),
intent(in) :: tl_Akt(LBi:,LBj:,0:,:)
249 real(r8),
intent(in) :: tl_Akv(LBi:,LBj:,0:)
250 real(r8),
intent(in) :: tl_W(LBi:,LBj:,0:)
252# ifdef DIAGNOSTICS_TS
255# ifdef DIAGNOSTICS_UV
262 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
264 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
266 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
267 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
272 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
273 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
274 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
275# if defined SOLAR_SOURCE && defined WET_DRY
276 real(r8),
intent(in) :: rmask_wet(LBi:UBi,LBj:UBj)
279 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
280 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
281 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
282 real(r8),
intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
283 real(r8),
intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
284 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
285 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
287 real(r8),
intent(in) :: srflx(LBi:UBi,LBj:UBj)
289 real(r8),
intent(in) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
290 real(r8),
intent(in) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
291 real(r8),
intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
292 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
293 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
294 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
296 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
297 real(r8),
intent(in) :: tl_Huon(LBi:UBi,LBj:UBj,N(ng))
298 real(r8),
intent(in) :: tl_Hvom(LBi:UBi,LBj:UBj,N(ng))
299 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
300 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
301 real(r8),
intent(in) :: tl_btflx(LBi:UBi,LBj:UBj,NT(ng))
302 real(r8),
intent(in) :: tl_bustr(LBi:UBi,LBj:UBj)
303 real(r8),
intent(in) :: tl_bvstr(LBi:UBi,LBj:UBj)
304 real(r8),
intent(in) :: tl_stflx(LBi:UBi,LBj:UBj,NT(ng))
305 real(r8),
intent(in) :: tl_sustr(LBi:UBi,LBj:UBj)
306 real(r8),
intent(in) :: tl_svstr(LBi:UBi,LBj:UBj)
307 real(r8),
intent(in) :: tl_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
308 real(r8),
intent(in) :: tl_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
309# ifdef LMD_NONLOCAL_NOT_YET
310 real(r8),
intent(in) :: ghats(LBi:UBi,LBj:UBj,0:N(ng),NAT)
312 real(r8),
intent(in) :: tl_Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
313 real(r8),
intent(in) :: tl_Akv(LBi:UBi,LBj:UBj,0:N(ng))
314 real(r8),
intent(in) :: tl_W(LBi:UBi,LBj:UBj,0:N(ng))
316# ifdef DIAGNOSTICS_TS
320# ifdef DIAGNOSTICS_UV
326 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
327 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
328 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
333 integer :: Isrc, Jsrc
334 integer :: i, ic, indx, is, itrc, j, k, ltrc
335# if defined AGE_MEAN && defined T_PASSIVE
338# if defined DIAGNOSTICS_TS || defined DIAGNOSTICS_UV
341 real(r8),
parameter :: eps = 1.0e-16_r8
343 real(r8) :: cff, cff1, cff2, cff3, cff4
344 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
347 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
348 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
349 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
351 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_CF
352 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_DC
353 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FC
356 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: tl_swdk
359 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
360 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
361 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: curv
362 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
364 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
365 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
366 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_curv
367 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
369# include "set_bounds.h"
385 fx(i,j)=z_w(i,j,n(ng))-z_w(i,j,k)
386 tl_fx(i,j)=tl_z_w(i,j,n(ng))-tl_z_w(i,j,k)
395 & lbi, ubi, lbj, ubj, &
396 & imins, imaxs, jmins, jmaxs, &
397 & -1.0_r8, fx, tl_fx, tl_fe)
402 tl_swdk(i,j,k)=tl_fe(i,j)
415 t_loop1 :
DO itrc=1,nt(ng)
416 k_loop :
DO k=1,n(ng)
430 & (t(i-1,j,k,nstp,itrc)+ &
431 & t(i ,j,k,nstp,itrc))+ &
433 & (tl_t(i-1,j,k,nstp,itrc)+ &
434 & tl_t(i ,j,k,nstp,itrc)))
445 & (t(i,j-1,k,nstp,itrc)+ &
446 & t(i,j ,k,nstp,itrc))+ &
448 & (tl_t(i,j-1,k,nstp,itrc)+ &
449 & tl_t(i,j ,k,nstp,itrc)))
460 cff1=max(huon(i,j,k),0.0_r8)
461 cff2=min(huon(i,j,k),0.0_r8)
462 tl_cff1=(0.5_r8+sign(0.5_r8, huon(i,j,k)))* &
464 tl_cff2=(0.5_r8+sign(0.5_r8,-huon(i,j,k)))* &
469 tl_fx(i,j)=tl_cff1*t(i-1,j,k,nstp,itrc)+ &
470 & cff1*tl_t(i-1,j,k,nstp,itrc)+ &
471 & tl_cff2*t(i ,j,k,nstp,itrc)+ &
472 & cff2*tl_t(i ,j,k,nstp,itrc)
477 cff1=max(hvom(i,j,k),0.0_r8)
478 cff2=min(hvom(i,j,k),0.0_r8)
479 tl_cff1=(0.5_r8+sign(0.5_r8, hvom(i,j,k)))* &
481 tl_cff2=(0.5_r8+sign(0.5_r8,-hvom(i,j,k)))* &
486 tl_fe(i,j)=tl_cff1*t(i,j-1,k,nstp,itrc)+ &
487 & cff1*tl_t(i,j-1,k,nstp,itrc)+ &
488 & tl_cff2*t(i,j ,k,nstp,itrc)+ &
489 & cff2*tl_t(i,j ,k,nstp,itrc)
503 fx(i,j)=t(i ,j,k,nstp,itrc)- &
504 & t(i-1,j,k,nstp,itrc)
505 tl_fx(i,j)=tl_t(i ,j,k,nstp,itrc)- &
506 & tl_t(i-1,j,k,nstp,itrc)
508 fx(i,j)=fx(i,j)*umask(i,j)
509 tl_fx(i,j)=tl_fx(i,j)*umask(i,j)
514 IF (
domain(ng)%Western_Edge(tile))
THEN
516 fx(istr-1,j)=fx(istr,j)
517 tl_fx(istr-1,j)=tl_fx(istr,j)
522 IF (
domain(ng)%Eastern_Edge(tile))
THEN
524 fx(iend+2,j)=fx(iend+1,j)
525 tl_fx(iend+2,j)=tl_fx(iend+1,j)
533 curv(i,j)=fx(i+1,j)-fx(i,j)
534 tl_curv(i,j)=tl_fx(i+1,j)-tl_fx(i,j)
536 cff=2.0_r8*fx(i+1,j)*fx(i,j)
537 tl_cff=2.0_r8*(tl_fx(i+1,j)*fx(i,j)+ &
538 & fx(i+1,j)*tl_fx(i,j))
540 grad(i,j)=cff/(fx(i+1,j)+fx(i,j))
541 tl_grad(i,j)=((fx(i+1,j)+fx(i,j))*tl_cff- &
542 & cff*(tl_fx(i+1,j)+tl_fx(i,j)))/ &
543 & ((fx(i+1,j)+fx(i,j))* &
544 & (fx(i+1,j)+fx(i,j)))
551 grad(i,j)=0.5_r8*(fx(i+1,j)+fx(i,j))
552 tl_grad(i,j)=0.5_r8*(tl_fx(i+1,j)+tl_fx(i,j))
570 & (t(i-1,j,k,nstp,itrc)+ &
571 & t(i ,j,k,nstp,itrc))+ &
573 & (tl_t(i-1,j,k,nstp,itrc)+ &
574 & tl_t(i ,j,k,nstp,itrc)))- &
576 & (tl_curv(i-1,j)*max(huon(i,j,k),0.0_r8)+ &
578 & (0.5_r8+sign(0.5_r8, huon(i,j,k)))* &
580 & tl_curv(i ,j)*min(huon(i,j,k),0.0_r8)+ &
582 & (0.5_r8+sign(0.5_r8,-huon(i,j,k)))* &
595 & (t(i-1,j,k,nstp,itrc)+ &
596 & t(i ,j,k,nstp,itrc)- &
597 & cff2*(grad(i ,j)- &
600 & (tl_t(i-1,j,k,nstp,itrc)+ &
601 & tl_t(i ,j,k,nstp,itrc)- &
602 & cff2*(tl_grad(i ,j)- &
610 fe(i,j)=t(i,j ,k,nstp,itrc)- &
611 & t(i,j-1,k,nstp,itrc)
612 tl_fe(i,j)=tl_t(i,j ,k,nstp,itrc)- &
613 & tl_t(i,j-1,k,nstp,itrc)
615 fe(i,j)=fe(i,j)*vmask(i,j)
616 tl_fe(i,j)=tl_fe(i,j)*vmask(i,j)
621 IF (
domain(ng)%Southern_Edge(tile))
THEN
623 fe(i,jstr-1)=fe(i,jstr)
624 tl_fe(i,jstr-1)=tl_fe(i,jstr)
629 IF (
domain(ng)%Northern_Edge(tile))
THEN
631 fe(i,jend+2)=fe(i,jend+1)
632 tl_fe(i,jend+2)=tl_fe(i,jend+1)
640 curv(i,j)=fe(i,j+1)-fe(i,j)
641 tl_curv(i,j)=tl_fe(i,j+1)-tl_fe(i,j)
643 cff=2.0_r8*fe(i,j+1)*fe(i,j)
644 tl_cff=2.0_r8*(tl_fe(i,j+1)*fe(i,j)+ &
645 & fe(i,j+1)*tl_fe(i,j))
647 grad(i,j)=cff/(fe(i,j+1)+fe(i,j))
648 tl_grad(i,j)=((fe(i,j+1)+fe(i,j))*tl_cff- &
649 & cff*(tl_fe(i,j+1)+tl_fe(i,j)))/ &
650 & ((fe(i,j+1)+fe(i,j))* &
651 & (fe(i,j+1)+fe(i,j)))
658 grad(i,j)=0.5_r8*(fe(i,j+1)+fe(i,j))
659 tl_grad(i,j)=0.5_r8*(tl_fe(i,j+1)+tl_fe(i,j))
677 & (t(i,j-1,k,nstp,itrc)+ &
678 & t(i,j ,k,nstp,itrc))+ &
680 & (tl_t(i,j-1,k,nstp,itrc)+ &
681 & tl_t(i,j ,k,nstp,itrc)))- &
683 & (tl_curv(i,j-1)*max(hvom(i,j,k),0.0_r8)+ &
685 & (0.5_r8+sign(0.5_r8, hvom(i,j,k)))* &
687 & tl_curv(i,j )*min(hvom(i,j,k),0.0_r8)+ &
689 & (0.5_r8+sign(0.5_r8,-hvom(i,j,k)))* &
702 & (t(i,j-1,k,nstp,itrc)+ &
703 & t(i,j ,k,nstp,itrc)- &
704 & cff2*(grad(i,j )- &
707 & (tl_t(i,j-1,k,nstp,itrc)+ &
708 & tl_t(i,j ,k,nstp,itrc)- &
709 & cff2*(tl_grad(i,j )- &
726 IF (((istr.le.isrc).and.(isrc.le.iend+1)).and. &
727 & ((jstr.le.jsrc).and.(jsrc.le.jend+1)))
THEN
728 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
733 tl_fx(isrc,jsrc)=tl_huon(isrc,jsrc,k)* &
734 &
sources(ng)%Tsrc(is,k,itrc)+ &
735 & huon(isrc,jsrc,k)* &
736 &
sources(ng)%tl_Tsrc(is,k,itrc)
740 tl_fx(isrc,jsrc)=0.0_r8
742 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
747 tl_fe(isrc,jsrc)=tl_hvom(isrc,jsrc,k)* &
748 &
sources(ng)%Tsrc(is,k,itrc)+ &
749 & hvom(isrc,jsrc,k)* &
750 &
sources(ng)%tl_Tsrc(is,k,itrc)
754 tl_fe(isrc,jsrc)=0.0_r8
769# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
770 IF (
iic(ng).eq.
ntfirst(ng).and.soinitial(ng))
THEN
778 cff=(1.0_r8-gamma)*
dt(ng)
790 tl_t(i,j,k,3,itrc)=tl_hz(i,j,k)* &
791 & (cff1*t(i,j,k,nstp,itrc)+ &
792 & cff2*t(i,j,k,nnew,itrc))+ &
794 & (cff1*tl_t(i,j,k,nstp,itrc)+ &
795 & cff2*tl_t(i,j,k,nnew,itrc))- &
796 & cff*pm(i,j)*pn(i,j)* &
797 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
798 & tl_fe(i,j+1)-tl_fe(i,j))
804# if defined AGE_MEAN && defined T_PASSIVE
818 cff=(1.0_r8-gamma)*
dt(ng)
828 tl_t(i,j,k,3,iage)=tl_t(i,j,k,3,iage)+ &
831 & tl_t(i,j,k,nnew,
inert(itrc))+ &
833 & t(i,j,k,nnew,
inert(itrc)))
846 j_loop1 :
DO j=jstr,jend
847 t_loop2 :
DO itrc=1,nt(ng)
856 fc(i,0)=1.5_r8*t(i,j,1,nstp,itrc)
859 fc(i,0)=2.0_r8*t(i,j,1,nstp,itrc)
865 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
866 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
867 cf(i,k+1)=cff*hz(i,j,k)
868 fc(i,k)=cff*(3.0_r8*(hz(i,j,k )*t(i,j,k+1,nstp,itrc)+ &
869 & hz(i,j,k+1)*t(i,j,k ,nstp,itrc))- &
870 & hz(i,j,k+1)*fc(i,k-1))
875 fc(i,n(ng))=(3.0_r8*t(i,j,n(ng),nstp,itrc)- &
876 & fc(i,n(ng)-1))/(2.0_r8-cf(i,n(ng)))
878 fc(i,n(ng))=(2.0_r8*t(i,j,n(ng),nstp,itrc)- &
879 & fc(i,n(ng)-1))/(1.0_r8-cf(i,n(ng)))
884 fc(i,k)=fc(i,k)-cf(i,k+1)*fc(i,k+1)
894 tl_fc(i,0)=1.5_r8*tl_t(i,j,1,nstp,itrc)
899 tl_fc(i,0)=2.0_r8*tl_t(i,j,1,nstp,itrc)
905 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
906 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
907 cf(i,k+1)=cff*hz(i,j,k)
909 & (3.0_r8*(hz(i,j,k )* &
910 & tl_t(i,j,k+1,nstp,itrc)+ &
912 & tl_t(i,j,k ,nstp,itrc)+ &
914 & t(i,j,k+1,nstp,itrc)+ &
916 & t(i,j,k ,nstp,itrc))- &
917 & (tl_hz(i,j,k+1)*fc(i,k-1)+ &
918 & 2.0_r8*(tl_hz(i,j,k )+ &
919 & tl_hz(i,j,k+1))*fc(i,k)+ &
920 & tl_hz(i,j,k )*fc(i,k+1))- &
921 & hz(i,j,k+1)*tl_fc(i,k-1))
929 tl_fc(i,n(ng))=(3.0_r8*tl_t(i,j,n(ng),nstp,itrc)- &
930 & tl_fc(i,n(ng)-1))/ &
931 & (2.0_r8-cf(i,n(ng)))
936 tl_fc(i,n(ng))=(2.0_r8*tl_t(i,j,n(ng),nstp,itrc)- &
937 & tl_fc(i,n(ng)-1))/ &
938 & (1.0_r8-cf(i,n(ng)))
945 tl_fc(i,k)=tl_fc(i,k)-cf(i,k+1)*tl_fc(i,k+1)
948 tl_fc(i,k+1)=tl_w(i,j,k+1)*fc(i,k+1)+ &
949 & w(i,j,k+1)*tl_fc(i,k+1)
955 tl_fc(i,n(ng))=0.0_r8
965 fc(i,k+1)=w(i,j,k+1)*fc(i,k+1)
979 fc(i,k)=t(i,j,k+1,nstp,itrc)- &
980 & t(i,j,k ,nstp,itrc)
981 tl_fc(i,k)=tl_t(i,j,k+1,nstp,itrc)- &
982 & tl_t(i,j,k ,nstp,itrc)
987 tl_fc(i,0)=tl_fc(i,1)
988 fc(i,n(ng))=fc(i,n(ng)-1)
989 tl_fc(i,n(ng))=tl_fc(i,n(ng)-1)
993 cff=2.0_r8*fc(i,k)*fc(i,k-1)
994 tl_cff=2.0_r8*(tl_fc(i,k)*fc(i,k-1)+ &
995 & fc(i,k)*tl_fc(i,k-1))
997 cf(i,k)=cff/(fc(i,k)+fc(i,k-1))
998 tl_cf(i,k)=((fc(i,k)+fc(i,k-1))*tl_cff- &
999 & cff*(tl_fc(i,k)+tl_fc(i,k-1)))/ &
1000 & ((fc(i,k)+fc(i,k-1))*(fc(i,k)+fc(i,k-1)))
1011 & 0.5_r8*(t(i,j,k ,nstp,itrc)+ &
1012 & t(i,j,k+1,nstp,itrc)- &
1013 & cff1*(cf(i,k+1)-cf(i,k)))
1014 tl_fc(i,k)=0.5_r8* &
1016 & (t(i,j,k ,nstp,itrc)+ &
1017 & t(i,j,k+1,nstp,itrc)- &
1018 & cff1*(cf(i,k+1)-cf(i,k)))+ &
1020 & (tl_t(i,j,k ,nstp,itrc)+ &
1021 & tl_t(i,j,k+1,nstp,itrc)- &
1022 & cff1*(tl_cf(i,k+1)-tl_cf(i,k))))
1029 tl_fc(i,n(ng))=0.0_r8
1039 & 0.5_r8*(t(i,j,k ,nstp,itrc)+ &
1040 & t(i,j,k+1,nstp,itrc))
1041 tl_fc(i,k)=0.5_r8* &
1043 & (t(i,j,k ,nstp,itrc)+ &
1044 & t(i,j,k+1,nstp,itrc))+ &
1046 & (tl_t(i,j,k ,nstp,itrc)+ &
1047 & tl_t(i,j,k+1,nstp,itrc)))
1054 tl_fc(i,n(ng))=0.0_r8
1064 cff1=max(w(i,j,k),0.0_r8)
1065 cff2=min(w(i,j,k),0.0_r8)
1066 tl_cff1=(0.5_r8+sign(0.5_r8, w(i,j,k)))*tl_w(i,j,k)
1067 tl_cff2=(0.5_r8+sign(0.5_r8,-w(i,j,k)))*tl_w(i,j,k)
1071 tl_fc(i,k)=tl_cff1*t(i,j,k ,nstp,itrc)+ &
1072 & cff1*tl_t(i,j,k ,nstp,itrc)+ &
1073 & tl_cff2*t(i,j,k+1,nstp,itrc)+ &
1074 & cff2*tl_t(i,j,k+1,nstp,itrc)
1083 tl_fc(i,n(ng))=0.0_r8
1097 & (cff2*(t(i,j,k ,nstp,itrc)+ &
1098 & t(i,j,k+1,nstp,itrc))- &
1099 & cff3*(t(i,j,k-1,nstp,itrc)+ &
1100 & t(i,j,k+2,nstp,itrc)))
1101 tl_fc(i,k)=tl_w(i,j,k)* &
1102 & (cff2*(t(i,j,k ,nstp,itrc)+ &
1103 & t(i,j,k+1,nstp,itrc))- &
1104 & cff3*(t(i,j,k-1,nstp,itrc)+ &
1105 & t(i,j,k+2,nstp,itrc)))+ &
1107 & (cff2*(tl_t(i,j,k ,nstp,itrc)+ &
1108 & tl_t(i,j,k+1,nstp,itrc))- &
1109 & cff3*(tl_t(i,j,k-1,nstp,itrc)+ &
1110 & tl_t(i,j,k+2,nstp,itrc)))
1117 & (cff1*t(i,j,1,nstp,itrc)+ &
1118 & cff2*t(i,j,2,nstp,itrc)- &
1119 & cff3*t(i,j,3,nstp,itrc))
1120 tl_fc(i,1)=tl_w(i,j,1)* &
1121 & (cff1*t(i,j,1,nstp,itrc)+ &
1122 & cff2*t(i,j,2,nstp,itrc)- &
1123 & cff3*t(i,j,3,nstp,itrc))+ &
1125 & (cff1*tl_t(i,j,1,nstp,itrc)+ &
1126 & cff2*tl_t(i,j,2,nstp,itrc)- &
1127 & cff3*tl_t(i,j,3,nstp,itrc))
1128 fc(i,n(ng)-1)=w(i,j,n(ng)-1)* &
1129 & (cff1*t(i,j,n(ng) ,nstp,itrc)+ &
1130 & cff2*t(i,j,n(ng)-1,nstp,itrc)- &
1131 & cff3*t(i,j,n(ng)-2,nstp,itrc))
1132 tl_fc(i,n(ng)-1)=tl_w(i,j,n(ng)-1)* &
1133 & (cff1*t(i,j,n(ng) ,nstp,itrc)+ &
1134 & cff2*t(i,j,n(ng)-1,nstp,itrc)- &
1135 & cff3*t(i,j,n(ng)-2,nstp,itrc))+ &
1137 & (cff1*tl_t(i,j,n(ng) ,nstp,itrc)+ &
1138 & cff2*tl_t(i,j,n(ng)-1,nstp,itrc)- &
1139 & cff3*tl_t(i,j,n(ng)-2,nstp,itrc))
1141 tl_fc(i,n(ng))=0.0_r8
1156# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
1157 IF (
iic(ng).eq.
ntfirst(ng).and.soinitial(ng))
THEN
1163 cff=(1.0_r8-gamma)*
dt(ng)
1167 dc(i,k)=1.0_r8/(hz(i,j,k)- &
1168 & cff*pm(i,j)*pn(i,j)* &
1169 & (huon(i+1,j,k)-huon(i,j,k)+ &
1170 & hvom(i,j+1,k)-hvom(i,j,k)+ &
1171 & (w(i,j,k)-w(i,j,k-1))))
1172 tl_dc(i,k)=-dc(i,k)*dc(i,k)* &
1174 & cff*pm(i,j)*pn(i,j)* &
1175 & (tl_huon(i+1,j,k)-tl_huon(i,j,k)+ &
1176 & tl_hvom(i,j+1,k)-tl_hvom(i,j,k)+ &
1177 & (tl_w(i,j,k)-tl_w(i,j,k-1))))
1191 cff1=cff*pm(i,j)*pn(i,j)
1196 tl_t(i,j,k,3,itrc)=tl_dc(i,k)* &
1197 & (t(i,j,k,3,itrc)*hz(i,j,k)- &
1198 & cff1*(fc(i,k)-fc(i,k-1)))+ &
1200 & (tl_t(i,j,k,3,itrc)- &
1201 & cff1*(tl_fc(i,k)-tl_fc(i,k-1)))
1222 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
1223 tl_cff=-cff*cff*(tl_z_r(i,j,k+1)-tl_z_r(i,j,k))
1229 & (cff*(tl_akt(i,j,k,ltrc)* &
1230 & (t(i,j,k+1,nstp,itrc)- &
1231 & t(i,j,k ,nstp,itrc))+ &
1232 & akt(i,j,k,ltrc)* &
1233 & (tl_t(i,j,k+1,nstp,itrc)- &
1234 & tl_t(i,j,k ,nstp,itrc)))+ &
1235 & tl_cff*(akt(i,j,k,ltrc)* &
1236 & (t(i,j,k+1,nstp,itrc)- &
1237 & t(i,j,k,nstp,itrc))))
1241# ifdef LMD_NONLOCAL_NOT_YET
1248 IF (itrc.le.nat)
THEN
1254 tl_fc(i,k)=tl_fc(i,k)- &
1255 &
dt(ng)*(tl_akt(i,j,k,itrc)* &
1256 & ghats(i,j,k,itrc)+ &
1257 & akt(i,j,k,itrc)* &
1258 & tl_ghats(i,j,k,itrc))
1268 IF (itrc.eq.
itemp)
THEN
1278 tl_fc(i,k)=tl_fc(i,k)+ &
1279 &
dt(ng)*srflx(i,j)* &
1280# ifdef WET_DRY_NOT_YET
1294 tl_fc(i,0)=
dt(ng)*tl_btflx(i,j,itrc)
1297 tl_fc(i,n(ng))=
dt(ng)*tl_stflx(i,j,itrc)
1304 cff1=hz(i,j,k)*t(i,j,k,nstp,itrc)
1305 tl_cff1=tl_hz(i,j,k)*t(i,j,k,nstp,itrc)+ &
1306 & hz(i,j,k)*tl_t(i,j,k,nstp,itrc)
1307 cff2=fc(i,k)-fc(i,k-1)
1308 tl_cff2=tl_fc(i,k)-tl_fc(i,k-1)
1311 tl_t(i,j,k,nnew,itrc)=tl_cff1+tl_cff2
1312# ifdef DIAGNOSTICS_TS
1320# endif /* !TS_FIXED */
1330 j_loop2:
DO j=jstr,jend
1334 cff=1.0_r8/(z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
1335 & z_r(i,j,k )-z_r(i-1,j,k ))
1336 tl_cff=-cff*cff*(tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)- &
1337 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k ))
1342 & (cff*((tl_u(i,j,k+1,nstp)-tl_u(i,j,k,nstp))* &
1343 & (akv(i,j,k)+akv(i-1,j,k))+ &
1344 & (u(i,j,k+1,nstp)-u(i,j,k,nstp))* &
1345 & (tl_akv(i,j,k)+tl_akv(i-1,j,k)))+ &
1346 & tl_cff*(u(i,j,k+1,nstp)-u(i,j,k,nstp))* &
1347 & (akv(i,j,k)+akv(i-1,j,k)))
1360 tl_fc(i,n(ng))=0.0_r8
1364 tl_fc(i,0)=
dt(ng)*tl_bustr(i,j)
1367 tl_fc(i,n(ng))=
dt(ng)*tl_sustr(i,j)
1375 dc(i,0)=cff*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1378# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
1379 IF (
iic(ng).eq.
ntfirst(ng).and.soinitial(ng))
THEN
1387 tl_cff1=0.5_r8*(tl_u(i,j,k,nstp)* &
1388 & (hz(i,j,k)+hz(i-1,j,k))+ &
1390 & (tl_hz(i,j,k)+tl_hz(i-1,j,k)))
1393 tl_cff2=tl_fc(i,k)-tl_fc(i,k-1)
1396 tl_u(i,j,k,nnew)=tl_cff1+tl_cff2
1397# ifdef DIAGNOSTICS_UV
1406# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
1407 ELSE IF (
iic(ng).eq.(
ntfirst(ng)+1).and.soinitial(ng))
THEN
1415 tl_cff1=0.5_r8*(tl_u(i,j,k,nstp)* &
1416 & (hz(i,j,k)+hz(i-1,j,k))+ &
1418 & (tl_hz(i,j,k)+tl_hz(i-1,j,k)))
1421 tl_cff2=tl_fc(i,k)-tl_fc(i,k-1)
1427 tl_u(i,j,k,nnew)=tl_cff1- &
1428 & cff3*tl_ru(i,j,k,indx)+ &
1430# ifdef DIAGNOSTICS_UV
1444 cff1= 5.0_r8/12.0_r8
1445 cff2=16.0_r8/12.0_r8
1450 tl_cff3=0.5_r8*(tl_u(i,j,k,nstp)* &
1451 & (hz(i,j,k)+hz(i-1,j,k))+ &
1453 & (tl_hz(i,j,k)+tl_hz(i-1,j,k)))
1456 tl_cff4=tl_fc(i,k)-tl_fc(i,k-1)
1462 tl_u(i,j,k,nnew)=tl_cff3+ &
1463 & dc(i,0)*(cff1*tl_ru(i,j,k,nrhs)- &
1464 & cff2*tl_ru(i,j,k,indx))+ &
1466# ifdef DIAGNOSTICS_UV
1493 IF (j.ge.jstrv)
THEN
1497 cff=1.0_r8/(z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
1498 & z_r(i,j,k )-z_r(i,j-1,k ))
1499 tl_cff=-cff*cff*(tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)- &
1500 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k ))
1505 & (cff*((tl_v(i,j,k+1,nstp)-tl_v(i,j,k,nstp))* &
1506 & (akv(i,j,k)+akv(i,j-1,k))+ &
1507 & (v(i,j,k+1,nstp)-v(i,j,k,nstp))* &
1508 & (tl_akv(i,j,k)+tl_akv(i,j-1,k)))+ &
1509 & tl_cff*(v(i,j,k+1,nstp)-v(i,j,k,nstp))* &
1510 & (akv(i,j,k)+akv(i,j-1,k)))
1523 tl_fc(i,n(ng))=0.0_r8
1527 tl_fc(i,0)=
dt(ng)*tl_bvstr(i,j)
1530 tl_fc(i,n(ng))=
dt(ng)*tl_svstr(i,j)
1538 dc(i,0)=cff*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1540# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
1541 IF (
iic(ng).eq.
ntfirst(ng).and.soinitial(ng))
THEN
1549 tl_cff1=0.5_r8*(tl_v(i,j,k,nstp)* &
1550 & (hz(i,j,k)+hz(i,j-1,k))+ &
1552 & (tl_hz(i,j,k)+tl_hz(i,j-1,k)))
1555 tl_cff2=tl_fc(i,k)-tl_fc(i,k-1)
1558 tl_v(i,j,k,nnew)=tl_cff1+tl_cff2
1559# ifdef DIAGNOSTICS_UV
1568# if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
1569 ELSE IF (
iic(ng).eq.(
ntfirst(ng)+1).and.soinitial(ng))
THEN
1577 tl_cff1=0.5_r8*(tl_v(i,j,k,nstp)* &
1578 & (hz(i,j,k)+hz(i,j-1,k))+ &
1580 & (tl_hz(i,j,k)+tl_hz(i,j-1,k)))
1583 tl_cff2=tl_fc(i,k)-tl_fc(i,k-1)
1589 tl_v(i,j,k,nnew)=tl_cff1- &
1590 & cff3*tl_rv(i,j,k,indx)+ &
1592# ifdef DIAGNOSTICS_UV
1606 cff1= 5.0_r8/12.0_r8
1607 cff2=16.0_r8/12.0_r8
1612 tl_cff3=0.5_r8*(tl_v(i,j,k,nstp)* &
1613 & (hz(i,j,k)+hz(i,j-1,k))+ &
1615 & (tl_hz(i,j,k)+tl_hz(i,j-1,k)))
1618 tl_cff4=tl_fc(i,k)-tl_fc(i,k-1)
1624 tl_v(i,j,k,nnew)=tl_cff3+ &
1625 & dc(i,0)*(cff1*tl_rv(i,j,k,nrhs)- &
1626 & cff2*tl_rv(i,j,k,indx))+ &
1628# ifdef DIAGNOSTICS_UV
1667 & lbi, ubi, lbj, ubj, n(ng), nt(ng), &
1668 & imins, imaxs, jmins, jmaxs, &
1678 & lbi, ubi, lbj, ubj, 1, n(ng), &
1679 & tl_t(:,:,:,3,itrc))
1691 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &