251 atmos_thermodyn_temp_pres
253 hydrometeor_lhv => atmos_hydrometeor_lhv, &
254 hydrometeor_lhs => atmos_hydrometeor_lhs, &
259 atmos_saturation_dens2qsat => atmos_saturation_dens2qsat_all
266 real(RP),
intent(out) :: qflx_sgs_momz(KA,IA,JA,3)
267 real(RP),
intent(out) :: qflx_sgs_momx(KA,IA,JA,3)
268 real(RP),
intent(out) :: qflx_sgs_momy(KA,IA,JA,3)
269 real(RP),
intent(out) :: qflx_sgs_rhot(KA,IA,JA,3)
270 real(RP),
intent(out) :: qflx_sgs_rhoq(KA,IA,JA,3,QA)
272 real(RP),
intent(inout) :: RHOQ_t (KA,IA,JA,QA)
274 real(RP),
intent(out) :: Nu (KA,IA,JA)
275 real(RP),
intent(out) :: Ri (KA,IA,JA)
276 real(RP),
intent(out) :: Pr (KA,IA,JA)
278 real(RP),
intent(in) :: MOMZ (KA,IA,JA)
279 real(RP),
intent(in) :: MOMX (KA,IA,JA)
280 real(RP),
intent(in) :: MOMY (KA,IA,JA)
281 real(RP),
intent(in) :: RHOT (KA,IA,JA)
282 real(RP),
intent(in) :: DENS (KA,IA,JA)
283 real(RP),
intent(in) :: QTRC (KA,IA,JA,QA)
284 real(RP),
intent(in) :: N2_in (KA,IA,JA)
286 real(RP),
intent(in) :: SFLX_MW (IA,JA)
287 real(RP),
intent(in) :: SFLX_MU (IA,JA)
288 real(RP),
intent(in) :: SFLX_MV (IA,JA)
289 real(RP),
intent(in) :: SFLX_SH (IA,JA)
290 real(RP),
intent(in) :: SFLX_Q (IA,JA,QA)
292 real(RP),
intent(in) :: GSQRT (KA,IA,JA,7)
293 real(RP),
intent(in) :: J13G (KA,IA,JA,7)
294 real(RP),
intent(in) :: J23G (KA,IA,JA,7)
295 real(RP),
intent(in) :: J33G
296 real(RP),
intent(in) :: MAPF (IA,JA,2,4)
297 real(DP),
intent(in) :: dt
299 real(RP) :: U (KA,IA,JA)
300 real(RP) :: V (KA,IA,JA)
301 real(RP) :: N2 (KA,IA,JA)
302 real(RP) :: phiN (KA,IA,JA)
304 real(RP) :: sm (KA,IA,JA)
305 real(RP) :: sh (KA,IA,JA)
306 real(RP) :: l (KA,IA,JA)
307 real(RP) :: q (KA,IA,JA)
308 real(RP) :: dudz2(KA,IA,JA)
309 real(RP) :: q2_2 (KA,IA,JA)
311 real(RP) :: RHOKh(KA,IA,JA)
313 real(RP) :: SFLX_PT(IA,JA)
315 real(RP) :: a(KA,IA,JA)
316 real(RP) :: b(KA,IA,JA)
317 real(RP) :: c(KA,IA,JA)
318 real(RP) :: d(KA,IA,JA)
320 real(RP) :: tke_N(KA,IA,JA)
323 real(RP) :: POTT(KA,IA,JA)
324 real(RP) :: POTV(KA,IA,JA)
325 real(RP) :: POTL(KA,IA,JA)
326 real(RP) :: TEML(KA,IA,JA)
328 real(RP) :: Qw(KA,IA,JA)
329 real(RP) :: qdry(KA,IA,JA)
334 real(RP) :: temp(KA,IA,JA)
335 real(RP) :: pres(KA,IA,JA)
337 real(RP) :: LHV (KA,IA,JA)
338 real(RP) :: LHS (KA,IA,JA)
358 real(RP) :: gen(KA,IA,JA)
364 integer :: k, i, j, iq
367 if( io_l )
write(io_fid_log, *)
"*** Atmos physics step: Turbulence (MYNN)" 375 #if defined DEBUG || defined QUICKDEBUG 376 qflx_sgs_momz(ks:ke, 1:
is-1, : ,:) = undef
377 qflx_sgs_momz(ks:ke,
ie+1:ia , : ,:) = undef
378 qflx_sgs_momz(ks:ke, : , 1:
js-1,:) = undef
379 qflx_sgs_momz(ks:ke, : ,
je+1:ja ,:) = undef
380 qflx_sgs_momx(ks:ke, 1:
is-1, : ,:) = undef
381 qflx_sgs_momx(ks:ke,
ie+1:ia , : ,:) = undef
382 qflx_sgs_momx(ks:ke, : , 1:
js-1,:) = undef
383 qflx_sgs_momx(ks:ke, : ,
je+1:ja ,:) = undef
384 qflx_sgs_momy(ks:ke, 1:
is-1, : ,:) = undef
385 qflx_sgs_momy(ks:ke,
ie+1:ia , : ,:) = undef
386 qflx_sgs_momy(ks:ke, : , 1:
js-1,:) = undef
387 qflx_sgs_momy(ks:ke, : ,
je+1:ja ,:) = undef
394 qflx_sgs_momz(k,i,j,
xdir) = 0.0_rp
402 qflx_sgs_momx(k,i,j,
xdir) = 0.0_rp
411 qflx_sgs_momy(k,i,j,
xdir) = 0.0_rp
419 qflx_sgs_rhot(k,i,j,
xdir) = 0.0_rp
428 qflx_sgs_rhoq(k,i,j,
xdir,iq) = 0.0_rp
438 qflx_sgs_momz(k,i,j,
ydir) = 0.0_rp
446 qflx_sgs_momx(k,i,j,
ydir) = 0.0_rp
454 qflx_sgs_momy(k,i,j,
ydir) = 0.0_rp
462 qflx_sgs_rhot(k,i,j,
ydir) = 0.0_rp
471 qflx_sgs_rhoq(k,i,j,
ydir,iq) = 0.0_rp
480 qflx_sgs_momz(k,i,j,
zdir) = 0.0_rp
496 u(k,i,j) = 0.5_rp * ( momx(k,i,j) + momx(k,i-1,j) ) / dens(k,i,j)
505 v(k,i,j) = 0.5_rp * ( momy(k,i,j) + momy(k,i,j-1) ) / dens(k,i,j)
513 call atmos_thermodyn_temp_pres( temp, pres, &
518 call hydrometeor_lhv( lhv(:,:,:), temp(:,:,:) )
519 call hydrometeor_lhs( lhs(:,:,:), temp(:,:,:) )
535 if ( i_qv > 0 ) qv = qtrc(k,i,j,i_qv)
538 if ( i_qc > 0 ) ql = qtrc(k,i,j,i_qc)
543 if ( i_qi > 0 ) qs = qtrc(k,i,j,i_qi)
547 calc_qdry(qdry(k,i,j), qtrc,
tracer_mass, k, i, j, iq)
549 qw(k,i,j) = qv + ql + qs
551 cptot = cpdry * qdry(k,i,j) + cpvap * qv
553 pott(k,i,j) = rhot(k,i,j) / dens(k,i,j)
555 potl(k,i,j) = pott(k,i,j) * (1.0_rp - 1.0_rp * (lhv(k,i,j) * ql + lhs(k,i,j) * qs) / ( temp(k,i,j) * cptot ) )
556 teml(k,i,j) = potl(k,i,j) * temp(k,i,j) / pott(k,i,j)
560 potv(k,i,j) = ( qdry(k,i,j) + (epstvap+1.0_rp) * qv ) * pott(k,i,j)
564 sflx_pt(i,j) = sflx_sh(i,j) / ( cpdry * dens(ks,i,j) ) &
565 * pott(ks,i,j) / temp(ks,i,j)
568 n2(k,i,j) = min( atmos_phy_tb_mynn_n2_max, n2_in(k,i,j) )
571 dudz2(ks,i,j) = ( ( u(ks+1,i,j) - u(ks,i,j) )**2 + ( v(ks+1,i,j) - v(ks,i,j) )**2 ) &
572 / ( cz(ks+1,i,j) - cz(ks,i,j) )**2
574 dudz2(k,i,j) = ( ( u(k+1,i,j) - u(k-1,i,j) )**2 + ( v(k+1,i,j) - v(k-1,i,j) )**2 ) &
575 / ( cz(k+1,i,j) - cz(k-1,i,j) )**2
579 ri(k,i,j) = n2(k,i,j) / max(dudz2(k,i,j), 1e-10_rp)
585 if ( atmos_phy_tb_mynn_tke_init )
then 590 q(k,i,j) = sqrt( tke_min*2.0_rp )
599 q(k,i,j) = sqrt( max(qtrc(k,i,j,i_tke), tke_min)*2.0_rp )
610 sflx_mu, sflx_mv, sflx_pt, &
613 call get_q2_level2( &
617 if ( atmos_phy_tb_mynn_tke_init )
then 622 tke = max(q2_2(k,i,j) * 0.5_rp, tke_min)
623 q(k,i,j) = sqrt( tke * 2.0_rp )
628 atmos_phy_tb_mynn_tke_init = .false.
631 call get_smsh( sm, sh, &
635 #if defined DEBUG || defined QUICKDEBUG 639 teml(k,i,j) = 300.0_rp
646 teml(k,i,j) = 300.0_rp
653 teml(k,i,j) = 300.0_rp
658 teml(k,i,j) = 300.0_rp
674 call atmos_saturation_dens2qsat( qsl(:), &
675 teml(:,i,j), dens(:,i,j) )
677 call hydrometeor_lhv( lhvl(:), teml(:,i,j) )
681 dqsl = ( qsl(k) * lhvl(k) / ( rvap * teml(k,i,j) ) - qsl(k) ) / teml(k,i,j)
682 cptot = qdry(k,i,j) * cpdry + qsl(k) * cpvap
683 aa = 1.0_rp / ( 1.0_rp + lhvl(k)/cptot * dqsl )
684 bb = temp(k,i,j) / pott(k,i,j) * dqsl
685 ac = min( q(k,i,j)/sqrt(q2_2(k,i,j)), 1.0_rp )
686 sigma_s = max( sqrt( 0.25_rp * aa**2 * l(k,i,j)**2 * ac * b2 * sh(k,i,j) ) &
687 * abs( qw(k+1,i,j) - qw(k-1,i,j) - bb * ( potl(k+1,i,j)-potl(k-1,i,j) ) ) &
688 / ( cz(k+1,i,j) - cz(k-1,i,j) ), &
690 q1 = aa * ( qw(k,i,j) - qsl(k) ) * 0.5_rp / sigma_s
691 rr = min( max( 0.5_rp * ( 1.0_rp + erf(q1*rsqrt_2) ), 0.0_rp ), 1.0_rp )
692 #if defined(PGI) || defined(SX) 693 ql = min( max( 2.0_rp * sigma_s * ( rr * q1 + rsqrt_2pi * exp( -min( 0.5_rp*q1**2, 1.e+3_rp ) ) ), &
695 ql = min( max( 2.0_rp * sigma_s * ( rr * q1 + rsqrt_2pi * exp(-0.5_rp*q1**2) ), &
699 cc = ( 1.0_rp + epstvap * qw(k,i,j) - (1.0_rp+epstvap) * ql ) * pott(k,i,j)/temp(k,i,j) * lhvl(k) / cptot &
700 - (1.0_rp+epstvap) * pott(k,i,j)
701 #if defined(PGI) || defined(SX) 702 rt = min( max( rr - ql / (2.0_rp*sigma_s*sqrt_2pi) * exp( -min( 0.5_rp*q1**2, 1.e+3_rp ) ), 0.0_rp ), 1.0_rp )
704 rt = min( max( rr - ql / (2.0_rp*sigma_s*sqrt_2pi) * exp(-q1**2 * 0.5_rp), 0.0_rp ), 1.0_rp )
706 betat = 1.0_rp + epstvap * qw(k,i,j) - (1.0_rp+epstvap) * ql - rt * aa * bb * cc
707 betaq = epstvap * pott(k,i,j) + rt * aa * cc
708 n2(k,i,j) = min(atmos_phy_tb_mynn_n2_max, &
709 grav * ( ( potl(k+1,i,j) - potl(k-1,i,j) ) * betat &
710 + ( qw(k+1,i,j) - qw(k-1,i,j) ) * betaq ) &
711 / ( cz(k+1,i,j) - cz(k-1,i,j) ) / potv(k,i,j) )
713 n2(ks,i,j) = n2(ks+1,i,j)
716 ri(k,i,j) = n2(k,i,j) / max(dudz2(k,i,j), 1e-10_rp)
731 sflx_mu, sflx_mv, sflx_pt, &
734 call get_q2_level2( &
753 nu(k,i,j) = max( min( l(k,i,j) * q(k,i,j) * sm(k,i,j), &
754 atmos_phy_tb_mynn_nu_max ), &
755 atmos_phy_tb_mynn_nu_min )
762 kh = max( min( l(k,i,j) * q(k,i,j) * sh(k,i,j), &
763 atmos_phy_tb_mynn_kh_max ), &
764 atmos_phy_tb_mynn_kh_min )
765 rhokh(k,i,j) = dens(k,i,j) * kh
766 pr(k,i,j) = nu(k,i,j) / kh
774 call comm_vars( nu, 1 )
787 ap = - dt * 0.5_rp * ( dens(ks ,i,j)*nu(ks ,i,j) &
788 + dens(ks+1,i,j)*nu(ks+1,i,j) ) &
789 * rfdz(ks) / gsqrt(ks,i,j,
i_xyw)
790 a(ks,i,j) = ap * rcdz(ks) / ( dens(ks,i,j) * gsqrt(ks,i,j,
i_xyz) )
792 b(ks,i,j) = - a(ks,i,j) + 1.0_rp
793 do k = ks+1, ke_pbl-1
794 c(k,i,j) = ap * rcdz(k) / ( dens(k,i,j) * gsqrt(k,i,j,
i_xyz) )
795 ap = - dt * 0.5_rp * ( dens(k ,i,j)*nu(k ,i,j) &
796 + dens(k+1,i,j)*nu(k+1,i,j) ) &
797 * rfdz(k) / gsqrt(k,i,j,
i_xyw)
798 a(k,i,j) = ap * rcdz(k) / ( dens(k,i,j) * gsqrt(k,i,j,
i_xyz) )
799 b(k,i,j) = - a(k,i,j) - c(k,i,j) + 1.0_rp
801 a(ke_pbl,i,j) = 0.0_rp
802 c(ke_pbl,i,j) = ap * rcdz(ke_pbl) / ( dens(ke_pbl,i,j) * gsqrt(ke_pbl,i,j,
i_xyz) )
803 b(ke_pbl,i,j) = - c(ke_pbl,i,j) + 1.0_rp
805 d(ks,i,j) = u(ks,i,j) + dt * sflx_mu(i,j) * rcdz(ks) / ( dens(ks,i,j) * gsqrt(ks,i,j,
i_xyz) )
809 call diffusion_solver( &
811 a(:,i,j), b(:,i,j), c(:,i,j), d(:,i,j), &
816 call comm_vars( phin, 2 )
817 call comm_wait( nu, 1 )
818 call comm_wait( phin, 2 )
829 qflx_sgs_momx(k,i,j,
zdir) = - 0.03125_rp &
830 * ( dens(k,i,j) + dens(k+1,i,j) + dens(k,i+1,j) + dens(k+1,i+1,j) ) &
831 * ( nu(k,i,j) + nu(k+1,i,j) + nu(k,i+1,j) + nu(k+1,i+1,j) ) &
832 * ( (phin(k+1,i,j)+phin(k+1,i+1,j)) - (phin(k,i,j)+phin(k,i+1,j)) ) &
833 * j33g * rfdz(k) / gsqrt(k,i,j,
i_uyw)
839 qflx_sgs_momx(ks-1,i,j,
zdir) = 0.0_rp
845 qflx_sgs_momx(k,i,j,
zdir) = 0.0_rp
858 d(ks,i,j) = v(ks,i,j) + dt * sflx_mv(i,j) * rcdz(ks) / ( dens(ks,i,j) * gsqrt(ks,i,j,
i_xyz) )
862 call diffusion_solver( &
864 a(:,i,j), b(:,i,j), c(:,i,j), d(:,i,j), &
872 call comm_vars( phin, 1 )
873 call comm_wait( phin, 1 )
882 qflx_sgs_momy(ks-1,i,j,
zdir) = 0.0_rp
884 qflx_sgs_momy(k,i,j,
zdir) = - 0.03125_rp &
885 * ( dens(k,i,j) + dens(k+1,i,j) + dens(k,i,j+1) + dens(k+1,i,j+1) ) &
886 * ( nu(k,i,j) + nu(k+1,i,j) + nu(k,i,j+1) + nu(k+1,i,j+1) ) &
887 * ( (phin(k+1,i,j)+phin(k+1,i,j+1)) - (phin(k,i,j)+phin(k,i,j+1)) ) &
888 * j33g * rfdz(k) / gsqrt(k,i,j,
i_xvw)
891 qflx_sgs_momy(k,i,j,
zdir) = 0.0_rp
902 ap = - dt * 0.5_rp * ( rhokh(ks,i,j) + rhokh(ks+1,i,j) ) &
903 * rfdz(ks) / gsqrt(ks,i,j,
i_xyw)
904 a(ks,i,j) = ap * rcdz(ks) / (dens(ks,i,j) * gsqrt(ks,i,j,
i_xyz) )
906 b(ks,i,j) = - a(ks,i,j) + 1.0_rp
907 do k = ks+1, ke_pbl-1
908 c(k,i,j) = ap * rcdz(k) / (dens(k,i,j) * gsqrt(k,i,j,
i_xyz) )
909 ap = - dt * 0.5_rp * ( rhokh(k,i,j) + rhokh(k+1,i,j) ) &
910 * rfdz(k) / gsqrt(k,i,j,
i_xyw)
911 a(k,i,j) = ap * rcdz(k) / ( dens(k,i,j) * gsqrt(k,i,j,
i_xyz) )
912 b(k,i,j) = - a(k,i,j) - c(k,i,j) + 1.0_rp
914 a(ke_pbl,i,j) = 0.0_rp
915 c(ke_pbl,i,j) = ap * rcdz(ke_pbl) / (dens(ke_pbl,i,j) * gsqrt(ke_pbl,i,j,
i_xyz) )
916 b(ke_pbl,i,j) = - c(ke_pbl,i,j) + 1.0_rp
917 d(ks,i,j) = pott(ks,i,j) + dt * sflx_pt(i,j) * rcdz(ks) / gsqrt(ks,i,j,
i_xyz)
919 d(k,i,j) = pott(k,i,j)
921 call diffusion_solver( &
923 a(:,i,j), b(:,i,j), c(:,i,j), d(:,i,j), &
933 qflx_sgs_rhot(ks-1,i,j,
zdir) = 0.0_rp
935 qflx_sgs_rhot(k,i,j,
zdir) = - 0.5_rp &
936 * ( rhokh(k,i,j) + rhokh(k+1,i,j) ) &
937 * j33g * ( phin(k+1,i,j) - phin(k,i,j) ) * rfdz(k) / gsqrt(k,i,j,
i_xyw)
940 qflx_sgs_rhot(k,i,j,
zdir) = 0.0_rp
949 if ( iq == i_tke )
then 950 qflx_sgs_rhoq(:,:,:,
zdir,iq) = 0.0_rp
962 d(ks,i,j) = qtrc(ks,i,j,iq) &
963 + dt * sflx_q(i,j,iq) * rcdz(ks) / ( dens(ks,i,j) * gsqrt(ks,i,j,
i_xyz) )
966 d(k,i,j) = qtrc(k,i,j,iq)
969 call diffusion_solver( &
971 a(:,i,j), b(:,i,j), c(:,i,j), d(:,i,j), &
982 qflx_sgs_rhoq(ks-1,i,j,
zdir,iq) = 0.0_rp
984 qflx_sgs_rhoq(k,i,j,
zdir,iq) = - 0.5_rp &
985 * ( rhokh(k,i,j) + rhokh(k+1,i,j) ) &
986 * j33g * ( phin(k+1,i,j) - phin(k,i,j) ) * rfdz(k) / gsqrt(k,i,j,
i_xyw)
989 qflx_sgs_rhoq(k,i,j,
zdir,iq) = 0.0_rp
1002 tke = q(ks,i,j)**2 * 0.5
1004 + dt * nu(ks,i,j) * ( dudz2(ks,i,j) - n2(ks,i,j)/pr(ks,i,j) )
1006 gen(ks,i,j) = nu(ks,i,j) * ( dudz2(ks,i,j) - n2(ks,i,j)/pr(ks,i,j) )
1008 do k = ks+1, ke_pbl-1
1009 tke = q(k,i,j)**2 * 0.5
1011 + dt * nu(k,i,j) * ( dudz2(k,i,j) - n2(k,i,j)/pr(k,i,j) )
1013 gen(k,i,j) = nu(k,i,j) * ( dudz2(k,i,j) - n2(k,i,j)/pr(k,i,j) )
1016 tke = q(ke_pbl,i,j)**2 * 0.5
1017 d(ke_pbl,i,j) = tke &
1018 + dt * nu(ke_pbl,i,j) * ( dudz2(ke_pbl,i,j) - n2(ke_pbl,i,j)/pr(ke_pbl,i,j) )
1020 gen(ke_pbl,i,j) = nu(ke_pbl,i,j) * ( dudz2(ke_pbl,i,j) - n2(ke_pbl,i,j)/pr(ke_pbl,i,j) )
1032 ap = - dt * 1.5_rp * ( dens(ks ,i,j)*nu(ks ,i,j) &
1033 + dens(ks+1,i,j)*nu(ks+1,i,j) ) &
1034 * rfdz(ks) / gsqrt(ks,i,j,
i_xyw)
1035 a(ks,i,j) = ap * rcdz(ks) / ( dens(ks,i,j) * gsqrt(ks,i,j,
i_xyz) )
1037 b(ks,i,j) = - a(ks,i,j) + 1.0_rp + 2.0_rp * dt * q(ks,i,j) / ( b1 * l(ks,i,j) )
1038 do k = ks+1, ke_pbl-1
1039 c(k,i,j) = ap * rcdz(k) / ( dens(k,i,j) * gsqrt(k,i,j,
i_xyz) )
1040 ap = - dt * 1.5_rp * ( dens(k ,i,j)*nu(k ,i,j) &
1041 + dens(k+1,i,j)*nu(k+1,i,j)) &
1042 * rfdz(k) / gsqrt(k,i,j,
i_xyw)
1043 a(k,i,j) = ap * rcdz(k) / ( dens(k,i,j) * gsqrt(k,i,j,
i_xyz) )
1044 b(k,i,j) = - a(k,i,j) - c(k,i,j) + 1.0_rp + 2.0_rp * dt * q(k,i,j) / ( b1 * l(k,i,j) )
1047 a(ke_pbl,i,j) = 0.0_rp
1048 c(ke_pbl,i,j) = ap * rcdz(ke_pbl) / ( dens(ke_pbl,i,j) * gsqrt(ke_pbl,i,j,
i_xyz) )
1049 b(ke_pbl,i,j) = - c(ke_pbl,i,j) + 1.0_rp + 2.0_rp * dt * q(ke_pbl,i,j) / ( b1 * l(ke_pbl,i,j) )
1050 call diffusion_solver( &
1052 a(:,i,j), b(:,i,j), c(:,i,j), d(:,i,j), &
1055 rhoq_t(k,i,j,i_tke) = ( max(tke_n(k,i,j), tke_min) - qtrc(k,i,j,i_tke) ) * dens(k,i,j) / dt
1058 rhoq_t(k,i,j,i_tke) = 0.0_rp
1068 gen(ke_pbl+1:ke,:,:) = 0.0_rp
1069 dudz2(ke_pbl+1:ke,:,:) = 0.0_rp
1070 l(ke_pbl+1:ke,:,:) = 0.0_rp
1071 potv(ke_pbl+1:ke,:,:) = 0.0_rp
1072 potl(ke_pbl+1:ke,:,:) = 0.0_rp
1073 call hist_in(gen,
'TKE_gen',
'generation of TKE',
'm2/s3', nohalo=.true.)
1074 call hist_in(dudz2,
'dUdZ2',
'dudz2',
'm2/s2', nohalo=.true.)
1075 call hist_in(l,
'L_mix',
'minxing length',
'm', nohalo=.true.)
1076 call hist_in(potv,
'POTV',
'virtual potential temperature',
'K', nohalo=.true.)
1077 call hist_in(potl,
'POTL',
'liquid potential temperature',
'K', nohalo=.true.)
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
module ATMOSPHERE / Saturation adjustment
subroutine, public atmos_phy_tb_diffusion_solver(phi, a, b, c, d, KE_TB)
real(rp), dimension(qa_max), public tracer_r
integer, public iblock
block size for cache blocking: x
integer, parameter, public zdir
integer, parameter, public ydir
integer, parameter, public xdir
logical, dimension(qa_max), public tracer_advc
real(rp), dimension(:,:,:), allocatable, public real_cz
geopotential height [m] (cell center)
real(rp), dimension(:), allocatable, public grid_rcdz
reciprocal of center-dz
real(rp), dimension(qa_max), public tracer_cv
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
real(rp), parameter, public const_lhv0
latent heat of vaporizaion at 0C [J/kg]
integer, public jblock
block size for cache blocking: y
real(rp), public const_grav
standard acceleration of gravity [m/s2]
integer, public js
start point of inner domain: y, local
real(rp), public const_epstvap
1 / epsilon - 1
real(rp), parameter, public const_rvap
specific gas constant (water vapor) [J/kg/K]
module ATMOSPHERE / Physics Turbulence
integer, public ie
end point of inner domain: x, local
module ATMOSPHERE / Thermodynamics
real(rp), dimension(:), allocatable, public grid_rfdz
reciprocal of face-dz
real(rp), parameter, public const_cpvap
specific heat (water vapor, constant pressure) [J/kg/K]
real(rp), dimension(qa_max), public tracer_mass