515 const amrex::Box& box = mfi.tilebox();
543 const int ilo = box.loVect()[0];
544 const int ihi = box.hiVect()[0];
545 const int jlo = box.loVect()[1];
546 const int jhi = box.hiVect()[1];
547 const int klo = box.loVect()[2];
548 const int khi = box.hiVect()[2];
550 amrex::Box grown_box(box); grown_box.grow(3);
551 #ifdef ERF_USE_MORR_FORT
552 const int ilom = grown_box.loVect()[0];
553 const int ihim = grown_box.hiVect()[0];
554 const int jlom = grown_box.loVect()[1];
555 const int jhim = grown_box.hiVect()[1];
556 const int klom = grown_box.loVect()[2];
557 const int khim = grown_box.hiVect()[2];
561 FArrayBox pii_fab(grown_box, 1);
562 auto const& pii_arr = pii_fab.array();
569 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
572 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
576 FArrayBox dz_fab(grown_box, 1);
577 auto const& dz_arr = dz_fab.array();
581 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
582 dz_arr(i,j,k) = dz_val;
584 amrex::Box grown_boxD(grown_box); grown_boxD.makeSlab(2,0);
587 FArrayBox rainncv_fab(grown_boxD, 1);
588 FArrayBox sr_fab(grown_boxD, 1);
589 FArrayBox snowncv_fab(grown_boxD, 1);
590 FArrayBox graupelncv_fab(grown_boxD, 1);
592 auto const& rainncv_arr = rainncv_fab.array();
593 auto const& sr_arr = sr_fab.array();
594 auto const& snowncv_arr = snowncv_fab.array();
595 auto const& graupelncv_arr = graupelncv_fab.array();
598 ParallelFor(grown_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
599 rainncv_arr(i,j,k) = 0.0;
601 snowncv_arr(i,j,k) = 0.0;
602 graupelncv_arr(i,j,k) = 0.0;
606 FArrayBox ht_fab(amrex::Box(amrex::IntVect(ilo, jlo, 0), amrex::IntVect(ihi, jhi, 0)), 1);
607 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
608 ParallelFor(amrex::Box(amrex::IntVect(ilo, jlo, 0), amrex::IntVect(ihi, jhi, 0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
612 #ifdef ERF_USE_MORR_FORT
614 FArrayBox qrcuten_fab(grown_box, 1);
615 FArrayBox qscuten_fab(grown_box, 1);
616 FArrayBox qicuten_fab(grown_box, 1);
622 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
629 bool flag_qndrop =
false;
632 FArrayBox rainprod_fab(grown_box, 1);
633 FArrayBox evapprod_fab(grown_box, 1);
634 FArrayBox qlsink_fab(grown_box, 1);
635 FArrayBox precr_fab(grown_box, 1);
636 FArrayBox preci_fab(grown_box, 1);
637 FArrayBox precs_fab(grown_box, 1);
638 FArrayBox precg_fab(grown_box, 1);
640 auto const& rainprod_arr = rainprod_fab.array();
641 auto const& evapprod_arr = evapprod_fab.array();
642 auto const& qlsink_arr = qlsink_fab.array();
643 auto const& precr_arr = precr_fab.array();
644 auto const& preci_arr = preci_fab.array();
645 auto const& precs_arr = precs_fab.array();
646 auto const& precg_arr = precg_fab.array();
649 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
650 rainprod_arr(i,j,k) = 0.0;
651 evapprod_arr(i,j,k) = 0.0;
652 qlsink_arr(i,j,k) = 0.0;
653 precr_arr(i,j,k) = 0.0;
654 preci_arr(i,j,k) = 0.0;
655 precs_arr(i,j,k) = 0.0;
656 precg_arr(i,j,k) = 0.0;
660 #ifdef ERF_USE_MORR_FORT
663 double dummy_reflectivity = 0.0;
664 double* dummy_reflectivity_ptr = &dummy_reflectivity;
674 [[maybe_unused]]
int m_ibase = 2;
675 [[maybe_unused]]
int m_isub = 0;
687 [[maybe_unused]]
bool m_do_radar_ref =
false;
770 amrex::Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
771 amrex::Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
772 amrex::Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
773 amrex::Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
774 amrex::Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
777 amrex::Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
783 m_pi = 3.1415926535897932384626434;
788 m_cp = 7.0*287.0/2.0;
790 m_ep_2 = m_Rd / m_Rv;
793 m_rhosu = 85000.0/(287.15*273.15);
840 m_mi0 = 4.0/3.0*m_pi*m_rhoi*std::pow(10.0E-6, 3);
860 m_ci = m_rhoi * m_pi / 6.0;
862 m_cs = m_rhosn * m_pi / 6.0;
864 m_cg = m_rhog * m_pi / 6.0;
871 m_mmult = 4.0/3.0*m_pi*m_rhoi*std::pow(5.0E-6, 3);
875 m_lammaxi = 1.0/1.0E-6;
876 m_lammini = 1.0/(2.0*m_dcs + 100.0E-6);
877 m_lammaxr = 1.0/20.0E-6;
878 m_lamminr = 1.0/2800.0E-6;
879 m_lammaxs = 1.0/10.0E-6;
880 m_lammins = 1.0/2000.0E-6;
881 m_lammaxg = 1.0/20.0E-6;
882 m_lamming = 1.0/2000.0E-6;
903 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
911 m_f11 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig1), 2));
912 m_f21 = 1.0 + 0.25 * std::log(m_sig1);
918 m_f12 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig2), 2));
919 m_f22 = 1.0 + 0.25 * std::log(m_sig2);
937 m_cons15 = -1108.0 * m_eii * std::pow(m_pi, (1.0-m_bs)/3.0) *
938 std::pow(m_rhosn, (-2.0-m_bs)/3.0) / (4.0*720.0);
940 m_cons17 = 4.0 * 2.0 * 3.0 * m_rhosu * m_pi * m_eci * m_eci *
942 m_cons18 = m_rhosn * m_rhosn;
943 m_cons19 = m_rhow * m_rhow;
944 m_cons20 = 20.0 * m_pi * m_pi * m_rhow * m_bimm;
945 m_cons21 = 4.0 / (m_dcs * m_rhoi);
946 m_cons22 = m_pi * m_rhoi * std::pow(m_dcs, 3) / 6.0;
949 m_cons25 = m_pi * m_pi / 24.0 * m_rhow * m_ecr *
gamma_function(m_br + 6.0);
950 m_cons26 = m_pi / 6.0 * m_rhow;
953 m_cons29 = 4.0/3.0 * m_pi * m_rhow * std::pow(25.0E-6, 3);
954 m_cons30 = 4.0/3.0 * m_pi * m_rhow;
955 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
956 m_cons32 = m_pi / 2.0 * m_ecr;
957 m_cons33 = m_pi * m_pi * m_ecr * m_rhog;
958 m_cons34 = 5.0/2.0 + m_br/2.0;
959 m_cons35 = 5.0/2.0 + m_bs/2.0;
960 m_cons36 = 5.0/2.0 + m_bg/2.0;
961 m_cons37 = 4.0 * m_pi * 1.38E-23 / (6.0 * m_pi * m_rin);
962 m_cons38 = m_pi * m_pi / 3.0 * m_rhow;
963 m_cons39 = m_pi * m_pi / 36.0 * m_rhow * m_bimm;
964 m_cons40 = m_pi / 6.0 * m_bimm;
965 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
986 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
993 m_f11 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig1), 2));
994 m_f21 = 1.0 + 0.25 * std::log(m_sig1);
1000 m_f12 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig2), 2));
1001 m_f22 = 1.0 + 0.25 * std::log(m_sig2);
1015 m_do_radar_ref =
false;
1016 amrex::Box boxD(box); boxD.makeSlab(2,0);
1018 ParmParse
pp(
"erf");
1020 bool run_morr_cpp =
true;
1022 bool use_morr_cpp_answer =
true;
1023 pp.query(
"use_morr_cpp_answer", use_morr_cpp_answer);
1024 Print() <<
"use_morr_cpp_answer" << use_morr_cpp_answer <<std::endl;
1026 bool run_morr_fort = !use_morr_cpp_answer;
1028 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
1034 morr_fab.template setVal<RunOn::Device>(0.0);
1035 auto const& morr_arr = morr_fab.array();
1042 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
1054 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
1065 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
1071 for(
int k=klo; k<=khi; k++) {
1242 const double CI = 800.0;
1252 dum = 3.e5 * std::pow(morr_arr(i,j,k,
MORRInd::qscu1d) * dt / (m_cons1 * std::pow(morr_arr(i,j,k,
MORRInd::rho), 3)), 1.0 / (ds0 + 1.0));
1256 dum = morr_arr(i,j,k,
MORRInd::qicu1d) * dt / (CI * std::pow(80.0e-6, di0));
1265 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qr3d) * morr_arr(i,j,k,
MORRInd::xxlv) / morr_arr(i,j,k,
MORRInd::cpm);
1270 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qc3d) * morr_arr(i,j,k,
MORRInd::xxlv) / morr_arr(i,j,k,
MORRInd::cpm);
1277 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qi3d) * morr_arr(i,j,k,
MORRInd::xxls) / morr_arr(i,j,k,
MORRInd::cpm);
1282 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qni3d) * morr_arr(i,j,k,
MORRInd::xxls) / morr_arr(i,j,k,
MORRInd::cpm);
1287 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qg3d) * morr_arr(i,j,k,
MORRInd::xxls) / morr_arr(i,j,k,
MORRInd::cpm);
1331 morr_arr(i,j,k,
MORRInd::mu) = 1.496e-6 * std::pow(morr_arr(i,j,k,
MORRInd::t3d), 1.5) / (morr_arr(i,j,k,
MORRInd::t3d) + 120.0);
1334 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
1350 bool skipMicrophysics =
false;
1351 bool skipConcentrations =
false;
1352 if (morr_arr(i,j,k,
MORRInd::qc3d) < QSMALL && morr_arr(i,j,k,
MORRInd::qi3d) < QSMALL && morr_arr(i,j,k,
MORRInd::qni3d) < QSMALL && morr_arr(i,j,k,
MORRInd::qr3d) < QSMALL && morr_arr(i,j,k,
MORRInd::qg3d) < QSMALL) {
1353 if ((morr_arr(i,j,k,
MORRInd::t3d) < 273.15 && qvqvsi < 0.999) || (morr_arr(i,j,k,
MORRInd::t3d) >= 273.15 && qvqvs < 0.999)) {
1354 skipMicrophysics =
true;
1358 if(!skipMicrophysics) {
1371 dum = (m_Rv * std::pow(morr_arr(i,j,k,
MORRInd::t3d),2));
1395 morr_arr(i,j,k,
MORRInd::t3d) = morr_arr(i,j,k,
MORRInd::t3d) - morr_arr(i,j,k,
MORRInd::qni3d) * morr_arr(i,j,k,
MORRInd::xlf) / morr_arr(i,j,k,
MORRInd::cpm);
1403 morr_arr(i,j,k,
MORRInd::t3d) = morr_arr(i,j,k,
MORRInd::t3d) - morr_arr(i,j,k,
MORRInd::qg3d) * morr_arr(i,j,k,
MORRInd::xlf) / morr_arr(i,j,k,
MORRInd::cpm);
1408 if (morr_arr(i,j,k,
MORRInd::qc3d) < m_qsmall && morr_arr(i,j,k,
MORRInd::qni3d) < 1.0e-8 && morr_arr(i,j,k,
MORRInd::qr3d) < m_qsmall && morr_arr(i,j,k,
MORRInd::qg3d) < 1.0e-8) {
1409 skipConcentrations=
true;
1411 if(!skipConcentrations) {
1423 morr_arr(i,j,k,
MORRInd::lamr) = pow(m_pi * m_rhow * morr_arr(i,j,k,
MORRInd::nr3d) / morr_arr(i,j,k,
MORRInd::qr3d), 1.0/3.0);
1429 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr), 4.0) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1433 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr), 4.0) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1454 morr_arr(i,j,k,
MORRInd::lamc) = pow((m_cons26 * morr_arr(i,j,k,
MORRInd::nc3d) * gamma_pgam_plus_4) / (morr_arr(i,j,k,
MORRInd::qc3d) * gamma_pgam_plus_1), 1.0/3.0);
1465 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1470 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1474 morr_arr(i,j,k,
MORRInd::cdist1) = morr_arr(i,j,k,
MORRInd::nc3d) * pow(morr_arr(i,j,k,
MORRInd::lamc), morr_arr(i,j,k,
MORRInd::pgam)+1) / gamma_pgam_plus_1;
1480 morr_arr(i,j,k,
MORRInd::lams) = pow(m_cons1 * morr_arr(i,j,k,
MORRInd::ns3d) / morr_arr(i,j,k,
MORRInd::qni3d), 1.0/ds0);
1488 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams), 4.0) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1492 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams), 4.0) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1500 morr_arr(i,j,k,
MORRInd::lamg) = pow(m_cons2 * morr_arr(i,j,k,
MORRInd::ng3d) / morr_arr(i,j,k,
MORRInd::qg3d), 1.0/dg0);
1508 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg), 4.0) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1512 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg), 4.0) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1554 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
1559 nprc1 = prc / m_cons29;
1564 nprc1 = std::min(nprc1, nprc);
1578 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1579 ums_local = std::min(ums_local, 1.2*dum);
1580 uns_local = std::min(uns_local, 1.2*dum);
1581 umr_local = std::min(umr_local, 9.1*dum);
1582 unr_local = std::min(unr_local, 9.1*dum);
1589 pracs = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*ums_local, 2) +
1590 0.08*ums_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1591 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0s) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1609 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1610 umg_local = std::min(umg_local, 20.0*dum);
1611 ung_local = std::min(ung_local, 20.0*dum);
1612 umr_local = std::min(umr_local, 9.1*dum);
1613 unr_local = std::min(unr_local, 9.1*dum);
1616 pracg = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*umg_local, 2) +
1617 0.08*umg_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1618 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0g) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1626 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(1.7*std::pow(unr_local-ung_local, 2) +
1633 npracg = npracg - dum;
1643 pra = 67.0 * std::pow(dum, 1.15);
1658 dum = 2.0 - std::exp(2300.0 * (1.0/morr_arr(i,j,k,
MORRInd::lamr) - dum1));
1667 std::pow(sc_schmidt, 1.0/3.0) * m_cons9 /
1675 pre = std::min(pre, 0.0);
1692 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1700 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1705 evpms = std::max(evpms, psmlt);
1706 psmlt = psmlt - evpms;
1723 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1731 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1736 evpmg = std::max(evpmg, pgmlt);
1737 pgmlt = pgmlt - evpmg;
1748 dum = (prc + pra) * dt;
1757 dum = (-psmlt - evpms + pracs) * dt;
1762 psmlt = psmlt * ratio;
1763 evpms = evpms * ratio;
1764 pracs = pracs * ratio;
1768 dum = (-pgmlt - evpmg + pracg) * dt;
1773 pgmlt = pgmlt * ratio;
1774 evpmg = evpmg * ratio;
1775 pracg = pracg * ratio;
1781 dum = (-pracs - pracg - pre - pra - prc + psmlt + pgmlt) * dt;
1784 ratio = (morr_arr(i,j,k,
MORRInd::qr3d)/dt + pracs + pracg + pra + prc - psmlt - pgmlt) / (-pre);
1809 dum = std::max(-1.0, dum);
1813 if (evpms + psmlt < 0.0) {
1815 dum = std::max(-1.0, dum);
1821 dum = std::max(-1.0, dum);
1825 if (evpmg + pgmlt < 0.0) {
1827 dum = std::max(-1.0, dum);
1833 dum = std::max(-1.0, dum);
1850 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1852 dumqc = std::max(dumqc, 0.0);
1855 dums = dumqv - dumqss;
1856 pcc = dums / (1.0 + std::pow(morr_arr(i,j,k,
MORRInd::xxlv), 2) * dumqss / (morr_arr(i,j,k,
MORRInd::cpm) * m_Rv * std::pow(dumt, 2))) / dt;
1857 if (pcc * dt + dumqc < 0.0) {
1861 if (!do_cond) { pcc = 0.0; }
1891 morr_arr(i,j,k,
MORRInd::lamr) = pow(m_pi * m_rhow * morr_arr(i,j,k,
MORRInd::nr3d) / morr_arr(i,j,k,
MORRInd::qr3d), 1.0/3.0);
1896 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr), 4.0) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1900 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr), 4.0) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1904 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr), 4.0) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1925 morr_arr(i,j,k,
MORRInd::lamc) = pow((m_cons26 * morr_arr(i,j,k,
MORRInd::nc3d) * gamma_pgam_plus_4) / (morr_arr(i,j,k,
MORRInd::qc3d) * gamma_pgam_plus_1), 1.0/3.0);
1936 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1941 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1951 morr_arr(i,j,k,
MORRInd::lams) = pow(m_cons1 * morr_arr(i,j,k,
MORRInd::ns3d) / morr_arr(i,j,k,
MORRInd::qni3d), 1.0/ds0);
1959 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams), 4.0) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1963 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams), 4.0) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1971 morr_arr(i,j,k,
MORRInd::lami) = pow(m_cons12 * morr_arr(i,j,k,
MORRInd::ni3d) / morr_arr(i,j,k,
MORRInd::qi3d), 1.0/3.0);
1980 morr_arr(i,j,k,
MORRInd::n0i) = pow(morr_arr(i,j,k,
MORRInd::lami), 4.0) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
1986 morr_arr(i,j,k,
MORRInd::n0i) = pow(morr_arr(i,j,k,
MORRInd::lami), 4.0) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
1994 morr_arr(i,j,k,
MORRInd::lamg) = pow(m_cons2 * morr_arr(i,j,k,
MORRInd::ng3d) / morr_arr(i,j,k,
MORRInd::qg3d), 1.0/dg0);
2002 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg), 4.0) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
2006 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg), 4.0) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
2090 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
2097 mnuccc = mnuccc + m_cons39 *
2099 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2103 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2107 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
2120 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
2125 nprc1 = prc / m_cons29;
2130 nprc1 = std::min(nprc1, nprc);
2137 std::pow((morr_arr(i,j,k,
MORRInd::ns3d) * morr_arr(i,j,k,
MORRInd::rho)), ((4.0 - m_bs) / 3.0)) / morr_arr(i,j,k,
MORRInd::rho);
2188 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2189 ums_local = std::min(ums_local, 1.2 * dum);
2190 uns_local = std::min(uns_local, 1.2 * dum);
2191 umr_local = std::min(umr_local, 9.1 * dum);
2192 unr_local = std::min(unr_local, 9.1 * dum);
2194 pracs = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2196 std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * (5.0 / (std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::lams)) +
2200 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - uns_local, 2) +
2209 pracs = std::min(pracs, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2215 psacr = m_cons31 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2217 std::pow(morr_arr(i,j,k,
MORRInd::lams), 3) * (5.0 / (std::pow(morr_arr(i,j,k,
MORRInd::lams), 3) * morr_arr(i,j,k,
MORRInd::lamr)) +
2233 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2234 umg_local = std::min(umg_local, 20.0 * dum);
2235 ung_local = std::min(ung_local, 20.0 * dum);
2236 umr_local = std::min(umr_local, 9.1 * dum);
2237 unr_local = std::min(unr_local, 9.1 * dum);
2239 pracg = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * umg_local, 2) +
2241 std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * (5.0 / (std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::lamg)) +
2245 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - ung_local, 2) +
2254 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2266 if (psacws > 0.0 || pracs > 0.0) {
2283 nmults = 35.0e4 * psacws * fmult * 1000.0;
2284 qmults = nmults * m_mmult;
2288 qmults = std::min(qmults, psacws);
2289 psacws = psacws - qmults;
2294 nmultr = 35.0e4 * pracs * fmult * 1000.0;
2295 qmultr = nmultr * m_mmult;
2299 qmultr = std::min(qmultr, pracs);
2300 pracs = pracs - qmultr;
2315 if (psacwg > 0.0 || pracg > 0.0) {
2332 nmultg = 35.0e4 * psacwg * fmult * 1000.0;
2333 qmultg = nmultg * m_mmult;
2337 qmultg = std::min(qmultg, psacwg);
2338 psacwg = psacwg - qmultg;
2343 nmultrg = 35.0e4 * pracg * fmult * 1000.0;
2344 qmultrg = nmultrg * m_mmult;
2348 qmultrg = std::min(qmultrg, pracg);
2349 pracg = pracg - qmultrg;
2361 pgsacw = std::min(psacws, m_cons17 * dt * morr_arr(i,j,k,
MORRInd::n0s) * morr_arr(i,j,k,
MORRInd::qc3d) * morr_arr(i,j,k,
MORRInd::qc3d) *
2366 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw, 0.0);
2371 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2374 psacws = psacws - pgsacw;
2386 dum = std::min(dum, 1.0);
2387 dum = std::max(dum, 0.0);
2389 pgracs = (1.0 - dum) * pracs;
2390 ngracs = (1.0 - dum) * npracs;
2393 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2394 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2397 pracs = pracs - pgracs;
2398 npracs = npracs - ngracs;
2401 psacr = psacr * (1.0 - dum);
2410 mnuccr = m_cons20 * morr_arr(i,j,k,
MORRInd::nr3d) * (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0) /
2413 nnuccr = m_pi * morr_arr(i,j,k,
MORRInd::nr3d) * m_bimm * (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0) /
2417 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2427 pra = 67.0 * std::pow(dum, 1.15);
2441 dum = 2.0 - std::exp(2300.0 * (1.0 / morr_arr(i,j,k,
MORRInd::lamr) - dum1));
2450 if (morr_arr(i,j,k,
MORRInd::qi3d) >= 1.0e-8 && qvqvsi >= 1.0) {
2453 prci = m_cons22 * nprci;
2454 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2461 prai = m_cons23 * morr_arr(i,j,k,
MORRInd::asn) * morr_arr(i,j,k,
MORRInd::qi3d) * morr_arr(i,j,k,
MORRInd::rho) * morr_arr(i,j,k,
MORRInd::n0s) /
2466 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2479 std::pow(morr_arr(i,j,k,
MORRInd::lamr), (m_br + 3.0)) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::rho);
2482 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2483 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2488 std::pow(morr_arr(i,j,k,
MORRInd::lamr), (m_br + 3.0)) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::rho);
2491 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2492 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2499 if ((qvqvs >= 0.999 && morr_arr(i,j,k,
MORRInd::t3d) <= 265.15) || qvqvsi >= 1.08) {
2501 kc2 = 0.005 * std::exp(0.304 * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) * 1000.0;
2503 kc2 = std::min(kc2, 500.0e3);
2504 kc2 = std::max(kc2 / morr_arr(i,j,k,
MORRInd::rho), 0.0);
2508 mnuccd = nnuccd * m_mi0;
2511 }
else if (m_inuc == 1) {
2512 if (morr_arr(i,j,k,
MORRInd::t3d) < 273.15 && qvqvsi > 1.0) {
2516 mnuccd = nnuccd * m_mi0;
2525 epsi = 2.0 * m_pi * morr_arr(i,j,k,
MORRInd::n0i) * morr_arr(i,j,k,
MORRInd::rho) * dv / (morr_arr(i,j,k,
MORRInd::lami) * morr_arr(i,j,k,
MORRInd::lami));
2533 m_f2s * std::pow(morr_arr(i,j,k,
MORRInd::asn) * morr_arr(i,j,k,
MORRInd::rho) / morr_arr(i,j,k,
MORRInd::mu), 0.5) *
2534 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons10 /
2543 m_f2s * std::pow(morr_arr(i,j,k,
MORRInd::agn) * morr_arr(i,j,k,
MORRInd::rho) / morr_arr(i,j,k,
MORRInd::mu), 0.5) *
2544 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons11 /
2553 m_f2r * std::pow(morr_arr(i,j,k,
MORRInd::arn) * morr_arr(i,j,k,
MORRInd::rho) / morr_arr(i,j,k,
MORRInd::mu), 0.5) *
2554 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons9 /
2563 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2571 epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2574 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2583 pre = std::min(pre, 0.0);
2593 sum_dep = prd + prds + mnuccd + prdg;
2595 if ((dum > 0.0 && sum_dep > dum * fudgef) ||
2596 (dum < 0.0 && sum_dep < dum * fudgef)) {
2597 mnuccd = fudgef * mnuccd * dum / sum_dep;
2598 prd = fudgef * prd * dum / sum_dep;
2599 prds = fudgef * prds * dum / sum_dep;
2600 prdg = fudgef * prdg * dum / sum_dep;
2640 if (m_igraup == 1) {
2657 piacrs = piacrs + piacr;
2661 pracis = pracis + praci;
2663 psacws = psacws + pgsacw;
2665 pracs = pracs + pgracs;
2670 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2677 mnuccc = mnuccc * ratio;
2678 psacws = psacws * ratio;
2679 psacwi = psacwi * ratio;
2680 qmults = qmults * ratio;
2681 qmultg = qmultg * ratio;
2682 psacwg = psacwg * ratio;
2683 pgsacw = pgsacw * ratio;
2687 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2688 - mnuccd + praci + pracis - eprd - psacwi) * dt;
2691 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2693 (prci + prai + praci + pracis - eprd);
2695 prci = prci * ratio;
2696 prai = prai * ratio;
2697 praci = praci * ratio;
2698 pracis = pracis * ratio;
2699 eprd = eprd * ratio;
2703 dum = ((pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2704 piacr + piacrs + pgracs + pracg) * dt;
2708 (-pre + qmultr + qmultrg + pracs + mnuccr + piacr + piacrs + pgracs + pracg);
2711 pracs = pracs * ratio;
2712 qmultr = qmultr * ratio;
2713 qmultrg = qmultrg * ratio;
2714 mnuccr = mnuccr * ratio;
2715 piacr = piacr * ratio;
2716 piacrs = piacrs * ratio;
2717 pgracs = pgracs * ratio;
2718 pracg = pracg * ratio;
2722 if (m_igraup == 0) {
2723 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis) * dt;
2726 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis) /
2729 eprds = eprds * ratio;
2730 psacr = psacr * ratio;
2732 }
else if (m_igraup == 1) {
2734 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis - mnuccr) * dt;
2737 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis + mnuccr) /
2740 eprds = eprds * ratio;
2741 psacr = psacr * ratio;
2746 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg - piacr - praci - psacr) * dt;
2749 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr + psacr +
2750 piacr + praci) / (-eprdg);
2752 eprdg = eprdg * ratio;
2760 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2761 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg + pracs +
2765 (-pra - prc - mnuccc + pcc -
2766 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2769 (prd + eprd + psacwi + mnuccc - prci -
2770 prai + qmults + qmultg + qmultr + qmultrg + mnuccd - praci - pracis);
2773 (pre + pra + prc - pracs - mnuccr - qmultr - qmultrg -
2774 piacr - piacrs - pracg - pgracs);
2775 if (m_igraup == 0) {
2777 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis);
2782 prdg + eprdg + mnuccr + piacr + praci + psacr);
2785 }
else if (m_igraup == 1) {
2788 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis + mnuccr);
2794 npra - nprc - npsacwi - npsacwg);
2797 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2798 nnuccd - niacr - niacrs);
2801 nragg - niacr - niacrs - npracg - ngracs);
2804 c2prec = pra + prc + psacws + qmults + qmultg + psacwg +
2805 pgsacw + mnuccc + psacwi;
2814 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2817 dumqc = std::max(dumqc, 0.0);
2820 dums = dumqv - dumqss;
2822 pcc = dums / (1.0 + std::pow(morr_arr(i,j,k,
MORRInd::xxlv), 2) * dumqss / (morr_arr(i,j,k,
MORRInd::cpm) * m_Rv * std::pow(dumt, 2))) / dt;
2824 if (pcc * dt + dumqc < 0.0) {
2829 morr_arr(i,j,k,
MORRInd::t3dten) = morr_arr(i,j,k,
MORRInd::t3dten) + pcc * morr_arr(i,j,k,
MORRInd::xxlv) / morr_arr(i,j,k,
MORRInd::cpm);
2836 dum = std::max(-1.0, dum);
2842 dum = std::max(-1.0, dum);
2848 dum = std::max(-1.0, dum);
2854 dum = std::max(-1.0, dum);
2869 for(
int k=klo; k<=khi; k++) {
2885 for(
int k=khi; k>=klo; k--) {
2925 morr_arr(i,j,k,
MORRInd::dlami) = std::pow(m_cons12 * morr_arr(i,j,k,
MORRInd::dumfni) / morr_arr(i,j,k,
MORRInd::dumi), 1.0/di0);
2932 morr_arr(i,j,k,
MORRInd::dlamr) = std::pow(m_pi * m_rhow * morr_arr(i,j,k,
MORRInd::dumfnr) / morr_arr(i,j,k,
MORRInd::dumr), 1.0/3.0);
2955 morr_arr(i,j,k,
MORRInd::dlams) = std::pow(m_cons1 * morr_arr(i,j,k,
MORRInd::dumfns) / morr_arr(i,j,k,
MORRInd::dumqs), 1.0/ds0);
2962 morr_arr(i,j,k,
MORRInd::dlamg) = std::pow(m_cons2 * morr_arr(i,j,k,
MORRInd::dumfng) / morr_arr(i,j,k,
MORRInd::dumg), 1.0/dg0);
2981 morr_arr(i,j,k,
MORRInd::uni) = morr_arr(i,j,k,
MORRInd::ain) * m_cons27 / std::pow(morr_arr(i,j,k,
MORRInd::dlami), m_bi);
2982 morr_arr(i,j,k,
MORRInd::umi) = morr_arr(i,j,k,
MORRInd::ain) * m_cons28 / std::pow(morr_arr(i,j,k,
MORRInd::dlami), m_bi);
2990 morr_arr(i,j,k,
MORRInd::unr) = morr_arr(i,j,k,
MORRInd::arn) * m_cons6 / std::pow(morr_arr(i,j,k,
MORRInd::dlamr), m_br);
2991 morr_arr(i,j,k,
MORRInd::umr) = morr_arr(i,j,k,
MORRInd::arn) * m_cons4 / std::pow(morr_arr(i,j,k,
MORRInd::dlamr), m_br);
2999 morr_arr(i,j,k,
MORRInd::ums) = morr_arr(i,j,k,
MORRInd::asn) * m_cons3 / std::pow(morr_arr(i,j,k,
MORRInd::dlams), m_bs);
3000 morr_arr(i,j,k,
MORRInd::uns) = morr_arr(i,j,k,
MORRInd::asn) * m_cons5 / std::pow(morr_arr(i,j,k,
MORRInd::dlams), m_bs);
3008 morr_arr(i,j,k,
MORRInd::umg) = morr_arr(i,j,k,
MORRInd::agn) * m_cons7 / std::pow(morr_arr(i,j,k,
MORRInd::dlamg), m_bg);
3009 morr_arr(i,j,k,
MORRInd::ung) = morr_arr(i,j,k,
MORRInd::agn) * m_cons8 / std::pow(morr_arr(i,j,k,
MORRInd::dlamg), m_bg);
3017 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
3023 morr_arr(i,j,k,
MORRInd::umi) = std::min(morr_arr(i,j,k,
MORRInd::umi), 1.2 * std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.35));
3024 morr_arr(i,j,k,
MORRInd::uni) = std::min(morr_arr(i,j,k,
MORRInd::uni), 1.2 * std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.35));
3076 morr_arr(i,j,k,
MORRInd::rgvm) = std::max({morr_arr(i,j,k,
MORRInd::fr), morr_arr(i,j,k,
MORRInd::fi), morr_arr(i,j,k,
MORRInd::fs), morr_arr(i,j,k,
MORRInd::fc),
3077 morr_arr(i,j,k,
MORRInd::fni), morr_arr(i,j,k,
MORRInd::fnr), morr_arr(i,j,k,
MORRInd::fns), morr_arr(i,j,k,
MORRInd::fnc),
3095 for (
int n = 1; n <= nstep; n++) {
3097 for (
int k = klo; k <= khi; k++) {
3126 morr_arr(i,j,k,
MORRInd::qrsten) = morr_arr(i,j,k,
MORRInd::qrsten) - morr_arr(i,j,k,
MORRInd::faltndr) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3127 morr_arr(i,j,k,
MORRInd::qisten) = morr_arr(i,j,k,
MORRInd::qisten) - morr_arr(i,j,k,
MORRInd::faltndi) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3128 morr_arr(i,j,k,
MORRInd::ni3dten) = morr_arr(i,j,k,
MORRInd::ni3dten) - morr_arr(i,j,k,
MORRInd::faltndni) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3129 morr_arr(i,j,k,
MORRInd::qnisten) = morr_arr(i,j,k,
MORRInd::qnisten) - morr_arr(i,j,k,
MORRInd::faltnds) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3130 morr_arr(i,j,k,
MORRInd::ns3dten) = morr_arr(i,j,k,
MORRInd::ns3dten) - morr_arr(i,j,k,
MORRInd::faltndns) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3131 morr_arr(i,j,k,
MORRInd::nr3dten) = morr_arr(i,j,k,
MORRInd::nr3dten) - morr_arr(i,j,k,
MORRInd::faltndnr) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3132 morr_arr(i,j,k,
MORRInd::qcsten) = morr_arr(i,j,k,
MORRInd::qcsten) - morr_arr(i,j,k,
MORRInd::faltndc) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3133 morr_arr(i,j,k,
MORRInd::nc3dten) = morr_arr(i,j,k,
MORRInd::nc3dten) - morr_arr(i,j,k,
MORRInd::faltndnc) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3134 morr_arr(i,j,k,
MORRInd::qgsten) = morr_arr(i,j,k,
MORRInd::qgsten) - morr_arr(i,j,k,
MORRInd::faltndg) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3135 morr_arr(i,j,k,
MORRInd::ng3dten) = morr_arr(i,j,k,
MORRInd::ng3dten) - morr_arr(i,j,k,
MORRInd::faltndng) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3150 for (k = khi-1; k >= klo; k--) {
3152 morr_arr(i,j,k,
MORRInd::faltndr) = (morr_arr(i,j,k+1,
MORRInd::faloutr) - morr_arr(i,j,k,
MORRInd::faloutr)) / morr_arr(i,j,k,
MORRInd::dzq);
3153 morr_arr(i,j,k,
MORRInd::faltndi) = (morr_arr(i,j,k+1,
MORRInd::falouti) - morr_arr(i,j,k,
MORRInd::falouti)) / morr_arr(i,j,k,
MORRInd::dzq);
3154 morr_arr(i,j,k,
MORRInd::faltndni) = (morr_arr(i,j,k+1,
MORRInd::faloutni) - morr_arr(i,j,k,
MORRInd::faloutni)) / morr_arr(i,j,k,
MORRInd::dzq);
3155 morr_arr(i,j,k,
MORRInd::faltnds) = (morr_arr(i,j,k+1,
MORRInd::falouts) - morr_arr(i,j,k,
MORRInd::falouts)) / morr_arr(i,j,k,
MORRInd::dzq);
3156 morr_arr(i,j,k,
MORRInd::faltndns) = (morr_arr(i,j,k+1,
MORRInd::faloutns) - morr_arr(i,j,k,
MORRInd::faloutns)) / morr_arr(i,j,k,
MORRInd::dzq);
3157 morr_arr(i,j,k,
MORRInd::faltndnr) = (morr_arr(i,j,k+1,
MORRInd::faloutnr) - morr_arr(i,j,k,
MORRInd::faloutnr)) / morr_arr(i,j,k,
MORRInd::dzq);
3158 morr_arr(i,j,k,
MORRInd::faltndc) = (morr_arr(i,j,k+1,
MORRInd::faloutc) - morr_arr(i,j,k,
MORRInd::faloutc)) / morr_arr(i,j,k,
MORRInd::dzq);
3159 morr_arr(i,j,k,
MORRInd::faltndnc) = (morr_arr(i,j,k+1,
MORRInd::faloutnc) - morr_arr(i,j,k,
MORRInd::faloutnc)) / morr_arr(i,j,k,
MORRInd::dzq);
3160 morr_arr(i,j,k,
MORRInd::faltndg) = (morr_arr(i,j,k+1,
MORRInd::faloutg) - morr_arr(i,j,k,
MORRInd::faloutg)) / morr_arr(i,j,k,
MORRInd::dzq);
3161 morr_arr(i,j,k,
MORRInd::faltndng) = (morr_arr(i,j,k+1,
MORRInd::faloutng) - morr_arr(i,j,k,
MORRInd::faloutng)) / morr_arr(i,j,k,
MORRInd::dzq);
3164 morr_arr(i,j,k,
MORRInd::qrsten) = morr_arr(i,j,k,
MORRInd::qrsten) + morr_arr(i,j,k,
MORRInd::faltndr) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3165 morr_arr(i,j,k,
MORRInd::qisten) = morr_arr(i,j,k,
MORRInd::qisten) + morr_arr(i,j,k,
MORRInd::faltndi) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3166 morr_arr(i,j,k,
MORRInd::ni3dten) = morr_arr(i,j,k,
MORRInd::ni3dten) + morr_arr(i,j,k,
MORRInd::faltndni) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3167 morr_arr(i,j,k,
MORRInd::qnisten) = morr_arr(i,j,k,
MORRInd::qnisten) + morr_arr(i,j,k,
MORRInd::faltnds) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3168 morr_arr(i,j,k,
MORRInd::ns3dten) = morr_arr(i,j,k,
MORRInd::ns3dten) + morr_arr(i,j,k,
MORRInd::faltndns) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3169 morr_arr(i,j,k,
MORRInd::nr3dten) = morr_arr(i,j,k,
MORRInd::nr3dten) + morr_arr(i,j,k,
MORRInd::faltndnr) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3170 morr_arr(i,j,k,
MORRInd::qcsten) = morr_arr(i,j,k,
MORRInd::qcsten) + morr_arr(i,j,k,
MORRInd::faltndc) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3171 morr_arr(i,j,k,
MORRInd::nc3dten) = morr_arr(i,j,k,
MORRInd::nc3dten) + morr_arr(i,j,k,
MORRInd::faltndnc) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3172 morr_arr(i,j,k,
MORRInd::qgsten) = morr_arr(i,j,k,
MORRInd::qgsten) + morr_arr(i,j,k,
MORRInd::faltndg) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3173 morr_arr(i,j,k,
MORRInd::ng3dten) = morr_arr(i,j,k,
MORRInd::ng3dten) + morr_arr(i,j,k,
MORRInd::faltndng) / nstep / morr_arr(i,j,k,
MORRInd::rho);
3190 morr_arr(i,j,klo,
MORRInd::precrt) += (morr_arr(i,j,kts,
MORRInd::faloutr) + morr_arr(i,j,kts,
MORRInd::faloutc) + morr_arr(i,j,kts,
MORRInd::falouts) +
3192 morr_arr(i,j,klo,
MORRInd::snowrt) += (morr_arr(i,j,kts,
MORRInd::falouts) + morr_arr(i,j,kts,
MORRInd::falouti) + morr_arr(i,j,kts,
MORRInd::faloutg)) * dt / nstep;
3198 for(
int k=klo; k<=khi; k++) {
3216 morr_arr(i,j,k,
MORRInd::qni3dten) = morr_arr(i,j,k,
MORRInd::qni3dten) + morr_arr(i,j,k,
MORRInd::qi3d)/dt + morr_arr(i,j,k,
MORRInd::qi3dten);
3217 morr_arr(i,j,k,
MORRInd::ns3dten) = morr_arr(i,j,k,
MORRInd::ns3dten) + morr_arr(i,j,k,
MORRInd::ni3d)/dt + morr_arr(i,j,k,
MORRInd::ni3dten);
3232 if (m_igraup == 0) {
3262 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qr3d) * morr_arr(i,j,k,
MORRInd::xxlv) / morr_arr(i,j,k,
MORRInd::cpm);
3267 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qc3d) * morr_arr(i,j,k,
MORRInd::xxlv) / morr_arr(i,j,k,
MORRInd::cpm);
3274 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qi3d) * morr_arr(i,j,k,
MORRInd::xxls) / morr_arr(i,j,k,
MORRInd::cpm);
3279 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qni3d) * morr_arr(i,j,k,
MORRInd::xxls) / morr_arr(i,j,k,
MORRInd::cpm);
3284 morr_arr(i,j,k,
MORRInd::t3d) -= morr_arr(i,j,k,
MORRInd::qg3d) * morr_arr(i,j,k,
MORRInd::xxls) / morr_arr(i,j,k,
MORRInd::cpm);
3333 morr_arr(i,j,k,
MORRInd::t3d) = morr_arr(i,j,k,
MORRInd::t3d) - morr_arr(i,j,k,
MORRInd::qi3d) * morr_arr(i,j,k,
MORRInd::xlf) / morr_arr(i,j,k,
MORRInd::cpm);
3339 if ((m_iliq != 1)) {
3344 morr_arr(i,j,k,
MORRInd::t3d) = morr_arr(i,j,k,
MORRInd::t3d) + morr_arr(i,j,k,
MORRInd::qc3d) * morr_arr(i,j,k,
MORRInd::xlf) / morr_arr(i,j,k,
MORRInd::cpm);
3350 if (m_igraup == 0) {
3353 morr_arr(i,j,k,
MORRInd::t3d) = morr_arr(i,j,k,
MORRInd::t3d) + morr_arr(i,j,k,
MORRInd::qr3d) * morr_arr(i,j,k,
MORRInd::xlf) / morr_arr(i,j,k,
MORRInd::cpm);
3358 }
else if (m_igraup == 1) {
3361 morr_arr(i,j,k,
MORRInd::t3d) = morr_arr(i,j,k,
MORRInd::t3d) + morr_arr(i,j,k,
MORRInd::qr3d) * morr_arr(i,j,k,
MORRInd::xlf) / morr_arr(i,j,k,
MORRInd::cpm);
3382 morr_arr(i,j,k,
MORRInd::lami) = std::pow(m_cons12 * morr_arr(i,j,k,
MORRInd::ni3d) / morr_arr(i,j,k,
MORRInd::qi3d), 1.0/m_di);
3387 morr_arr(i,j,k,
MORRInd::n0i) = std::pow(morr_arr(i,j,k,
MORRInd::lami), 4) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
3391 morr_arr(i,j,k,
MORRInd::n0i) = std::pow(morr_arr(i,j,k,
MORRInd::lami), 4) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
3398 morr_arr(i,j,k,
MORRInd::lamr) = std::pow(m_pi * m_rhow * morr_arr(i,j,k,
MORRInd::nr3d) / morr_arr(i,j,k,
MORRInd::qr3d), 1.0/3.0);
3404 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr), 4) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
3408 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr), 4) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
3444 morr_arr(i,j,k,
MORRInd::lams) = std::pow(m_cons1 * morr_arr(i,j,k,
MORRInd::ns3d) / morr_arr(i,j,k,
MORRInd::qni3d), 1.0/m_ds);
3450 morr_arr(i,j,k,
MORRInd::n0s) = std::pow(morr_arr(i,j,k,
MORRInd::lams), 4) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
3454 morr_arr(i,j,k,
MORRInd::n0s) = std::pow(morr_arr(i,j,k,
MORRInd::lams), 4) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
3461 morr_arr(i,j,k,
MORRInd::lamg) = std::pow(m_cons2 * morr_arr(i,j,k,
MORRInd::ng3d) / morr_arr(i,j,k,
MORRInd::qg3d), 1.0/m_dg);
3467 morr_arr(i,j,k,
MORRInd::n0g) = std::pow(morr_arr(i,j,k,
MORRInd::lamg), 4) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
3471 morr_arr(i,j,k,
MORRInd::n0g) = std::pow(morr_arr(i,j,k,
MORRInd::lamg), 4) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
3498 morr_arr(i,j,k,
MORRInd::effc) =
gamma_function(morr_arr(i,j,k,
MORRInd::pgam) + 4.0) /
gamma_function(morr_arr(i,j,k,
MORRInd::pgam) + 3.0) / morr_arr(i,j,k,
MORRInd::lamc) / 2.0 * 1.0e6;
3515 morr_arr(i,j,k,
MORRInd::ni3d) = std::min(morr_arr(i,j,k,
MORRInd::ni3d), 0.3e6 / morr_arr(i,j,k,
MORRInd::rho));
3518 if (iinum == 0 && m_iact == 2) {
3519 morr_arr(i,j,k,
MORRInd::nc3d) = std::min(morr_arr(i,j,k,
MORRInd::nc3d), (m_nanew1 + m_nanew2) / morr_arr(i,j,k,
MORRInd::rho));
3534 if(use_morr_cpp_answer) {
3535 for(
int k=klo; k<=khi; k++) {
3549 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3565 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3566 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3567 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3573 amrex::Print()<<
"fortran should run "<<run_morr_fort<<std::endl;
3576 #ifdef ERF_USE_MORR_FORT
3582 theta_arr.dataPtr(),
3602 rain_accum_arr.dataPtr(),
3603 rainncv_arr.dataPtr(),
3605 snow_accum_arr.dataPtr(),
3606 snowncv_arr.dataPtr(),
3607 graup_accum_arr.dataPtr(),
3608 graupelncv_arr.dataPtr(),
3611 dummy_reflectivity_ptr,
3626 ilo, ihi, jlo, jhi, klo, khi,
3627 ilom, ihim, jlom, jhim, klom, khim,
3628 ilo, ihi, jlo, jhi, klo, khi,
3632 rainprod_arr.dataPtr(),
3633 evapprod_arr.dataPtr(),
3634 qlsink_arr.dataPtr(),
3635 precr_arr.dataPtr(),
3636 preci_arr.dataPtr(),
3637 precs_arr.dataPtr(),
3641 amrex::Abort(
"Trying to run fortran without compiling with USE_MORR_FORT=TRUE");
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_saturation_vapor_pressure(const amrex::Real T, const int type)
Definition: ERF_AdvanceMorrison.cpp:448
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real gamma_function(Real x)
Definition: ERF_AdvanceMorrison.cpp:435
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:230
void mp_morr_two_moment_c(int itimestep, double *th, double *qv, double *qc, double *qr, double *qi, double *qs, double *qg, double *ni, double *ns, double *nr, double *ng, double *rho, double *pii, double *p, double dt_in, double *dz, double *w, double *rainnc, double *rainncv, double *sr, double *snownc, double *snowncv, double *graupelnc, double *graupelncv, double *refl_10cm, bool diagflag, int do_radar_ref, double *qrcuten, double *qscuten, double *qicuten, bool f_qndrop, double *qndrop, double *ht, int ids, int ide, int jds, int jde, int kds, int kde, int ims, int ime, int jms, int jme, int kms, int kme, int its, int ite, int jts, int jte, int kts, int kte, bool wetscav_on, double *rainprod, double *evapprod, double *qlsink, double *precr, double *preci, double *precs, double *precg)
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11
amrex::Geometry m_geom
Definition: ERF_Morrison.H:279
int m_axis
Definition: ERF_Morrison.H:288
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:295
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:303
bool m_do_cond
Definition: ERF_Morrison.H:296
@ qisten
Definition: ERF_AdvanceMorrison.cpp:71
@ dumfnc
Definition: ERF_AdvanceMorrison.cpp:129
@ qi3dten
Definition: ERF_AdvanceMorrison.cpp:43
@ agn
Definition: ERF_AdvanceMorrison.cpp:92
@ pres
Definition: ERF_AdvanceMorrison.cpp:60
@ precrt
Definition: ERF_AdvanceMorrison.cpp:77
@ dumc
Definition: ERF_AdvanceMorrison.cpp:128
@ falouti
Definition: ERF_AdvanceMorrison.cpp:108
@ ni3d
Definition: ERF_AdvanceMorrison.cpp:53
@ dumi
Definition: ERF_AdvanceMorrison.cpp:93
@ faloutnc
Definition: ERF_AdvanceMorrison.cpp:136
@ snowprt
Definition: ERF_AdvanceMorrison.cpp:79
@ lamg
Definition: ERF_AdvanceMorrison.cpp:35
@ xxls
Definition: ERF_AdvanceMorrison.cpp:149
@ n0s
Definition: ERF_AdvanceMorrison.cpp:38
@ fns
Definition: ERF_AdvanceMorrison.cpp:118
@ grplprt
Definition: ERF_AdvanceMorrison.cpp:80
@ dumfns
Definition: ERF_AdvanceMorrison.cpp:114
@ qni3d
Definition: ERF_AdvanceMorrison.cpp:51
@ ung
Definition: ERF_AdvanceMorrison.cpp:132
@ faloutng
Definition: ERF_AdvanceMorrison.cpp:122
@ qc3dten
Definition: ERF_AdvanceMorrison.cpp:42
@ w3d
Definition: ERF_AdvanceMorrison.cpp:62
@ rgvm
Definition: ERF_AdvanceMorrison.cpp:106
@ arn
Definition: ERF_AdvanceMorrison.cpp:89
@ lami
Definition: ERF_AdvanceMorrison.cpp:32
@ qscu1d
Definition: ERF_AdvanceMorrison.cpp:75
@ qcsten
Definition: ERF_AdvanceMorrison.cpp:73
@ fc
Definition: ERF_AdvanceMorrison.cpp:134
@ qrcuten_arr
Definition: ERF_AdvanceMorrison.cpp:28
@ fnr
Definition: ERF_AdvanceMorrison.cpp:143
@ pgam
Definition: ERF_AdvanceMorrison.cpp:41
@ qrcu1d
Definition: ERF_AdvanceMorrison.cpp:74
@ fng
Definition: ERF_AdvanceMorrison.cpp:105
@ ng3dten
Definition: ERF_AdvanceMorrison.cpp:66
@ dlami
Definition: ERF_AdvanceMorrison.cpp:146
@ faloutni
Definition: ERF_AdvanceMorrison.cpp:109
@ faloutnr
Definition: ERF_AdvanceMorrison.cpp:141
@ NumInds
Definition: ERF_AdvanceMorrison.cpp:153
@ qscuten_arr
Definition: ERF_AdvanceMorrison.cpp:29
@ dumfni
Definition: ERF_AdvanceMorrison.cpp:95
@ n0g
Definition: ERF_AdvanceMorrison.cpp:40
@ dlams
Definition: ERF_AdvanceMorrison.cpp:144
@ n0i
Definition: ERF_AdvanceMorrison.cpp:37
@ effs
Definition: ERF_AdvanceMorrison.cpp:83
@ faltndg
Definition: ERF_AdvanceMorrison.cpp:126
@ cpm
Definition: ERF_AdvanceMorrison.cpp:151
@ qr3dten
Definition: ERF_AdvanceMorrison.cpp:45
@ t3d
Definition: ERF_AdvanceMorrison.cpp:58
@ dumqs
Definition: ERF_AdvanceMorrison.cpp:113
@ qg3d
Definition: ERF_AdvanceMorrison.cpp:67
@ lamr
Definition: ERF_AdvanceMorrison.cpp:34
@ qr3d
Definition: ERF_AdvanceMorrison.cpp:52
@ nc3d
Definition: ERF_AdvanceMorrison.cpp:63
@ qg3dten
Definition: ERF_AdvanceMorrison.cpp:65
@ nr3dten
Definition: ERF_AdvanceMorrison.cpp:48
@ dzq
Definition: ERF_AdvanceMorrison.cpp:61
@ dumfnr
Definition: ERF_AdvanceMorrison.cpp:140
@ uns
Definition: ERF_AdvanceMorrison.cpp:116
@ faltndng
Definition: ERF_AdvanceMorrison.cpp:127
@ effc
Definition: ERF_AdvanceMorrison.cpp:81
@ qnisten
Definition: ERF_AdvanceMorrison.cpp:72
@ faloutg
Definition: ERF_AdvanceMorrison.cpp:121
@ t3dten
Definition: ERF_AdvanceMorrison.cpp:56
@ qv3d
Definition: ERF_AdvanceMorrison.cpp:59
@ ni3dten
Definition: ERF_AdvanceMorrison.cpp:46
@ uni
Definition: ERF_AdvanceMorrison.cpp:98
@ umi
Definition: ERF_AdvanceMorrison.cpp:99
@ qni3dten
Definition: ERF_AdvanceMorrison.cpp:44
@ faloutr
Definition: ERF_AdvanceMorrison.cpp:107
@ dumr
Definition: ERF_AdvanceMorrison.cpp:94
@ faloutns
Definition: ERF_AdvanceMorrison.cpp:120
@ effi
Definition: ERF_AdvanceMorrison.cpp:82
@ faltndni
Definition: ERF_AdvanceMorrison.cpp:112
@ unc
Definition: ERF_AdvanceMorrison.cpp:130
@ umc
Definition: ERF_AdvanceMorrison.cpp:131
@ qv3dten
Definition: ERF_AdvanceMorrison.cpp:57
@ qicuten_arr
Definition: ERF_AdvanceMorrison.cpp:30
@ faltndns
Definition: ERF_AdvanceMorrison.cpp:124
@ nc3dten
Definition: ERF_AdvanceMorrison.cpp:64
@ dumg
Definition: ERF_AdvanceMorrison.cpp:96
@ dlamc
Definition: ERF_AdvanceMorrison.cpp:147
@ rho
Definition: ERF_AdvanceMorrison.cpp:86
@ effr
Definition: ERF_AdvanceMorrison.cpp:84
@ faltndnc
Definition: ERF_AdvanceMorrison.cpp:138
@ xxlv
Definition: ERF_AdvanceMorrison.cpp:150
@ faltndc
Definition: ERF_AdvanceMorrison.cpp:137
@ faltndnr
Definition: ERF_AdvanceMorrison.cpp:142
@ fni
Definition: ERF_AdvanceMorrison.cpp:103
@ umr
Definition: ERF_AdvanceMorrison.cpp:100
@ faloutc
Definition: ERF_AdvanceMorrison.cpp:135
@ ain
Definition: ERF_AdvanceMorrison.cpp:88
@ effg
Definition: ERF_AdvanceMorrison.cpp:85
@ faltnds
Definition: ERF_AdvanceMorrison.cpp:123
@ xlf
Definition: ERF_AdvanceMorrison.cpp:152
@ asn
Definition: ERF_AdvanceMorrison.cpp:90
@ fr
Definition: ERF_AdvanceMorrison.cpp:101
@ fnc
Definition: ERF_AdvanceMorrison.cpp:139
@ fi
Definition: ERF_AdvanceMorrison.cpp:102
@ dumfng
Definition: ERF_AdvanceMorrison.cpp:97
@ faltndr
Definition: ERF_AdvanceMorrison.cpp:110
@ lams
Definition: ERF_AdvanceMorrison.cpp:33
@ fs
Definition: ERF_AdvanceMorrison.cpp:117
@ qicu1d
Definition: ERF_AdvanceMorrison.cpp:76
@ qrsten
Definition: ERF_AdvanceMorrison.cpp:70
@ qgsten
Definition: ERF_AdvanceMorrison.cpp:69
@ cdist1
Definition: ERF_AdvanceMorrison.cpp:36
@ dlamg
Definition: ERF_AdvanceMorrison.cpp:148
@ mu
Definition: ERF_AdvanceMorrison.cpp:87
@ lamc
Definition: ERF_AdvanceMorrison.cpp:31
@ ns3dten
Definition: ERF_AdvanceMorrison.cpp:47
@ ns3d
Definition: ERF_AdvanceMorrison.cpp:54
@ dlamr
Definition: ERF_AdvanceMorrison.cpp:145
@ ng3d
Definition: ERF_AdvanceMorrison.cpp:68
@ qi3d
Definition: ERF_AdvanceMorrison.cpp:50
@ acn
Definition: ERF_AdvanceMorrison.cpp:91
@ falouts
Definition: ERF_AdvanceMorrison.cpp:119
@ faltndi
Definition: ERF_AdvanceMorrison.cpp:111
@ fg
Definition: ERF_AdvanceMorrison.cpp:104
@ qc3d
Definition: ERF_AdvanceMorrison.cpp:49
@ umg
Definition: ERF_AdvanceMorrison.cpp:133
@ unr
Definition: ERF_AdvanceMorrison.cpp:125
@ ums
Definition: ERF_AdvanceMorrison.cpp:115
@ n0r
Definition: ERF_AdvanceMorrison.cpp:39
@ snowrt
Definition: ERF_AdvanceMorrison.cpp:78
@ nr3d
Definition: ERF_AdvanceMorrison.cpp:55
@ qv
Definition: ERF_Morrison.H:34
@ ng
Definition: ERF_Morrison.H:48
@ nc
Definition: ERF_Morrison.H:44
@ qpg
Definition: ERF_Morrison.H:41
@ pres
Definition: ERF_Morrison.H:30
@ nr
Definition: ERF_Morrison.H:45
@ qcl
Definition: ERF_Morrison.H:35
@ tabs
Definition: ERF_Morrison.H:29
@ theta
Definition: ERF_Morrison.H:28
@ ni
Definition: ERF_Morrison.H:46
@ ns
Definition: ERF_Morrison.H:47
@ omega
Definition: ERF_Morrison.H:53
@ qps
Definition: ERF_Morrison.H:40
@ graup_accum
Definition: ERF_Morrison.H:52
@ rho
Definition: ERF_Morrison.H:27
@ qpr
Definition: ERF_Morrison.H:39
@ qci
Definition: ERF_Morrison.H:36
@ rain_accum
Definition: ERF_Morrison.H:50
@ snow_accum
Definition: ERF_Morrison.H:51
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
MoistureType moisture_type
Definition: ERF_DataStruct.H:911