507 Real dt = dt_advance;
510 auto domain =
m_geom.Domain();
511 int i_lo = domain.smallEnd(0);
512 int i_hi = domain.bigEnd(0);
513 int j_lo = domain.smallEnd(1);
514 int j_hi = domain.bigEnd(1);
518 bool run_morr_cpp =
true;
519 bool use_morr_cpp_answer =
true;
520 pp.query(
"use_morr_cpp_answer", use_morr_cpp_answer);
521 bool run_morr_fort = !use_morr_cpp_answer;
522 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
527 pp.query(
"morrison_ndcnst", m_ndcnst);
532 auto box = mfi.tilebox();
534 #ifndef ERF_USE_MORR_FORT
536 if (box.smallEnd(0) == i_lo) { box.growLo(0,-
m_real_width); }
537 if (box.bigEnd(0) == i_hi) { box.growHi(0,-
m_real_width); }
538 if (box.smallEnd(1) == j_lo) { box.growLo(1,-
m_real_width); }
539 if (box.bigEnd(1) == j_hi) { box.growHi(1,-
m_real_width); }
572 const int ilo = box.loVect()[0];
573 const int ihi = box.hiVect()[0];
574 const int jlo = box.loVect()[1];
575 const int jhi = box.hiVect()[1];
576 const int klo = box.loVect()[2];
577 const int khi = box.hiVect()[2];
579 Box grown_box(box); grown_box.grow(3);
580 #ifdef ERF_USE_MORR_FORT
581 const int ilom = grown_box.loVect()[0];
582 const int ihim = grown_box.hiVect()[0];
583 const int jlom = grown_box.loVect()[1];
584 const int jhim = grown_box.hiVect()[1];
585 const int klom = grown_box.loVect()[2];
586 const int khim = grown_box.hiVect()[2];
590 FArrayBox pii_fab(grown_box, 1);
591 auto const& pii_arr = pii_fab.array();
598 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
601 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
605 FArrayBox dz_fab(grown_box, 1);
606 auto const& dz_arr = dz_fab.array();
611 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
612 dz_arr(i,j,k) = (z_arr) ?
Real(0.25) * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
613 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
614 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
615 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz_val;
618 Box grown_boxD(grown_box); grown_boxD.makeSlab(2,0);
621 FArrayBox rainncv_fab(grown_boxD, 1);
622 FArrayBox sr_fab(grown_boxD, 1);
623 FArrayBox snowncv_fab(grown_boxD, 1);
624 FArrayBox graupelncv_fab(grown_boxD, 1);
626 auto const& rainncv_arr = rainncv_fab.array();
627 auto const& sr_arr = sr_fab.array();
628 auto const& snowncv_arr = snowncv_fab.array();
629 auto const& graupelncv_arr = graupelncv_fab.array();
632 ParallelFor(grown_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
633 rainncv_arr(i,j,k) =
Real(0);
634 sr_arr(i,j,k) =
Real(0);
635 snowncv_arr(i,j,k) =
Real(0);
636 graupelncv_arr(i,j,k) =
Real(0);
640 FArrayBox ht_fab(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), 1);
641 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
642 ParallelFor(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
643 ht_arr(i,j,k) = (z_arr) ?
Real(0.25) * ( z_arr(i ,j ,k) + z_arr(i+1,j ,k)
644 + z_arr(i ,j+1,k) + z_arr(i+1,j+1,k) ) :
Real(0.);
647 #ifdef ERF_USE_MORR_FORT
649 FArrayBox qrcuten_fab(grown_box, 1);
650 FArrayBox qscuten_fab(grown_box, 1);
651 FArrayBox qicuten_fab(grown_box, 1);
652 auto const& qrcuten_arr = qrcuten_fab.array();
653 auto const& qscuten_arr = qscuten_fab.array();
654 auto const& qicuten_arr = qicuten_fab.array();
657 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
658 qrcuten_arr(i,j,k) =
Real(0);
659 qscuten_arr(i,j,k) =
Real(0);
660 qicuten_arr(i,j,k) =
Real(0);
664 bool flag_qndrop =
false;
667 FArrayBox rainprod_fab(grown_box, 1);
668 FArrayBox evapprod_fab(grown_box, 1);
669 FArrayBox qlsink_fab(grown_box, 1);
670 FArrayBox precr_fab(grown_box, 1);
671 FArrayBox preci_fab(grown_box, 1);
672 FArrayBox precs_fab(grown_box, 1);
673 FArrayBox precg_fab(grown_box, 1);
675 auto const& rainprod_arr = rainprod_fab.array();
676 auto const& evapprod_arr = evapprod_fab.array();
677 auto const& qlsink_arr = qlsink_fab.array();
678 auto const& precr_arr = precr_fab.array();
679 auto const& preci_arr = preci_fab.array();
680 auto const& precs_arr = precs_fab.array();
681 auto const& precg_arr = precg_fab.array();
684 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
685 rainprod_arr(i,j,k) =
Real(0);
686 evapprod_arr(i,j,k) =
Real(0);
687 qlsink_arr(i,j,k) =
Real(0);
688 precr_arr(i,j,k) =
Real(0);
689 preci_arr(i,j,k) =
Real(0);
690 precs_arr(i,j,k) =
Real(0);
691 precg_arr(i,j,k) =
Real(0);
695 #ifdef ERF_USE_MORR_FORT
698 double dummy_reflectivity =
Real(0);
699 double* dummy_reflectivity_ptr = &dummy_reflectivity;
709 [[maybe_unused]]
int m_ibase = 2;
710 [[maybe_unused]]
int m_isub = 0;
722 [[maybe_unused]]
bool m_do_radar_ref =
false;
729 [[maybe_unused]]
Real m_cp;
742 [[maybe_unused]]
Real m_ac, m_bc;
771 Real m_lammaxi, m_lammini;
772 Real m_lammaxr, m_lamminr;
773 Real m_lammaxs, m_lammins;
774 Real m_lammaxg, m_lamming;
777 [[maybe_unused]]
Real m_k1;
778 [[maybe_unused]]
Real m_c1;
781 [[maybe_unused]]
Real m_mw;
782 [[maybe_unused]]
Real m_osm;
783 [[maybe_unused]]
Real m_vi;
784 [[maybe_unused]]
Real m_epsm;
785 [[maybe_unused]]
Real m_rhoa;
786 [[maybe_unused]]
Real m_map;
787 [[maybe_unused]]
Real m_ma;
788 [[maybe_unused]]
Real m_rr;
789 [[maybe_unused]]
Real m_bact;
790 [[maybe_unused]]
Real m_rm1;
791 [[maybe_unused]]
Real m_rm2;
794 [[maybe_unused]]
Real m_sig1;
795 [[maybe_unused]]
Real m_sig2;
796 [[maybe_unused]]
Real m_f11;
797 [[maybe_unused]]
Real m_f12;
798 [[maybe_unused]]
Real m_f21;
799 [[maybe_unused]]
Real m_f22;
802 Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
803 Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
804 Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
805 Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
806 Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
807 Real m_cons26, m_cons27, m_cons28, m_cons29; [[maybe_unused]]
Real m_cons30;
808 Real m_cons31, m_cons32, m_cons34, m_cons35; [[maybe_unused]]
Real m_cons33;
809 Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
814 m_ndcnst =
Real(250.0);
816 m_pi =
Real(3.1415926535897932384626434);
823 m_ep_2 = m_Rd / m_Rv;
829 m_rhow =
Real(997.0);
830 m_rhoi =
Real(500.0);
831 m_rhosn =
Real(100.0);
835 m_rhog =
Real(400.0);
837 m_rhog =
Real(900.0);
854 m_ar =
Real(841.99667);
870 m_bimm =
Real(100.0);
872 m_dcs =
Real(125.0E-6);
873 m_mi0 =
Real(4.0)/
three*m_pi*m_rhoi*std::pow(
Real(10.0E-6), 3);
874 m_mg0 =
Real(1.6E-10);
883 m_qsmall =
Real(1.0E-14);
890 m_cpw =
Real(4187.0);
893 m_ci = m_rhoi * m_pi /
Real(6.0);
895 m_cs = m_rhosn * m_pi /
Real(6.0);
897 m_cg = m_rhog * m_pi /
Real(6.0);
901 m_rin =
Real(0.1E-6);
904 m_mmult =
Real(4.0)/
three*m_pi*m_rhoi*std::pow(
Real(5.0E-6), 3);
911 m_lamminr =
one/
Real(2800.0E-6);
913 m_lammins =
one/
Real(2000.0E-6);
915 m_lamming =
one/
Real(2000.0E-6);
932 m_rhoa =
Real(1777.0);
936 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
941 m_rm1 =
Real(0.052E-6);
943 m_nanew1 =
Real(72.2E6);
944 m_f11 =
myhalf * std::exp(
Real(2.5) * std::pow(std::log(m_sig1), 2));
948 m_rm2 =
Real(1.3E-6);
950 m_nanew2 =
Real(1.8E6);
951 m_f12 =
myhalf * std::exp(
Real(2.5) * std::pow(std::log(m_sig2), 2));
970 m_cons15 = -
Real(1108.0) * m_eii * std::pow(m_pi, (
one-m_bs)/
three) *
973 m_cons17 =
Real(4.0) *
Real(2) *
three * m_rhosu * m_pi * m_eci * m_eci *
975 m_cons18 = m_rhosn * m_rhosn;
976 m_cons19 = m_rhow * m_rhow;
977 m_cons20 =
Real(20.0) * m_pi * m_pi * m_rhow * m_bimm;
978 m_cons21 =
Real(4.0) / (m_dcs * m_rhoi);
979 m_cons22 = m_pi * m_rhoi * std::pow(m_dcs, 3) /
Real(6.0);
983 m_cons26 = m_pi /
Real(6.0) * m_rhow;
986 m_cons29 =
Real(4.0)/
three * m_pi * m_rhow * std::pow(
Real(25.0E-6), 3);
987 m_cons30 =
Real(4.0)/
three * m_pi * m_rhow;
988 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
989 m_cons32 = m_pi /
Real(2) * m_ecr;
990 m_cons33 = m_pi * m_pi * m_ecr * m_rhog;
994 m_cons37 =
Real(4.0) * m_pi *
Real(1.38E-23) / (
Real(6.0) * m_pi * m_rin);
995 m_cons38 = m_pi * m_pi /
three * m_rhow;
996 m_cons39 = m_pi * m_pi /
Real(36.0) * m_rhow * m_bimm;
997 m_cons40 = m_pi /
Real(6.0) * m_bimm;
998 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
1015 m_rhoa =
Real(1777.0);
1016 m_map =
Real(0.132);
1017 m_ma =
Real(0.0284);
1018 m_rr =
Real(8.3145);
1019 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
1023 m_rm1 =
Real(0.052E-6);
1024 m_sig1 =
Real(2.04);
1025 m_nanew1 =
Real(72.2E6);
1026 m_f11 =
myhalf * std::exp(
Real(2.5) * std::pow(std::log(m_sig1), 2));
1027 m_f21 =
one +
fourth * std::log(m_sig1);
1030 m_rm2 =
Real(1.3E-6);
1032 m_nanew2 =
Real(1.8E6);
1033 m_f12 =
myhalf * std::exp(
Real(2.5) * std::pow(std::log(m_sig2), 2));
1034 m_f22 =
one +
fourth * std::log(m_sig2);
1048 m_do_radar_ref =
false;
1049 Box boxD(box); boxD.makeSlab(2,0);
1051 #ifdef ERF_USE_MORR_FORT
1060 morr_fab.template setVal<RunOn::Device>(0);
1061 auto const& morr_arr = morr_fab.array();
1068 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
1080 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
1094 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
1100 for(
int k=klo; k<=
khi; k++) {
1106 [[maybe_unused]]
Real nsubc;
1141 [[maybe_unused]]
Real pccn;
1193 [[maybe_unused]]
Real dum2;
1197 [[maybe_unused]]
Real dumqsi;
1210 [[maybe_unused]]
Real dc0;
1214 [[maybe_unused]]
Real dumqr;
1219 [[maybe_unused]]
Real c2prec;
1220 [[maybe_unused]]
Real csed;
1221 [[maybe_unused]]
Real ised;
1222 [[maybe_unused]]
Real ssed;
1223 [[maybe_unused]]
Real gsed;
1224 [[maybe_unused]]
Real rsed;
1225 [[maybe_unused]]
Real tqimelt;
1291 if (qvqvs <
Real(0.9)) {
1294 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);
1299 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);
1303 if (qvqvsi <
Real(0.9)) {
1306 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);
1311 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);
1316 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);
1325 const Real QSMALL = m_qsmall;
1360 morr_arr(i,j,k,
MORRInd::mu) =
Real(1.496e-6) * std::pow(morr_arr(i,j,k,
MORRInd::t3d),
Real(1.5)) / (morr_arr(i,j,k,
MORRInd::t3d) +
Real(120.0));
1379 bool skipMicrophysics =
false;
1380 bool skipConcentrations =
false;
1381 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) {
1383 skipMicrophysics =
true;
1387 if(!skipMicrophysics) {
1400 dum = (m_Rv * std::pow(morr_arr(i,j,k,
MORRInd::t3d),2));
1424 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);
1432 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);
1437 if (morr_arr(i,j,k,
MORRInd::qc3d) < m_qsmall && morr_arr(i,j,k,
MORRInd::qni3d) <
Real(1.0e-8) && morr_arr(i,j,k,
MORRInd::qr3d) < m_qsmall && morr_arr(i,j,k,
MORRInd::qg3d) <
Real(1.0e-8)) {
1438 skipConcentrations=
true;
1440 if(!skipConcentrations) {
1452 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),
one/
three);
1458 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1462 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1483 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),
one/
three);
1494 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1499 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1503 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;
1509 morr_arr(i,j,k,
MORRInd::lams) = pow(m_cons1 * morr_arr(i,j,k,
MORRInd::ns3d) / morr_arr(i,j,k,
MORRInd::qni3d),
one/ds0);
1517 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1521 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1529 morr_arr(i,j,k,
MORRInd::lamg) = pow(m_cons2 * morr_arr(i,j,k,
MORRInd::ng3d) / morr_arr(i,j,k,
MORRInd::qg3d),
one/dg0);
1537 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1541 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1588 nprc1 = prc / m_cons29;
1593 nprc1 = std::min(nprc1, nprc);
1608 ums_local = std::min(ums_local,
Real(1.2)*dum);
1609 uns_local = std::min(uns_local,
Real(1.2)*dum);
1610 umr_local = std::min(umr_local,
Real(9.1)*dum);
1611 unr_local = std::min(unr_local,
Real(9.1)*dum);
1618 pracs = m_cons41 * (std::sqrt(std::pow(
Real(1.2)*umr_local-
Real(0.95)*ums_local, 2) +
1620 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0s) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1639 umg_local = std::min(umg_local,
Real(20.0)*dum);
1640 ung_local = std::min(ung_local,
Real(20.0)*dum);
1641 umr_local = std::min(umr_local,
Real(9.1)*dum);
1642 unr_local = std::min(unr_local,
Real(9.1)*dum);
1645 pracg = m_cons41 * (std::sqrt(std::pow(
Real(1.2)*umr_local-
Real(0.95)*umg_local, 2) +
1647 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0g) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1653 dum = pracg/
Real(5.2e-7);
1655 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(
Real(1.7)*std::pow(unr_local-ung_local, 2) +
1662 npracg = npracg - dum;
1672 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
1683 dum1 =
Real(300.0e-6);
1696 std::pow(sc_schmidt,
one/
three) * m_cons9 /
1704 pre = std::min(pre,
Real(0));
1721 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1729 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1734 evpms = std::max(evpms, psmlt);
1735 psmlt = psmlt - evpms;
1752 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1760 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1765 evpmg = std::max(evpmg, pgmlt);
1766 pgmlt = pgmlt - evpmg;
1777 dum = (prc + pra) * dt;
1786 dum = (-psmlt - evpms + pracs) * dt;
1791 psmlt = psmlt * ratio;
1792 evpms = evpms * ratio;
1793 pracs = pracs * ratio;
1797 dum = (-pgmlt - evpmg + pracg) * dt;
1802 pgmlt = pgmlt * ratio;
1803 evpmg = evpmg * ratio;
1804 pracg = pracg * ratio;
1810 dum = (-pracs - pracg - pre - pra - prc + psmlt + pgmlt) * dt;
1813 ratio = (morr_arr(i,j,k,
MORRInd::qr3d)/dt + pracs + pracg + pra + prc - psmlt - pgmlt) / (-pre);
1836 if (pre <
Real(0)) {
1838 dum = std::max(-
one, dum);
1842 if (evpms + psmlt <
Real(0)) {
1844 dum = std::max(-
one, dum);
1848 if (psmlt <
Real(0)) {
1850 dum = std::max(-
one, dum);
1854 if (evpmg + pgmlt <
Real(0)) {
1856 dum = std::max(-
one, dum);
1860 if (pgmlt <
Real(0)) {
1862 dum = std::max(-
one, dum);
1879 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1881 dumqc = std::max(dumqc,
Real(0));
1884 dums = dumqv - dumqss;
1885 pcc = dums / (
one + 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;
1886 if (pcc * dt + dumqc <
Real(0)) {
1890 if (!do_cond) { pcc =
Real(0); }
1920 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),
one/
three);
1925 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1929 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1933 morr_arr(i,j,k,
MORRInd::n0r) = pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1954 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),
one/
three);
1965 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1970 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1980 morr_arr(i,j,k,
MORRInd::lams) = pow(m_cons1 * morr_arr(i,j,k,
MORRInd::ns3d) / morr_arr(i,j,k,
MORRInd::qni3d),
one/ds0);
1988 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1992 morr_arr(i,j,k,
MORRInd::n0s) = pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
2000 morr_arr(i,j,k,
MORRInd::lami) = pow(m_cons12 * morr_arr(i,j,k,
MORRInd::ni3d) / morr_arr(i,j,k,
MORRInd::qi3d),
one/
three);
2009 morr_arr(i,j,k,
MORRInd::n0i) = pow(morr_arr(i,j,k,
MORRInd::lami),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
2015 morr_arr(i,j,k,
MORRInd::n0i) = pow(morr_arr(i,j,k,
MORRInd::lami),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
2023 morr_arr(i,j,k,
MORRInd::lamg) = pow(m_cons2 * morr_arr(i,j,k,
MORRInd::ng3d) / morr_arr(i,j,k,
MORRInd::qg3d),
one/dg0);
2031 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
2035 morr_arr(i,j,k,
MORRInd::n0g) = pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
2119 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
2126 mnuccc = mnuccc + m_cons39 *
2136 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
2154 nprc1 = prc / m_cons29;
2159 nprc1 = std::min(nprc1, nprc);
2166 std::pow((morr_arr(i,j,k,
MORRInd::ns3d) * morr_arr(i,j,k,
MORRInd::rho)), ((
Real(4.0) - m_bs) /
three)) / morr_arr(i,j,k,
MORRInd::rho);
2218 ums_local = std::min(ums_local,
Real(1.2) * dum);
2219 uns_local = std::min(uns_local,
Real(1.2) * dum);
2220 umr_local = std::min(umr_local,
Real(9.1) * dum);
2221 unr_local = std::min(unr_local,
Real(9.1) * dum);
2223 pracs = m_cons41 * (std::sqrt(std::pow(
Real(1.2) * umr_local -
Real(0.95) * ums_local, 2) +
2225 std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * (
Real(5.0) / (std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::lams)) +
2229 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * std::pow(unr_local - uns_local, 2) +
2238 pracs = std::min(pracs, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2244 psacr = m_cons31 * (std::sqrt(std::pow(
Real(1.2) * umr_local -
Real(0.95) * ums_local, 2) +
2246 std::pow(morr_arr(i,j,k,
MORRInd::lams), 3) * (
Real(5.0) / (std::pow(morr_arr(i,j,k,
MORRInd::lams), 3) * morr_arr(i,j,k,
MORRInd::lamr)) +
2263 umg_local = std::min(umg_local,
Real(20.0) * dum);
2264 ung_local = std::min(ung_local,
Real(20.0) * dum);
2265 umr_local = std::min(umr_local,
Real(9.1) * dum);
2266 unr_local = std::min(unr_local,
Real(9.1) * dum);
2268 pracg = m_cons41 * (std::sqrt(std::pow(
Real(1.2) * umr_local -
Real(0.95) * umg_local, 2) +
2270 std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * (
Real(5.0) / (std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::lamg)) +
2274 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * std::pow(unr_local - ung_local, 2) +
2283 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2295 if (psacws >
Real(0) || pracs >
Real(0)) {
2311 if (psacws >
Real(0)) {
2312 nmults =
Real(35.0e4) * psacws * fmult *
Real(1000.0);
2313 qmults = nmults * m_mmult;
2317 qmults = std::min(qmults, psacws);
2318 psacws = psacws - qmults;
2322 if (pracs >
Real(0)) {
2323 nmultr =
Real(35.0e4) * pracs * fmult *
Real(1000.0);
2324 qmultr = nmultr * m_mmult;
2328 qmultr = std::min(qmultr, pracs);
2329 pracs = pracs - qmultr;
2344 if (psacwg >
Real(0) || pracg >
Real(0)) {
2360 if (psacwg >
Real(0)) {
2361 nmultg =
Real(35.0e4) * psacwg * fmult *
Real(1000.0);
2362 qmultg = nmultg * m_mmult;
2366 qmultg = std::min(qmultg, psacwg);
2367 psacwg = psacwg - qmultg;
2371 if (pracg >
Real(0)) {
2372 nmultrg =
Real(35.0e4) * pracg * fmult *
Real(1000.0);
2373 qmultrg = nmultrg * m_mmult;
2377 qmultrg = std::min(qmultrg, pracg);
2378 pracg = pracg - qmultrg;
2386 if (psacws >
Real(0)) {
2390 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) *
2395 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw,
Real(0));
2400 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2403 psacws = psacws - pgsacw;
2408 if (pracs >
Real(0)) {
2415 dum = std::min(dum,
Real(1));
2416 dum = std::max(dum,
Real(0));
2418 pgracs = (
one - dum) * pracs;
2419 ngracs = (
one - dum) * npracs;
2422 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2423 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2426 pracs = pracs - pgracs;
2427 npracs = npracs - ngracs;
2430 psacr = psacr * (
one - dum);
2446 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2456 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
2466 dum1 =
Real(300.0e-6);
2482 prci = m_cons22 * nprci;
2483 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2490 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) /
2495 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2508 std::pow(morr_arr(i,j,k,
MORRInd::lamr), (m_br +
three)) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::rho);
2511 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2512 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2517 std::pow(morr_arr(i,j,k,
MORRInd::lamr), (m_br +
three)) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) * morr_arr(i,j,k,
MORRInd::rho);
2520 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2521 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2532 kc2 = std::min(kc2,
Real(500.0e3));
2537 mnuccd = nnuccd * m_mi0;
2540 }
else if (m_inuc == 1) {
2545 mnuccd = nnuccd * m_mi0;
2554 epsi =
Real(2) * 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));
2562 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),
myhalf) *
2563 std::pow(sc_schmidt, (
one /
three)) * m_cons10 /
2572 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),
myhalf) *
2573 std::pow(sc_schmidt, (
one /
three)) * m_cons11 /
2582 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),
myhalf) *
2583 std::pow(sc_schmidt, (
one /
three)) * m_cons9 /
2592 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2603 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (
one - dum);
2612 pre = std::min(pre,
Real(0));
2621 fudgef =
Real(0.9999);
2622 sum_dep = prd + prds + mnuccd + prdg;
2624 if ((dum >
Real(0) && sum_dep > dum * fudgef) ||
2625 (dum <
Real(0) && sum_dep < dum * fudgef)) {
2626 mnuccd = fudgef * mnuccd * dum / sum_dep;
2627 prd = fudgef * prd * dum / sum_dep;
2628 prds = fudgef * prds * dum / sum_dep;
2629 prdg = fudgef * prdg * dum / sum_dep;
2633 if (prd <
Real(0)) {
2637 if (prds <
Real(0)) {
2641 if (prdg <
Real(0)) {
2669 if (m_igraup == 1) {
2686 piacrs = piacrs + piacr;
2690 pracis = pracis + praci;
2692 psacws = psacws + pgsacw;
2694 pracs = pracs + pgracs;
2699 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2706 mnuccc = mnuccc * ratio;
2707 psacws = psacws * ratio;
2708 psacwi = psacwi * ratio;
2709 qmults = qmults * ratio;
2710 qmultg = qmultg * ratio;
2711 psacwg = psacwg * ratio;
2712 pgsacw = pgsacw * ratio;
2716 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2717 - mnuccd + praci + pracis - eprd - psacwi) * dt;
2720 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2722 (prci + prai + praci + pracis - eprd);
2724 prci = prci * ratio;
2725 prai = prai * ratio;
2726 praci = praci * ratio;
2727 pracis = pracis * ratio;
2728 eprd = eprd * ratio;
2732 dum = ((pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2733 piacr + piacrs + pgracs + pracg) * dt;
2737 (-pre + qmultr + qmultrg + pracs + mnuccr + piacr + piacrs + pgracs + pracg);
2740 pracs = pracs * ratio;
2741 qmultr = qmultr * ratio;
2742 qmultrg = qmultrg * ratio;
2743 mnuccr = mnuccr * ratio;
2744 piacr = piacr * ratio;
2745 piacrs = piacrs * ratio;
2746 pgracs = pgracs * ratio;
2747 pracg = pracg * ratio;
2751 if (m_igraup == 0) {
2752 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis) * dt;
2755 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis) /
2758 eprds = eprds * ratio;
2759 psacr = psacr * ratio;
2761 }
else if (m_igraup == 1) {
2763 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis - mnuccr) * dt;
2766 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis + mnuccr) /
2769 eprds = eprds * ratio;
2770 psacr = psacr * ratio;
2775 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg - piacr - praci - psacr) * dt;
2778 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr + psacr +
2779 piacr + praci) / (-eprdg);
2781 eprdg = eprdg * ratio;
2789 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2790 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg + pracs +
2794 (-pra - prc - mnuccc + pcc -
2795 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2798 (prd + eprd + psacwi + mnuccc - prci -
2799 prai + qmults + qmultg + qmultr + qmultrg + mnuccd - praci - pracis);
2802 (pre + pra + prc - pracs - mnuccr - qmultr - qmultrg -
2803 piacr - piacrs - pracg - pgracs);
2804 if (m_igraup == 0) {
2806 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis);
2811 prdg + eprdg + mnuccr + piacr + praci + psacr);
2814 }
else if (m_igraup == 1) {
2817 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis + mnuccr);
2823 npra - nprc - npsacwi - npsacwg);
2826 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2827 nnuccd - niacr - niacrs);
2830 nragg - niacr - niacrs - npracg - ngracs);
2833 c2prec = pra + prc + psacws + qmults + qmultg + psacwg +
2834 pgsacw + mnuccc + psacwi;
2843 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2846 dumqc = std::max(dumqc,
Real(0));
2849 dums = dumqv - dumqss;
2851 pcc = dums / (
one + 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;
2853 if (pcc * dt + dumqc <
Real(0)) {
2858 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);
2863 if (eprd <
Real(0)) {
2865 dum = std::max(-
one, dum);
2869 if (eprds <
Real(0)) {
2871 dum = std::max(-
one, dum);
2875 if (pre <
Real(0)) {
2877 dum = std::max(-
one, dum);
2881 if (eprdg <
Real(0)) {
2883 dum = std::max(-
one, dum);
2898 for(
int k=klo; k<=
khi; k++) {
2914 for(
int k=
khi; k>=klo; k--) {
2954 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),
one/di0);
2961 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),
one/
three);
2984 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),
one/ds0);
2991 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),
one/dg0);
3010 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);
3011 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);
3019 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);
3020 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);
3028 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);
3029 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);
3037 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);
3038 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);
3052 morr_arr(i,j,k,
MORRInd::umi) = std::min(morr_arr(i,j,k,
MORRInd::umi),
Real(1.2) * std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho),
Real(0.35)));
3053 morr_arr(i,j,k,
MORRInd::uni) = std::min(morr_arr(i,j,k,
MORRInd::uni),
Real(1.2) * std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho),
Real(0.35)));
3105 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),
3106 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),
3124 for (
int n = 1; n <= nstep; n++) {
3126 for (
int k = klo; k <=
khi; k++) {
3155 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);
3156 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);
3157 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);
3158 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);
3159 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);
3160 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);
3161 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);
3162 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);
3163 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);
3164 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);
3179 for (k =
khi-1; k >= klo; k--) {
3181 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);
3182 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);
3183 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);
3184 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);
3185 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);
3186 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);
3187 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);
3188 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);
3189 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);
3190 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);
3193 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);
3194 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);
3195 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);
3196 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);
3197 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);
3198 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);
3199 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);
3200 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);
3201 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);
3202 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);
3219 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) +
3221 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;
3227 for(
int k=klo; k<=
khi; k++) {
3245 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);
3246 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);
3261 if (m_igraup == 0) {
3288 if (qvqvs <
Real(0.9)) {
3291 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);
3296 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);
3300 if (qvqvsi <
Real(0.9)) {
3303 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);
3308 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);
3313 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);
3362 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);
3368 if ((m_iliq != 1)) {
3373 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);
3379 if (m_igraup == 0) {
3382 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);
3387 }
else if (m_igraup == 1) {
3390 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);
3411 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),
one/m_di);
3416 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;
3420 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;
3427 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),
one/
three);
3433 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);
3437 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);
3473 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),
one/m_ds);
3479 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;
3483 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;
3490 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),
one/m_dg);
3496 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;
3500 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;
3527 morr_arr(i,j,k,
MORRInd::effc) =
gamma_function(morr_arr(i,j,k,
MORRInd::pgam) +
Real(4.0)) /
gamma_function(morr_arr(i,j,k,
MORRInd::pgam) +
three) / morr_arr(i,j,k,
MORRInd::lamc) /
Real(2) *
Real(1.0e6);
3544 morr_arr(i,j,k,
MORRInd::ni3d) = std::min(morr_arr(i,j,k,
MORRInd::ni3d),
Real(0.3e6) / morr_arr(i,j,k,
MORRInd::rho));
3547 if (iinum == 0 && m_iact == 2) {
3548 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));
3563 if(use_morr_cpp_answer) {
3564 for(
int k=klo; k<=
khi; k++) {
3578 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3594 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3595 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3596 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3604 if (run_morr_fort) {
3605 #ifdef ERF_USE_MORR_FORT
3611 theta_arr.dataPtr(),
3631 rain_accum_arr.dataPtr(),
3632 rainncv_arr.dataPtr(),
3634 snow_accum_arr.dataPtr(),
3635 snowncv_arr.dataPtr(),
3636 graup_accum_arr.dataPtr(),
3637 graupelncv_arr.dataPtr(),
3640 dummy_reflectivity_ptr,
3645 qrcuten_arr.dataPtr(),
3646 qscuten_arr.dataPtr(),
3647 qicuten_arr.dataPtr(),
3655 ilo, ihi, jlo, jhi, klo,
khi,
3656 ilom, ihim, jlom, jhim, klom, khim,
3657 ilo, ihi, jlo, jhi, klo,
khi,
3661 rainprod_arr.dataPtr(),
3662 evapprod_arr.dataPtr(),
3663 qlsink_arr.dataPtr(),
3664 precr_arr.dataPtr(),
3665 preci_arr.dataPtr(),
3666 precs_arr.dataPtr(),
3670 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:446
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real gamma_function(Real x)
Definition: ERF_AdvanceMorrison.cpp:433
constexpr amrex::Real three
Definition: ERF_Constants.H:9
constexpr amrex::Real one
Definition: ERF_Constants.H:7
constexpr amrex::Real fourth
Definition: ERF_Constants.H:12
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:11
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const auto prob_lo=geomdata.ProbLo();const auto dx=geomdata.CellSize();const Real x=(prob_lo[0]+(i+myhalf) *dx[0])/mf_m(i, j, 0);const Real z=z_cc(i, j, k);Real L=std::sqrt(std::pow((x - x_c)/x_r, 2)+std::pow((z - z_c)/z_r, 2));if(L<=one) { Real dT=T_pert *(std::cos(PI *L)+one)/two;Real Tbar_hse=p_hse(i, j, k)/(R_d *r_hse(i, j, k));Real theta_perturbed=(Tbar_hse+dT) *std::pow(p_0/p_hse(i, j, k), rdOcp);Real theta_0=(Tbar_hse) *std::pow(p_0/p_hse(i, j, k), rdOcp);if(const_rho) { state_pert(i, j, k, RhoTheta_comp)=r_hse(i, j, k) *(theta_perturbed - theta_0);} else { state_pert(i, j, k, Rho_comp)=getRhoThetagivenP(p_hse(i, j, k))/theta_perturbed - r_hse(i, j, k);} } })
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
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
auto rho_arr
Definition: ERF_UpdateWSubsidence_SineMassFlux.H:3
amrex::Geometry m_geom
Definition: ERF_Morrison.H:292
amrex::MultiFab * m_z_phys_nd
Definition: ERF_Morrison.H:311
int m_axis
Definition: ERF_Morrison.H:301
int m_real_width
Definition: ERF_Morrison.H:295
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:304
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:315
bool m_do_cond
Definition: ERF_Morrison.H:305
@ qisten
Definition: ERF_AdvanceMorrison.cpp:73
@ dumfnc
Definition: ERF_AdvanceMorrison.cpp:131
@ qi3dten
Definition: ERF_AdvanceMorrison.cpp:45
@ agn
Definition: ERF_AdvanceMorrison.cpp:94
@ pres
Definition: ERF_AdvanceMorrison.cpp:62
@ precrt
Definition: ERF_AdvanceMorrison.cpp:79
@ dumc
Definition: ERF_AdvanceMorrison.cpp:130
@ falouti
Definition: ERF_AdvanceMorrison.cpp:110
@ ni3d
Definition: ERF_AdvanceMorrison.cpp:55
@ dumi
Definition: ERF_AdvanceMorrison.cpp:95
@ faloutnc
Definition: ERF_AdvanceMorrison.cpp:138
@ snowprt
Definition: ERF_AdvanceMorrison.cpp:81
@ lamg
Definition: ERF_AdvanceMorrison.cpp:37
@ xxls
Definition: ERF_AdvanceMorrison.cpp:151
@ n0s
Definition: ERF_AdvanceMorrison.cpp:40
@ fns
Definition: ERF_AdvanceMorrison.cpp:120
@ grplprt
Definition: ERF_AdvanceMorrison.cpp:82
@ dumfns
Definition: ERF_AdvanceMorrison.cpp:116
@ qni3d
Definition: ERF_AdvanceMorrison.cpp:53
@ ung
Definition: ERF_AdvanceMorrison.cpp:134
@ faloutng
Definition: ERF_AdvanceMorrison.cpp:124
@ qc3dten
Definition: ERF_AdvanceMorrison.cpp:44
@ w3d
Definition: ERF_AdvanceMorrison.cpp:64
@ rgvm
Definition: ERF_AdvanceMorrison.cpp:108
@ arn
Definition: ERF_AdvanceMorrison.cpp:91
@ lami
Definition: ERF_AdvanceMorrison.cpp:34
@ qscu1d
Definition: ERF_AdvanceMorrison.cpp:77
@ qcsten
Definition: ERF_AdvanceMorrison.cpp:75
@ fc
Definition: ERF_AdvanceMorrison.cpp:136
@ fnr
Definition: ERF_AdvanceMorrison.cpp:145
@ pgam
Definition: ERF_AdvanceMorrison.cpp:43
@ qrcu1d
Definition: ERF_AdvanceMorrison.cpp:76
@ fng
Definition: ERF_AdvanceMorrison.cpp:107
@ ng3dten
Definition: ERF_AdvanceMorrison.cpp:68
@ dlami
Definition: ERF_AdvanceMorrison.cpp:148
@ faloutni
Definition: ERF_AdvanceMorrison.cpp:111
@ faloutnr
Definition: ERF_AdvanceMorrison.cpp:143
@ NumInds
Definition: ERF_AdvanceMorrison.cpp:155
@ dumfni
Definition: ERF_AdvanceMorrison.cpp:97
@ n0g
Definition: ERF_AdvanceMorrison.cpp:42
@ dlams
Definition: ERF_AdvanceMorrison.cpp:146
@ n0i
Definition: ERF_AdvanceMorrison.cpp:39
@ effs
Definition: ERF_AdvanceMorrison.cpp:85
@ faltndg
Definition: ERF_AdvanceMorrison.cpp:128
@ cpm
Definition: ERF_AdvanceMorrison.cpp:153
@ qr3dten
Definition: ERF_AdvanceMorrison.cpp:47
@ t3d
Definition: ERF_AdvanceMorrison.cpp:60
@ dumqs
Definition: ERF_AdvanceMorrison.cpp:115
@ qg3d
Definition: ERF_AdvanceMorrison.cpp:69
@ lamr
Definition: ERF_AdvanceMorrison.cpp:36
@ qr3d
Definition: ERF_AdvanceMorrison.cpp:54
@ nc3d
Definition: ERF_AdvanceMorrison.cpp:65
@ qg3dten
Definition: ERF_AdvanceMorrison.cpp:67
@ nr3dten
Definition: ERF_AdvanceMorrison.cpp:50
@ dzq
Definition: ERF_AdvanceMorrison.cpp:63
@ dumfnr
Definition: ERF_AdvanceMorrison.cpp:142
@ uns
Definition: ERF_AdvanceMorrison.cpp:118
@ faltndng
Definition: ERF_AdvanceMorrison.cpp:129
@ effc
Definition: ERF_AdvanceMorrison.cpp:83
@ qnisten
Definition: ERF_AdvanceMorrison.cpp:74
@ faloutg
Definition: ERF_AdvanceMorrison.cpp:123
@ t3dten
Definition: ERF_AdvanceMorrison.cpp:58
@ qv3d
Definition: ERF_AdvanceMorrison.cpp:61
@ ni3dten
Definition: ERF_AdvanceMorrison.cpp:48
@ uni
Definition: ERF_AdvanceMorrison.cpp:100
@ umi
Definition: ERF_AdvanceMorrison.cpp:101
@ qni3dten
Definition: ERF_AdvanceMorrison.cpp:46
@ faloutr
Definition: ERF_AdvanceMorrison.cpp:109
@ dumr
Definition: ERF_AdvanceMorrison.cpp:96
@ faloutns
Definition: ERF_AdvanceMorrison.cpp:122
@ effi
Definition: ERF_AdvanceMorrison.cpp:84
@ faltndni
Definition: ERF_AdvanceMorrison.cpp:114
@ unc
Definition: ERF_AdvanceMorrison.cpp:132
@ umc
Definition: ERF_AdvanceMorrison.cpp:133
@ qv3dten
Definition: ERF_AdvanceMorrison.cpp:59
@ faltndns
Definition: ERF_AdvanceMorrison.cpp:126
@ nc3dten
Definition: ERF_AdvanceMorrison.cpp:66
@ dumg
Definition: ERF_AdvanceMorrison.cpp:98
@ dlamc
Definition: ERF_AdvanceMorrison.cpp:149
@ rho
Definition: ERF_AdvanceMorrison.cpp:88
@ effr
Definition: ERF_AdvanceMorrison.cpp:86
@ faltndnc
Definition: ERF_AdvanceMorrison.cpp:140
@ xxlv
Definition: ERF_AdvanceMorrison.cpp:152
@ faltndc
Definition: ERF_AdvanceMorrison.cpp:139
@ faltndnr
Definition: ERF_AdvanceMorrison.cpp:144
@ fni
Definition: ERF_AdvanceMorrison.cpp:105
@ umr
Definition: ERF_AdvanceMorrison.cpp:102
@ faloutc
Definition: ERF_AdvanceMorrison.cpp:137
@ ain
Definition: ERF_AdvanceMorrison.cpp:90
@ effg
Definition: ERF_AdvanceMorrison.cpp:87
@ faltnds
Definition: ERF_AdvanceMorrison.cpp:125
@ xlf
Definition: ERF_AdvanceMorrison.cpp:154
@ asn
Definition: ERF_AdvanceMorrison.cpp:92
@ fr
Definition: ERF_AdvanceMorrison.cpp:103
@ fnc
Definition: ERF_AdvanceMorrison.cpp:141
@ fi
Definition: ERF_AdvanceMorrison.cpp:104
@ dumfng
Definition: ERF_AdvanceMorrison.cpp:99
@ faltndr
Definition: ERF_AdvanceMorrison.cpp:112
@ lams
Definition: ERF_AdvanceMorrison.cpp:35
@ fs
Definition: ERF_AdvanceMorrison.cpp:119
@ qicu1d
Definition: ERF_AdvanceMorrison.cpp:78
@ qrsten
Definition: ERF_AdvanceMorrison.cpp:72
@ qgsten
Definition: ERF_AdvanceMorrison.cpp:71
@ cdist1
Definition: ERF_AdvanceMorrison.cpp:38
@ dlamg
Definition: ERF_AdvanceMorrison.cpp:150
@ mu
Definition: ERF_AdvanceMorrison.cpp:89
@ lamc
Definition: ERF_AdvanceMorrison.cpp:33
@ ns3dten
Definition: ERF_AdvanceMorrison.cpp:49
@ ns3d
Definition: ERF_AdvanceMorrison.cpp:56
@ dlamr
Definition: ERF_AdvanceMorrison.cpp:147
@ ng3d
Definition: ERF_AdvanceMorrison.cpp:70
@ qi3d
Definition: ERF_AdvanceMorrison.cpp:52
@ acn
Definition: ERF_AdvanceMorrison.cpp:93
@ falouts
Definition: ERF_AdvanceMorrison.cpp:121
@ faltndi
Definition: ERF_AdvanceMorrison.cpp:113
@ fg
Definition: ERF_AdvanceMorrison.cpp:106
@ qc3d
Definition: ERF_AdvanceMorrison.cpp:51
@ umg
Definition: ERF_AdvanceMorrison.cpp:135
@ unr
Definition: ERF_AdvanceMorrison.cpp:127
@ ums
Definition: ERF_AdvanceMorrison.cpp:117
@ n0r
Definition: ERF_AdvanceMorrison.cpp:41
@ snowrt
Definition: ERF_AdvanceMorrison.cpp:80
@ nr3d
Definition: ERF_AdvanceMorrison.cpp:57
@ 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:1206