26 subroutine mp_tempo_main(qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, qb1d, ni1d, nr1d, nc1d, ng1d, &
27 nwfa1d, nifa1d, t1d, p1d, w1d, dzq, pptrain, pptsnow, pptgraul, pptice, &
32#if defined(ccpp_default)
35 ext_diag, sedi_semi, &
36 prw_vcdc1, prw_vcde1, &
37 tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, &
38 tprs_sde1_d, tprs_sde1_s, &
39 tprg_gde1_d, tprg_gde1_s, tpri_iha1, tpri_wfz1, &
40 tpri_rfz1, tprg_rfz1, tprs_scw1, tprg_scw1,&
41 tprg_rcs1, tprs_rcs1, tprr_rci1, &
42 tprg_rcg1, tprw_vcd1_c, &
43 tprw_vcd1_e, tprr_sml1, tprr_gml1, tprr_rcg1, &
44 tprr_rcs1, tprv_rev1, &
45 tten1, qvten1, qrten1, qsten1, &
46 qgten1, qiten1, niten1, nrten1, ncten1, qcten1, &
48 decfl, pfil1, pfll1, &
49 lsml, rand1, rand2, rand3, &
50 kts, kte, dt, ii, jj, &
53#if defined(ccpp_default) && defined (MPI)
58 integer,
intent(in) :: kts, kte, ii, jj
59 real(wp),
dimension(kts:kte),
intent(inout) :: qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, qb1d, &
60 ni1d, nr1d, nc1d, ng1d, nwfa1d, nifa1d, t1d
61 real(wp),
dimension(kts:kte),
intent(in) :: p1d, w1d, dzq
62 real(wp),
intent(inout) :: pptrain, pptsnow, pptgraul, pptice
63 real(wp),
intent(in) :: dt
67 integer,
intent(in),
optional :: lsml
68 real(wp),
intent(in),
optional :: rand1, rand2, rand3
69 real(wp),
dimension(kts:kte),
intent(out),
optional :: pfil1, pfll1
70 integer,
intent(in),
optional :: decfl
71#if defined(ccpp_default)
73 logical,
intent(in) :: ext_diag
74 logical,
intent(in) :: sedi_semi
75 real(wp),
optional,
dimension(:),
intent(out) :: &
77 prw_vcde1, tpri_inu1, tpri_ide1_d, &
78 tpri_ide1_s, tprs_ide1, &
79 tprs_sde1_d, tprs_sde1_s, tprg_gde1_d, &
80 tprg_gde1_s, tpri_iha1, tpri_wfz1, &
81 tpri_rfz1, tprg_rfz1, tprs_scw1, tprg_scw1, &
82 tprg_rcs1, tprs_rcs1, &
83 tprr_rci1, tprg_rcg1, &
84 tprw_vcd1_c, tprw_vcd1_e, tprr_sml1, &
85 tprr_gml1, tprr_rcg1, &
86 tprr_rcs1, tprv_rev1, tten1, qvten1, &
87 qrten1, qsten1, qgten1, qiten1, niten1, &
88 nrten1, ncten1, qcten1
92 real(wp),
dimension(kts:kte),
intent(inout) :: rainprod, evapprod
97 real(wp),
dimension(kts:kte) :: tten, qvten, qcten, qiten, qrten, &
98 qsten, qgten, qbten, niten, nrten, ncten, ngten, nwfaten, nifaten
100 real(dp),
dimension(kts:kte) :: prw_vcd
102 real(dp),
dimension(kts:kte) :: pnc_wcd, pnc_wau, pnc_rcw, pnc_scw, pnc_gcw
104 real(dp),
dimension(kts:kte) :: pna_rca, pna_sca, pna_gca, pnd_rcd, pnd_scd, pnd_gcd
106 real(dp),
dimension(kts:kte) :: prr_wau, prr_rcw, prr_rcs, &
107 prr_rcg, prr_sml, prr_gml, &
109 pnr_wau, pnr_rcs, pnr_rcg, &
110 pnr_rci, pnr_sml, pnr_gml, &
111 pnr_rev, pnr_rcr, pnr_rfz
113 real(dp),
dimension(kts:kte) :: pri_inu, pni_inu, pri_ihm, &
114 pni_ihm, pri_wfz, pni_wfz, &
115 pri_rfz, pni_rfz, pri_ide, &
116 pni_ide, pri_rci, pni_rci, &
117 pni_sci, pni_iau, pri_iha, pni_iha
119 real(dp),
dimension(kts:kte) :: prs_iau, prs_sci, prs_rcs, prs_scw, prs_sde, prs_ihm, prs_ide
121 real(dp),
dimension(kts:kte) :: prg_scw, prg_rfz, prg_gde, &
122 prg_gcw, prg_rci, prg_rcs, prg_rcg, prg_ihm, &
123 png_rcs, png_rcg, png_scw, png_gde, &
124 pbg_scw, pbg_rfz, pbg_gcw, pbg_rci, pbg_rcs, pbg_rcg, &
127 real(dp),
parameter :: zerod0 = 0.0d0
129 real(wp),
dimension(kts:kte) :: pfll, pfil, pdummy
130 real(wp) :: dtcfl, rainsfc, graulsfc, orhodt
132 real(wp),
dimension(kts:kte) :: rr_tmp, nr_tmp, rg_tmp
134 real(wp),
dimension(kts:kte) :: temp, twet, pres, qv
135 real(wp),
dimension(kts:kte) :: rc, ri, rr, rs, rg, rb
136 real(wp),
dimension(kts:kte) :: ni, nr, nc, ns, ng, nwfa, nifa
137 real(wp),
dimension(kts:kte) :: rho, rhof, rhof2
138 real(wp),
dimension(kts:kte) :: qvs, qvsi, delqvs
139 real(wp),
dimension(kts:kte) :: satw, sati, ssatw, ssati
140 real(wp),
dimension(kts:kte) :: diffu, visco, vsc2, &
141 tcond, lvap, ocp, lvt2
143 real(dp),
dimension(kts:kte) :: ilamr, ilamg, n0_r, n0_g
145 real(wp),
dimension(kts:kte) :: mvd_r, mvd_c, mvd_g
146 real(wp),
dimension(kts:kte) :: smob, smo2, smo1, smo0, &
147 smoc, smod, smoe, smof, smog
149 real(wp),
dimension(kts:kte) :: sed_r, sed_s, sed_g, sed_i, sed_n, sed_c, sed_b
151 real(wp) :: rgvm, delta_tp, orho, lfus2
152 real(wp),
dimension(5):: onstep
153 real(dp) :: n0_exp, n0_min, lam_exp, lamc, lamr, lamg
154 real(dp) :: lami, ilami, ilamc
155 real(wp) :: xdc, dc_b, dc_g, xdi, xdr, xds, xdg, ds_m, dg_m
156 real(dp) :: dr_star, dc_star
157 real(wp) :: zeta1, zeta, taud, tau
158 real(wp) :: stoke_r, stoke_s, stoke_g, stoke_i
159 real(wp) :: vti, vtr, vts, vtg, vtc
160 real(wp) :: xrho_g, afall, vtg1, vtg2
161 real(wp) :: bfall = 3*b_coeff - 1
162 real(wp),
dimension(kts:kte+1) :: vtik, vtnik, vtrk, vtnrk, vtsk, vtgk, vtngk, vtck, vtnck
163 real(wp),
dimension(kts:kte) :: vts_boost
164 real(wp) :: m0, slam1, slam2
165 real(wp) :: mrat, ils1, ils2, t1_vts, t2_vts, t3_vts, t4_vts, c_snow
166 real(wp) :: a_, b_, loga_, a1, a2, tf
167 real(wp) :: tempc, tc0, r_mvd1, r_mvd2, xkrat
168 real(wp) :: dew_t, tlcl, the
169 real(wp) :: xnc, xri, xni, xmi, oxmi, xrc, xrr, xnr, xrg, xng, xrb
170 real(wp) :: xsat, rate_max, sump, ratio
171 real(wp) :: clap, fcd, dfcd
172 real(wp) :: otemp, rvs, rvs_p, rvs_pp, gamsc, alphsc, t1_evap, t1_subl
173 real(wp) :: r_frac, g_frac, const_Ri, rime_dens
174 real(wp) :: Ef_rw, Ef_sw, Ef_gw, Ef_rr
175 real(wp) :: Ef_ra, Ef_sa, Ef_ga
176 real(wp) :: dtsave, odts, odt, odzq, hgt_agl, SR
177 real(wp) :: xslw1, ygra1, zans1, eva_factor
178 real(wp) :: melt_f, rand
179 integer :: i, k, k2, n, nn, nstep, k_0, kbot, IT, iexfrq, k_melting
180 integer,
dimension(5) :: ksed1
181 integer :: nir, nis, nig, nii, nic, niin
182 integer :: idx_tc, idx_t, idx_s, idx_g1, idx_g, idx_r1, idx_r, &
183 idx_i1, idx_i, idx_c, idx, idx_d, idx_n, idx_in
184 integer,
dimension(kts:kte) :: idx_bg, idx_table
186 logical :: melti, no_micro
187 logical,
dimension(kts:kte) :: l_qc, l_qi, l_qr, l_qs, l_qg
188 logical :: debug_flag
189 character*256 :: mp_debug
190 integer :: nu_c, decfl_
203 if (
present(decfl)) decfl_ = decfl
205#if defined(ccpp_default)
207 av_i = av_s * d0s ** (bv_s - bv_i)
323 if (
present(pfil1)) pfil1(k) = 0.
324 if (
present(pfll1)) pfll1(k) = 0.
336#if defined(ccpp_default)
403 qv(k) = max(min_qv, qv1d(k))
405 rho(k) = roverrv*pres(k)/(r*temp(k)*(qv(k)+roverrv))
410 nwfa(k) = max(nwfa_default*rho(k), min(aero_max*rho(k), nwfa1d(k)*rho(k)))
411 nifa(k) = max(nifa_default*rho(k), min(aero_max*rho(k), nifa1d(k)*rho(k)))
417 if (qc1d(k) .gt. r1)
then
419 rc(k) = qc1d(k)*rho(k)
420 nc(k) = max(2., min(nc1d(k)*rho(k), nt_c_max))
422 if (nc(k).gt.10000.e6)
then
424 elseif (nc(k).lt.100.)
then
427 nu_c = nint(nu_c_scale/nc(k)) + 2
429 if (
present(rand2))
then
432 nu_c = max(2, min(nu_c+nint(rand), 15))
434 lamc = (nc(k)*am_r*ccg(2,nu_c)*ocg1(nu_c)/rc(k))**obmr
435 xdc = (bm_r + nu_c + 1.) / lamc
436 if (xdc.lt. d0c)
then
437 lamc = cce(2,nu_c)/d0c
438 elseif (xdc.gt. d0r*2.)
then
439 lamc = cce(2,nu_c)/(d0r*2.)
441 nc(k) = min(real(nt_c_max, kind=dp), ccg(1,nu_c)*ocg2(nu_c)*rc(k) / am_r*lamc**bm_r)
443 if (.not.(configs%aerosol_aware .or. merra2_aerosol_aware))
then
445 if (
present(lsml))
then
461 if (qi1d(k) .gt. r1)
then
463 ri(k) = qi1d(k)*rho(k)
464 ni(k) = max(r2, ni1d(k)*rho(k))
465 if (ni(k).le. r2)
then
467 ni(k) = min(max_ni, cig(1)*oig2*ri(k)/am_i*lami**bm_i)
470 lami = (am_i*cig(2)*oig1*ni(k)/ri(k))**obmi
472 xdi = (bm_i + mu_i + 1.) * ilami
473 if (xdi.lt. 5.e-6)
then
475 ni(k) = min(max_ni, cig(1)*oig2*ri(k)/am_i*lami**bm_i)
476 elseif (xdi.gt. 300.e-6)
then
477 lami = cie(2)/300.e-6
478 ni(k) = cig(1)*oig2*ri(k)/am_i*lami**bm_i
488 if (qr1d(k) .gt. r1)
then
490 rr(k) = qr1d(k)*rho(k)
491 nr(k) = max(r2, nr1d(k)*rho(k))
492 if (nr(k).le. r2)
then
494 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
495 nr(k) = crg(2)*org3*rr(k)*lamr**bm_r / am_r
498 lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr
499 mvd_r(k) = (3.0 + mu_r + 0.672) / lamr
500 if (mvd_r(k) .gt. 2.5e-3)
then
502 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
503 nr(k) = crg(2)*org3*rr(k)*lamr**bm_r / am_r
504 elseif (mvd_r(k) .lt. d0r*0.75)
then
506 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
507 nr(k) = crg(2)*org3*rr(k)*lamr**bm_r / am_r
516 if (qs1d(k) .gt. r1)
then
518 rs(k) = qs1d(k)*rho(k)
525 if (qg1d(k) .gt. r1)
then
528 rg(k) = qg1d(k)*rho(k)
529 ng(k) = max(r2, ng1d(k)*rho(k))
530 rb(k) = max(qg1d(k)/rho_g(nrhg), qb1d(k))
531 rb(k) = min(qg1d(k)/rho_g(1), rb(k))
533 idx_bg(k) = max(1,min(nint(qg1d(k)/rb(k) *0.01)+1,nrhg))
534 idx_table(k) = idx_bg(k)
535 if (ng(k).le. r2)
then
537 lamg = (3.0 + mu_g + 0.672) / mvd_g(k)
538 ng(k) = cgg(2,1)*ogg3*rg(k)*lamg**bm_g / am_g(idx_bg(k))
540 lamg = (am_g(idx_bg(k))*cgg(3,1)*ogg2*ng(k)/rg(k))**obmg
541 mvd_g(k) = (3.0 + mu_g + 0.672) / lamg
542 if (mvd_g(k) .gt. 25.4e-3)
then
544 lamg = (3.0 + mu_g + 0.672) / mvd_g(k)
545 ng(k) = cgg(2,1)*ogg3*rg(k)*lamg**bm_g / am_g(idx_bg(k))
546 elseif (mvd_g(k) .lt. d0r)
then
548 lamg = (3.0 + mu_g + 0.672) / mvd_g(k)
549 ng(k) = cgg(2,1)*ogg3*rg(k)*lamg**bm_g / am_g(idx_bg(k))
556 idx_table(k) = idx_bg(k)
559 rb(k) = r1/rho(k)/rho_g(nrhg)
562 if (.not. configs%hail_aware)
then
564 idx_table(k) = idx_bg(k)
567 if(.not. using_hail_aware_table)
then
589 tempc = temp(k) - 273.15
590 rhof(k) = sqrt(rho_not/rho(k))
591 rhof2(k) = sqrt(rhof(k))
592 qvs(k) = rslf(pres(k), temp(k))
593 delqvs(k) = max(0.0, rslf(pres(k), 273.15)-qv(k))
594 if (tempc .le. 0.0)
then
595 qvsi(k) = rsif(pres(k), temp(k))
599 satw(k) = qv(k)/qvs(k)
600 sati(k) = qv(k)/qvsi(k)
601 ssatw(k) = satw(k) - 1.
602 ssati(k) = sati(k) - 1.
603 if (abs(ssatw(k)).lt. eps) ssatw(k) = 0.0
604 if (abs(ssati(k)).lt. eps) ssati(k) = 0.0
605 if (no_micro .and. ssati(k).gt. 0.0) no_micro = .false.
606 diffu(k) = 2.11e-5*(temp(k)/273.15)**1.94 * (101325./pres(k))
607 if (tempc .ge. 0.0)
then
608 visco(k) = (1.718+0.0049*tempc)*1.0e-5
610 visco(k) = (1.718+0.0049*tempc-1.2e-5*tempc*tempc)*1.0e-5
612 ocp(k) = 1./(cp2*(1.+0.887*qv(k)))
613 vsc2(k) = sqrt(rho(k)/visco(k))
614 lvap(k) = lvap0 + (2106.0 - 4218.0)*tempc
615 tcond(k) = (5.69 + 0.0168*tempc)*1.0e-5 * 418.936
624 if (.not. iiwarm)
then
626 if (.not. l_qs(k)) cycle
627 tc0 = min(-0.1, temp(k)-273.15)
632 if (bm_s.gt.(2.0-1.e-3) .and. bm_s.lt.(2.0+1.e-3))
then
635 loga_ = sa(1) + sa(2)*tc0 + sa(3)*bm_s &
636 + sa(4)*tc0*bm_s + sa(5)*tc0*tc0 &
637 + sa(6)*bm_s*bm_s + sa(7)*tc0*tc0*bm_s &
638 + sa(8)*tc0*bm_s*bm_s + sa(9)*tc0*tc0*tc0 &
639 + sa(10)*bm_s*bm_s*bm_s
641 b_ = sb(1) + sb(2)*tc0 + sb(3)*bm_s &
642 + sb(4)*tc0*bm_s + sb(5)*tc0*tc0 &
643 + sb(6)*bm_s*bm_s + sb(7)*tc0*tc0*bm_s &
644 + sb(8)*tc0*bm_s*bm_s + sb(9)*tc0*tc0*tc0 &
645 + sb(10)*bm_s*bm_s*bm_s
646 smo2(k) = (smob(k)/a_)**(1./b_)
650 loga_ = sa(1) + sa(2)*tc0 + sa(5)*tc0*tc0 + sa(9)*tc0*tc0*tc0
652 b_ = sb(1) + sb(2)*tc0 + sb(5)*tc0*tc0 + sb(9)*tc0*tc0*tc0
653 smo0(k) = a_ * smo2(k)**b_
656 loga_ = sa(1) + sa(2)*tc0 + sa(3) &
657 + sa(4)*tc0 + sa(5)*tc0*tc0 &
658 + sa(6) + sa(7)*tc0*tc0 &
659 + sa(8)*tc0 + sa(9)*tc0*tc0*tc0 &
662 b_ = sb(1)+ sb(2)*tc0 + sb(3) + sb(4)*tc0 &
663 + sb(5)*tc0*tc0 + sb(6) &
664 + sb(7)*tc0*tc0 + sb(8)*tc0 &
665 + sb(9)*tc0*tc0*tc0 + sb(10)
666 smo1(k) = a_ * smo2(k)**b_
669 loga_ = sa(1) + sa(2)*tc0 + sa(3)*cse(1) &
670 + sa(4)*tc0*cse(1) + sa(5)*tc0*tc0 &
671 + sa(6)*cse(1)*cse(1) + sa(7)*tc0*tc0*cse(1) &
672 + sa(8)*tc0*cse(1)*cse(1) + sa(9)*tc0*tc0*tc0 &
673 + sa(10)*cse(1)*cse(1)*cse(1)
675 b_ = sb(1)+ sb(2)*tc0 + sb(3)*cse(1) + sb(4)*tc0*cse(1) &
676 + sb(5)*tc0*tc0 + sb(6)*cse(1)*cse(1) &
677 + sb(7)*tc0*tc0*cse(1) + sb(8)*tc0*cse(1)*cse(1) &
678 + sb(9)*tc0*tc0*tc0 + sb(10)*cse(1)*cse(1)*cse(1)
679 smoc(k) = a_ * smo2(k)**b_
682 mrat = smob(k)*m0*m0*m0
685 ns(k) = mrat*kap0/slam1 &
686 + mrat*kap1*m0**mu_s*csg(15)/slam2**cse(15)
689 loga_ = sa(1) + sa(2)*tc0 + sa(3)*cse(13) &
690 + sa(4)*tc0*cse(13) + sa(5)*tc0*tc0 &
691 + sa(6)*cse(13)*cse(13) + sa(7)*tc0*tc0*cse(13) &
692 + sa(8)*tc0*cse(13)*cse(13) + sa(9)*tc0*tc0*tc0 &
693 + sa(10)*cse(13)*cse(13)*cse(13)
695 b_ = sb(1)+ sb(2)*tc0 + sb(3)*cse(13) + sb(4)*tc0*cse(13) &
696 + sb(5)*tc0*tc0 + sb(6)*cse(13)*cse(13) &
697 + sb(7)*tc0*tc0*cse(13) + sb(8)*tc0*cse(13)*cse(13) &
698 + sb(9)*tc0*tc0*tc0 + sb(10)*cse(13)*cse(13)*cse(13)
699 smoe(k) = a_ * smo2(k)**b_
702 loga_ = sa(1) + sa(2)*tc0 + sa(3)*cse(16) &
703 + sa(4)*tc0*cse(16) + sa(5)*tc0*tc0 &
704 + sa(6)*cse(16)*cse(16) + sa(7)*tc0*tc0*cse(16) &
705 + sa(8)*tc0*cse(16)*cse(16) + sa(9)*tc0*tc0*tc0 &
706 + sa(10)*cse(16)*cse(16)*cse(16)
708 b_ = sb(1)+ sb(2)*tc0 + sb(3)*cse(16) + sb(4)*tc0*cse(16) &
709 + sb(5)*tc0*tc0 + sb(6)*cse(16)*cse(16) &
710 + sb(7)*tc0*tc0*cse(16) + sb(8)*tc0*cse(16)*cse(16) &
711 + sb(9)*tc0*tc0*tc0 + sb(10)*cse(16)*cse(16)*cse(16)
712 smof(k) = a_ * smo2(k)**b_
714 loga_ = sa(1) + sa(2)*tc0 + sa(3)*cse(17) &
715 + sa(4)*tc0*cse(17) + sa(5)*tc0*tc0 &
716 + sa(6)*cse(17)*cse(17) + sa(7)*tc0*tc0*cse(17) &
717 + sa(8)*tc0*cse(17)*cse(17) + sa(9)*tc0*tc0*tc0 &
718 + sa(10)*cse(17)*cse(17)*cse(17)
720 b_ = sb(1)+ sb(2)*tc0 + sb(3)*cse(17) + sb(4)*tc0*cse(17) &
721 + sb(5)*tc0*tc0 + sb(6)*cse(17)*cse(17) &
722 + sb(7)*tc0*tc0*cse(17) + sb(8)*tc0*cse(17)*cse(17) &
723 + sb(9)*tc0*tc0*tc0 + sb(10)*cse(17)*cse(17)*cse(17)
724 smog(k) = a_ * smo2(k)**b_
732 lamg = (am_g(idx_bg(k))*cgg(3,1)*ogg2*ng(k)/rg(k))**obmg
734 n0_g(k) = ng(k)*ogg2*lamg**cge(2,1)
752 lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr
754 mvd_r(k) = (3.0 + mu_r + 0.672) / lamr
755 n0_r(k) = nr(k)*org2*lamr**cre(2)
766 if (l_qr(k) .and. mvd_r(k).gt. d0r)
then
768 ef_rr = max(-0.1, 1.0 - exp(2300.0*(mvd_r(k)-1950.0e-6)))
770 pnr_rcr(k) = ef_rr * 2.0*nr(k)*rr(k)
775 if (nc(k).gt.10000.e6)
then
777 elseif (nc(k).lt.100.)
then
780 nu_c = nint(nu_c_scale/nc(k)) + 2
782 if (
present(rand2))
then
785 nu_c = max(2, min(nu_c+nint(rand), 15))
787 xdc = max(d0c*1.e6, ((rc(k)/(am_r*nc(k)))**obmr) * 1.e6)
788 lamc = (nc(k)*am_r* ccg(2,nu_c) * ocg1(nu_c) / rc(k))**obmr
789 mvd_c(k) = (3.0+nu_c+0.672) / lamc
790 mvd_c(k) = max(d0c, min(mvd_c(k), d0r))
795 if (rc(k).gt. 0.01e-3)
then
796 dc_g = ((ccg(3,nu_c)*ocg2(nu_c))**obmr / lamc) * 1.e6
797 dc_b = (xdc*xdc*xdc*dc_g*dc_g*dc_g - xdc*xdc*xdc*xdc*xdc*xdc) &
799 zeta1 = 0.5*((6.25e-6*xdc*dc_b*dc_b*dc_b - 0.4) &
800 + abs(6.25e-6*xdc*dc_b*dc_b*dc_b - 0.4))
801 zeta = 0.027*rc(k)*zeta1
802 taud = 0.5*((0.5*dc_b - 7.5) + abs(0.5*dc_b - 7.5)) + r1
803 tau = 3.72/(rc(k)*taud)
804 prr_wau(k) = zeta/tau
805 prr_wau(k) = min(real(rc(k)*odts, kind=dp), prr_wau(k))
806 pnr_wau(k) = prr_wau(k) / (am_r*nu_c*10.*d0r*d0r*d0r)
807 pnc_wau(k) = min(real(nc(k)*odts, kind=dp), prr_wau(k) / (am_r*mvd_c(k)*mvd_c(k)*mvd_c(k)))
811 if (l_qr(k) .and. mvd_r(k).gt. d0r .and. mvd_c(k).gt. d0c)
then
813 idx = 1 + int(nbr*log(real(mvd_r(k)/dr(1), kind=dp)) / log(real(dr(nbr)/dr(1), kind=dp)))
815 ef_rw = t_efrw(idx, int(mvd_c(k)*1.e6))
816 prr_rcw(k) = rhof(k)*t1_qr_qc*ef_rw*rc(k)*n0_r(k) &
817 *((lamr+fv_r)**(-cre(9)))
818 prr_rcw(k) = min(real(rc(k)*odts, kind=dp), prr_rcw(k))
819 pnc_rcw(k) = rhof(k)*t1_qr_qc*ef_rw*nc(k)*n0_r(k) &
820 *((lamr+fv_r)**(-cre(9)))
821 pnc_rcw(k) = min(real(nc(k)*odts, kind=dp), pnc_rcw(k))
825 if (l_qr(k) .and. mvd_r(k).gt. d0r)
then
826 ef_ra = eff_aero(mvd_r(k),0.04e-6,visco(k),rho(k),temp(k),
'r')
828 pna_rca(k) = rhof(k)*t1_qr_qc*ef_ra*nwfa(k)*n0_r(k) &
829 *((lamr+fv_r)**(-cre(9)))
830 pna_rca(k) = min(real(nwfa(k)*odts, kind=dp), pna_rca(k))
832 ef_ra = eff_aero(mvd_r(k),0.8e-6,visco(k),rho(k),temp(k),
'r')
833 pnd_rcd(k) = rhof(k)*t1_qr_qc*ef_ra*nifa(k)*n0_r(k) &
834 *((lamr+fv_r)**(-cre(9)))
835 pnd_rcd(k) = min(real(nifa(k)*odts, kind=dp), pnd_rcd(k))
843 if (.not. iiwarm)
then
847 if (l_qs(k)) xds = smoc(k) / smob(k)
859 tempc = temp(k) - 273.15
860 idx_tc = max(1, min(nint(-tempc), 45) )
861 idx_t = int( (tempc-2.5)/5. ) - 1
862 idx_t = max(1, -idx_t)
863 idx_t = min(idx_t, ntb_t)
864 it = max(1, min(nint(-tempc), 31) )
867 if (rc(k).gt. r_c(1))
then
868 nic = nint(log10(rc(k)))
869 do_loop_rc:
do nn = nic-1, nic+1
871 if ( (rc(k)/10.**nn).ge.1.0 .and. (rc(k)/10.**nn).lt.10.0 )
exit do_loop_rc
873 idx_c = int(rc(k)/10.**n) + 10*(n-nic2) - (n-nic2)
874 idx_c = max(1, min(idx_c, ntb_c))
880 idx_n = nint(1.0 + real(nbc, kind=wp) * log(real(nc(k)/t_nc(1), kind=dp)) / nic1)
881 idx_n = max(1, min(idx_n, nbc))
884 if (ri(k).gt. r_i(1))
then
885 nii = nint(log10(ri(k)))
886 do_loop_ri:
do nn = nii-1, nii+1
888 if ( (ri(k)/10.**nn).ge.1.0 .and. (ri(k)/10.**nn).lt.10.0 )
exit do_loop_ri
890 idx_i = int(ri(k)/10.**n) + 10*(n-nii2) - (n-nii2)
891 idx_i = max(1, min(idx_i, ntb_i))
896 if (ni(k).gt. nt_i(1))
then
897 nii = nint(log10(ni(k)))
898 do_loop_ni:
do nn = nii-1, nii+1
900 if ( (ni(k)/10.**nn).ge.1.0 .and. (ni(k)/10.**nn).lt.10.0 )
exit do_loop_ni
902 idx_i1 = int(ni(k)/10.**n) + 10*(n-nii3) - (n-nii3)
903 idx_i1 = max(1, min(idx_i1, ntb_i1))
909 if (rr(k).gt. r_r(1))
then
910 nir = nint(log10(rr(k)))
911 do_loop_rr:
do nn = nir-1, nir+1
913 if ( (rr(k)/10.**nn).ge.1.0 .and. (rr(k)/10.**nn).lt.10.0 )
exit do_loop_rr
915 idx_r = int(rr(k)/10.**n) + 10*(n-nir2) - (n-nir2)
916 idx_r = max(1, min(idx_r, ntb_r))
919 lam_exp = lamr * (crg(3)*org2*org1)**bm_r
920 n0_exp = org1*rr(k)/am_r * lam_exp**cre(1)
921 nir = nint(log10(real(n0_exp, kind=dp)))
922 do_loop_nr:
do nn = nir-1, nir+1
924 if ( (n0_exp/10.**nn).ge.1.0 .and. (n0_exp/10.**nn).lt.10.0 )
exit do_loop_nr
926 idx_r1 = int(n0_exp/10.**n) + 10*(n-nir3) - (n-nir3)
927 idx_r1 = max(1, min(idx_r1, ntb_r1))
934 if (rs(k).gt. r_s(1))
then
935 nis = nint(log10(rs(k)))
936 do_loop_rs:
do nn = nis-1, nis+1
938 if ( (rs(k)/10.**nn).ge.1.0 .and. (rs(k)/10.**nn).lt.10.0 )
exit do_loop_rs
940 idx_s = int(rs(k)/10.**n) + 10*(n-nis2) - (n-nis2)
941 idx_s = max(1, min(idx_s, ntb_s))
947 if (rg(k).gt. r_g(1))
then
948 nig = nint(log10(rg(k)))
949 do_loop_rg:
do nn = nig-1, nig+1
951 if ( (rg(k)/10.**nn).ge.1.0 .and. (rg(k)/10.**nn).lt.10.0 )
exit do_loop_rg
953 idx_g = int(rg(k)/10.**n) + 10*(n-nig2) - (n-nig2)
954 idx_g = max(1, min(idx_g, ntb_g))
957 lam_exp = lamg * (cgg(3,1)*ogg2*ogg1)**bm_g
958 n0_exp = ogg1*rg(k)/am_g(idx_bg(k)) * lam_exp**cge(1,1)
959 nig = nint(log10(real(n0_exp, kind=dp)))
960 do_loop_ng:
do nn = nig-1, nig+1
962 if ( (n0_exp/10.**nn).ge.1.0 .and. (n0_exp/10.**nn).lt.10.0 )
exit do_loop_ng
964 idx_g1 = int(n0_exp/10.**n) + 10*(n-nig3) - (n-nig3)
965 idx_g1 = max(1, min(idx_g1, ntb_g1))
974 rvs_p = rvs*otemp*(lsub*otemp*orv - 1.)
975 rvs_pp = rvs * ( otemp*(lsub*otemp*orv - 1.) &
976 *otemp*(lsub*otemp*orv - 1.) &
977 + (-2.*lsub*otemp*otemp*otemp*orv) &
979 gamsc = lsub*diffu(k)/tcond(k) * rvs_p
980 alphsc = 0.5*(gamsc/(1.+gamsc))*(gamsc/(1.+gamsc)) &
981 * rvs_pp/rvs_p * rvs/rvs_p
982 alphsc = max(1.e-9, alphsc)
984 if (abs(xsat).lt. 1.e-9) xsat=0.
985 t1_subl = 4.*pi*( 1.0 - alphsc*xsat &
986 + 2.*alphsc*alphsc*xsat*xsat &
987 - 5.*alphsc*alphsc*alphsc*xsat*xsat*xsat ) &
991 if (l_qc(k) .and. mvd_c(k).gt. d0c)
then
995 idx = 1 + int(nbs*log(real(xds/ds(1), kind=dp)) / log(real(ds(nbs)/ds(1), kind=dp)))
997 ef_sw = t_efsw(idx, int(mvd_c(k)*1.e6))
998 prs_scw(k) = rhof(k)*t1_qs_qc*ef_sw*rc(k)*smoe(k)
999 prs_scw(k) = min(real(rc(k)*odts, kind=dp), prs_scw(k))
1000 pnc_scw(k) = rhof(k)*t1_qs_qc*ef_sw*nc(k)*smoe(k)
1001 pnc_scw(k) = min(real(nc(k)*odts, kind=dp), pnc_scw(k))
1005 if (rg(k).ge. r_g(1) .and. mvd_c(k).gt. d0c)
then
1006 xdg = (bm_g + mu_g + 1.) * ilamg(k)
1007 vtg = rhof(k)*av_g(idx_bg(k))*cgg(6,idx_bg(k))*ogg3 * ilamg(k)**bv_g(idx_bg(k))
1008 stoke_g = mvd_c(k)*mvd_c(k)*vtg*rho_w2/(9.*visco(k)*xdg)
1010 const_ri = -1.*(mvd_c(k)*0.5e6)*vtg/min(-0.1,tempc)
1011 const_ri = max(0.1, min(const_ri, 10.))
1012 rime_dens = (0.051 + 0.114*const_ri - 0.0055*const_ri*const_ri)*1000.
1015 if (stoke_g.ge.0.4 .and. stoke_g.le.10.)
then
1016 ef_gw = 0.55*log10(2.51*stoke_g)
1017 elseif (stoke_g.lt.0.4)
then
1019 elseif (stoke_g.gt.10)
then
1023 if (temp(k).gt.t_0) ef_gw = ef_gw*0.1
1024 t1_qg_qc = pi*.25*av_g(idx_bg(k)) * cgg(9,idx_bg(k))
1025 prg_gcw(k) = rhof(k)*t1_qg_qc*ef_gw*rc(k)*n0_g(k) &
1026 *ilamg(k)**cge(9,idx_bg(k))
1027 pnc_gcw(k) = rhof(k)*t1_qg_qc*ef_gw*nc(k)*n0_g(k) &
1028 *ilamg(k)**cge(9,idx_bg(k))
1029 pnc_gcw(k) = min(real(nc(k)*odts, kind=dp), pnc_gcw(k))
1030 if (temp(k).lt.t_0) pbg_gcw(k) = prg_gcw(k)/rime_dens
1037 if (rs(k) .gt. r_s(1))
then
1038 ef_sa = eff_aero(xds,0.04e-6,visco(k),rho(k),temp(k),
's')
1039 pna_sca(k) = rhof(k)*t1_qs_qc*ef_sa*nwfa(k)*smoe(k)
1040 pna_sca(k) = min(real(nwfa(k)*odts, kind=dp), pna_sca(k))
1042 ef_sa = eff_aero(xds,0.8e-6,visco(k),rho(k),temp(k),
's')
1043 pnd_scd(k) = rhof(k)*t1_qs_qc*ef_sa*nifa(k)*smoe(k)
1044 pnd_scd(k) = min(real(nifa(k)*odts, kind=dp), pnd_scd(k))
1046 if (rg(k) .gt. r_g(1))
then
1047 xdg = (bm_g + mu_g + 1.) * ilamg(k)
1048 ef_ga = eff_aero(xdg,0.04e-6,visco(k),rho(k),temp(k),
'g')
1049 t1_qg_qc = pi*.25*av_g(idx_bg(k)) * cgg(9,idx_bg(k))
1050 pna_gca(k) = rhof(k)*t1_qg_qc*ef_ga*nwfa(k)*n0_g(k) &
1051 *ilamg(k)**cge(9,idx_bg(k))
1052 pna_gca(k) = min(real(nwfa(k)*odts, kind=dp), pna_gca(k))
1054 ef_ga = eff_aero(xdg,0.8e-6,visco(k),rho(k),temp(k),
'g')
1055 pnd_gcd(k) = rhof(k)*t1_qg_qc*ef_ga*nifa(k)*n0_g(k) &
1056 *ilamg(k)**cge(9,idx_bg(k))
1057 pnd_gcd(k) = min(real(nifa(k)*odts, kind=dp), pnd_gcd(k))
1063 if (rr(k).ge. r_r(1))
then
1064 if (rs(k).ge. r_s(1))
then
1065 if (temp(k).lt.t_0)
then
1066 prr_rcs(k) = -(tmr_racs2(idx_s,idx_t,idx_r1,idx_r) &
1067 + tcr_sacr2(idx_s,idx_t,idx_r1,idx_r) &
1068 + tmr_racs1(idx_s,idx_t,idx_r1,idx_r) &
1069 + tcr_sacr1(idx_s,idx_t,idx_r1,idx_r))
1070 prs_rcs(k) = tmr_racs2(idx_s,idx_t,idx_r1,idx_r) &
1071 + tcr_sacr2(idx_s,idx_t,idx_r1,idx_r) &
1072 - tcs_racs1(idx_s,idx_t,idx_r1,idx_r) &
1073 - tms_sacr1(idx_s,idx_t,idx_r1,idx_r)
1074 prg_rcs(k) = tmr_racs1(idx_s,idx_t,idx_r1,idx_r) &
1075 + tcr_sacr1(idx_s,idx_t,idx_r1,idx_r) &
1076 + tcs_racs1(idx_s,idx_t,idx_r1,idx_r) &
1077 + tms_sacr1(idx_s,idx_t,idx_r1,idx_r)
1078 prr_rcs(k) = max(real(-rr(k)*odts, kind=dp), prr_rcs(k))
1079 prs_rcs(k) = max(real(-rs(k)*odts, kind=dp), prs_rcs(k))
1080 prg_rcs(k) = min(real((rr(k)+rs(k))*odts, kind=dp), prg_rcs(k))
1081 pnr_rcs(k) = tnr_racs1(idx_s,idx_t,idx_r1,idx_r) &
1082 + tnr_racs2(idx_s,idx_t,idx_r1,idx_r) &
1083 + tnr_sacr1(idx_s,idx_t,idx_r1,idx_r) &
1084 + tnr_sacr2(idx_s,idx_t,idx_r1,idx_r)
1085 pnr_rcs(k) = min(real(nr(k)*odts, kind=dp), pnr_rcs(k))
1086 png_rcs(k) = pnr_rcs(k)
1088 pbg_rcs(k) = prg_rcs(k)/rho_i
1090 prs_rcs(k) = -tcs_racs1(idx_s,idx_t,idx_r1,idx_r) &
1091 - tms_sacr1(idx_s,idx_t,idx_r1,idx_r) &
1092 + tmr_racs2(idx_s,idx_t,idx_r1,idx_r) &
1093 + tcr_sacr2(idx_s,idx_t,idx_r1,idx_r)
1094 prs_rcs(k) = max(real(-rs(k)*odts, kind=dp), prs_rcs(k))
1095 prr_rcs(k) = -prs_rcs(k)
1105 if (rg(k).ge. r_g(1))
then
1106 if (temp(k).lt.t_0)
then
1107 prg_rcg(k) = tmr_racg(idx_g1,idx_g,idx_table(k),idx_r1,idx_r) &
1108 + tcr_gacr(idx_g1,idx_g,idx_table(k),idx_r1,idx_r)
1109 prg_rcg(k) = min(real(rr(k)*odts, kind=dp), prg_rcg(k))
1110 prr_rcg(k) = -prg_rcg(k)
1111 pnr_rcg(k) = tnr_racg(idx_g1,idx_g,idx_table(k),idx_r1,idx_r) &
1112 + tnr_gacr(idx_g1,idx_g,idx_table(k),idx_r1,idx_r)
1113 pnr_rcg(k) = min(real(nr(k)*odts, kind=dp), pnr_rcg(k))
1115 pbg_rcg(k) = prg_rcg(k)/rho_i
1117 prr_rcg(k) = tcg_racg(idx_g1,idx_g,idx_table(k),idx_r1,idx_r)
1118 prr_rcg(k) = min(real(rg(k)*odts, kind=dp), prr_rcg(k))
1119 prg_rcg(k) = -prr_rcg(k)
1120 png_rcg(k) = tnr_racg(idx_g1,idx_g,idx_table(k),idx_r1,idx_r)
1122 png_rcg(k) = min(real(ng(k)*odts, kind=dp), png_rcg(k))
1123 pbg_rcg(k) = prg_rcg(k)/rho_g(idx_bg(k))
1125 pnr_rcg(k) = -1.5*tnr_gacr(idx_g1,idx_g,idx_table(k),idx_r1,idx_r)
1134 if (temp(k).lt.t_0)
then
1137 rate_max = (qv(k)-qvsi(k))*rho(k)*odts*0.999
1154 if (dustyice .and. (configs%aerosol_aware .or. merra2_aerosol_aware))
then
1155 xni = icedemott(tempc,qvs(k),qvs(k),qvsi(k),rho(k),nifa(k))
1161 if (xni.gt. nt_in(1))
then
1162 niin = nint(log10(xni))
1163 do_loop_xni:
do nn = niin-1, niin+1
1165 if ( (xni/10.**nn).ge.1.0 .and. (xni/10.**nn).lt.10.0 )
exit do_loop_xni
1167 idx_in = int(xni/10.**n) + 10*(n-niin2) - (n-niin2)
1168 idx_in = max(1, min(idx_in, ntb_in))
1174 if (rr(k).gt. r_r(1))
then
1175 prg_rfz(k) = tpg_qrfz(idx_r,idx_r1,idx_tc,idx_in)*odts
1176 pri_rfz(k) = tpi_qrfz(idx_r,idx_r1,idx_tc,idx_in)*odts
1177 pni_rfz(k) = tni_qrfz(idx_r,idx_r1,idx_tc,idx_in)*odts
1178 pnr_rfz(k) = tnr_qrfz(idx_r,idx_r1,idx_tc,idx_in)*odts
1179 pnr_rfz(k) = min(real(nr(k)*odts, kind=dp), pnr_rfz(k))
1180 elseif (rr(k).gt. r1 .and. temp(k).lt.hgfr)
then
1181 pri_rfz(k) = rr(k)*odts
1182 pni_rfz(k) = nr(k)*odts
1184 pbg_rfz(k) = prg_rfz(k)/rho_i
1186 if (rc(k).gt. r_c(1))
then
1187 pri_wfz(k) = tpi_qcfz(idx_c,idx_n,idx_tc,idx_in)*odts
1188 pri_wfz(k) = min(real(rc(k)*odts, kind=dp), pri_wfz(k))
1189 pni_wfz(k) = tni_qcfz(idx_c,idx_n,idx_tc,idx_in)*odts
1190 pni_wfz(k) = min(real(nc(k)*odts, kind=dp), pri_wfz(k)/(2.0_dp*xm0i), pni_wfz(k))
1191 elseif (rc(k).gt. r1 .and. temp(k).lt.hgfr)
then
1192 pri_wfz(k) = rc(k)*odts
1193 pni_wfz(k) = nc(k)*odts
1198 if ( (ssati(k).ge. demott_nuc_ssati) .or. (ssatw(k).gt. eps &
1199 .and. temp(k).lt.253.15) )
then
1201 if (dustyice .and. (configs%aerosol_aware .or. merra2_aerosol_aware))
then
1202 xnc = icedemott(tempc,qv(k),qvs(k),qvsi(k),rho(k),nifa(k))
1204 if (
present(rand3))
then
1207 xnc = xnc*(1.0 + 50.*rand)
1209 xnc = min(icenuc_max, tno*exp(ato*(t_0-temp(k))))
1211 xni = ni(k) + (pni_rfz(k)+pni_wfz(k))*dtsave
1212 pni_inu(k) = 0.5*(xnc-xni + abs(xnc-xni))*odts
1213 pri_inu(k) = min(real(rate_max, kind=dp), xm0i*pni_inu(k))
1214 pni_inu(k) = pri_inu(k)/xm0i
1218 xni = smo0(k)+ni(k) + (pni_rfz(k)+pni_wfz(k)+pni_inu(k))*dtsave
1219 if ((configs%aerosol_aware .or. merra2_aerosol_aware) .and. homogice .and. &
1220 (xni.le.max_ni) .and.(temp(k).lt.238.).and.(ssati(k).ge.0.4))
then
1222 xnc = icekoop(temp(k),qv(k),qvs(k),nwfa(k), dtsave)
1223 pni_iha(k) = xnc*odts
1224 pri_iha(k) = min(real(rate_max, kind=dp), xm0i*0.1*pni_iha(k))
1225 pni_iha(k) = pri_iha(k)/(xm0i*0.1)
1232 lami = (am_i*cig(2)*oig1*ni(k)/ri(k))**obmi
1234 xdi = max(real(d0i, kind=dp), (bm_i + mu_i + 1.) * ilami)
1235 xmi = am_i*xdi**bm_i
1237 pri_ide(k) = c_cube*t1_subl*diffu(k)*ssati(k)*rvs &
1238 *oig1*cig(5)*ni(k)*ilami
1240 if (pri_ide(k) .lt. 0.0)
then
1241 pri_ide(k) = max(real(-ri(k)*odts, kind=dp), pri_ide(k), real(rate_max, kind=dp))
1242 pni_ide(k) = pri_ide(k)*oxmi
1243 pni_ide(k) = max(real(-ni(k)*odts, kind=dp), pni_ide(k))
1245 pri_ide(k) = min(pri_ide(k), real(rate_max, kind=dp))
1246 prs_ide(k) = (1.0_dp-tpi_ide(idx_i,idx_i1))*pri_ide(k)
1247 pri_ide(k) = tpi_ide(idx_i,idx_i1)*pri_ide(k)
1252 if ( (idx_i.eq. ntb_i) .or. (xdi.gt. 5.0*d0s) )
then
1253 prs_iau(k) = ri(k)*.99*odts
1254 pni_iau(k) = ni(k)*.95*odts
1255 elseif (xdi.lt. 0.1*d0s)
then
1259 prs_iau(k) = tps_iaus(idx_i,idx_i1)*odts
1260 prs_iau(k) = min(real(ri(k)*.99*odts, kind=dp), prs_iau(k))
1261 pni_iau(k) = tni_iaus(idx_i,idx_i1)*odts
1262 pni_iau(k) = min(real(ni(k)*.95*odts, kind=dp), pni_iau(k))
1269 c_snow = c_sqrd + (tempc+1.5)*(c_cube-c_sqrd)/(-30.+1.5)
1270 c_snow = max(c_sqrd, min(c_snow, c_cube))
1271 prs_sde(k) = c_snow*t1_subl*diffu(k)*ssati(k)*rvs &
1272 * (t1_qs_sd*smo1(k) &
1273 + t2_qs_sd*rhof2(k)*vsc2(k)*smof(k))
1274 if (prs_sde(k).lt. 0.)
then
1275 prs_sde(k) = max(real(-rs(k)*odts, kind=dp), prs_sde(k), real(rate_max, kind=dp))
1277 prs_sde(k) = min(prs_sde(k), real(rate_max, kind=dp))
1281 if (l_qg(k) .and. ssati(k).lt. -eps)
then
1282 t2_qg_sd = 0.28*sc3*sqrt(av_g(idx_bg(k))) * cgg(11,idx_bg(k))
1283 prg_gde(k) = c_cube*t1_subl*diffu(k)*ssati(k)*rvs &
1284 * n0_g(k) * (t1_qg_sd*ilamg(k)**cge(10,1) &
1285 + t2_qg_sd*vsc2(k)*rhof2(k)*ilamg(k)**cge(11,idx_bg(k)))
1286 if (prg_gde(k).lt. 0.)
then
1287 prg_gde(k) = max(real(-rg(k)*odts, kind=dp), prg_gde(k), real(rate_max, kind=dp))
1288 png_gde(k) = prg_gde(k) * ng(k)/rg(k)
1290 prg_gde(k) = min(prg_gde(k), real(rate_max, kind=dp))
1296 lami = (am_i*cig(2)*oig1*ni(k)/ri(k))**obmi
1298 xdi = max(real(d0i, kind=dp), (bm_i + mu_i + 1.) * ilami)
1299 xmi = am_i*xdi**bm_i
1301 if (rs(k).ge. r_s(1))
then
1302 prs_sci(k) = t1_qs_qi*rhof(k)*ef_si*ri(k)*smoe(k)
1303 pni_sci(k) = prs_sci(k) * oxmi
1307 if (rr(k).ge. r_r(1) .and. mvd_r(k).gt. 4.*xdi)
then
1309 pri_rci(k) = rhof(k)*t1_qr_qi*ef_ri*ri(k)*n0_r(k) &
1310 *((lamr+fv_r)**(-cre(9)))
1311 pnr_rci(k) = rhof(k)*t1_qr_qi*ef_ri*ni(k)*n0_r(k) &
1312 *((lamr+fv_r)**(-cre(9)))
1313 pnr_rci(k) = min(real(nr(k)*odts, kind=dp), pnr_rci(k))
1314 pni_rci(k) = pri_rci(k) * oxmi
1315 prr_rci(k) = rhof(k)*t2_qr_qi*ef_ri*ni(k)*n0_r(k) &
1316 *((lamr+fv_r)**(-cre(8)))
1317 prr_rci(k) = min(real(rr(k)*odts, kind=dp), prr_rci(k))
1318 prg_rci(k) = pri_rci(k) + prr_rci(k)
1319 pbg_rci(k) = prg_rci(k)/rho_i
1324 if (prg_gcw(k).gt. eps .and. tempc.gt.-8.0)
then
1326 if (tempc.ge.-5.0 .and. tempc.lt.-3.0)
then
1327 tf = 0.5*(-3.0 - tempc)
1328 elseif (tempc.gt.-8.0 .and. tempc.lt.-5.0)
then
1329 tf = 0.33333333*(8.0 + tempc)
1331 pni_ihm(k) = 3.5e8*tf*prg_gcw(k)
1332 pri_ihm(k) = xm0i*pni_ihm(k)
1333 prs_ihm(k) = prs_scw(k)/(prs_scw(k)+prg_gcw(k)) &
1335 prg_ihm(k) = prg_gcw(k)/(prs_scw(k)+prg_gcw(k)) &
1343 if (prs_scw(k).gt.rime_threshold*prs_sde(k) .and. prs_sde(k).gt.eps)
then
1344 r_frac = min(30.0_dp, prs_scw(k)/prs_sde(k))
1345 g_frac = min(rime_conversion, 0.15 + (r_frac-2.)*.028)
1346 vts_boost(k) = min(1.5, 1.1 + (r_frac-2.)*.016)
1347 prg_scw(k) = g_frac*prs_scw(k)
1348 png_scw(k) = prg_scw(k)*smo0(k)/rs(k)
1350 vts = av_s*xds**bv_s * exp(-fv_s*xds)
1351 const_ri = -1.*(mvd_c(k)*0.5e6)*vts/min(-0.1,tempc)
1352 const_ri = max(0.1, min(const_ri, 10.))
1353 rime_dens = (0.051 + 0.114*const_ri - 0.0055*const_ri*const_ri)*1000.
1354 if(rime_dens .lt. 150.)
then
1359 pbg_scw(k) = prg_scw(k)/(0.5*(rime_dens+rho_s2))
1360 prs_scw(k) = (1. - g_frac)*prs_scw(k)
1367 prr_sml(k) = (tempc*tcond(k)-lvap0*diffu(k)*delqvs(k)) &
1368 * (t1_qs_me*smo1(k) + t2_qs_me*rhof2(k)*vsc2(k)*smof(k))
1369 if (prr_sml(k) .gt. 0.)
then
1370 prr_sml(k) = prr_sml(k) + 4218.*olfus*tempc &
1371 * (prr_rcs(k)+prs_scw(k))
1372 prr_sml(k) = min(real(rs(k)*odts, kind=dp), max(zerod0, prr_sml(k)))
1374 pnr_sml(k) = smo0(k)/rs(k)*prr_sml(k) * 10.0**(-0.25*tempc)
1375 pnr_sml(k) = min(real(smo0(k)*odts, kind=dp), pnr_sml(k))
1379 if (ssati(k).lt. 0.)
then
1380 prs_sde(k) = c_cube*t1_subl*diffu(k)*ssati(k)*rvs &
1381 * (t1_qs_sd*smo1(k) &
1382 + t2_qs_sd*rhof2(k)*vsc2(k)*smof(k))
1383 prs_sde(k) = max(real(-rs(k)*odts, kind=dp), prs_sde(k))
1391 if ((rg(k)*ng(k)) .lt. 1.e-4)
then
1393 n0_melt = (1.e-4/rg(k))*ogg2*lamg**cge(2,1)
1395 t2_qg_me = pi*4.*c_cube*olfus * 0.28*sc3*sqrt(av_g(idx_bg(k))) * cgg(11,idx_bg(k))
1396 prr_gml(k) = (tempc*tcond(k)-lvap0*diffu(k)*delqvs(k)) &
1397 * n0_melt*(t1_qg_me*ilamg(k)**cge(10,1) &
1398 + t2_qg_me*rhof2(k)*vsc2(k)*ilamg(k)**cge(11,idx_bg(k)))
1403 prr_gml(k) = min(real(rg(k)*odts, kind=dp), max(0.d0, prr_gml(k)))
1407 if (prr_gml(k) .gt. 0.0)
then
1408 melt_f = max(0.05, min(prr_gml(k)*dt/rg(k),1.0))
1410 pbg_gml(k) = prr_gml(k) / max(min(melt_f*rho_g(idx_bg(k)),1000.),50.)
1412 pnr_gml(k) = prr_gml(k)*ng(k)/rg(k) * 10.0**(-0.33*(temp(k)-t_0))
1417 if (ssati(k).lt. 0.)
then
1418 t2_qg_sd = 0.28*sc3*sqrt(av_g(idx_bg(k))) * cgg(11,idx_bg(k))
1419 prg_gde(k) = c_cube*t1_subl*diffu(k)*ssati(k)*rvs &
1420 * n0_g(k) * (t1_qg_sd*ilamg(k)**cge(10,1) &
1421 + t2_qg_sd*vsc2(k)*rhof2(k)*ilamg(k)**cge(11,idx_bg(k)))
1422 prg_gde(k) = max(real(-rg(k)*odts, kind=dp), prg_gde(k))
1423 png_gde(k) = prg_gde(k) * ng(k)/rg(k)
1432 if (dt .gt. 120.)
then
1433 prr_rcw(k)=prr_rcw(k)+prs_scw(k)+prg_gcw(k)
1439 if (.not. configs%hail_aware) idx_bg(k) = idx_bg1
1452 sump = pri_inu(k) + pri_ide(k) + prs_ide(k) &
1453 + prs_sde(k) + prg_gde(k) + pri_iha(k)
1454 rate_max = (qv(k)-qvsi(k))*rho(k)*odts*0.999
1455 if ( (sump.gt. eps .and. sump.gt. rate_max) .or. &
1456 (sump.lt. -eps .and. sump.lt. rate_max) )
then
1457 ratio = rate_max/sump
1458 pri_inu(k) = pri_inu(k) * ratio
1459 pri_ide(k) = pri_ide(k) * ratio
1460 pni_ide(k) = pni_ide(k) * ratio
1461 prs_ide(k) = prs_ide(k) * ratio
1462 prs_sde(k) = prs_sde(k) * ratio
1463 prg_gde(k) = prg_gde(k) * ratio
1464 pri_iha(k) = pri_iha(k) * ratio
1468 sump = -prr_wau(k) - pri_wfz(k) - prr_rcw(k) &
1469 - prs_scw(k) - prg_scw(k) - prg_gcw(k)
1470 rate_max = -rc(k)*odts
1471 if (sump.lt. rate_max .and. l_qc(k))
then
1472 ratio = rate_max/sump
1473 prr_wau(k) = prr_wau(k) * ratio
1474 pri_wfz(k) = pri_wfz(k) * ratio
1475 prr_rcw(k) = prr_rcw(k) * ratio
1476 prs_scw(k) = prs_scw(k) * ratio
1477 prg_scw(k) = prg_scw(k) * ratio
1478 prg_gcw(k) = prg_gcw(k) * ratio
1482 sump = pri_ide(k) - prs_iau(k) - prs_sci(k) &
1484 rate_max = -ri(k)*odts
1485 if (sump.lt. rate_max .and. l_qi(k))
then
1486 ratio = rate_max/sump
1487 pri_ide(k) = pri_ide(k) * ratio
1488 prs_iau(k) = prs_iau(k) * ratio
1489 prs_sci(k) = prs_sci(k) * ratio
1490 pri_rci(k) = pri_rci(k) * ratio
1494 sump = -prg_rfz(k) - pri_rfz(k) - prr_rci(k) &
1495 + prr_rcs(k) + prr_rcg(k)
1496 rate_max = -rr(k)*odts
1497 if (sump.lt. rate_max .and. l_qr(k))
then
1498 ratio = rate_max/sump
1499 prg_rfz(k) = prg_rfz(k) * ratio
1500 pri_rfz(k) = pri_rfz(k) * ratio
1501 prr_rci(k) = prr_rci(k) * ratio
1502 prr_rcs(k) = prr_rcs(k) * ratio
1503 prr_rcg(k) = prr_rcg(k) * ratio
1507 sump = prs_sde(k) - prs_ihm(k) - prr_sml(k) &
1509 rate_max = -rs(k)*odts
1510 if (sump.lt. rate_max .and. l_qs(k))
then
1511 ratio = rate_max/sump
1512 prs_sde(k) = prs_sde(k) * ratio
1513 prs_ihm(k) = prs_ihm(k) * ratio
1514 prr_sml(k) = prr_sml(k) * ratio
1515 prs_rcs(k) = prs_rcs(k) * ratio
1519 sump = prg_gde(k) - prg_ihm(k) - prr_gml(k) &
1521 rate_max = -rg(k)*odts
1522 if (sump.lt. rate_max .and. l_qg(k))
then
1523 ratio = rate_max/sump
1524 prg_gde(k) = prg_gde(k) * ratio
1525 prg_ihm(k) = prg_ihm(k) * ratio
1526 prr_gml(k) = prr_gml(k) * ratio
1527 prg_rcg(k) = prg_rcg(k) * ratio
1532 pri_ihm(k) = prs_ihm(k) + prg_ihm(k)
1533 ratio = min(abs(prr_rcg(k)), abs(prg_rcg(k)) )
1534 prr_rcg(k) = ratio * sign(1.0, sngl(prr_rcg(k)))
1535 prg_rcg(k) = -prr_rcg(k)
1536 if (temp(k).gt.t_0)
then
1537 ratio = min(abs(prr_rcs(k)), abs(prs_rcs(k)) )
1538 prr_rcs(k) = ratio * sign(1.0, sngl(prr_rcs(k)))
1539 prs_rcs(k) = -prr_rcs(k)
1550 lfus2 = lsub - lvap(k)
1553 if (configs%aerosol_aware)
then
1554 nwfaten(k) = nwfaten(k) - (pna_rca(k) + pna_sca(k) &
1555 + pna_gca(k) + pni_iha(k)) * orho
1556 nifaten(k) = nifaten(k) - (pnd_rcd(k) + pnd_scd(k) &
1557 + pnd_gcd(k)) * orho
1559 nifaten(k) = nifaten(k) - pni_inu(k)*orho
1566 qvten(k) = qvten(k) + (-pri_inu(k) - pri_iha(k) - pri_ide(k) &
1567 - prs_ide(k) - prs_sde(k) - prg_gde(k)) &
1571 qcten(k) = qcten(k) + (-prr_wau(k) - pri_wfz(k) &
1572 - prr_rcw(k) - prs_scw(k) - prg_scw(k) &
1577 ncten(k) = ncten(k) + (-pnc_wau(k) - pnc_rcw(k) &
1578 - pni_wfz(k) - pnc_scw(k) - pnc_gcw(k)) &
1583 xrc=max(r1, (qc1d(k) + qcten(k)*dtsave)*rho(k))
1584 xnc=max(2., (nc1d(k) + ncten(k)*dtsave)*rho(k))
1585 if (xrc .gt. r1)
then
1586 if (xnc.gt.10000.e6)
then
1588 elseif (xnc.lt.100.)
then
1591 nu_c = nint(nu_c_scale/xnc) + 2
1593 if (
present(rand2))
then
1596 nu_c = max(2, min(nu_c+nint(rand), 15))
1598 lamc = (xnc*am_r*ccg(2,nu_c)*ocg1(nu_c)/rc(k))**obmr
1599 xdc = (bm_r + nu_c + 1.) / lamc
1600 if (xdc.lt. d0c)
then
1601 lamc = cce(2,nu_c)/d0c
1602 xnc = ccg(1,nu_c)*ocg2(nu_c)*xrc/am_r*lamc**bm_r
1603 ncten(k) = (xnc-nc1d(k)*rho(k))*odts*orho
1604 elseif (xdc.gt. d0r*2.)
then
1605 lamc = cce(2,nu_c)/(d0r*2.)
1606 xnc = ccg(1,nu_c)*ocg2(nu_c)*xrc/am_r*lamc**bm_r
1607 ncten(k) = (xnc-nc1d(k)*rho(k))*odts*orho
1610 ncten(k) = -nc1d(k)*odts
1612 xnc=max(0., (nc1d(k) + ncten(k)*dtsave)*rho(k))
1613 if (xnc.gt.nt_c_max) &
1614 ncten(k) = (nt_c_max-nc1d(k)*rho(k))*odts*orho
1617 qiten(k) = qiten(k) + (pri_inu(k) + pri_iha(k) + pri_ihm(k) &
1618 + pri_wfz(k) + pri_rfz(k) + pri_ide(k) &
1619 - prs_iau(k) - prs_sci(k) - pri_rci(k)) &
1623 niten(k) = niten(k) + (pni_inu(k) + pni_iha(k) + pni_ihm(k) &
1624 + pni_wfz(k) + pni_rfz(k) + pni_ide(k) &
1625 - pni_iau(k) - pni_sci(k) - pni_rci(k)) &
1630 xri=max(r1,(qi1d(k) + qiten(k)*dtsave)*rho(k))
1631 xni=max(r2,(ni1d(k) + niten(k)*dtsave)*rho(k))
1632 if (xri.gt. r1)
then
1633 lami = (am_i*cig(2)*oig1*xni/xri)**obmi
1635 xdi = (bm_i + mu_i + 1.) * ilami
1636 if (xdi.lt. 5.e-6)
then
1638 xni = min(max_ni, cig(1)*oig2*xri/am_i*lami**bm_i)
1639 niten(k) = (xni-ni1d(k)*rho(k))*odts*orho
1640 elseif (xdi.gt. 300.e-6)
then
1641 lami = cie(2)/300.e-6
1642 xni = cig(1)*oig2*xri/am_i*lami**bm_i
1643 niten(k) = (xni-ni1d(k)*rho(k))*odts*orho
1646 niten(k) = -ni1d(k)*odts
1648 xni=max(0.,(ni1d(k) + niten(k)*dtsave)*rho(k))
1649 if (xni.gt.max_ni) &
1650 niten(k) = (max_ni-ni1d(k)*rho(k))*odts*orho
1653 qrten(k) = qrten(k) + (prr_wau(k) + prr_rcw(k) &
1654 + prr_sml(k) + prr_gml(k) + prr_rcs(k) &
1655 + prr_rcg(k) - prg_rfz(k) &
1656 - pri_rfz(k) - prr_rci(k)) &
1660 nrten(k) = nrten(k) + (pnr_wau(k) + pnr_sml(k) + pnr_gml(k) &
1661 - (pnr_rfz(k) + pnr_rcr(k) + pnr_rcg(k) &
1662 + pnr_rcs(k) + pnr_rci(k) + pni_rfz(k)) ) &
1667 xrr=max(r1,(qr1d(k) + qrten(k)*dtsave)*rho(k))
1668 xnr=max(r2,(nr1d(k) + nrten(k)*dtsave)*rho(k))
1669 if (xrr.gt. r1)
then
1670 lamr = (am_r*crg(3)*org2*xnr/xrr)**obmr
1671 mvd_r(k) = (3.0 + mu_r + 0.672) / lamr
1672 if (mvd_r(k) .gt. 2.5e-3)
then
1674 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
1675 xnr = crg(2)*org3*xrr*lamr**bm_r / am_r
1676 nrten(k) = (xnr-nr1d(k)*rho(k))*odts*orho
1677 elseif (mvd_r(k) .lt. d0r*0.75)
then
1679 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
1680 xnr = crg(2)*org3*xrr*lamr**bm_r / am_r
1681 nrten(k) = (xnr-nr1d(k)*rho(k))*odts*orho
1684 qrten(k) = -qr1d(k)*odts
1685 nrten(k) = -nr1d(k)*odts
1689 qsten(k) = qsten(k) + (prs_iau(k) + prs_sde(k) + prs_sci(k) &
1690 + prs_scw(k) + prs_rcs(k) + prs_ide(k) &
1691 - prs_ihm(k) - prr_sml(k)) &
1695 qgten(k) = qgten(k) + (prg_scw(k) + prg_rfz(k) &
1696 + prg_gde(k) + prg_rcg(k) + prg_gcw(k) &
1697 + prg_rci(k) + prg_rcs(k) - prg_ihm(k) &
1702 ngten(k) = ngten(k) + (png_scw(k) + pnr_rfz(k) - png_rcg(k) &
1703 + pnr_rci(k) + png_rcs(k) + png_gde(k) &
1704 - pnr_gml(k)) * orho
1707 qbten(k) = qbten(k) + (pbg_scw(k) + pbg_rfz(k) &
1708 + pbg_gcw(k) + pbg_rci(k) + pbg_rcs(k) &
1709 + pbg_rcg(k) + pbg_sml(k) - pbg_gml(k) &
1710 + (prg_gde(k) - prg_ihm(k)) /rho_g(idx_bg(k)) ) &
1715 xrg=max(r1,(qg1d(k) + qgten(k)*dtsave)*rho(k))
1716 xng=max(r2,(ng1d(k) + ngten(k)*dtsave)*rho(k))
1717 xrb=max(xrg/rho(k)/rho_g(nrhg),(qb1d(k) + qbten(k)*dtsave))
1718 xrb=min(xrg/rho(k)/rho_g(1), xrb)
1720 if (xrg .gt. r1)
then
1721 lamg = (am_g(idx_bg(k))*cgg(3,1)*ogg2*xng/xrg)**obmg
1722 mvd_g(k) = (3.0 + mu_g + 0.672) / lamg
1724 if (mvd_g(k) .gt. 25.4e-3)
then
1726 lamg = (3.0 + mu_g + 0.672) / mvd_g(k)
1727 xng = cgg(2,1)*ogg3*xrg*lamg**bm_g / am_g(idx_bg(k))
1728 ngten(k) = (xng-ng1d(k)*rho(k))*odts*orho
1729 elseif (mvd_g(k) .lt. d0r)
then
1731 lamg = (3.0 + mu_g + 0.672) / mvd_g(k)
1732 xng = cgg(2,1)*ogg3*xrg*lamg**bm_g / am_g(idx_bg(k))
1733 ngten(k) = (xng-ng1d(k)*rho(k))*odts*orho
1737 qgten(k) = -qg1d(k)*odts
1738 ngten(k) = -ng1d(k)*odts
1739 qbten(k) = -qb1d(k)*odts
1743 if (temp(k).lt.t_0)
then
1745 + ( lsub*ocp(k)*(pri_inu(k) + pri_ide(k) &
1746 + prs_ide(k) + prs_sde(k) &
1747 + prg_gde(k) + pri_iha(k)) &
1748 + lfus2*ocp(k)*(pri_wfz(k) + pri_rfz(k) &
1749 + prg_rfz(k) + prs_scw(k) &
1750 + prg_scw(k) + prg_gcw(k) &
1751 + prg_rcs(k) + prs_rcs(k) &
1752 + prr_rci(k) + prg_rcg(k)) &
1756 + ( lfus*ocp(k)*(-prr_sml(k) - prr_gml(k) &
1757 - prr_rcg(k) - prr_rcs(k)) &
1758 + lsub*ocp(k)*(prs_sde(k) + prg_gde(k)) &
1768 temp(k) = t1d(k) + dt*tten(k)
1770 tempc = temp(k) - 273.15
1771 qv(k) = max(min_qv, qv1d(k) + dt*qvten(k))
1772 rho(k) = roverrv*pres(k)/(r*temp(k)*(qv(k)+roverrv))
1773 rhof(k) = sqrt(rho_not/rho(k))
1774 rhof2(k) = sqrt(rhof(k))
1775 qvs(k) = rslf(pres(k), temp(k))
1776 ssatw(k) = qv(k)/qvs(k) - 1.
1777 if (abs(ssatw(k)).lt. eps) ssatw(k) = 0.0
1778 diffu(k) = 2.11e-5*(temp(k)/273.15)**1.94 * (101325./pres(k))
1779 if (tempc .ge. 0.0)
then
1780 visco(k) = (1.718+0.0049*tempc)*1.0e-5
1782 visco(k) = (1.718+0.0049*tempc-1.2e-5*tempc*tempc)*1.0e-5
1784 vsc2(k) = sqrt(rho(k)/visco(k))
1785 lvap(k) = lvap0 + (2106.0 - 4218.0)*tempc
1786 tcond(k) = (5.69 + 0.0168*tempc)*1.0e-5 * 418.936
1787 ocp(k) = 1./(cp2*(1.+0.887*qv(k)))
1788 lvt2(k)=lvap(k)*lvap(k)*ocp(k)*orv*otemp*otemp
1790 if (configs%aerosol_aware)
then
1791 nwfa(k) = max(nwfa_default*rho(k), (nwfa1d(k) + nwfaten(k)*dt)*rho(k))
1796 if ((qc1d(k) + qcten(k)*dt) .gt. r1)
then
1797 rc(k) = (qc1d(k) + qcten(k)*dt)*rho(k)
1798 nc(k) = max(2., min((nc1d(k)+ncten(k)*dt)*rho(k), nt_c_max))
1799 if (.not.(configs%aerosol_aware .or. merra2_aerosol_aware))
then
1801 if (
present(lsml))
then
1816 if ((qi1d(k) + qiten(k)*dt) .gt. r1)
then
1817 ri(k) = (qi1d(k) + qiten(k)*dt)*rho(k)
1818 ni(k) = max(r2, (ni1d(k) + niten(k)*dt)*rho(k))
1826 if ((qr1d(k) + qrten(k)*dt) .gt. r1)
then
1827 rr(k) = (qr1d(k) + qrten(k)*dt)*rho(k)
1828 nr(k) = max(r2, (nr1d(k) + nrten(k)*dt)*rho(k))
1830 lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr
1831 mvd_r(k) = (3.0 + mu_r + 0.672) / lamr
1832 if (mvd_r(k) .gt. 2.5e-3)
then
1834 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
1835 nr(k) = crg(2)*org3*rr(k)*lamr**bm_r / am_r
1836 elseif (mvd_r(k) .lt. d0r*0.75)
then
1838 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
1839 nr(k) = crg(2)*org3*rr(k)*lamr**bm_r / am_r
1847 if ((qs1d(k) + qsten(k)*dt) .gt. r1)
then
1848 rs(k) = (qs1d(k) + qsten(k)*dt)*rho(k)
1856 if (configs%hail_aware)
then
1858 if ((qg1d(k) + qgten(k)*dt) .gt. r1)
then
1860 rg(k) = (qg1d(k) + qgten(k)*dt)*rho(k)
1861 ng(k) = max(r2, (ng1d(k) + ngten(k)*dt)*rho(k))
1862 rb(k) = max(rg(k)/rho(k)/rho_g(nrhg), qb1d(k) + qbten(k)*dt)
1863 rb(k) = min(rg(k)/rho(k)/rho_g(1), rb(k))
1864 idx_bg(k) = max(1,min(nint(rg(k)/rho(k)/rb(k) *0.01)+1,nrhg))
1868 rb(k) = r1/rho(k)/rho_g(nrhg)
1878 if ((qg1d(k) + qgten(k)*dt) .gt. r1)
then
1879 rg(k) = (qg1d(k) + qgten(k)*dt)*rho(k)
1880 ygra1 = log10(max(1.e-9, rg(k)))
1881 zans1 = 3.4 + 2./7.*(ygra1+8.)
1883 n0_exp = max(gonv_min, min(10.0**(zans1), gonv_max))
1884 lam_exp = (n0_exp*am_g(idx_bg(k))*cgg(1,1)/rg(k))**oge1
1885 lamg = lam_exp * (cgg(3,1)*ogg2*ogg1)**obmg
1886 ng(k) = cgg(2,1)*ogg3*rg(k)*lamg**bm_g / am_g(idx_bg(k))
1887 rb(k) = rg(k)/rho(k)/rho_g(idx_bg(k))
1891 rb(k) = r1/rho(k)/rho_g(nrhg)
1901 if (.not. iiwarm)
then
1909 if (.not. l_qs(k)) cycle
1910 tc0 = min(-0.1, temp(k)-273.15)
1911 smob(k) = rs(k)*oams
1915 if (bm_s.gt.(2.0-1.e-3) .and. bm_s.lt.(2.0+1.e-3))
then
1918 loga_ = sa(1) + sa(2)*tc0 + sa(3)*bm_s &
1919 + sa(4)*tc0*bm_s + sa(5)*tc0*tc0 &
1920 + sa(6)*bm_s*bm_s + sa(7)*tc0*tc0*bm_s &
1921 + sa(8)*tc0*bm_s*bm_s + sa(9)*tc0*tc0*tc0 &
1922 + sa(10)*bm_s*bm_s*bm_s
1924 b_ = sb(1) + sb(2)*tc0 + sb(3)*bm_s &
1925 + sb(4)*tc0*bm_s + sb(5)*tc0*tc0 &
1926 + sb(6)*bm_s*bm_s + sb(7)*tc0*tc0*bm_s &
1927 + sb(8)*tc0*bm_s*bm_s + sb(9)*tc0*tc0*tc0 &
1928 + sb(10)*bm_s*bm_s*bm_s
1929 smo2(k) = (smob(k)/a_)**(1./b_)
1933 loga_ = sa(1) + sa(2)*tc0 + sa(3)*cse(1) &
1934 + sa(4)*tc0*cse(1) + sa(5)*tc0*tc0 &
1935 + sa(6)*cse(1)*cse(1) + sa(7)*tc0*tc0*cse(1) &
1936 + sa(8)*tc0*cse(1)*cse(1) + sa(9)*tc0*tc0*tc0 &
1937 + sa(10)*cse(1)*cse(1)*cse(1)
1939 b_ = sb(1)+ sb(2)*tc0 + sb(3)*cse(1) + sb(4)*tc0*cse(1) &
1940 + sb(5)*tc0*tc0 + sb(6)*cse(1)*cse(1) &
1941 + sb(7)*tc0*tc0*cse(1) + sb(8)*tc0*cse(1)*cse(1) &
1942 + sb(9)*tc0*tc0*tc0 + sb(10)*cse(1)*cse(1)*cse(1)
1943 smoc(k) = a_ * smo2(k)**b_
1946 loga_ = sa(1) + sa(2)*tc0 + sa(3)*cse(14) &
1947 + sa(4)*tc0*cse(14) + sa(5)*tc0*tc0 &
1948 + sa(6)*cse(14)*cse(14) + sa(7)*tc0*tc0*cse(14) &
1949 + sa(8)*tc0*cse(14)*cse(14) + sa(9)*tc0*tc0*tc0 &
1950 + sa(10)*cse(14)*cse(14)*cse(14)
1952 b_ = sb(1)+ sb(2)*tc0 + sb(3)*cse(14) + sb(4)*tc0*cse(14) &
1953 + sb(5)*tc0*tc0 + sb(6)*cse(14)*cse(14) &
1954 + sb(7)*tc0*tc0*cse(14) + sb(8)*tc0*cse(14)*cse(14) &
1955 + sb(9)*tc0*tc0*tc0 + sb(10)*cse(14)*cse(14)*cse(14)
1956 smod(k) = a_ * smo2(k)**b_
1963 lamg = (am_g(idx_bg(k))*cgg(3,1)*ogg2*ng(k)/rg(k))**obmg
1965 n0_g(k) = ng(k)*ogg2*lamg**cge(2,1)
1974 lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr
1976 mvd_r(k) = (3.0 + mu_r + 0.672) / lamr
1977 n0_r(k) = nr(k)*org2*lamr**cre(2)
1990 if ((ssatw(k).gt. eps) .or. (ssatw(k).lt. -eps .and. l_qc(k)))
then
1991 clap = (qv(k)-qvs(k))/(1. + lvt2(k)*qvs(k))
1993 fcd = qvs(k)* exp(lvt2(k)*clap) - qv(k) + clap
1994 dfcd = qvs(k)*lvt2(k)* exp(lvt2(k)*clap) + 1.
1995 clap = clap - fcd/dfcd
1997 xrc = rc(k) + clap*rho(k)
2000 prw_vcd(k) = clap*odt
2002 if (clap .gt. eps)
then
2003 if (configs%aerosol_aware .or. merra2_aerosol_aware)
then
2005 if (
present(rand3))
then
2008 xnc = max(2., activ_ncloud(temp(k), w1d(k)+rand, nwfa(k), lsml))
2011 if (
present(lsml))
then
2019 pnc_wcd(k) = 0.5*(xnc-nc(k) + abs(xnc-nc(k)))*odts*orho
2022 elseif (clap .lt. -eps .AND. ssatw(k).lt.-1.e-6 .and. configs%aerosol_aware)
then
2023 tempc = temp(k) - 273.15
2026 rvs_p = rvs*otemp*(lvap(k)*otemp*orv - 1.)
2027 rvs_pp = rvs * ( otemp*(lvap(k)*otemp*orv - 1.) &
2028 *otemp*(lvap(k)*otemp*orv - 1.) &
2029 + (-2.*lvap(k)*otemp*otemp*otemp*orv) &
2031 gamsc = lvap(k)*diffu(k)/tcond(k) * rvs_p
2032 alphsc = 0.5*(gamsc/(1.+gamsc))*(gamsc/(1.+gamsc)) &
2033 * rvs_pp/rvs_p * rvs/rvs_p
2034 alphsc = max(1.e-9, alphsc)
2036 if (abs(xsat).lt. 1.e-9) xsat=0.
2037 t1_evap = 2.*pi*( 1.0 - alphsc*xsat &
2038 + 2.*alphsc*alphsc*xsat*xsat &
2039 - 5.*alphsc*alphsc*alphsc*xsat*xsat*xsat ) &
2042 dc_star = dsqrt(-2.d0*dt * t1_evap/(2.*pi) &
2043 * 4.*diffu(k)*ssatw(k)*rvs/rho_w2)
2044 idx_d = max(1, min(int(1.e6*dc_star), nbc))
2046 idx_n = nint(1.0 + float(nbc) * dlog(nc(k)/t_nc(1)) / nic1)
2047 idx_n = max(1, min(idx_n, nbc))
2050 if (rc(k).gt. r_c(1))
then
2051 nic = nint(log10(rc(k)))
2052 do_loop_rc_cond:
do nn = nic-1, nic+1
2054 if ( (rc(k)/10.**nn).ge.1.0 .and. (rc(k)/10.**nn).lt.10.0 )
exit do_loop_rc_cond
2055 enddo do_loop_rc_cond
2056 idx_c = int(rc(k)/10.**n) + 10*(n-nic2) - (n-nic2)
2057 idx_c = max(1, min(idx_c, ntb_c))
2064 prw_vcd(k) = max(real(-rc(k)*0.99*orho*odt, kind=dp), prw_vcd(k))
2065 pnc_wcd(k) = max(real(-nc(k)*0.99*orho*odt, &
2066 kind=dp), real(-tnc_wev(idx_d, idx_c, idx_n)*orho*odt, kind=dp))
2069 prw_vcd(k) = -rc(k)*orho*odt
2070 pnc_wcd(k) = -nc(k)*orho*odt
2075 qvten(k) = qvten(k) - prw_vcd(k)
2076 qcten(k) = qcten(k) + prw_vcd(k)
2077 ncten(k) = ncten(k) + pnc_wcd(k)
2080 if (configs%aerosol_aware) nwfaten(k) = nwfaten(k) - pnc_wcd(k)
2082 tten(k) = tten(k) + lvap(k)*ocp(k)*prw_vcd(k)*(1-ifdry)
2083 rc(k) = max(r1, (qc1d(k) + dt*qcten(k))*rho(k))
2084 if (rc(k).eq.r1) l_qc(k) = .false.
2085 nc(k) = max(2., min((nc1d(k)+ncten(k)*dt)*rho(k), nt_c_max))
2086 if (.not.(configs%aerosol_aware .or. merra2_aerosol_aware))
then
2088 if (
present(lsml))
then
2096 qv(k) = max(min_qv, qv1d(k) + dt*qvten(k))
2097 temp(k) = t1d(k) + dt*tten(k)
2098 rho(k) = roverrv*pres(k)/(r*temp(k)*(qv(k)+roverrv))
2099 qvs(k) = rslf(pres(k), temp(k))
2100 ssatw(k) = qv(k)/qvs(k) - 1.
2109 if ( (ssatw(k).lt. -eps) .and. l_qr(k) &
2110 .and. (.not.(prw_vcd(k).gt. 0.)) )
then
2111 tempc = temp(k) - 273.15
2114 rhof(k) = sqrt(rho_not*orho)
2115 rhof2(k) = sqrt(rhof(k))
2116 diffu(k) = 2.11e-5*(temp(k)/273.15)**1.94 * (101325./pres(k))
2117 if (tempc .ge. 0.0)
then
2118 visco(k) = (1.718+0.0049*tempc)*1.0e-5
2120 visco(k) = (1.718+0.0049*tempc-1.2e-5*tempc*tempc)*1.0e-5
2122 vsc2(k) = sqrt(rho(k)/visco(k))
2123 lvap(k) = lvap0 + (2106.0 - 4218.0)*tempc
2124 tcond(k) = (5.69 + 0.0168*tempc)*1.0e-5 * 418.936
2125 ocp(k) = 1./(cp2*(1.+0.887*qv(k)))
2128 rvs_p = rvs*otemp*(lvap(k)*otemp*orv - 1.)
2129 rvs_pp = rvs * ( otemp*(lvap(k)*otemp*orv - 1.) &
2130 *otemp*(lvap(k)*otemp*orv - 1.) &
2131 + (-2.*lvap(k)*otemp*otemp*otemp*orv) &
2133 gamsc = lvap(k)*diffu(k)/tcond(k) * rvs_p
2134 alphsc = 0.5*(gamsc/(1.+gamsc))*(gamsc/(1.+gamsc)) &
2135 * rvs_pp/rvs_p * rvs/rvs_p
2136 alphsc = max(1.e-9, alphsc)
2137 xsat = min(-1.e-9, ssatw(k))
2138 t1_evap = 2.*pi*( 1.0 - alphsc*xsat &
2139 + 2.*alphsc*alphsc*xsat*xsat &
2140 - 5.*alphsc*alphsc*alphsc*xsat*xsat*xsat ) &
2145 if (qv(k)/qvs(k) .lt. 0.95 .AND. rr(k)*orho.le.1.e-8)
then
2146 prv_rev(k) = rr(k)*orho*odts
2148 prv_rev(k) = t1_evap*diffu(k)*(-ssatw(k))*n0_r(k)*rvs &
2149 * (t1_qr_ev*ilamr(k)**cre(10) &
2150 + t2_qr_ev*vsc2(k)*rhof2(k)*((lamr+0.5*fv_r)**(-cre(11))))
2151 rate_max = min((rr(k)*orho*odts), (qvs(k)-qv(k))*odts)
2152 prv_rev(k) = min(real(rate_max, kind=dp), prv_rev(k)*orho)
2161 IF (prr_gml(k).gt.0.0)
THEN
2162 eva_factor = min(1.0, 0.01+(0.99-0.01)*(tempc/20.0))
2163 prv_rev(k) = prv_rev(k)*eva_factor
2167 pnr_rev(k) = min(real(nr(k)*0.99*orho*odts, kind=dp), &
2168 prv_rev(k) * nr(k)/rr(k))
2170 qrten(k) = qrten(k) - prv_rev(k)
2171 qvten(k) = qvten(k) + prv_rev(k)
2172 nrten(k) = nrten(k) - pnr_rev(k)
2173 nwfaten(k) = nwfaten(k) + pnr_rev(k)
2174 tten(k) = tten(k) - lvap(k)*ocp(k)*prv_rev(k)*(1-ifdry)
2176 rr(k) = max(r1, (qr1d(k) + dt*qrten(k))*rho(k))
2177 qv(k) = max(1.e-10, qv1d(k) + dt*qvten(k))
2178 nr(k) = max(r2, (nr1d(k) + dt*nrten(k))*rho(k))
2179 temp(k) = t1d(k) + dt*tten(k)
2180 rho(k) = roverrv*pres(k)/(r*temp(k)*(qv(k)+roverrv))
2185 evapprod(k) = prv_rev(k) - (min(zerod0,prs_sde(k)) + &
2186 min(zerod0,prg_gde(k)))
2187 rainprod(k) = prr_wau(k) + prr_rcw(k) + prs_scw(k) + &
2188 prg_scw(k) + prs_iau(k) + &
2189 prg_gcw(k) + prs_sci(k) + &
2205 do k = kte+1, kts, -1
2216 if (any(l_qr .eqv. .true.))
then
2219 rhof(k) = sqrt(rho_not/rho(k))
2221 if (rr(k).gt. r1)
then
2222 lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr
2223 vtr = rhof(k)*av_r*crg(6)*org3 * lamr**cre(3) &
2224 *((lamr+fv_r)**(-cre(6)))
2231 vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12) &
2232 *((lamr+fv_r)**(-cre(7)))
2236 vtnrk(k) = vtnrk(k+1)
2239 if (max(vtrk(k),vtnrk(k)) .gt. 1.e-3)
then
2240 ksed1(1) = max(ksed1(1), k)
2241 delta_tp = dzq(k)/(max(vtrk(k),vtnrk(k)))
2242 nstep = max(nstep, int(dt/delta_tp + 1.))
2245 if (ksed1(1) .eq. kte) ksed1(1) = kte-1
2246 if (nstep .gt. 0) onstep(1) = 1./real(nstep)
2251 if (any(l_qc .eqv. .true.))
then
2253 do_loop_hgt_agl :
do k = kts, kte-1
2254 if (rc(k) .gt. r2) ksed1(5) = k
2255 hgt_agl = hgt_agl + dzq(k)
2256 if (hgt_agl .gt. 500.0)
exit do_loop_hgt_agl
2257 enddo do_loop_hgt_agl
2259 do k = ksed1(5), kts, -1
2261 if (rc(k) .gt. r1 .and. w1d(k) .lt. 1.e-1)
then
2262 if (nc(k).gt.10000.e6)
then
2264 elseif (nc(k).lt.100.)
then
2267 nu_c = nint(nu_c_scale/nc(k)) + 2
2269 if (
present(rand2))
then
2272 nu_c = max(2, min(nu_c+nint(rand), 15))
2274 lamc = (nc(k)*am_r*ccg(2,nu_c)*ocg1(nu_c)/rc(k))**obmr
2276 vtc = rhof(k)*av_c*ccg(5,nu_c)*ocg2(nu_c) * ilamc**bv_c
2278 vtc = rhof(k)*av_c*ccg(4,nu_c)*ocg1(nu_c) * ilamc**bv_c
2286 if (.not. iiwarm)
then
2287 if (any(l_qi .eqv. .true.))
then
2293 if (ri(k).gt. r1)
then
2294 lami = (am_i*cig(2)*oig1*ni(k)/ri(k))**obmi
2296 vti = rhof(k)*av_i*cig(3)*oig2 * ilami**bv_i
2301 vti = rhof(k)*av_i*cig(6)/cig(7) * ilami**bv_i
2305 vtnik(k) = vtnik(k+1)
2308 if (vtik(k) .gt. 1.e-3)
then
2309 ksed1(2) = max(ksed1(2), k)
2310 delta_tp = dzq(k)/vtik(k)
2311 nstep = max(nstep, int(dt/delta_tp + 1.))
2314 if (ksed1(2) .eq. kte) ksed1(2) = kte-1
2315 if (nstep .gt. 0) onstep(2) = 1./real(nstep)
2320 if (any(l_qs .eqv. .true.))
then
2326 if (rs(k).gt. r1)
then
2327 xds = smoc(k) / smob(k)
2329 ils1 = 1./(mrat*lam0 + fv_s)
2330 ils2 = 1./(mrat*lam1 + fv_s)
2331 t1_vts = kap0*csg(4)*ils1**cse(4)
2332 t2_vts = kap1*mrat**mu_s*csg(10)*ils2**cse(10)
2333 ils1 = 1./(mrat*lam0)
2334 ils2 = 1./(mrat*lam1)
2335 t3_vts = kap0*csg(1)*ils1**cse(1)
2336 t4_vts = kap1*mrat**mu_s*csg(7)*ils2**cse(7)
2337 vts = rhof(k)*av_s * (t1_vts+t2_vts)/(t3_vts+t4_vts)
2338 if (prr_sml(k) .gt. 0.0)
then
2339 sr = rs(k)/(rs(k)+rr(k))
2340 vtsk(k) = vts*sr + (1.-sr)*vtrk(k)
2342 vtsk(k) = vts*vts_boost(k)
2348 if (vtsk(k) .gt. 1.e-3)
then
2349 ksed1(3) = max(ksed1(3), k)
2350 delta_tp = dzq(k)/vtsk(k)
2351 nstep = max(nstep, int(dt/delta_tp + 1.))
2354 if (ksed1(3) .eq. kte) ksed1(3) = kte-1
2355 if (nstep .gt. 0) onstep(3) = 1./real(nstep)
2360 if (any(l_qg .eqv. .true.))
then
2365 if (rg(k).gt. r1)
then
2366 if (configs%hail_aware)
then
2367 xrho_g = max(rho_g(1),min(rg(k)/rho(k)/rb(k),rho_g(nrhg)))
2368 afall = a_coeff*((4.0*xrho_g*9.8)/(3.0*rho(k)))**b_coeff
2369 afall = afall * visco(k)**(1.0-2.0*b_coeff)
2374 vtg = rhof(k)*afall*cgg(6,idx_bg(k))*ogg3 * ilamg(k)**bfall
2375#if defined(ccpp_default)
2376 if (temp(k).gt. t_0)
then
2377 vtgk(k) = max(vtg, vtrk(k))
2386 if (mu_g .eq. 0)
then
2387 vtg = rhof(k)*afall*cgg(7,idx_bg(k))/cgg(12,idx_bg(k)) * ilamg(k)**bfall
2389 vtg = rhof(k)*afall*cgg(8,idx_bg(k))*ogg2 * ilamg(k)**bfall
2394 vtngk(k) = vtngk(k+1)
2397 if (vtgk(k) .gt. 1.e-3)
then
2398 ksed1(4) = max(ksed1(4), k)
2399 delta_tp = dzq(k)/vtgk(k)
2400 nstep = max(nstep, int(dt/delta_tp + 1.))
2403 if (ksed1(4) .eq. kte) ksed1(4) = kte-1
2404 if (nstep .gt. 0) onstep(4) = 1./real(nstep)
2418 if (any(l_qr .eqv. .true.))
then
2419 nstep = nint(1./onstep(1))
2420 if(.not. sedi_semi)
then
2423 sed_r(k) = vtrk(k)*rr(k)
2424 sed_n(k) = vtnrk(k)*nr(k)
2429 qrten(k) = qrten(k) - sed_r(k)*odzq*onstep(1)*orho
2430 nrten(k) = nrten(k) - sed_n(k)*odzq*onstep(1)*orho
2431 rr(k) = max(r1, rr(k) - sed_r(k)*odzq*dt*onstep(1))
2432 nr(k) = max(r2, nr(k) - sed_n(k)*odzq*dt*onstep(1))
2433#if defined(ccpp_default)
2434 pfll1(k) = pfll1(k) + sed_r(k)*dt*onstep(1)
2436 do k = ksed1(1), kts, -1
2439 qrten(k) = qrten(k) + (sed_r(k+1)-sed_r(k)) &
2440 *odzq*onstep(1)*orho
2441 nrten(k) = nrten(k) + (sed_n(k+1)-sed_n(k)) &
2442 *odzq*onstep(1)*orho
2443 rr(k) = max(r1, rr(k) + (sed_r(k+1)-sed_r(k)) &
2445 nr(k) = max(r2, nr(k) + (sed_n(k+1)-sed_n(k)) &
2447#if defined(ccpp_default)
2448 pfll1(k) = pfll1(k) + sed_r(k)*dt*onstep(1)
2452 if (rr(kts).gt.r1*1000.) &
2453 pptrain = pptrain + sed_r(kts)*dt*onstep(1)
2458 niter = int(nstep/max(decfl_,1)) + 1
2463 call semi_lagrange_sedim(kte,dzq,vtrk,rr,rainsfc,pfll,dtcfl,r1)
2464 call semi_lagrange_sedim(kte,dzq,vtnrk,nr,vtr,pdummy,dtcfl,r2)
2466 orhodt = 1./(rho(k)*dt)
2467 qrten(k) = qrten(k) + (rr(k) - rr_tmp(k)) * orhodt
2468 nrten(k) = nrten(k) + (nr(k) - nr_tmp(k)) * orhodt
2469 pfll1(k) = pfll1(k) + pfll(k)
2471 pptrain = pptrain + rainsfc
2473 do k = kte+1, kts, -1
2479 if (rr(k).gt. r1)
then
2480 lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr
2481 vtr = rhof(k)*av_r*crg(6)*org3 * lamr**cre(3) &
2482 *((lamr+fv_r)**(-cre(6)))
2489 vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12) &
2490 *((lamr+fv_r)**(-cre(7)))
2499 if (any(l_qc .eqv. .true.))
then
2502 sed_c(k) = vtck(k)*rc(k)
2503 sed_n(k) = vtnck(k)*nc(k)
2505 do k = ksed1(5), kts, -1
2508 qcten(k) = qcten(k) + (sed_c(k+1)-sed_c(k)) *odzq*orho
2509 ncten(k) = ncten(k) + (sed_n(k+1)-sed_n(k)) *odzq*orho
2510 rc(k) = max(r1, rc(k) + (sed_c(k+1)-sed_c(k)) *odzq*dt)
2511 nc(k) = max(10., nc(k) + (sed_n(k+1)-sed_n(k)) *odzq*dt)
2517 if (any(l_qi .eqv. .true.))
then
2519 nstep = nint(1./onstep(2))
2522 sed_i(k) = vtik(k)*ri(k)
2523 sed_n(k) = vtnik(k)*ni(k)
2528 qiten(k) = qiten(k) - sed_i(k)*odzq*onstep(2)*orho
2529 niten(k) = niten(k) - sed_n(k)*odzq*onstep(2)*orho
2530 ri(k) = max(r1, ri(k) - sed_i(k)*odzq*dt*onstep(2))
2531 ni(k) = max(r2, ni(k) - sed_n(k)*odzq*dt*onstep(2))
2532#if defined(ccpp_default)
2533 pfil1(k) = pfil1(k) + sed_i(k)*dt*onstep(2)
2535 do k = ksed1(2), kts, -1
2538 qiten(k) = qiten(k) + (sed_i(k+1)-sed_i(k)) &
2539 *odzq*onstep(2)*orho
2540 niten(k) = niten(k) + (sed_n(k+1)-sed_n(k)) &
2541 *odzq*onstep(2)*orho
2542 ri(k) = max(r1, ri(k) + (sed_i(k+1)-sed_i(k)) &
2544 ni(k) = max(r2, ni(k) + (sed_n(k+1)-sed_n(k)) &
2546#if defined(ccpp_default)
2547 pfil1(k) = pfil1(k) + sed_i(k)*dt*onstep(2)
2551 if (ri(kts).gt.r1*1000.) &
2552 pptice = pptice + sed_i(kts)*dt*onstep(2)
2558 if (any(l_qs .eqv. .true.))
then
2560 nstep = nint(1./onstep(3))
2563 sed_s(k) = vtsk(k)*rs(k)
2568 qsten(k) = qsten(k) - sed_s(k)*odzq*onstep(3)*orho
2569 rs(k) = max(r1, rs(k) - sed_s(k)*odzq*dt*onstep(3))
2570#if defined(ccpp_default)
2571 pfil1(k) = pfil1(k) + sed_s(k)*dt*onstep(3)
2573 do k = ksed1(3), kts, -1
2576 qsten(k) = qsten(k) + (sed_s(k+1)-sed_s(k)) &
2577 *odzq*onstep(3)*orho
2578 rs(k) = max(r1, rs(k) + (sed_s(k+1)-sed_s(k)) &
2580#if defined(ccpp_default)
2581 pfil1(k) = pfil1(k) + sed_s(k)*dt*onstep(3)
2585 if (rs(kts).gt.r1*1000.) &
2586 pptsnow = pptsnow + sed_s(kts)*dt*onstep(3)
2592 if (any(l_qg .eqv. .true.))
then
2593 nstep = nint(1./onstep(4))
2594 if(.not. sedi_semi)
then
2598 sed_g(k) = vtgk(k)*rg(k)
2599 sed_n(k) = vtngk(k)*ng(k)
2600 sed_b(k) = vtgk(k)*rb(k)
2605 qgten(k) = qgten(k) - sed_g(k)*odzq*onstep(4)*orho
2606 ngten(k) = ngten(k) - sed_n(k)*odzq*onstep(4)*orho
2607 qbten(k) = qbten(k) - sed_b(k)*odzq*onstep(4)
2608 rg(k) = max(r1, rg(k) - sed_g(k)*odzq*dt*onstep(4))
2609 ng(k) = max(r2, ng(k) - sed_n(k)*odzq*dt*onstep(4))
2610 rb(k) = max(r1/rho(k)/rho_g(nrhg), rb(k) - sed_b(k)*odzq*dt*onstep(4))
2611#if defined(ccpp_default)
2612 pfil1(k) = pfil1(k) + sed_g(k)*dt*onstep(4)
2614 do k = ksed1(4), kts, -1
2617 qgten(k) = qgten(k) + (sed_g(k+1)-sed_g(k)) &
2618 *odzq*onstep(4)*orho
2619 ngten(k) = ngten(k) + (sed_n(k+1)-sed_n(k)) &
2620 *odzq*onstep(4)*orho
2621 qbten(k) = qbten(k) + (sed_b(k+1)-sed_b(k)) &
2623 rg(k) = max(r1, rg(k) + (sed_g(k+1)-sed_g(k)) &
2625 ng(k) = max(r2, ng(k) + (sed_n(k+1)-sed_n(k)) &
2627 rb(k) = max(rg(k)/rho(k)/rho_g(nrhg), rb(k) + (sed_b(k+1)-sed_b(k)) &
2629#if defined(ccpp_default)
2630 pfil1(k) = pfil1(k) + sed_g(k)*dt*onstep(4)
2634 if (rg(kts).gt.r1*1000.) &
2635 pptgraul = pptgraul + sed_g(kts)*dt*onstep(4)
2640 niter = int(nstep/max(decfl_,1)) + 1
2645 call semi_lagrange_sedim(kte,dzq,vtgk,rg,graulsfc,pfil,dtcfl,r1)
2647 orhodt = 1./(rho(k)*dt)
2648 qgten(k) = qgten(k) + (rg(k) - rg_tmp(k))*orhodt
2649 pfil1(k) = pfil1(k) + pfil(k)
2651 pptgraul = pptgraul + graulsfc
2652 do k = kte+1, kts, -1
2657 if (rg(k).gt. r1)
then
2658 ygra1 = alog10(max(1.e-9, rg(k)))
2660 if (
present(rand1))
then
2664 zans1 = 3.4 + 2./7.*(ygra1+8.) + rand
2665 n0_exp = 10.**(zans1)
2666 n0_exp = max(gonv_min, min(n0_exp, gonv_max))
2667 lam_exp = (n0_exp*am_g(idx_bg(k))*cgg(1,1)/rg(k))**oge1
2668 lamg = lam_exp * (cgg(3,1)*ogg2*ogg1)**obmg
2670 vtg = rhof(k)*afall*cgg(6,idx_bg(k))*ogg3 * (1./lamg)**bfall
2671 if (temp(k).gt. t_0)
then
2672 vtgk(k) = max(vtg, vtrk(k))
2686 if (.not. iiwarm)
then
2688 xri = max(0.0, qi1d(k) + qiten(k)*dt)
2689 if ( (temp(k).gt. t_0) .and. (xri.gt. 0.0) )
then
2690 qcten(k) = qcten(k) + xri*odt
2691 ncten(k) = ncten(k) + ni1d(k)*odt
2692 qiten(k) = qiten(k) - xri*odt
2693 niten(k) = -ni1d(k)*odt
2694 tten(k) = tten(k) - lfus*ocp(k)*xri*odt*(1-ifdry)
2697 xrc = max(0.0, qc1d(k) + qcten(k)*dt)
2698 if ( (temp(k).lt. hgfr) .and. (xrc.gt. 0.0) )
then
2699 lfus2 = lsub - lvap(k)
2700 xnc = nc1d(k) + ncten(k)*dt
2701 qiten(k) = qiten(k) + xrc*odt
2702 niten(k) = niten(k) + xnc*odt
2703 qcten(k) = qcten(k) - xrc*odt
2704 ncten(k) = ncten(k) - xnc*odt
2705 tten(k) = tten(k) + lfus2*ocp(k)*xrc*odt*(1-ifdry)
2714 t1d(k) = t1d(k) + tten(k)*dt
2715 qv1d(k) = max(min_qv, qv1d(k) + qvten(k)*dt)
2716 qc1d(k) = qc1d(k) + qcten(k)*dt
2717 nc1d(k) = max(2./rho(k), min(nc1d(k) + ncten(k)*dt, nt_c_max))
2718 if (configs%aerosol_aware)
then
2719 nwfa1d(k) = max(nwfa_default, min(aero_max, (nwfa1d(k)+nwfaten(k)*dt)))
2720 nifa1d(k) = max(nifa_default, min(aero_max, (nifa1d(k)+nifaten(k)*dt)))
2722 if (qc1d(k) .le. r1)
then
2726 if (nc1d(k)*rho(k).gt.10000.e6)
then
2728 elseif (nc1d(k)*rho(k).lt.100.)
then
2731 nu_c = nint(nu_c_scale/(nc1d(k)*rho(k))) + 2
2733 if (
present(rand2))
then
2736 nu_c = max(2, min(nu_c+nint(rand), 15))
2739 lamc = (am_r*ccg(2,nu_c)*ocg1(nu_c)*nc1d(k)/qc1d(k))**obmr
2740 xdc = (bm_r + nu_c + 1.) / lamc
2741 if (xdc.lt. d0c)
then
2742 lamc = cce(2,nu_c)/d0c
2743 elseif (xdc.gt. d0r*2.)
then
2744 lamc = cce(2,nu_c)/(d0r*2.)
2746 nc1d(k) = min(ccg(1,nu_c)*ocg2(nu_c)*qc1d(k)/am_r*lamc**bm_r,&
2747 real(Nt_c_max, kind=dp)/rho(k))
2750 qi1d(k) = qi1d(k) + qiten(k)*dt
2751 ni1d(k) = max(r2/rho(k), ni1d(k) + niten(k)*dt)
2752 if (qi1d(k) .le. r1)
then
2756 lami = (am_i*cig(2)*oig1*ni1d(k)/qi1d(k))**obmi
2758 xdi = (bm_i + mu_i + 1.) * ilami
2759 if (xdi.lt. 5.e-6)
then
2761 elseif (xdi.gt. 300.e-6)
then
2762 lami = cie(2)/300.e-6
2764 ni1d(k) = min(cig(1)*oig2*qi1d(k)/am_i*lami**bm_i, max_ni/rho(k))
2766 qr1d(k) = qr1d(k) + qrten(k)*dt
2767 nr1d(k) = max(r2/rho(k), nr1d(k) + nrten(k)*dt)
2768 if (qr1d(k) .le. r1)
then
2772 lamr = (am_r*crg(3)*org2*nr1d(k)/qr1d(k))**obmr
2773 mvd_r(k) = (3.0 + mu_r + 0.672) / lamr
2774 if (mvd_r(k) .gt. 2.5e-3)
then
2776 elseif (mvd_r(k) .lt. d0r*0.75)
then
2779 lamr = (3.0 + mu_r + 0.672) / mvd_r(k)
2780 nr1d(k) = crg(2)*org3*qr1d(k)*lamr**bm_r / am_r
2782 qs1d(k) = qs1d(k) + qsten(k)*dt
2783 if (qs1d(k) .le. r1) qs1d(k) = 0.0
2784 qg1d(k) = qg1d(k) + qgten(k)*dt
2785 ng1d(k) = max(r2/rho(k), ng1d(k) + ngten(k)*dt)
2786 if (qg1d(k) .le. r1)
then
2791 qb1d(k) = max(qg1d(k)/rho_g(nrhg), qb1d(k) + qbten(k)*dt)
2792 qb1d(k) = min(qg1d(k)/rho_g(1), qb1d(k))
2793 idx_bg(k) = max(1,min(nint(qg1d(k)/qb1d(k) *0.01)+1,nrhg))
2794 if (.not. configs%hail_aware) idx_bg(k) = idx_bg1
2795 lamg = (am_g(idx_bg(k))*cgg(3,1)*ogg2*ng1d(k)/qg1d(k))**obmg
2796 mvd_g(k) = (3.0 + mu_g + 0.672) / lamg
2797 if (mvd_g(k) .gt. 25.4e-3)
then
2799 elseif (mvd_g(k) .lt. d0r)
then
2802 lamg = (3.0 + mu_g + 0.672) / mvd_g(k)
2803 ng1d(k) = cgg(2,1)*ogg3*qg1d(k)*lamg**bm_g / am_g(idx_bg(k))
2808#if defined(ccpp_default)
2810 calculate_extended_diagnostics:
if (ext_diag)
then
2812 if(prw_vcd(k).gt.0)
then
2813 prw_vcdc1(k) = prw_vcd(k)*dt
2814 elseif(prw_vcd(k).lt.0)
then
2815 prw_vcde1(k) = -1*prw_vcd(k)*dt
2818 tpri_inu1(k) = pri_inu(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2820 if(pri_ide(k).gt.0)
then
2821 tpri_ide1_d(k) = pri_ide(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2823 tpri_ide1_s(k) = -pri_ide(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2826 if(temp(k).lt.t_0)
then
2827 tprs_ide1(k) = prs_ide(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2830 if(prs_sde(k).gt.0)
then
2831 tprs_sde1_d(k) = prs_sde(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2833 tprs_sde1_s(k) = -prs_sde(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2836 if(prg_gde(k).gt.0)
then
2837 tprg_gde1_d(k) = prg_gde(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2839 tprg_gde1_s(k) = -prg_gde(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2842 tpri_iha1(k) = pri_iha(k)*lsub*ocp(k)*orho * (1-ifdry)*dt
2843 tpri_wfz1(k) = pri_wfz(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2844 tpri_rfz1(k) = pri_rfz(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2845 tprg_rfz1(k) = prg_rfz(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2846 tprs_scw1(k) = prs_scw(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2847 tprg_scw1(k) = prg_scw(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2848 tprg_rcs1(k) = prg_rcs(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2850 if(temp(k).lt.t_0)
then
2851 tprs_rcs1(k) = prs_rcs(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2854 tprr_rci1(k) = prr_rci(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2856 if(temp(k).lt.t_0)
then
2857 tprg_rcg1(k) = prg_rcg(k)*lfus2*ocp(k)*orho * (1-ifdry)*dt
2860 if(prw_vcd(k).gt.0)
then
2861 tprw_vcd1_c(k) = lvap(k)*ocp(k)*prw_vcd(k)*(1-ifdry)*dt
2863 tprw_vcd1_e(k) = -lvap(k)*ocp(k)*prw_vcd(k)*(1-ifdry)*dt
2867 tprr_sml1(k) = prr_sml(k)*lfus*ocp(k)*orho * (1-ifdry)*dt
2868 tprr_gml1(k) = prr_gml(k)*lfus*ocp(k)*orho * (1-ifdry)*dt
2870 if(temp(k).ge.t_0)
then
2871 tprr_rcg1(k) = -prr_rcg(k)*lfus*ocp(k)*orho * (1-ifdry)*dt
2874 if(temp(k).ge.t_0)
then
2875 tprr_rcs1(k) = -prr_rcs(k)*lfus*ocp(k)*orho * (1-ifdry)*dt
2878 tprv_rev1(k) = lvap(k)*ocp(k)*prv_rev(k)*(1-ifdry)*dt
2879 tten1(k) = tten(k)*dt
2880 qvten1(k) = qvten(k)*dt
2881 qiten1(k) = qiten(k)*dt
2882 qrten1(k) = qrten(k)*dt
2883 qsten1(k) = qsten(k)*dt
2884 qgten1(k) = qgten(k)*dt
2885 niten1(k) = niten(k)*dt
2886 nrten1(k) = nrten(k)*dt
2887 ncten1(k) = ncten(k)*dt
2888 qcten1(k) = qcten(k)*dt
2890 endif calculate_extended_diagnostics