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");
1021 pp.query(
"morrison_ndcnst", m_ndcnst);
1023 #ifdef ERF_USE_MORR_FORT
1028 bool run_morr_cpp =
true;
1030 bool use_morr_cpp_answer =
true;
1031 pp.query(
"use_morr_cpp_answer", use_morr_cpp_answer);
1032 Print() <<
"use_morr_cpp_answer" << use_morr_cpp_answer <<std::endl;
1034 bool run_morr_fort = !use_morr_cpp_answer;
1036 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
1042 morr_fab.template setVal<RunOn::Device>(0.0);
1043 auto const& morr_arr = morr_fab.array();
1050 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
1062 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
1073 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
1079 for(
int k=klo; k<=khi; k++) {
1250 const double CI = 800.0;
1260 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));
1264 dum = morr_arr(i,j,k,
MORRInd::qicu1d) * dt / (CI * std::pow(80.0e-6, di0));
1273 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);
1278 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);
1285 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);
1290 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);
1295 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);
1339 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);
1342 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
1358 bool skipMicrophysics =
false;
1359 bool skipConcentrations =
false;
1360 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) {
1361 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)) {
1362 skipMicrophysics =
true;
1366 if(!skipMicrophysics) {
1379 dum = (m_Rv * std::pow(morr_arr(i,j,k,
MORRInd::t3d),2));
1403 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);
1411 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);
1416 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) {
1417 skipConcentrations=
true;
1419 if(!skipConcentrations) {
1431 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);
1437 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);
1441 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);
1462 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);
1473 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1478 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1482 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;
1488 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);
1496 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::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams), 4.0) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1508 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);
1516 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;
1520 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;
1562 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
1567 nprc1 = prc / m_cons29;
1572 nprc1 = std::min(nprc1, nprc);
1586 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1587 ums_local = std::min(ums_local, 1.2*dum);
1588 uns_local = std::min(uns_local, 1.2*dum);
1589 umr_local = std::min(umr_local, 9.1*dum);
1590 unr_local = std::min(unr_local, 9.1*dum);
1597 pracs = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*ums_local, 2) +
1598 0.08*ums_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1599 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0s) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1617 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1618 umg_local = std::min(umg_local, 20.0*dum);
1619 ung_local = std::min(ung_local, 20.0*dum);
1620 umr_local = std::min(umr_local, 9.1*dum);
1621 unr_local = std::min(unr_local, 9.1*dum);
1624 pracg = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*umg_local, 2) +
1625 0.08*umg_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1626 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0g) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1634 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(1.7*std::pow(unr_local-ung_local, 2) +
1641 npracg = npracg - dum;
1651 pra = 67.0 * std::pow(dum, 1.15);
1666 dum = 2.0 - std::exp(2300.0 * (1.0/morr_arr(i,j,k,
MORRInd::lamr) - dum1));
1675 std::pow(sc_schmidt, 1.0/3.0) * m_cons9 /
1683 pre = std::min(pre, 0.0);
1700 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1708 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1713 evpms = std::max(evpms, psmlt);
1714 psmlt = psmlt - evpms;
1731 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1739 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1744 evpmg = std::max(evpmg, pgmlt);
1745 pgmlt = pgmlt - evpmg;
1756 dum = (prc + pra) * dt;
1765 dum = (-psmlt - evpms + pracs) * dt;
1770 psmlt = psmlt * ratio;
1771 evpms = evpms * ratio;
1772 pracs = pracs * ratio;
1776 dum = (-pgmlt - evpmg + pracg) * dt;
1781 pgmlt = pgmlt * ratio;
1782 evpmg = evpmg * ratio;
1783 pracg = pracg * ratio;
1789 dum = (-pracs - pracg - pre - pra - prc + psmlt + pgmlt) * dt;
1792 ratio = (morr_arr(i,j,k,
MORRInd::qr3d)/dt + pracs + pracg + pra + prc - psmlt - pgmlt) / (-pre);
1817 dum = std::max(-1.0, dum);
1821 if (evpms + psmlt < 0.0) {
1823 dum = std::max(-1.0, dum);
1829 dum = std::max(-1.0, dum);
1833 if (evpmg + pgmlt < 0.0) {
1835 dum = std::max(-1.0, dum);
1841 dum = std::max(-1.0, dum);
1858 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1860 dumqc = std::max(dumqc, 0.0);
1863 dums = dumqv - dumqss;
1864 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;
1865 if (pcc * dt + dumqc < 0.0) {
1869 if (!do_cond) { pcc = 0.0; }
1899 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);
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);
1908 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);
1912 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);
1933 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);
1944 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1949 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1959 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);
1967 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::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams), 4.0) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1979 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);
1988 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::n0i) = pow(morr_arr(i,j,k,
MORRInd::lami), 4.0) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
2002 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);
2010 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;
2014 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;
2098 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
2105 mnuccc = mnuccc + m_cons39 *
2107 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2111 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2115 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
2128 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
2133 nprc1 = prc / m_cons29;
2138 nprc1 = std::min(nprc1, nprc);
2145 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);
2196 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2197 ums_local = std::min(ums_local, 1.2 * dum);
2198 uns_local = std::min(uns_local, 1.2 * dum);
2199 umr_local = std::min(umr_local, 9.1 * dum);
2200 unr_local = std::min(unr_local, 9.1 * dum);
2202 pracs = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2204 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)) +
2208 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - uns_local, 2) +
2217 pracs = std::min(pracs, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2223 psacr = m_cons31 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2225 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)) +
2241 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2242 umg_local = std::min(umg_local, 20.0 * dum);
2243 ung_local = std::min(ung_local, 20.0 * dum);
2244 umr_local = std::min(umr_local, 9.1 * dum);
2245 unr_local = std::min(unr_local, 9.1 * dum);
2247 pracg = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * umg_local, 2) +
2249 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)) +
2253 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - ung_local, 2) +
2262 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2274 if (psacws > 0.0 || pracs > 0.0) {
2291 nmults = 35.0e4 * psacws * fmult * 1000.0;
2292 qmults = nmults * m_mmult;
2296 qmults = std::min(qmults, psacws);
2297 psacws = psacws - qmults;
2302 nmultr = 35.0e4 * pracs * fmult * 1000.0;
2303 qmultr = nmultr * m_mmult;
2307 qmultr = std::min(qmultr, pracs);
2308 pracs = pracs - qmultr;
2323 if (psacwg > 0.0 || pracg > 0.0) {
2340 nmultg = 35.0e4 * psacwg * fmult * 1000.0;
2341 qmultg = nmultg * m_mmult;
2345 qmultg = std::min(qmultg, psacwg);
2346 psacwg = psacwg - qmultg;
2351 nmultrg = 35.0e4 * pracg * fmult * 1000.0;
2352 qmultrg = nmultrg * m_mmult;
2356 qmultrg = std::min(qmultrg, pracg);
2357 pracg = pracg - qmultrg;
2369 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) *
2374 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw, 0.0);
2379 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2382 psacws = psacws - pgsacw;
2394 dum = std::min(dum, 1.0);
2395 dum = std::max(dum, 0.0);
2397 pgracs = (1.0 - dum) * pracs;
2398 ngracs = (1.0 - dum) * npracs;
2401 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2402 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2405 pracs = pracs - pgracs;
2406 npracs = npracs - ngracs;
2409 psacr = psacr * (1.0 - dum);
2418 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) /
2421 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) /
2425 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2435 pra = 67.0 * std::pow(dum, 1.15);
2449 dum = 2.0 - std::exp(2300.0 * (1.0 / morr_arr(i,j,k,
MORRInd::lamr) - dum1));
2458 if (morr_arr(i,j,k,
MORRInd::qi3d) >= 1.0e-8 && qvqvsi >= 1.0) {
2461 prci = m_cons22 * nprci;
2462 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2469 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) /
2474 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2487 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);
2490 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2491 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2496 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);
2499 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2500 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2507 if ((qvqvs >= 0.999 && morr_arr(i,j,k,
MORRInd::t3d) <= 265.15) || qvqvsi >= 1.08) {
2509 kc2 = 0.005 * std::exp(0.304 * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) * 1000.0;
2511 kc2 = std::min(kc2, 500.0e3);
2512 kc2 = std::max(kc2 / morr_arr(i,j,k,
MORRInd::rho), 0.0);
2516 mnuccd = nnuccd * m_mi0;
2519 }
else if (m_inuc == 1) {
2520 if (morr_arr(i,j,k,
MORRInd::t3d) < 273.15 && qvqvsi > 1.0) {
2524 mnuccd = nnuccd * m_mi0;
2533 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));
2541 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) *
2542 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons10 /
2551 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) *
2552 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons11 /
2561 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) *
2562 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons9 /
2571 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2579 epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2582 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2591 pre = std::min(pre, 0.0);
2601 sum_dep = prd + prds + mnuccd + prdg;
2603 if ((dum > 0.0 && sum_dep > dum * fudgef) ||
2604 (dum < 0.0 && sum_dep < dum * fudgef)) {
2605 mnuccd = fudgef * mnuccd * dum / sum_dep;
2606 prd = fudgef * prd * dum / sum_dep;
2607 prds = fudgef * prds * dum / sum_dep;
2608 prdg = fudgef * prdg * dum / sum_dep;
2648 if (m_igraup == 1) {
2665 piacrs = piacrs + piacr;
2669 pracis = pracis + praci;
2671 psacws = psacws + pgsacw;
2673 pracs = pracs + pgracs;
2678 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2685 mnuccc = mnuccc * ratio;
2686 psacws = psacws * ratio;
2687 psacwi = psacwi * ratio;
2688 qmults = qmults * ratio;
2689 qmultg = qmultg * ratio;
2690 psacwg = psacwg * ratio;
2691 pgsacw = pgsacw * ratio;
2695 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2696 - mnuccd + praci + pracis - eprd - psacwi) * dt;
2699 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2701 (prci + prai + praci + pracis - eprd);
2703 prci = prci * ratio;
2704 prai = prai * ratio;
2705 praci = praci * ratio;
2706 pracis = pracis * ratio;
2707 eprd = eprd * ratio;
2711 dum = ((pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2712 piacr + piacrs + pgracs + pracg) * dt;
2716 (-pre + qmultr + qmultrg + pracs + mnuccr + piacr + piacrs + pgracs + pracg);
2719 pracs = pracs * ratio;
2720 qmultr = qmultr * ratio;
2721 qmultrg = qmultrg * ratio;
2722 mnuccr = mnuccr * ratio;
2723 piacr = piacr * ratio;
2724 piacrs = piacrs * ratio;
2725 pgracs = pgracs * ratio;
2726 pracg = pracg * ratio;
2730 if (m_igraup == 0) {
2731 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis) * dt;
2734 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis) /
2737 eprds = eprds * ratio;
2738 psacr = psacr * ratio;
2740 }
else if (m_igraup == 1) {
2742 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis - mnuccr) * dt;
2745 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis + mnuccr) /
2748 eprds = eprds * ratio;
2749 psacr = psacr * ratio;
2754 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg - piacr - praci - psacr) * dt;
2757 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr + psacr +
2758 piacr + praci) / (-eprdg);
2760 eprdg = eprdg * ratio;
2768 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2769 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg + pracs +
2773 (-pra - prc - mnuccc + pcc -
2774 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2777 (prd + eprd + psacwi + mnuccc - prci -
2778 prai + qmults + qmultg + qmultr + qmultrg + mnuccd - praci - pracis);
2781 (pre + pra + prc - pracs - mnuccr - qmultr - qmultrg -
2782 piacr - piacrs - pracg - pgracs);
2783 if (m_igraup == 0) {
2785 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis);
2790 prdg + eprdg + mnuccr + piacr + praci + psacr);
2793 }
else if (m_igraup == 1) {
2796 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis + mnuccr);
2802 npra - nprc - npsacwi - npsacwg);
2805 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2806 nnuccd - niacr - niacrs);
2809 nragg - niacr - niacrs - npracg - ngracs);
2812 c2prec = pra + prc + psacws + qmults + qmultg + psacwg +
2813 pgsacw + mnuccc + psacwi;
2822 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2825 dumqc = std::max(dumqc, 0.0);
2828 dums = dumqv - dumqss;
2830 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;
2832 if (pcc * dt + dumqc < 0.0) {
2837 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);
2844 dum = std::max(-1.0, dum);
2850 dum = std::max(-1.0, dum);
2856 dum = std::max(-1.0, dum);
2862 dum = std::max(-1.0, dum);
2877 for(
int k=klo; k<=khi; k++) {
2893 for(
int k=khi; k>=klo; k--) {
2933 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);
2940 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);
2963 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);
2970 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);
2989 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);
2990 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);
2998 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);
2999 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);
3007 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);
3008 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);
3016 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);
3017 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);
3025 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
3031 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));
3032 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));
3084 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),
3085 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),
3103 for (
int n = 1; n <= nstep; n++) {
3105 for (
int k = klo; k <= khi; k++) {
3134 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);
3135 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);
3136 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);
3137 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);
3138 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);
3139 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);
3140 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);
3141 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);
3142 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);
3143 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);
3158 for (k = khi-1; k >= klo; k--) {
3160 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);
3161 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);
3162 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);
3163 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);
3164 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);
3165 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);
3166 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);
3167 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);
3168 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);
3169 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);
3172 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);
3173 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);
3174 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);
3175 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);
3176 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);
3177 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);
3178 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);
3179 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);
3180 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);
3181 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);
3198 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) +
3200 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;
3206 for(
int k=klo; k<=khi; k++) {
3224 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);
3225 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);
3240 if (m_igraup == 0) {
3270 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);
3275 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);
3282 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);
3287 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);
3292 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);
3341 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);
3347 if ((m_iliq != 1)) {
3352 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);
3358 if (m_igraup == 0) {
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);
3366 }
else if (m_igraup == 1) {
3369 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);
3390 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);
3395 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;
3399 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;
3406 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);
3412 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);
3416 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);
3452 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);
3458 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;
3462 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;
3469 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);
3475 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;
3479 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;
3506 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;
3523 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));
3526 if (iinum == 0 && m_iact == 2) {
3527 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));
3542 if(use_morr_cpp_answer) {
3543 for(
int k=klo; k<=khi; k++) {
3557 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3573 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3574 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3575 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3581 amrex::Print()<<
"fortran should run "<<run_morr_fort<<std::endl;
3584 #ifdef ERF_USE_MORR_FORT
3590 theta_arr.dataPtr(),
3610 rain_accum_arr.dataPtr(),
3611 rainncv_arr.dataPtr(),
3613 snow_accum_arr.dataPtr(),
3614 snowncv_arr.dataPtr(),
3615 graup_accum_arr.dataPtr(),
3616 graupelncv_arr.dataPtr(),
3619 dummy_reflectivity_ptr,
3634 ilo, ihi, jlo, jhi, klo, khi,
3635 ilom, ihim, jlom, jhim, klom, khim,
3636 ilo, ihi, jlo, jhi, klo, khi,
3640 rainprod_arr.dataPtr(),
3641 evapprod_arr.dataPtr(),
3642 qlsink_arr.dataPtr(),
3643 precr_arr.dataPtr(),
3644 preci_arr.dataPtr(),
3645 precs_arr.dataPtr(),
3649 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:233
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)
void set_morrison_ndcnst_c(double ndcnst_in)
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:292
int m_axis
Definition: ERF_Morrison.H:301
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:307
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:318
bool m_do_cond
Definition: ERF_Morrison.H:308
@ 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:1020