510 Real dt = dt_advance;
512 auto domain =
m_geom.Domain();
513 int i_lo = domain.smallEnd(0);
514 int i_hi = domain.bigEnd(0);
515 int j_lo = domain.smallEnd(1);
516 int j_hi = domain.bigEnd(1);
521 auto box = mfi.tilebox();
522 if (box.smallEnd(0) == i_lo) { box.growLo(0,-
m_real_width); }
523 if (box.bigEnd(0) == i_hi) { box.growHi(0,-
m_real_width); }
524 if (box.smallEnd(1) == j_lo) { box.growLo(1,-
m_real_width); }
525 if (box.bigEnd(1) == j_hi) { box.growHi(1,-
m_real_width); }
553 const int ilo = box.loVect()[0];
554 const int ihi = box.hiVect()[0];
555 const int jlo = box.loVect()[1];
556 const int jhi = box.hiVect()[1];
557 const int klo = box.loVect()[2];
558 const int khi = box.hiVect()[2];
560 Box grown_box(box); grown_box.grow(3);
561 #ifdef ERF_USE_MORR_FORT
562 const int ilom = grown_box.loVect()[0];
563 const int ihim = grown_box.hiVect()[0];
564 const int jlom = grown_box.loVect()[1];
565 const int jhim = grown_box.hiVect()[1];
566 const int klom = grown_box.loVect()[2];
567 const int khim = grown_box.hiVect()[2];
571 FArrayBox pii_fab(grown_box, 1);
572 auto const& pii_arr = pii_fab.array();
579 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
582 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
586 FArrayBox dz_fab(grown_box, 1);
587 auto const& dz_arr = dz_fab.array();
591 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
592 dz_arr(i,j,k) = dz_val;
594 amrex::Box grown_boxD(grown_box); grown_boxD.makeSlab(2,0);
597 FArrayBox rainncv_fab(grown_boxD, 1);
598 FArrayBox sr_fab(grown_boxD, 1);
599 FArrayBox snowncv_fab(grown_boxD, 1);
600 FArrayBox graupelncv_fab(grown_boxD, 1);
602 auto const& rainncv_arr = rainncv_fab.array();
603 auto const& sr_arr = sr_fab.array();
604 auto const& snowncv_arr = snowncv_fab.array();
605 auto const& graupelncv_arr = graupelncv_fab.array();
608 ParallelFor(grown_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
609 rainncv_arr(i,j,k) = 0.0;
611 snowncv_arr(i,j,k) = 0.0;
612 graupelncv_arr(i,j,k) = 0.0;
616 FArrayBox ht_fab(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), 1);
617 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
618 ParallelFor(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
622 #ifdef ERF_USE_MORR_FORT
624 FArrayBox qrcuten_fab(grown_box, 1);
625 FArrayBox qscuten_fab(grown_box, 1);
626 FArrayBox qicuten_fab(grown_box, 1);
632 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
639 bool flag_qndrop =
false;
642 FArrayBox rainprod_fab(grown_box, 1);
643 FArrayBox evapprod_fab(grown_box, 1);
644 FArrayBox qlsink_fab(grown_box, 1);
645 FArrayBox precr_fab(grown_box, 1);
646 FArrayBox preci_fab(grown_box, 1);
647 FArrayBox precs_fab(grown_box, 1);
648 FArrayBox precg_fab(grown_box, 1);
650 auto const& rainprod_arr = rainprod_fab.array();
651 auto const& evapprod_arr = evapprod_fab.array();
652 auto const& qlsink_arr = qlsink_fab.array();
653 auto const& precr_arr = precr_fab.array();
654 auto const& preci_arr = preci_fab.array();
655 auto const& precs_arr = precs_fab.array();
656 auto const& precg_arr = precg_fab.array();
659 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
660 rainprod_arr(i,j,k) = 0.0;
661 evapprod_arr(i,j,k) = 0.0;
662 qlsink_arr(i,j,k) = 0.0;
663 precr_arr(i,j,k) = 0.0;
664 preci_arr(i,j,k) = 0.0;
665 precs_arr(i,j,k) = 0.0;
666 precg_arr(i,j,k) = 0.0;
670 #ifdef ERF_USE_MORR_FORT
673 double dummy_reflectivity = 0.0;
674 double* dummy_reflectivity_ptr = &dummy_reflectivity;
684 [[maybe_unused]]
int m_ibase = 2;
685 [[maybe_unused]]
int m_isub = 0;
697 [[maybe_unused]]
bool m_do_radar_ref =
false;
704 [[maybe_unused]]
Real m_cp;
717 [[maybe_unused]]
Real m_ac, m_bc;
746 Real m_lammaxi, m_lammini;
747 Real m_lammaxr, m_lamminr;
748 Real m_lammaxs, m_lammins;
749 Real m_lammaxg, m_lamming;
752 Real m_ndcnst = 250.0;
755 [[maybe_unused]]
Real m_k1;
756 [[maybe_unused]]
Real m_c1;
759 [[maybe_unused]]
Real m_mw;
760 [[maybe_unused]]
Real m_osm;
761 [[maybe_unused]]
Real m_vi;
762 [[maybe_unused]]
Real m_epsm;
763 [[maybe_unused]]
Real m_rhoa;
764 [[maybe_unused]]
Real m_map;
765 [[maybe_unused]]
Real m_ma;
766 [[maybe_unused]]
Real m_rr;
767 [[maybe_unused]]
Real m_bact;
768 [[maybe_unused]]
Real m_rm1;
769 [[maybe_unused]]
Real m_rm2;
772 [[maybe_unused]]
Real m_sig1;
773 [[maybe_unused]]
Real m_sig2;
774 [[maybe_unused]]
Real m_f11;
775 [[maybe_unused]]
Real m_f12;
776 [[maybe_unused]]
Real m_f21;
777 [[maybe_unused]]
Real m_f22;
780 Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
781 Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
782 Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
783 Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
784 Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
785 Real m_cons26, m_cons27, m_cons28, m_cons29; [[maybe_unused]]
amrex::Real m_cons30;
786 Real m_cons31, m_cons32, m_cons34, m_cons35; [[maybe_unused]]
amrex::Real m_cons33;
787 Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
794 m_pi = 3.1415926535897932384626434;
799 m_cp = 7.0*287.0/2.0;
801 m_ep_2 = m_Rd / m_Rv;
804 m_rhosu = 85000.0/(287.15*273.15);
851 m_mi0 = 4.0/3.0*m_pi*m_rhoi*std::pow(10.0E-6, 3);
871 m_ci = m_rhoi * m_pi / 6.0;
873 m_cs = m_rhosn * m_pi / 6.0;
875 m_cg = m_rhog * m_pi / 6.0;
882 m_mmult = 4.0/3.0*m_pi*m_rhoi*std::pow(5.0E-6, 3);
886 m_lammaxi = 1.0/1.0E-6;
887 m_lammini = 1.0/(2.0*m_dcs + 100.0E-6);
888 m_lammaxr = 1.0/20.0E-6;
889 m_lamminr = 1.0/2800.0E-6;
890 m_lammaxs = 1.0/10.0E-6;
891 m_lammins = 1.0/2000.0E-6;
892 m_lammaxg = 1.0/20.0E-6;
893 m_lamming = 1.0/2000.0E-6;
914 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
922 m_f11 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig1), 2));
923 m_f21 = 1.0 + 0.25 * std::log(m_sig1);
929 m_f12 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig2), 2));
930 m_f22 = 1.0 + 0.25 * std::log(m_sig2);
948 m_cons15 = -1108.0 * m_eii * std::pow(m_pi, (1.0-m_bs)/3.0) *
949 std::pow(m_rhosn, (-2.0-m_bs)/3.0) / (4.0*720.0);
951 m_cons17 = 4.0 * 2.0 * 3.0 * m_rhosu * m_pi * m_eci * m_eci *
953 m_cons18 = m_rhosn * m_rhosn;
954 m_cons19 = m_rhow * m_rhow;
955 m_cons20 = 20.0 * m_pi * m_pi * m_rhow * m_bimm;
956 m_cons21 = 4.0 / (m_dcs * m_rhoi);
957 m_cons22 = m_pi * m_rhoi * std::pow(m_dcs, 3) / 6.0;
960 m_cons25 = m_pi * m_pi / 24.0 * m_rhow * m_ecr *
gamma_function(m_br + 6.0);
961 m_cons26 = m_pi / 6.0 * m_rhow;
964 m_cons29 = 4.0/3.0 * m_pi * m_rhow * std::pow(25.0E-6, 3);
965 m_cons30 = 4.0/3.0 * m_pi * m_rhow;
966 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
967 m_cons32 = m_pi / 2.0 * m_ecr;
968 m_cons33 = m_pi * m_pi * m_ecr * m_rhog;
969 m_cons34 = 5.0/2.0 + m_br/2.0;
970 m_cons35 = 5.0/2.0 + m_bs/2.0;
971 m_cons36 = 5.0/2.0 + m_bg/2.0;
972 m_cons37 = 4.0 * m_pi * 1.38E-23 / (6.0 * m_pi * m_rin);
973 m_cons38 = m_pi * m_pi / 3.0 * m_rhow;
974 m_cons39 = m_pi * m_pi / 36.0 * m_rhow * m_bimm;
975 m_cons40 = m_pi / 6.0 * m_bimm;
976 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
997 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
1004 m_f11 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig1), 2));
1005 m_f21 = 1.0 + 0.25 * std::log(m_sig1);
1011 m_f12 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig2), 2));
1012 m_f22 = 1.0 + 0.25 * std::log(m_sig2);
1026 m_do_radar_ref =
false;
1027 Box boxD(box); boxD.makeSlab(2,0);
1029 ParmParse
pp(
"erf");
1032 pp.query(
"morrison_ndcnst", m_ndcnst);
1034 #ifdef ERF_USE_MORR_FORT
1039 bool run_morr_cpp =
true;
1041 bool use_morr_cpp_answer =
true;
1042 pp.query(
"use_morr_cpp_answer", use_morr_cpp_answer);
1043 Print() <<
"use_morr_cpp_answer" << use_morr_cpp_answer <<std::endl;
1045 bool run_morr_fort = !use_morr_cpp_answer;
1047 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
1053 morr_fab.template setVal<RunOn::Device>(0.0);
1054 auto const& morr_arr = morr_fab.array();
1061 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
1073 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
1084 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
1090 for(
int k=klo; k<=khi; k++) {
1096 [[maybe_unused]]
Real nsubc;
1131 [[maybe_unused]]
Real pccn;
1183 [[maybe_unused]]
Real dum2;
1187 [[maybe_unused]]
Real dumqsi;
1200 [[maybe_unused]]
Real dc0;
1204 [[maybe_unused]]
Real dumqr;
1209 [[maybe_unused]]
Real c2prec;
1210 [[maybe_unused]]
Real csed;
1211 [[maybe_unused]]
Real ised;
1212 [[maybe_unused]]
Real ssed;
1213 [[maybe_unused]]
Real gsed;
1214 [[maybe_unused]]
Real rsed;
1215 [[maybe_unused]]
Real tqimelt;
1234 const Real CP = 1004.5;
1261 const double CI = 800.0;
1271 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));
1275 dum = morr_arr(i,j,k,
MORRInd::qicu1d) * dt / (CI * std::pow(80.0e-6, di0));
1284 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);
1289 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);
1296 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);
1301 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);
1306 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);
1315 const Real QSMALL = m_qsmall;
1350 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);
1353 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
1369 bool skipMicrophysics =
false;
1370 bool skipConcentrations =
false;
1371 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) {
1372 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)) {
1373 skipMicrophysics =
true;
1377 if(!skipMicrophysics) {
1390 dum = (m_Rv * std::pow(morr_arr(i,j,k,
MORRInd::t3d),2));
1414 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);
1422 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);
1427 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) {
1428 skipConcentrations=
true;
1430 if(!skipConcentrations) {
1442 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);
1448 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);
1452 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);
1473 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);
1484 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1489 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1493 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;
1499 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);
1507 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;
1511 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;
1519 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);
1527 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;
1531 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;
1573 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
1578 nprc1 = prc / m_cons29;
1583 nprc1 = std::min(nprc1, nprc);
1597 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1598 ums_local = std::min(ums_local, 1.2*dum);
1599 uns_local = std::min(uns_local, 1.2*dum);
1600 umr_local = std::min(umr_local, 9.1*dum);
1601 unr_local = std::min(unr_local, 9.1*dum);
1608 pracs = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*ums_local, 2) +
1609 0.08*ums_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1610 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0s) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1628 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1629 umg_local = std::min(umg_local, 20.0*dum);
1630 ung_local = std::min(ung_local, 20.0*dum);
1631 umr_local = std::min(umr_local, 9.1*dum);
1632 unr_local = std::min(unr_local, 9.1*dum);
1635 pracg = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*umg_local, 2) +
1636 0.08*umg_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1637 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0g) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1645 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(1.7*std::pow(unr_local-ung_local, 2) +
1652 npracg = npracg - dum;
1662 pra = 67.0 * std::pow(dum, 1.15);
1677 dum = 2.0 - std::exp(2300.0 * (1.0/morr_arr(i,j,k,
MORRInd::lamr) - dum1));
1686 std::pow(sc_schmidt, 1.0/3.0) * m_cons9 /
1694 pre = std::min(pre, 0.0);
1711 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1719 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1724 evpms = std::max(evpms, psmlt);
1725 psmlt = psmlt - evpms;
1742 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1750 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1755 evpmg = std::max(evpmg, pgmlt);
1756 pgmlt = pgmlt - evpmg;
1767 dum = (prc + pra) * dt;
1776 dum = (-psmlt - evpms + pracs) * dt;
1781 psmlt = psmlt * ratio;
1782 evpms = evpms * ratio;
1783 pracs = pracs * ratio;
1787 dum = (-pgmlt - evpmg + pracg) * dt;
1792 pgmlt = pgmlt * ratio;
1793 evpmg = evpmg * ratio;
1794 pracg = pracg * ratio;
1800 dum = (-pracs - pracg - pre - pra - prc + psmlt + pgmlt) * dt;
1803 ratio = (morr_arr(i,j,k,
MORRInd::qr3d)/dt + pracs + pracg + pra + prc - psmlt - pgmlt) / (-pre);
1828 dum = std::max(-1.0, dum);
1832 if (evpms + psmlt < 0.0) {
1834 dum = std::max(-1.0, dum);
1840 dum = std::max(-1.0, dum);
1844 if (evpmg + pgmlt < 0.0) {
1846 dum = std::max(-1.0, dum);
1852 dum = std::max(-1.0, dum);
1869 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1871 dumqc = std::max(dumqc, 0.0);
1874 dums = dumqv - dumqss;
1875 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;
1876 if (pcc * dt + dumqc < 0.0) {
1880 if (!do_cond) { pcc = 0.0; }
1910 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);
1915 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);
1919 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);
1923 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);
1944 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);
1955 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1960 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1970 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);
1978 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;
1982 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;
1990 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);
1999 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;
2005 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;
2013 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);
2021 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;
2025 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;
2099 Real nacnt = std::exp(-2.80 + 0.262 * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) * 1000.0;
2109 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
2116 mnuccc = mnuccc + m_cons39 *
2118 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2122 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2126 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
2139 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
2144 nprc1 = prc / m_cons29;
2149 nprc1 = std::min(nprc1, nprc);
2156 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);
2207 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2208 ums_local = std::min(ums_local, 1.2 * dum);
2209 uns_local = std::min(uns_local, 1.2 * dum);
2210 umr_local = std::min(umr_local, 9.1 * dum);
2211 unr_local = std::min(unr_local, 9.1 * dum);
2213 pracs = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2215 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)) +
2219 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - uns_local, 2) +
2228 pracs = std::min(pracs, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2234 psacr = m_cons31 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2236 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)) +
2252 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2253 umg_local = std::min(umg_local, 20.0 * dum);
2254 ung_local = std::min(ung_local, 20.0 * dum);
2255 umr_local = std::min(umr_local, 9.1 * dum);
2256 unr_local = std::min(unr_local, 9.1 * dum);
2258 pracg = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * umg_local, 2) +
2260 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)) +
2264 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - ung_local, 2) +
2273 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2285 if (psacws > 0.0 || pracs > 0.0) {
2302 nmults = 35.0e4 * psacws * fmult * 1000.0;
2303 qmults = nmults * m_mmult;
2307 qmults = std::min(qmults, psacws);
2308 psacws = psacws - qmults;
2313 nmultr = 35.0e4 * pracs * fmult * 1000.0;
2314 qmultr = nmultr * m_mmult;
2318 qmultr = std::min(qmultr, pracs);
2319 pracs = pracs - qmultr;
2334 if (psacwg > 0.0 || pracg > 0.0) {
2351 nmultg = 35.0e4 * psacwg * fmult * 1000.0;
2352 qmultg = nmultg * m_mmult;
2356 qmultg = std::min(qmultg, psacwg);
2357 psacwg = psacwg - qmultg;
2362 nmultrg = 35.0e4 * pracg * fmult * 1000.0;
2363 qmultrg = nmultrg * m_mmult;
2367 qmultrg = std::min(qmultrg, pracg);
2368 pracg = pracg - qmultrg;
2380 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) *
2385 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw, 0.0);
2390 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2393 psacws = psacws - pgsacw;
2405 dum = std::min(dum, 1.0);
2406 dum = std::max(dum, 0.0);
2408 pgracs = (1.0 - dum) * pracs;
2409 ngracs = (1.0 - dum) * npracs;
2412 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2413 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2416 pracs = pracs - pgracs;
2417 npracs = npracs - ngracs;
2420 psacr = psacr * (1.0 - dum);
2429 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) /
2432 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) /
2436 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2446 pra = 67.0 * std::pow(dum, 1.15);
2460 dum = 2.0 - std::exp(2300.0 * (1.0 / morr_arr(i,j,k,
MORRInd::lamr) - dum1));
2469 if (morr_arr(i,j,k,
MORRInd::qi3d) >= 1.0e-8 && qvqvsi >= 1.0) {
2472 prci = m_cons22 * nprci;
2473 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2480 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) /
2485 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2498 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);
2501 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2502 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2507 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);
2510 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2511 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2518 if ((qvqvs >= 0.999 && morr_arr(i,j,k,
MORRInd::t3d) <= 265.15) || qvqvsi >= 1.08) {
2520 kc2 = 0.005 * std::exp(0.304 * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) * 1000.0;
2522 kc2 = std::min(kc2, 500.0e3);
2523 kc2 = std::max(kc2 / morr_arr(i,j,k,
MORRInd::rho), 0.0);
2527 mnuccd = nnuccd * m_mi0;
2530 }
else if (m_inuc == 1) {
2531 if (morr_arr(i,j,k,
MORRInd::t3d) < 273.15 && qvqvsi > 1.0) {
2535 mnuccd = nnuccd * m_mi0;
2544 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));
2552 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) *
2553 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons10 /
2562 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) *
2563 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons11 /
2572 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) *
2573 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons9 /
2582 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2590 epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2593 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2602 pre = std::min(pre, 0.0);
2612 sum_dep = prd + prds + mnuccd + prdg;
2614 if ((dum > 0.0 && sum_dep > dum * fudgef) ||
2615 (dum < 0.0 && sum_dep < dum * fudgef)) {
2616 mnuccd = fudgef * mnuccd * dum / sum_dep;
2617 prd = fudgef * prd * dum / sum_dep;
2618 prds = fudgef * prds * dum / sum_dep;
2619 prdg = fudgef * prdg * dum / sum_dep;
2659 if (m_igraup == 1) {
2676 piacrs = piacrs + piacr;
2680 pracis = pracis + praci;
2682 psacws = psacws + pgsacw;
2684 pracs = pracs + pgracs;
2689 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2696 mnuccc = mnuccc * ratio;
2697 psacws = psacws * ratio;
2698 psacwi = psacwi * ratio;
2699 qmults = qmults * ratio;
2700 qmultg = qmultg * ratio;
2701 psacwg = psacwg * ratio;
2702 pgsacw = pgsacw * ratio;
2706 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2707 - mnuccd + praci + pracis - eprd - psacwi) * dt;
2710 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2712 (prci + prai + praci + pracis - eprd);
2714 prci = prci * ratio;
2715 prai = prai * ratio;
2716 praci = praci * ratio;
2717 pracis = pracis * ratio;
2718 eprd = eprd * ratio;
2722 dum = ((pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2723 piacr + piacrs + pgracs + pracg) * dt;
2727 (-pre + qmultr + qmultrg + pracs + mnuccr + piacr + piacrs + pgracs + pracg);
2730 pracs = pracs * ratio;
2731 qmultr = qmultr * ratio;
2732 qmultrg = qmultrg * ratio;
2733 mnuccr = mnuccr * ratio;
2734 piacr = piacr * ratio;
2735 piacrs = piacrs * ratio;
2736 pgracs = pgracs * ratio;
2737 pracg = pracg * ratio;
2741 if (m_igraup == 0) {
2742 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis) * dt;
2745 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis) /
2748 eprds = eprds * ratio;
2749 psacr = psacr * ratio;
2751 }
else if (m_igraup == 1) {
2753 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis - mnuccr) * dt;
2756 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis + mnuccr) /
2759 eprds = eprds * ratio;
2760 psacr = psacr * ratio;
2765 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg - piacr - praci - psacr) * dt;
2768 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr + psacr +
2769 piacr + praci) / (-eprdg);
2771 eprdg = eprdg * ratio;
2779 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2780 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg + pracs +
2784 (-pra - prc - mnuccc + pcc -
2785 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2788 (prd + eprd + psacwi + mnuccc - prci -
2789 prai + qmults + qmultg + qmultr + qmultrg + mnuccd - praci - pracis);
2792 (pre + pra + prc - pracs - mnuccr - qmultr - qmultrg -
2793 piacr - piacrs - pracg - pgracs);
2794 if (m_igraup == 0) {
2796 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis);
2801 prdg + eprdg + mnuccr + piacr + praci + psacr);
2804 }
else if (m_igraup == 1) {
2807 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis + mnuccr);
2813 npra - nprc - npsacwi - npsacwg);
2816 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2817 nnuccd - niacr - niacrs);
2820 nragg - niacr - niacrs - npracg - ngracs);
2823 c2prec = pra + prc + psacws + qmults + qmultg + psacwg +
2824 pgsacw + mnuccc + psacwi;
2833 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2836 dumqc = std::max(dumqc, 0.0);
2839 dums = dumqv - dumqss;
2841 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;
2843 if (pcc * dt + dumqc < 0.0) {
2848 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);
2855 dum = std::max(-1.0, dum);
2861 dum = std::max(-1.0, dum);
2867 dum = std::max(-1.0, dum);
2873 dum = std::max(-1.0, dum);
2888 for(
int k=klo; k<=khi; k++) {
2904 for(
int k=khi; k>=klo; k--) {
2944 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);
2951 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);
2974 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);
2981 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);
3000 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);
3001 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);
3009 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);
3010 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);
3018 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);
3019 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);
3027 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);
3028 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);
3036 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
3042 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));
3043 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));
3095 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),
3096 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),
3114 for (
int n = 1; n <= nstep; n++) {
3116 for (
int k = klo; k <= khi; k++) {
3145 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);
3146 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);
3147 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);
3148 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);
3149 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);
3150 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);
3151 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);
3152 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);
3153 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);
3154 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);
3169 for (k = khi-1; k >= klo; k--) {
3171 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);
3172 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);
3173 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);
3174 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);
3175 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);
3176 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);
3177 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);
3178 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);
3179 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);
3180 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);
3183 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);
3184 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);
3185 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);
3186 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);
3187 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);
3188 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);
3189 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);
3190 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);
3191 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);
3192 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);
3209 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) +
3211 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;
3217 for(
int k=klo; k<=khi; k++) {
3235 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);
3236 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);
3251 if (m_igraup == 0) {
3281 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);
3286 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);
3293 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);
3298 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);
3303 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);
3352 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);
3358 if ((m_iliq != 1)) {
3363 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);
3369 if (m_igraup == 0) {
3372 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);
3377 }
else if (m_igraup == 1) {
3380 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);
3401 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);
3406 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;
3410 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;
3417 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);
3423 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);
3427 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);
3463 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);
3469 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;
3473 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;
3480 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);
3486 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;
3490 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;
3517 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;
3534 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));
3537 if (iinum == 0 && m_iact == 2) {
3538 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));
3553 if(use_morr_cpp_answer) {
3554 for(
int k=klo; k<=khi; k++) {
3568 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3584 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3585 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3586 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3594 if (run_morr_fort) {
3595 #ifdef ERF_USE_MORR_FORT
3601 theta_arr.dataPtr(),
3621 rain_accum_arr.dataPtr(),
3622 rainncv_arr.dataPtr(),
3624 snow_accum_arr.dataPtr(),
3625 snowncv_arr.dataPtr(),
3626 graup_accum_arr.dataPtr(),
3627 graupelncv_arr.dataPtr(),
3630 dummy_reflectivity_ptr,
3645 ilo, ihi, jlo, jhi, klo, khi,
3646 ilom, ihim, jlom, jhim, klom, khim,
3647 ilo, ihi, jlo, jhi, klo, khi,
3651 rainprod_arr.dataPtr(),
3652 evapprod_arr.dataPtr(),
3653 qlsink_arr.dataPtr(),
3654 precr_arr.dataPtr(),
3655 preci_arr.dataPtr(),
3656 precs_arr.dataPtr(),
3660 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:295
int m_axis
Definition: ERF_Morrison.H:304
int m_real_width
Definition: ERF_Morrison.H:298
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:310
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:321
bool m_do_cond
Definition: ERF_Morrison.H:311
@ 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:1171