507 amrex::Real dt = dt_advance;
512 const amrex::Box& box = mfi.tilebox();
540 const int ilo = box.loVect()[0];
541 const int ihi = box.hiVect()[0];
542 const int jlo = box.loVect()[1];
543 const int jhi = box.hiVect()[1];
544 const int klo = box.loVect()[2];
545 const int khi = box.hiVect()[2];
547 amrex::Box grown_box(box); grown_box.grow(3);
548 #ifdef ERF_USE_MORR_FORT
549 const int ilom = grown_box.loVect()[0];
550 const int ihim = grown_box.hiVect()[0];
551 const int jlom = grown_box.loVect()[1];
552 const int jhim = grown_box.hiVect()[1];
553 const int klom = grown_box.loVect()[2];
554 const int khim = grown_box.hiVect()[2];
558 FArrayBox pii_fab(grown_box, 1);
559 auto const& pii_arr = pii_fab.array();
561 const amrex::Real
p0 = 100000.0;
563 const amrex::Real rdcp =
m_rdOcp;
566 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
569 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
573 FArrayBox dz_fab(grown_box, 1);
574 auto const& dz_arr = dz_fab.array();
578 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
579 dz_arr(i,j,k) = dz_val;
581 amrex::Box grown_boxD(grown_box); grown_boxD.makeSlab(2,0);
584 FArrayBox rainncv_fab(grown_boxD, 1);
585 FArrayBox sr_fab(grown_boxD, 1);
586 FArrayBox snowncv_fab(grown_boxD, 1);
587 FArrayBox graupelncv_fab(grown_boxD, 1);
589 auto const& rainncv_arr = rainncv_fab.array();
590 auto const& sr_arr = sr_fab.array();
591 auto const& snowncv_arr = snowncv_fab.array();
592 auto const& graupelncv_arr = graupelncv_fab.array();
595 ParallelFor(grown_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
596 rainncv_arr(i,j,k) = 0.0;
598 snowncv_arr(i,j,k) = 0.0;
599 graupelncv_arr(i,j,k) = 0.0;
603 FArrayBox ht_fab(amrex::Box(amrex::IntVect(ilo, jlo, 0), amrex::IntVect(ihi, jhi, 0)), 1);
604 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
605 ParallelFor(amrex::Box(amrex::IntVect(ilo, jlo, 0), amrex::IntVect(ihi, jhi, 0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
609 #ifdef ERF_USE_MORR_FORT
611 bool flag_qndrop =
false;
614 FArrayBox rainprod_fab(grown_box, 1);
615 FArrayBox evapprod_fab(grown_box, 1);
616 FArrayBox qlsink_fab(grown_box, 1);
617 FArrayBox precr_fab(grown_box, 1);
618 FArrayBox preci_fab(grown_box, 1);
619 FArrayBox precs_fab(grown_box, 1);
620 FArrayBox precg_fab(grown_box, 1);
622 auto const& rainprod_arr = rainprod_fab.array();
623 auto const& evapprod_arr = evapprod_fab.array();
624 auto const& qlsink_arr = qlsink_fab.array();
625 auto const& precr_arr = precr_fab.array();
626 auto const& preci_arr = preci_fab.array();
627 auto const& precs_arr = precs_fab.array();
628 auto const& precg_arr = precg_fab.array();
631 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
632 rainprod_arr(i,j,k) = 0.0;
633 evapprod_arr(i,j,k) = 0.0;
634 qlsink_arr(i,j,k) = 0.0;
635 precr_arr(i,j,k) = 0.0;
636 preci_arr(i,j,k) = 0.0;
637 precs_arr(i,j,k) = 0.0;
638 precg_arr(i,j,k) = 0.0;
642 #ifdef ERF_USE_MORR_FORT
645 double dummy_reflectivity = 0.0;
646 double* dummy_reflectivity_ptr = &dummy_reflectivity;
656 [[maybe_unused]]
int m_ibase = 2;
657 [[maybe_unused]]
int m_isub = 0;
669 [[maybe_unused]]
bool m_do_radar_ref =
false;
676 [[maybe_unused]] amrex::Real m_cp;
688 amrex::Real m_ai, m_bi;
689 [[maybe_unused]] amrex::Real m_ac, m_bc;
690 amrex::Real m_as, m_bs;
691 amrex::Real m_ar, m_br;
692 amrex::Real m_ag, m_bg;
705 amrex::Real m_qsmall;
713 amrex::Real m_ci, m_di;
714 amrex::Real m_cs, m_ds;
715 amrex::Real m_cg, m_dg;
718 amrex::Real m_lammaxi, m_lammini;
719 amrex::Real m_lammaxr, m_lamminr;
720 amrex::Real m_lammaxs, m_lammins;
721 amrex::Real m_lammaxg, m_lamming;
724 amrex::Real m_ndcnst = 250.0;
727 [[maybe_unused]] amrex::Real m_k1;
728 [[maybe_unused]] amrex::Real m_c1;
731 [[maybe_unused]] amrex::Real m_mw;
732 [[maybe_unused]] amrex::Real m_osm;
733 [[maybe_unused]] amrex::Real m_vi;
734 [[maybe_unused]] amrex::Real m_epsm;
735 [[maybe_unused]] amrex::Real m_rhoa;
736 [[maybe_unused]] amrex::Real m_map;
737 [[maybe_unused]] amrex::Real m_ma;
738 [[maybe_unused]] amrex::Real m_rr;
739 [[maybe_unused]] amrex::Real m_bact;
740 [[maybe_unused]] amrex::Real m_rm1;
741 [[maybe_unused]] amrex::Real m_rm2;
742 amrex::Real m_nanew1;
743 amrex::Real m_nanew2;
744 [[maybe_unused]] amrex::Real m_sig1;
745 [[maybe_unused]] amrex::Real m_sig2;
746 [[maybe_unused]] amrex::Real m_f11;
747 [[maybe_unused]] amrex::Real m_f12;
748 [[maybe_unused]] amrex::Real m_f21;
749 [[maybe_unused]] amrex::Real m_f22;
752 amrex::Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
753 amrex::Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
754 amrex::Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
755 amrex::Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
756 amrex::Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
757 amrex::Real m_cons26, m_cons27, m_cons28, m_cons29; [[maybe_unused]] amrex::Real m_cons30;
758 amrex::Real m_cons31, m_cons32, m_cons34, m_cons35; [[maybe_unused]] amrex::Real m_cons33;
759 amrex::Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
760 amrex::Real m_cons41;
765 m_pi = 3.1415926535897932384626434;
770 m_cp = 7.0*287.0/2.0;
772 m_ep_2 = m_Rd / m_Rv;
775 m_rhosu = 85000.0/(287.15*273.15);
822 m_mi0 = 4.0/3.0*m_pi*m_rhoi*std::pow(10.0E-6, 3);
842 m_ci = m_rhoi * m_pi / 6.0;
844 m_cs = m_rhosn * m_pi / 6.0;
846 m_cg = m_rhog * m_pi / 6.0;
853 m_mmult = 4.0/3.0*m_pi*m_rhoi*std::pow(5.0E-6, 3);
857 m_lammaxi = 1.0/1.0E-6;
858 m_lammini = 1.0/(2.0*m_dcs + 100.0E-6);
859 m_lammaxr = 1.0/20.0E-6;
860 m_lamminr = 1.0/2800.0E-6;
861 m_lammaxs = 1.0/10.0E-6;
862 m_lammins = 1.0/2000.0E-6;
863 m_lammaxg = 1.0/20.0E-6;
864 m_lamming = 1.0/2000.0E-6;
885 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
893 m_f11 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig1), 2));
894 m_f21 = 1.0 + 0.25 * std::log(m_sig1);
900 m_f12 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig2), 2));
901 m_f22 = 1.0 + 0.25 * std::log(m_sig2);
919 m_cons15 = -1108.0 * m_eii * std::pow(m_pi, (1.0-m_bs)/3.0) *
920 std::pow(m_rhosn, (-2.0-m_bs)/3.0) / (4.0*720.0);
922 m_cons17 = 4.0 * 2.0 * 3.0 * m_rhosu * m_pi * m_eci * m_eci *
924 m_cons18 = m_rhosn * m_rhosn;
925 m_cons19 = m_rhow * m_rhow;
926 m_cons20 = 20.0 * m_pi * m_pi * m_rhow * m_bimm;
927 m_cons21 = 4.0 / (m_dcs * m_rhoi);
928 m_cons22 = m_pi * m_rhoi * std::pow(m_dcs, 3) / 6.0;
931 m_cons25 = m_pi * m_pi / 24.0 * m_rhow * m_ecr *
gamma_function(m_br + 6.0);
932 m_cons26 = m_pi / 6.0 * m_rhow;
935 m_cons29 = 4.0/3.0 * m_pi * m_rhow * std::pow(25.0E-6, 3);
936 m_cons30 = 4.0/3.0 * m_pi * m_rhow;
937 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
938 m_cons32 = m_pi / 2.0 * m_ecr;
939 m_cons33 = m_pi * m_pi * m_ecr * m_rhog;
940 m_cons34 = 5.0/2.0 + m_br/2.0;
941 m_cons35 = 5.0/2.0 + m_bs/2.0;
942 m_cons36 = 5.0/2.0 + m_bg/2.0;
943 m_cons37 = 4.0 * m_pi * 1.38E-23 / (6.0 * m_pi * m_rin);
944 m_cons38 = m_pi * m_pi / 3.0 * m_rhow;
945 m_cons39 = m_pi * m_pi / 36.0 * m_rhow * m_bimm;
946 m_cons40 = m_pi / 6.0 * m_bimm;
947 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
968 m_bact = m_vi * m_osm * m_epsm * m_mw * m_rhoa / (m_map * m_rhow);
975 m_f11 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig1), 2));
976 m_f21 = 1.0 + 0.25 * std::log(m_sig1);
982 m_f12 = 0.5 * std::exp(2.5 * std::pow(std::log(m_sig2), 2));
983 m_f22 = 1.0 + 0.25 * std::log(m_sig2);
997 m_do_radar_ref =
false;
998 amrex::Box boxD(box); boxD.makeSlab(2,0);
1000 ParmParse
pp(
"erf");
1002 bool run_morr_cpp =
true;
1004 bool use_morr_cpp_answer =
true;
1005 pp.query(
"use_morr_cpp_answer", use_morr_cpp_answer);
1006 Print() <<
"use_morr_cpp_answer" << use_morr_cpp_answer <<std::endl;
1008 bool run_morr_fort = !use_morr_cpp_answer;
1010 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
1016 morr_fab.template setVal<RunOn::Device>(0.0);
1017 auto const& morr_arr = morr_fab.array();
1024 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
1036 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
1047 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
1053 for(
int k=klo; k<=khi; k++) {
1059 [[maybe_unused]] amrex::Real nsubc;
1083 amrex::Real npsacws;
1085 amrex::Real npsacwi;
1094 [[maybe_unused]] amrex::Real pccn;
1118 amrex::Real npsacwg;
1126 amrex::Real nmultrg;
1128 amrex::Real qmultrg;
1139 amrex::Real sc_schmidt;
1146 [[maybe_unused]] amrex::Real dum2;
1150 [[maybe_unused]] amrex::Real dumqsi;
1163 [[maybe_unused]] amrex::Real dc0;
1167 [[maybe_unused]] amrex::Real dumqr;
1169 amrex::Real sum_dep;
1172 [[maybe_unused]] amrex::Real c2prec;
1173 [[maybe_unused]] amrex::Real csed;
1174 [[maybe_unused]] amrex::Real ised;
1175 [[maybe_unused]] amrex::Real ssed;
1176 [[maybe_unused]] amrex::Real gsed;
1177 [[maybe_unused]] amrex::Real rsed;
1178 [[maybe_unused]] amrex::Real tqimelt;
1197 const amrex::Real CP = 1004.5;
1224 const double CI = 800.0;
1234 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));
1238 dum = morr_arr(i,j,k,
MORRInd::qicu1d) * dt / (CI * std::pow(80.0e-6, di0));
1247 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);
1252 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);
1259 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);
1264 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);
1269 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);
1278 const amrex::Real QSMALL = m_qsmall;
1313 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);
1316 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
1332 bool skipMicrophysics =
false;
1333 bool skipConcentrations =
false;
1334 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) {
1335 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)) {
1336 skipMicrophysics =
true;
1340 if(!skipMicrophysics) {
1353 dum = (m_Rv * std::pow(morr_arr(i,j,k,
MORRInd::t3d),2));
1377 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);
1385 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);
1390 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) {
1391 skipConcentrations=
true;
1393 if(!skipConcentrations) {
1405 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);
1411 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);
1415 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);
1436 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);
1439 amrex::Real lambda_min = (morr_arr(i,j,k,
MORRInd::pgam) + 1.0)/60.0e-6;
1440 amrex::Real lambda_max = (morr_arr(i,j,k,
MORRInd::pgam) + 1.0)/1.0e-6;
1447 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1452 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1456 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;
1462 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);
1470 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;
1474 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;
1482 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);
1490 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;
1494 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;
1536 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
1541 nprc1 = prc / m_cons29;
1546 nprc1 = std::min(nprc1, nprc);
1560 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1561 ums_local = std::min(ums_local, 1.2*dum);
1562 uns_local = std::min(uns_local, 1.2*dum);
1563 umr_local = std::min(umr_local, 9.1*dum);
1564 unr_local = std::min(unr_local, 9.1*dum);
1571 pracs = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*ums_local, 2) +
1572 0.08*ums_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1573 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0s) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1591 dum = std::pow(m_rhosu/morr_arr(i,j,k,
MORRInd::rho), 0.54);
1592 umg_local = std::min(umg_local, 20.0*dum);
1593 ung_local = std::min(ung_local, 20.0*dum);
1594 umr_local = std::min(umr_local, 9.1*dum);
1595 unr_local = std::min(unr_local, 9.1*dum);
1598 pracg = m_cons41 * (std::sqrt(std::pow(1.2*umr_local-0.95*umg_local, 2) +
1599 0.08*umg_local*umr_local) * morr_arr(i,j,k,
MORRInd::rho) *
1600 morr_arr(i,j,k,
MORRInd::n0r) * morr_arr(i,j,k,
MORRInd::n0g) / std::pow(morr_arr(i,j,k,
MORRInd::lamr), 3) *
1608 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(1.7*std::pow(unr_local-ung_local, 2) +
1615 npracg = npracg - dum;
1625 pra = 67.0 * std::pow(dum, 1.15);
1640 dum = 2.0 - std::exp(2300.0 * (1.0/morr_arr(i,j,k,
MORRInd::lamr) - dum1));
1649 std::pow(sc_schmidt, 1.0/3.0) * m_cons9 /
1657 pre = std::min(pre, 0.0);
1674 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1682 std::pow(sc_schmidt, 1.0/3.0) * m_cons10 /
1687 evpms = std::max(evpms, psmlt);
1688 psmlt = psmlt - evpms;
1705 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1713 std::pow(sc_schmidt, 1.0/3.0) * m_cons11 /
1718 evpmg = std::max(evpmg, pgmlt);
1719 pgmlt = pgmlt - evpmg;
1730 dum = (prc + pra) * dt;
1739 dum = (-psmlt - evpms + pracs) * dt;
1744 psmlt = psmlt * ratio;
1745 evpms = evpms * ratio;
1746 pracs = pracs * ratio;
1750 dum = (-pgmlt - evpmg + pracg) * dt;
1755 pgmlt = pgmlt * ratio;
1756 evpmg = evpmg * ratio;
1757 pracg = pracg * ratio;
1763 dum = (-pracs - pracg - pre - pra - prc + psmlt + pgmlt) * dt;
1766 ratio = (morr_arr(i,j,k,
MORRInd::qr3d)/dt + pracs + pracg + pra + prc - psmlt - pgmlt) / (-pre);
1791 dum = std::max(-1.0, dum);
1795 if (evpms + psmlt < 0.0) {
1797 dum = std::max(-1.0, dum);
1803 dum = std::max(-1.0, dum);
1807 if (evpmg + pgmlt < 0.0) {
1809 dum = std::max(-1.0, dum);
1815 dum = std::max(-1.0, dum);
1832 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1834 dumqc = std::max(dumqc, 0.0);
1837 dums = dumqv - dumqss;
1838 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;
1839 if (pcc * dt + dumqc < 0.0) {
1871 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);
1876 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);
1880 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);
1884 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);
1905 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);
1908 amrex::Real lambda_min = (morr_arr(i,j,k,
MORRInd::pgam) + 1.0)/60.0e-6;
1909 amrex::Real lambda_max = (morr_arr(i,j,k,
MORRInd::pgam) + 1.0)/1.0e-6;
1916 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1921 log(gamma_pgam_plus_1) - log(gamma_pgam_plus_4))/ m_cons26;
1931 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);
1939 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;
1943 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;
1951 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);
1960 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;
1966 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;
1974 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);
1982 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;
1986 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;
2060 amrex::Real nacnt = std::exp(-2.80 + 0.262 * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) * 1000.0;
2067 amrex::Real dap = m_cons37 * morr_arr(i,j,k,
MORRInd::t3d) * (1.0 + dum / m_rin) / morr_arr(i,j,k,
MORRInd::mu);
2070 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
2077 mnuccc = mnuccc + m_cons39 *
2079 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2083 (std::exp(m_aimm * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) - 1.0);
2087 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
2100 prc = 1350.0 * std::pow(morr_arr(i,j,k,
MORRInd::qc3d), 2.47) *
2105 nprc1 = prc / m_cons29;
2110 nprc1 = std::min(nprc1, nprc);
2117 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);
2168 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2169 ums_local = std::min(ums_local, 1.2 * dum);
2170 uns_local = std::min(uns_local, 1.2 * dum);
2171 umr_local = std::min(umr_local, 9.1 * dum);
2172 unr_local = std::min(unr_local, 9.1 * dum);
2174 pracs = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2176 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)) +
2180 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - uns_local, 2) +
2189 pracs = std::min(pracs, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2195 psacr = m_cons31 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * ums_local, 2) +
2197 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)) +
2213 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
2214 umg_local = std::min(umg_local, 20.0 * dum);
2215 ung_local = std::min(ung_local, 20.0 * dum);
2216 umr_local = std::min(umr_local, 9.1 * dum);
2217 unr_local = std::min(unr_local, 9.1 * dum);
2219 pracg = m_cons41 * (std::sqrt(std::pow(1.2 * umr_local - 0.95 * umg_local, 2) +
2221 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)) +
2225 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(1.7 * std::pow(unr_local - ung_local, 2) +
2234 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
2246 if (psacws > 0.0 || pracs > 0.0) {
2248 amrex::Real fmult = 0.0;
2263 nmults = 35.0e4 * psacws * fmult * 1000.0;
2264 qmults = nmults * m_mmult;
2268 qmults = std::min(qmults, psacws);
2269 psacws = psacws - qmults;
2274 nmultr = 35.0e4 * pracs * fmult * 1000.0;
2275 qmultr = nmultr * m_mmult;
2279 qmultr = std::min(qmultr, pracs);
2280 pracs = pracs - qmultr;
2295 if (psacwg > 0.0 || pracg > 0.0) {
2297 amrex::Real fmult = 0.0;
2312 nmultg = 35.0e4 * psacwg * fmult * 1000.0;
2313 qmultg = nmultg * m_mmult;
2317 qmultg = std::min(qmultg, psacwg);
2318 psacwg = psacwg - qmultg;
2323 nmultrg = 35.0e4 * pracg * fmult * 1000.0;
2324 qmultrg = nmultrg * m_mmult;
2328 qmultrg = std::min(qmultrg, pracg);
2329 pracg = pracg - qmultrg;
2341 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) *
2346 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw, 0.0);
2351 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2354 psacws = psacws - pgsacw;
2366 dum = std::min(dum, 1.0);
2367 dum = std::max(dum, 0.0);
2369 pgracs = (1.0 - dum) * pracs;
2370 ngracs = (1.0 - dum) * npracs;
2373 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2374 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2377 pracs = pracs - pgracs;
2378 npracs = npracs - ngracs;
2381 psacr = psacr * (1.0 - dum);
2390 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) /
2393 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) /
2397 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2407 pra = 67.0 * std::pow(dum, 1.15);
2421 dum = 2.0 - std::exp(2300.0 * (1.0 / morr_arr(i,j,k,
MORRInd::lamr) - dum1));
2430 if (morr_arr(i,j,k,
MORRInd::qi3d) >= 1.0e-8 && qvqvsi >= 1.0) {
2433 prci = m_cons22 * nprci;
2434 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2441 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) /
2446 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2459 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);
2462 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2463 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2468 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);
2471 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2472 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2479 if ((qvqvs >= 0.999 && morr_arr(i,j,k,
MORRInd::t3d) <= 265.15) || qvqvsi >= 1.08) {
2481 kc2 = 0.005 * std::exp(0.304 * (273.15 - morr_arr(i,j,k,
MORRInd::t3d))) * 1000.0;
2483 kc2 = std::min(kc2, 500.0e3);
2484 kc2 = std::max(kc2 / morr_arr(i,j,k,
MORRInd::rho), 0.0);
2488 mnuccd = nnuccd * m_mi0;
2491 }
else if (m_inuc == 1) {
2492 if (morr_arr(i,j,k,
MORRInd::t3d) < 273.15 && qvqvsi > 1.0) {
2496 mnuccd = nnuccd * m_mi0;
2505 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));
2513 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) *
2514 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons10 /
2523 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) *
2524 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons11 /
2533 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) *
2534 std::pow(sc_schmidt, (1.0 / 3.0)) * m_cons9 /
2543 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2551 epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2554 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (1.0 - dum);
2563 pre = std::min(pre, 0.0);
2573 sum_dep = prd + prds + mnuccd + prdg;
2575 if ((dum > 0.0 && sum_dep > dum * fudgef) ||
2576 (dum < 0.0 && sum_dep < dum * fudgef)) {
2577 mnuccd = fudgef * mnuccd * dum / sum_dep;
2578 prd = fudgef * prd * dum / sum_dep;
2579 prds = fudgef * prds * dum / sum_dep;
2580 prdg = fudgef * prdg * dum / sum_dep;
2620 if (m_igraup == 1) {
2637 piacrs = piacrs + piacr;
2641 pracis = pracis + praci;
2643 psacws = psacws + pgsacw;
2645 pracs = pracs + pgracs;
2650 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2657 mnuccc = mnuccc * ratio;
2658 psacws = psacws * ratio;
2659 psacwi = psacwi * ratio;
2660 qmults = qmults * ratio;
2661 qmultg = qmultg * ratio;
2662 psacwg = psacwg * ratio;
2663 pgsacw = pgsacw * ratio;
2667 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2668 - mnuccd + praci + pracis - eprd - psacwi) * dt;
2671 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2673 (prci + prai + praci + pracis - eprd);
2675 prci = prci * ratio;
2676 prai = prai * ratio;
2677 praci = praci * ratio;
2678 pracis = pracis * ratio;
2679 eprd = eprd * ratio;
2683 dum = ((pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2684 piacr + piacrs + pgracs + pracg) * dt;
2688 (-pre + qmultr + qmultrg + pracs + mnuccr + piacr + piacrs + pgracs + pracg);
2691 pracs = pracs * ratio;
2692 qmultr = qmultr * ratio;
2693 qmultrg = qmultrg * ratio;
2694 mnuccr = mnuccr * ratio;
2695 piacr = piacr * ratio;
2696 piacrs = piacrs * ratio;
2697 pgracs = pgracs * ratio;
2698 pracg = pracg * ratio;
2702 if (m_igraup == 0) {
2703 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis) * dt;
2706 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis) /
2709 eprds = eprds * ratio;
2710 psacr = psacr * ratio;
2712 }
else if (m_igraup == 1) {
2714 dum = (-prds - psacws - prai - prci - pracs - eprds + psacr - piacrs - pracis - mnuccr) * dt;
2717 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci + pracs + piacrs + pracis + mnuccr) /
2720 eprds = eprds * ratio;
2721 psacr = psacr * ratio;
2726 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg - piacr - praci - psacr) * dt;
2729 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr + psacr +
2730 piacr + praci) / (-eprdg);
2732 eprdg = eprdg * ratio;
2740 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2741 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg + pracs +
2745 (-pra - prc - mnuccc + pcc -
2746 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2749 (prd + eprd + psacwi + mnuccc - prci -
2750 prai + qmults + qmultg + qmultr + qmultrg + mnuccd - praci - pracis);
2753 (pre + pra + prc - pracs - mnuccr - qmultr - qmultrg -
2754 piacr - piacrs - pracg - pgracs);
2755 if (m_igraup == 0) {
2757 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis);
2762 prdg + eprdg + mnuccr + piacr + praci + psacr);
2765 }
else if (m_igraup == 1) {
2768 (prai + psacws + prds + pracs + prci + eprds - psacr + piacrs + pracis + mnuccr);
2774 npra - nprc - npsacwi - npsacwg);
2777 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2778 nnuccd - niacr - niacrs);
2781 nragg - niacr - niacrs - npracg - ngracs);
2784 c2prec = pra + prc + psacws + qmults + qmultg + psacwg +
2785 pgsacw + mnuccc + psacwi;
2794 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2797 dumqc = std::max(dumqc, 0.0);
2800 dums = dumqv - dumqss;
2802 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;
2804 if (pcc * dt + dumqc < 0.0) {
2809 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);
2816 dum = std::max(-1.0, dum);
2822 dum = std::max(-1.0, dum);
2828 dum = std::max(-1.0, dum);
2834 dum = std::max(-1.0, dum);
2849 for(
int k=klo; k<=khi; k++) {
2865 for(
int k=khi; k>=klo; k--) {
2905 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);
2912 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);
2935 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);
2942 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);
2961 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);
2962 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);
2970 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);
2971 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);
2979 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);
2980 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);
2988 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);
2989 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);
2997 dum = std::pow(m_rhosu / morr_arr(i,j,k,
MORRInd::rho), 0.54);
3003 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));
3004 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));
3056 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),
3057 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),
3075 for (
int n = 1; n <= nstep; n++) {
3077 for (
int k = klo; k <= khi; k++) {
3106 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);
3107 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);
3108 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);
3109 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);
3110 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);
3111 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);
3112 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);
3113 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);
3114 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);
3115 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);
3130 for (k = khi-1; k >= klo; k--) {
3132 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);
3133 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);
3134 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);
3135 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);
3136 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);
3137 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);
3138 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);
3139 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);
3140 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);
3141 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);
3144 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);
3145 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);
3146 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);
3147 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);
3148 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);
3149 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);
3150 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);
3151 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);
3152 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);
3153 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);
3170 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) +
3172 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;
3178 for(
int k=klo; k<=khi; k++) {
3196 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);
3197 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);
3212 if (m_igraup == 0) {
3242 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);
3247 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);
3254 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);
3259 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);
3264 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);
3313 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);
3319 if ((m_iliq != 1)) {
3324 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);
3330 if (m_igraup == 0) {
3333 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);
3338 }
else if (m_igraup == 1) {
3341 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);
3362 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);
3367 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;
3371 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;
3378 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);
3384 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);
3388 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr), 4) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
3408 amrex::Real lammin = (morr_arr(i,j,k,
MORRInd::pgam) + 1.0) / 60.0e-6;
3409 amrex::Real lammax = (morr_arr(i,j,k,
MORRInd::pgam) + 1.0) / 1.0e-6;
3424 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);
3430 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;
3434 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;
3441 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);
3447 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;
3451 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;
3478 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;
3495 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));
3498 if (iinum == 0 && m_iact == 2) {
3499 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));
3514 if(use_morr_cpp_answer) {
3515 for(
int k=klo; k<=khi; k++) {
3529 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3545 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3546 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3547 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3553 amrex::Print()<<
"fortran should run "<<run_morr_fort<<std::endl;
3556 #ifdef ERF_USE_MORR_FORT
3562 theta_arr.dataPtr(),
3582 rain_accum_arr.dataPtr(),
3583 rainncv_arr.dataPtr(),
3585 snow_accum_arr.dataPtr(),
3586 snowncv_arr.dataPtr(),
3587 graup_accum_arr.dataPtr(),
3588 graupelncv_arr.dataPtr(),
3591 dummy_reflectivity_ptr,
3606 ilo, ihi, jlo, jhi, klo, khi,
3607 ilom, ihim, jlom, jhim, klom, khim,
3608 ilo, ihi, jlo, jhi, klo, khi,
3612 rainprod_arr.dataPtr(),
3613 evapprod_arr.dataPtr(),
3614 qlsink_arr.dataPtr(),
3615 precr_arr.dataPtr(),
3616 preci_arr.dataPtr(),
3617 precs_arr.dataPtr(),
3621 amrex::Abort(
"Trying to run fortran without compiling with USE_MORR_FORT=TRUE");
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_saturation_vapor_pressure(const amrex::Real T, const int type)
Definition: ERF_AdvanceMorrison.cpp:448
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real gamma_function(Real x)
Definition: ERF_AdvanceMorrison.cpp:435
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:230
void mp_morr_two_moment_c(int itimestep, double *th, double *qv, double *qc, double *qr, double *qi, double *qs, double *qg, double *ni, double *ns, double *nr, double *ng, double *rho, double *pii, double *p, double dt_in, double *dz, double *w, double *rainnc, double *rainncv, double *sr, double *snownc, double *snowncv, double *graupelnc, double *graupelncv, double *refl_10cm, bool diagflag, int do_radar_ref, double *qrcuten, double *qscuten, double *qicuten, bool f_qndrop, double *qndrop, double *ht, int ids, int ide, int jds, int jde, int kds, int kde, int ims, int ime, int jms, int jme, int kms, int kme, int its, int ite, int jts, int jte, int kts, int kte, bool wetscav_on, double *rainprod, double *evapprod, double *qlsink, double *precr, double *preci, double *precs, double *precg)
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11
amrex::Geometry m_geom
Definition: ERF_Morrison.H:278
int m_axis
Definition: ERF_Morrison.H:287
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:294
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:301
@ 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:848