184 Real dt = dt_advance;
188 bool use_morr_cpp_answer =
true;
189 pp.queryAdd(
"use_morr_cpp_answer", use_morr_cpp_answer);
192 bool run_morr_cpp = use_morr_cpp_answer;
193 bool run_morr_fort = !run_morr_cpp;
195 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
200 pp.queryAdd(
"morrison_ndcnst", m_ndcnst);
208 const IntVect morr_tile_size = run_morr_fort ? IntVect::TheZeroVector() :
TileNoZ();
211 auto box = mfi.tilebox();
246 const int ilo = box.loVect()[0];
247 const int ihi = box.hiVect()[0];
248 const int jlo = box.loVect()[1];
249 const int jhi = box.hiVect()[1];
250 const int klo = box.loVect()[2];
251 const int khi = box.hiVect()[2];
253 Box grown_box(box); grown_box.grow(3);
262 const Box& fab_box = mfi.fabbox();
264 #if defined(ERF_USE_MORR_FORT) && defined(AMREX_USE_GPU)
273 auto const& pii_arr = pii_fab.array();
280 ParallelFor(fab_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
283 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
288 auto const& dz_arr = dz_fab.array();
295 ParallelFor(fab_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
296 dz_arr(i,j,k) = (z_arr) ?
Real(0.25) * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
297 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
298 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
299 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz_val;
304 Box fab_boxD(fab_box); fab_boxD.makeSlab(2,0);
307 FArrayBox rainncv_fab(fab_boxD, 1,
Arena_Used);
309 FArrayBox snowncv_fab(fab_boxD, 1,
Arena_Used);
310 FArrayBox graupelncv_fab(fab_boxD, 1,
Arena_Used);
312 auto const& rainncv_arr = rainncv_fab.array();
313 auto const& sr_arr = sr_fab.array();
314 auto const& snowncv_arr = snowncv_fab.array();
315 auto const& graupelncv_arr = graupelncv_fab.array();
318 ParallelFor(fab_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
319 rainncv_arr(i,j,k) =
Real(0);
320 sr_arr(i,j,k) =
Real(0);
321 snowncv_arr(i,j,k) =
Real(0);
322 graupelncv_arr(i,j,k) =
Real(0);
326 FArrayBox ht_fab(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), 1,
Arena_Used);
327 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
402 Real m_lammaxi, m_lammini;
403 Real m_lammaxr, m_lamminr;
404 Real m_lammaxs, m_lammins;
405 Real m_lammaxg, m_lamming;
433 Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
434 Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
435 Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
436 Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
437 Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
438 Real m_cons26, m_cons27, m_cons28, m_cons29;
439 Real m_cons31, m_cons32, m_cons34, m_cons35;
440 Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
450 m_pi =
Real(3.1415926535897932384626434);
457 m_ep_2 = m_Rd / m_Rv;
463 m_rhow =
Real(997.0);
464 m_rhoi =
Real(500.0);
465 m_rhosn =
Real(100.0);
469 m_rhog =
Real(400.0);
471 m_rhog =
Real(900.0);
488 m_ar =
Real(841.99667);
504 m_bimm =
Real(100.0);
506 m_dcs =
Real(125.0E-6);
507 m_mi0 =
Real(4.0)/
three*m_pi*m_rhoi*amrex::Math::powi<3>(
Real(10.0E-6));
508 m_mg0 =
Real(1.6E-10);
517 m_qsmall =
Real(1.0E-14);
524 m_cpw =
Real(4187.0);
527 m_ci = m_rhoi * m_pi /
Real(6.0);
529 m_cs = m_rhosn * m_pi /
Real(6.0);
531 m_cg = m_rhog * m_pi /
Real(6.0);
535 m_rin =
Real(0.1E-6);
538 m_mmult =
Real(4.0)/
three*m_pi*m_rhoi*amrex::Math::powi<3>(
Real(5.0E-6));
545 m_lamminr =
one/
Real(2800.0E-6);
547 m_lammins =
one/
Real(2000.0E-6);
549 m_lamming =
one/
Real(2000.0E-6);
577 m_nanew1 =
Real(72.2E6);
584 m_nanew2 =
Real(1.8E6);
604 m_cons15 = -
Real(1108.0) * m_eii * std::pow(m_pi, (
one-m_bs)/
three) *
607 m_cons17 =
Real(4.0) *
Real(2) *
three * m_rhosu * m_pi * m_eci * m_eci *
609 m_cons18 = m_rhosn * m_rhosn;
610 m_cons19 = m_rhow * m_rhow;
611 m_cons20 =
Real(20.0) * m_pi * m_pi * m_rhow * m_bimm;
612 m_cons21 =
Real(4.0) / (m_dcs * m_rhoi);
613 m_cons22 = m_pi * m_rhoi * amrex::Math::powi<3>(m_dcs) /
Real(6.0);
617 m_cons26 = m_pi /
Real(6.0) * m_rhow;
620 m_cons29 =
Real(4.0)/
three * m_pi * m_rhow * amrex::Math::powi<3>(
Real(25.0E-6));
621 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
622 m_cons32 = m_pi /
Real(2) * m_ecr;
626 m_cons37 =
Real(4.0) * m_pi *
Real(1.38E-23) / (
Real(6.0) * m_pi * m_rin);
627 m_cons38 = m_pi * m_pi /
three * m_rhow;
628 m_cons39 = m_pi * m_pi /
Real(36.0) * m_rhow * m_bimm;
629 m_cons40 = m_pi /
Real(6.0) * m_bimm;
630 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
657 m_nanew1 =
Real(72.2E6);
664 m_nanew2 =
Real(1.8E6);
681 Box boxD(box); boxD.makeSlab(2,0);
687 morr_fab.template setVal<RunOn::Device>(0);
688 auto const& morr_arr = morr_fab.array();
695 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
710 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
723 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
729 for (
int k=klo; k<=
khi; k++) {
918 if (qvqvs <
Real(0.9)) {
921 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);
926 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);
930 if (qvqvsi <
Real(0.9)) {
933 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);
938 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);
943 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);
952 const Real QSMALL = m_qsmall;
987 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));
1006 bool skipMicrophysics =
false;
1007 bool skipConcentrations =
false;
1008 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) {
1010 skipMicrophysics =
true;
1014 if(!skipMicrophysics) {
1027 dum = (m_Rv * amrex::Math::powi<2>(morr_arr(i,j,k,
MORRInd::t3d)));
1043 ndcnst_to_number_mixing_ratio(m_ndcnst,
rho_arr(i,j,k));
1051 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);
1059 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);
1064 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)) {
1065 skipConcentrations=
true;
1067 if(!skipConcentrations) {
1079 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);
1085 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1089 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1110 morr_arr(i,j,k,
MORRInd::lamc) = std::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);
1121 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1126 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1136 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/ds0);
1144 morr_arr(i,j,k,
MORRInd::n0s) = std::pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1148 morr_arr(i,j,k,
MORRInd::n0s) = std::pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1156 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/dg0);
1164 morr_arr(i,j,k,
MORRInd::n0g) = std::pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1168 morr_arr(i,j,k,
MORRInd::n0g) = std::pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1215 nprc1 = prc / m_cons29;
1220 nprc1 = std::min(nprc1, nprc);
1235 ums_local = std::min(ums_local,
Real(1.2)*dum);
1236 uns_local = std::min(uns_local,
Real(1.2)*dum);
1237 umr_local = std::min(umr_local,
Real(9.1)*dum);
1238 unr_local = std::min(unr_local,
Real(9.1)*dum);
1245 pracs = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2)*umr_local-
Real(0.95)*ums_local) +
1266 umg_local = std::min(umg_local,
Real(20.0)*dum);
1267 ung_local = std::min(ung_local,
Real(20.0)*dum);
1268 umr_local = std::min(umr_local,
Real(9.1)*dum);
1269 unr_local = std::min(unr_local,
Real(9.1)*dum);
1272 pracg = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2)*umr_local-
Real(0.95)*umg_local) +
1280 dum = pracg/
Real(5.2e-7);
1282 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(
Real(1.7)*amrex::Math::powi<2>(unr_local-ung_local) +
1289 npracg = npracg - dum;
1299 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
1310 dum1 =
Real(300.0e-6);
1323 std::pow(sc_schmidt,
one/
three) * m_cons9 /
1331 pre = std::min(pre,
Real(0));
1348 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1356 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1361 evpms = std::max(evpms,
psmlt);
1379 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1387 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1392 evpmg = std::max(evpmg,
pgmlt);
1404 dum = (prc + pra) * dt;
1419 evpms = evpms * ratio;
1424 dum = (-
pgmlt - evpmg + pracg) * dt;
1430 evpmg = evpmg * ratio;
1431 pracg = pracg * ratio;
1463 if (pre <
Real(0)) {
1465 dum = std::max(-
one, dum);
1471 dum = std::max(-
one, dum);
1477 dum = std::max(-
one, dum);
1483 dum = std::max(-
one, dum);
1489 dum = std::max(-
one, dum);
1507 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1509 dumqc = std::max(dumqc,
Real(0));
1512 dums = dumqv - dumqss;
1513 pcc = dums / (
one + amrex::Math::powi<2>(morr_arr(i,j,k,
MORRInd::xxlv)) * dumqss / (morr_arr(i,j,k,
MORRInd::cpm) * m_Rv * amrex::Math::powi<2>(dumt))) / dt;
1514 if (pcc * dt + dumqc <
Real(0)) {
1532 ndcnst_to_number_mixing_ratio(m_ndcnst,
rho_arr(i,j,k));
1547 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);
1552 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1556 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1560 morr_arr(i,j,k,
MORRInd::n0r) = std::pow(morr_arr(i,j,k,
MORRInd::lamr),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qr3d) / (m_pi * m_rhow);
1581 morr_arr(i,j,k,
MORRInd::lamc) = std::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);
1592 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1597 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1607 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/ds0);
1615 morr_arr(i,j,k,
MORRInd::n0s) = std::pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1619 morr_arr(i,j,k,
MORRInd::n0s) = std::pow(morr_arr(i,j,k,
MORRInd::lams),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qni3d) / m_cons1;
1627 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/
three);
1636 morr_arr(i,j,k,
MORRInd::n0i) = std::pow(morr_arr(i,j,k,
MORRInd::lami),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
1642 morr_arr(i,j,k,
MORRInd::n0i) = std::pow(morr_arr(i,j,k,
MORRInd::lami),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qi3d) / m_cons12;
1650 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/dg0);
1658 morr_arr(i,j,k,
MORRInd::n0g) = std::pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1662 morr_arr(i,j,k,
MORRInd::n0g) = std::pow(morr_arr(i,j,k,
MORRInd::lamg),
Real(4.0)) * morr_arr(i,j,k,
MORRInd::qg3d) / m_cons2;
1746 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
1753 mnuccc = mnuccc + m_cons39 *
1763 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
1781 nprc1 = prc / m_cons29;
1786 nprc1 = std::min(nprc1, nprc);
1793 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);
1845 ums_local = std::min(ums_local,
Real(1.2) * dum);
1846 uns_local = std::min(uns_local,
Real(1.2) * dum);
1847 umr_local = std::min(umr_local,
Real(9.1) * dum);
1848 unr_local = std::min(unr_local,
Real(9.1) * dum);
1850 pracs = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * ums_local) +
1856 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * amrex::Math::powi<2>(unr_local - uns_local) +
1871 psacr = m_cons31 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * ums_local) +
1890 umg_local = std::min(umg_local,
Real(20.0) * dum);
1891 ung_local = std::min(ung_local,
Real(20.0) * dum);
1892 umr_local = std::min(umr_local,
Real(9.1) * dum);
1893 unr_local = std::min(unr_local,
Real(9.1) * dum);
1895 pracg = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * umg_local) +
1901 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * amrex::Math::powi<2>(unr_local - ung_local) +
1910 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
1938 if (psacws >
Real(0)) {
1939 nmults =
Real(35.0e4) * psacws * fmult *
Real(1000.0);
1940 qmults = nmults * m_mmult;
1944 qmults = std::min(qmults, psacws);
1945 psacws = psacws - qmults;
1951 qmultr = nmultr * m_mmult;
1955 qmultr = std::min(qmultr,
pracs);
1971 if (psacwg >
Real(0) || pracg >
Real(0)) {
1987 if (psacwg >
Real(0)) {
1988 nmultg =
Real(35.0e4) * psacwg * fmult *
Real(1000.0);
1989 qmultg = nmultg * m_mmult;
1993 qmultg = std::min(qmultg, psacwg);
1994 psacwg = psacwg - qmultg;
1998 if (pracg >
Real(0)) {
1999 nmultrg =
Real(35.0e4) * pracg * fmult *
Real(1000.0);
2000 qmultrg = nmultrg * m_mmult;
2004 qmultrg = std::min(qmultrg, pracg);
2005 pracg = pracg - qmultrg;
2013 if (psacws >
Real(0)) {
2017 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) *
2022 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw,
Real(0));
2027 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2030 psacws = psacws - pgsacw;
2042 dum = std::min(dum,
Real(1));
2043 dum = std::max(dum,
Real(0));
2046 ngracs = (
one - dum) * npracs;
2049 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2050 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2054 npracs = npracs - ngracs;
2073 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2083 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
2093 dum1 =
Real(300.0e-6);
2109 prci = m_cons22 * nprci;
2110 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2117 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) /
2122 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2135 std::pow(morr_arr(i,j,k,
MORRInd::lamr), (m_br +
three)) / amrex::Math::powi<3>(morr_arr(i,j,k,
MORRInd::lamr)) * morr_arr(i,j,k,
MORRInd::rho);
2138 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2139 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2144 std::pow(morr_arr(i,j,k,
MORRInd::lamr), (m_br +
three)) / amrex::Math::powi<3>(morr_arr(i,j,k,
MORRInd::lamr)) * morr_arr(i,j,k,
MORRInd::rho);
2147 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2148 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2159 kc2 = std::min(kc2,
Real(500.0e3));
2164 mnuccd = nnuccd * m_mi0;
2167 }
else if (m_inuc == 1) {
2172 mnuccd = nnuccd * m_mi0;
2181 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));
2189 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) *
2190 std::pow(sc_schmidt, (
one /
three)) * m_cons10 /
2199 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) *
2200 std::pow(sc_schmidt, (
one /
three)) * m_cons11 /
2209 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) *
2210 std::pow(sc_schmidt, (
one /
three)) * m_cons9 /
2219 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2230 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (
one - dum);
2239 pre = std::min(pre,
Real(0));
2248 fudgef =
Real(0.9999);
2249 sum_dep = prd + prds + mnuccd + prdg;
2251 if ((dum >
Real(0) && sum_dep > dum * fudgef) ||
2252 (dum <
Real(0) && sum_dep < dum * fudgef)) {
2253 mnuccd = fudgef * mnuccd * dum / sum_dep;
2254 prd = fudgef * prd * dum / sum_dep;
2255 prds = fudgef * prds * dum / sum_dep;
2256 prdg = fudgef * prdg * dum / sum_dep;
2260 if (prd <
Real(0)) {
2264 if (prds <
Real(0)) {
2268 if (prdg <
Real(0)) {
2296 if (m_igraup == 1) {
2313 piacrs = piacrs +
piacr;
2317 pracis = pracis +
praci;
2319 psacws = psacws + pgsacw;
2326 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2333 mnuccc = mnuccc * ratio;
2334 psacws = psacws * ratio;
2335 psacwi = psacwi * ratio;
2336 qmults = qmults * ratio;
2337 qmultg = qmultg * ratio;
2338 psacwg = psacwg * ratio;
2339 pgsacw = pgsacw * ratio;
2343 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2344 - mnuccd +
praci + pracis - eprd - psacwi) * dt;
2347 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2349 (prci + prai +
praci + pracis - eprd);
2351 prci = prci * ratio;
2352 prai = prai * ratio;
2354 pracis = pracis * ratio;
2355 eprd = eprd * ratio;
2359 dum = ((
pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2360 piacr + piacrs + pgracs + pracg) * dt;
2364 (-pre + qmultr + qmultrg +
pracs + mnuccr +
piacr + piacrs + pgracs + pracg);
2368 qmultr = qmultr * ratio;
2369 qmultrg = qmultrg * ratio;
2370 mnuccr = mnuccr * ratio;
2372 piacrs = piacrs * ratio;
2373 pgracs = pgracs * ratio;
2374 pracg = pracg * ratio;
2378 if (m_igraup == 0) {
2379 dum = (-prds - psacws - prai - prci -
pracs - eprds +
psacr - piacrs - pracis) * dt;
2382 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci +
pracs + piacrs + pracis) /
2385 eprds = eprds * ratio;
2388 }
else if (m_igraup == 1) {
2390 dum = (-prds - psacws - prai - prci -
pracs - eprds +
psacr - piacrs - pracis - mnuccr) * dt;
2393 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci +
pracs + piacrs + pracis + mnuccr) /
2396 eprds = eprds * ratio;
2402 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg -
piacr -
praci -
psacr) * dt;
2405 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr +
psacr +
2408 eprdg = eprdg * ratio;
2416 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2417 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg +
pracs +
2421 (-pra - prc - mnuccc + pcc -
2422 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2425 (prd + eprd + psacwi + mnuccc - prci -
2426 prai + qmults + qmultg + qmultr + qmultrg + mnuccd -
praci - pracis);
2429 (pre + pra + prc -
pracs - mnuccr - qmultr - qmultrg -
2430 piacr - piacrs - pracg - pgracs);
2431 if (m_igraup == 0) {
2433 (prai + psacws + prds +
pracs + prci + eprds -
psacr + piacrs + pracis);
2441 }
else if (m_igraup == 1) {
2444 (prai + psacws + prds +
pracs + prci + eprds -
psacr + piacrs + pracis + mnuccr);
2450 npra - nprc - npsacwi - npsacwg);
2453 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2454 nnuccd - niacr - niacrs);
2457 nragg - niacr - niacrs - npracg - ngracs);
2470 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2473 dumqc = std::max(dumqc,
Real(0));
2476 dums = dumqv - dumqss;
2478 pcc = dums / (
one + amrex::Math::powi<2>(morr_arr(i,j,k,
MORRInd::xxlv)) * dumqss / (morr_arr(i,j,k,
MORRInd::cpm) * m_Rv * amrex::Math::powi<2>(dumt))) / dt;
2480 if (pcc * dt + dumqc <
Real(0)) {
2485 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);
2491 if (eprd <
Real(0)) {
2493 dum = std::max(-
one, dum);
2497 if (eprds <
Real(0)) {
2499 dum = std::max(-
one, dum);
2503 if (pre <
Real(0)) {
2505 dum = std::max(-
one, dum);
2509 if (eprdg <
Real(0)) {
2511 dum = std::max(-
one, dum);
2526 for(
int k=klo; k<=
khi; k++) {
2544 for(
int k=
khi; k>=klo; k--) {
2584 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);
2591 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);
2614 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);
2621 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);
2640 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);
2641 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);
2649 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);
2650 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);
2658 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);
2659 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);
2667 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);
2668 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);
2682 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)));
2683 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)));
2735 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),
2736 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),
2755 for (
int n = 1; n <= nstep; n++) {
2757 for (
int k = klo; k <=
khi; k++) {
2786 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);
2787 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);
2788 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);
2789 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);
2790 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);
2791 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);
2792 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);
2793 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);
2794 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);
2795 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);
2810 for (k =
khi-1; k >= klo; k--) {
2812 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);
2813 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);
2814 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);
2815 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);
2816 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);
2817 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);
2818 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);
2819 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);
2820 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);
2821 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);
2824 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);
2825 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);
2826 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);
2827 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);
2828 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);
2829 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);
2830 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);
2831 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);
2832 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);
2833 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);
2850 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) +
2852 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;
2859 for(
int k=klo; k<=
khi; k++) {
2877 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);
2878 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);
2893 if (m_igraup == 0) {
2920 if (qvqvs <
Real(0.9)) {
2923 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);
2928 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);
2932 if (qvqvsi <
Real(0.9)) {
2935 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);
2940 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);
2945 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);
2994 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);
3000 if ((m_iliq != 1)) {
3005 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);
3011 if (m_igraup == 0) {
3014 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);
3019 }
else if (m_igraup == 1) {
3022 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);
3043 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);
3059 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);
3105 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);
3122 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);
3159 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);
3176 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));
3179 if (iinum == 0 && m_iact == 2) {
3180 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));
3187 ndcnst_to_number_mixing_ratio(m_ndcnst,
rho_arr(i,j,k));
3197 if(use_morr_cpp_answer) {
3198 for (
int k=klo; k<=
khi; k++) {
3212 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3231 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3232 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3233 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3240 if (run_morr_fort) {
3241 #ifdef ERF_USE_MORR_FORT
constexpr amrex::Real three
Definition: ERF_Constants.H:11
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real gamma_function(Real x)
Definition: ERF_MorrisonGammaFunction.H:300
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_saturation_vapor_pressure(const amrex::Real T, const int type)
Definition: ERF_MorrisonVaporPressure.H:36
Arena * Arena_Used
Definition: ERF_Morrison_Advance_F.H:23
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
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:198
amrex::MultiFab * m_z_phys_nd
Definition: ERF_Morrison.H:209
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:201
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:213
bool m_do_cond
Definition: ERF_Morrison.H:202
@ qisten
Definition: ERF_AdvanceMorrison.cpp:76
@ dumfnc
Definition: ERF_AdvanceMorrison.cpp:134
@ qi3dten
Definition: ERF_AdvanceMorrison.cpp:48
@ agn
Definition: ERF_AdvanceMorrison.cpp:97
@ pres
Definition: ERF_AdvanceMorrison.cpp:65
@ precrt
Definition: ERF_AdvanceMorrison.cpp:82
@ dumc
Definition: ERF_AdvanceMorrison.cpp:133
@ falouti
Definition: ERF_AdvanceMorrison.cpp:113
@ ni3d
Definition: ERF_AdvanceMorrison.cpp:58
@ dumi
Definition: ERF_AdvanceMorrison.cpp:98
@ faloutnc
Definition: ERF_AdvanceMorrison.cpp:141
@ snowprt
Definition: ERF_AdvanceMorrison.cpp:84
@ lamg
Definition: ERF_AdvanceMorrison.cpp:40
@ xxls
Definition: ERF_AdvanceMorrison.cpp:154
@ n0s
Definition: ERF_AdvanceMorrison.cpp:43
@ fns
Definition: ERF_AdvanceMorrison.cpp:123
@ grplprt
Definition: ERF_AdvanceMorrison.cpp:85
@ dumfns
Definition: ERF_AdvanceMorrison.cpp:119
@ qni3d
Definition: ERF_AdvanceMorrison.cpp:56
@ ung
Definition: ERF_AdvanceMorrison.cpp:137
@ faloutng
Definition: ERF_AdvanceMorrison.cpp:127
@ qc3dten
Definition: ERF_AdvanceMorrison.cpp:47
@ w3d
Definition: ERF_AdvanceMorrison.cpp:67
@ rgvm
Definition: ERF_AdvanceMorrison.cpp:111
@ arn
Definition: ERF_AdvanceMorrison.cpp:94
@ lami
Definition: ERF_AdvanceMorrison.cpp:37
@ qscu1d
Definition: ERF_AdvanceMorrison.cpp:80
@ qcsten
Definition: ERF_AdvanceMorrison.cpp:78
@ fc
Definition: ERF_AdvanceMorrison.cpp:139
@ fnr
Definition: ERF_AdvanceMorrison.cpp:148
@ pgam
Definition: ERF_AdvanceMorrison.cpp:46
@ qrcu1d
Definition: ERF_AdvanceMorrison.cpp:79
@ fng
Definition: ERF_AdvanceMorrison.cpp:110
@ ng3dten
Definition: ERF_AdvanceMorrison.cpp:71
@ dlami
Definition: ERF_AdvanceMorrison.cpp:151
@ faloutni
Definition: ERF_AdvanceMorrison.cpp:114
@ faloutnr
Definition: ERF_AdvanceMorrison.cpp:146
@ NumInds
Definition: ERF_AdvanceMorrison.cpp:158
@ dumfni
Definition: ERF_AdvanceMorrison.cpp:100
@ n0g
Definition: ERF_AdvanceMorrison.cpp:45
@ dlams
Definition: ERF_AdvanceMorrison.cpp:149
@ n0i
Definition: ERF_AdvanceMorrison.cpp:42
@ effs
Definition: ERF_AdvanceMorrison.cpp:88
@ faltndg
Definition: ERF_AdvanceMorrison.cpp:131
@ cpm
Definition: ERF_AdvanceMorrison.cpp:156
@ qr3dten
Definition: ERF_AdvanceMorrison.cpp:50
@ t3d
Definition: ERF_AdvanceMorrison.cpp:63
@ dumqs
Definition: ERF_AdvanceMorrison.cpp:118
@ qg3d
Definition: ERF_AdvanceMorrison.cpp:72
@ lamr
Definition: ERF_AdvanceMorrison.cpp:39
@ qr3d
Definition: ERF_AdvanceMorrison.cpp:57
@ nc3d
Definition: ERF_AdvanceMorrison.cpp:68
@ qg3dten
Definition: ERF_AdvanceMorrison.cpp:70
@ nr3dten
Definition: ERF_AdvanceMorrison.cpp:53
@ dzq
Definition: ERF_AdvanceMorrison.cpp:66
@ dumfnr
Definition: ERF_AdvanceMorrison.cpp:145
@ uns
Definition: ERF_AdvanceMorrison.cpp:121
@ faltndng
Definition: ERF_AdvanceMorrison.cpp:132
@ effc
Definition: ERF_AdvanceMorrison.cpp:86
@ qnisten
Definition: ERF_AdvanceMorrison.cpp:77
@ faloutg
Definition: ERF_AdvanceMorrison.cpp:126
@ t3dten
Definition: ERF_AdvanceMorrison.cpp:61
@ qv3d
Definition: ERF_AdvanceMorrison.cpp:64
@ ni3dten
Definition: ERF_AdvanceMorrison.cpp:51
@ uni
Definition: ERF_AdvanceMorrison.cpp:103
@ umi
Definition: ERF_AdvanceMorrison.cpp:104
@ qni3dten
Definition: ERF_AdvanceMorrison.cpp:49
@ faloutr
Definition: ERF_AdvanceMorrison.cpp:112
@ dumr
Definition: ERF_AdvanceMorrison.cpp:99
@ faloutns
Definition: ERF_AdvanceMorrison.cpp:125
@ effi
Definition: ERF_AdvanceMorrison.cpp:87
@ faltndni
Definition: ERF_AdvanceMorrison.cpp:117
@ unc
Definition: ERF_AdvanceMorrison.cpp:135
@ umc
Definition: ERF_AdvanceMorrison.cpp:136
@ qv3dten
Definition: ERF_AdvanceMorrison.cpp:62
@ faltndns
Definition: ERF_AdvanceMorrison.cpp:129
@ nc3dten
Definition: ERF_AdvanceMorrison.cpp:69
@ dumg
Definition: ERF_AdvanceMorrison.cpp:101
@ dlamc
Definition: ERF_AdvanceMorrison.cpp:152
@ rho
Definition: ERF_AdvanceMorrison.cpp:91
@ effr
Definition: ERF_AdvanceMorrison.cpp:89
@ faltndnc
Definition: ERF_AdvanceMorrison.cpp:143
@ xxlv
Definition: ERF_AdvanceMorrison.cpp:155
@ faltndc
Definition: ERF_AdvanceMorrison.cpp:142
@ faltndnr
Definition: ERF_AdvanceMorrison.cpp:147
@ fni
Definition: ERF_AdvanceMorrison.cpp:108
@ umr
Definition: ERF_AdvanceMorrison.cpp:105
@ faloutc
Definition: ERF_AdvanceMorrison.cpp:140
@ ain
Definition: ERF_AdvanceMorrison.cpp:93
@ effg
Definition: ERF_AdvanceMorrison.cpp:90
@ faltnds
Definition: ERF_AdvanceMorrison.cpp:128
@ xlf
Definition: ERF_AdvanceMorrison.cpp:157
@ asn
Definition: ERF_AdvanceMorrison.cpp:95
@ fr
Definition: ERF_AdvanceMorrison.cpp:106
@ fnc
Definition: ERF_AdvanceMorrison.cpp:144
@ fi
Definition: ERF_AdvanceMorrison.cpp:107
@ dumfng
Definition: ERF_AdvanceMorrison.cpp:102
@ faltndr
Definition: ERF_AdvanceMorrison.cpp:115
@ lams
Definition: ERF_AdvanceMorrison.cpp:38
@ fs
Definition: ERF_AdvanceMorrison.cpp:122
@ qicu1d
Definition: ERF_AdvanceMorrison.cpp:81
@ qrsten
Definition: ERF_AdvanceMorrison.cpp:75
@ qgsten
Definition: ERF_AdvanceMorrison.cpp:74
@ cdist1
Definition: ERF_AdvanceMorrison.cpp:41
@ dlamg
Definition: ERF_AdvanceMorrison.cpp:153
@ mu
Definition: ERF_AdvanceMorrison.cpp:92
@ lamc
Definition: ERF_AdvanceMorrison.cpp:36
@ ns3dten
Definition: ERF_AdvanceMorrison.cpp:52
@ ns3d
Definition: ERF_AdvanceMorrison.cpp:59
@ dlamr
Definition: ERF_AdvanceMorrison.cpp:150
@ ng3d
Definition: ERF_AdvanceMorrison.cpp:73
@ qi3d
Definition: ERF_AdvanceMorrison.cpp:55
@ acn
Definition: ERF_AdvanceMorrison.cpp:96
@ falouts
Definition: ERF_AdvanceMorrison.cpp:124
@ faltndi
Definition: ERF_AdvanceMorrison.cpp:116
@ fg
Definition: ERF_AdvanceMorrison.cpp:109
@ qc3d
Definition: ERF_AdvanceMorrison.cpp:54
@ umg
Definition: ERF_AdvanceMorrison.cpp:138
@ unr
Definition: ERF_AdvanceMorrison.cpp:130
@ ums
Definition: ERF_AdvanceMorrison.cpp:120
@ n0r
Definition: ERF_AdvanceMorrison.cpp:44
@ snowrt
Definition: ERF_AdvanceMorrison.cpp:83
@ nr3d
Definition: ERF_AdvanceMorrison.cpp:60
@ qv
Definition: ERF_Morrison.H:35
@ ng
Definition: ERF_Morrison.H:49
@ nc
Definition: ERF_Morrison.H:45
@ qpg
Definition: ERF_Morrison.H:42
@ pres
Definition: ERF_Morrison.H:31
@ nr
Definition: ERF_Morrison.H:46
@ qcl
Definition: ERF_Morrison.H:36
@ theta
Definition: ERF_Morrison.H:29
@ ni
Definition: ERF_Morrison.H:47
@ ns
Definition: ERF_Morrison.H:48
@ omega
Definition: ERF_Morrison.H:54
@ qps
Definition: ERF_Morrison.H:41
@ graup_accum
Definition: ERF_Morrison.H:53
@ rho
Definition: ERF_Morrison.H:28
@ qpr
Definition: ERF_Morrison.H:40
@ qci
Definition: ERF_Morrison.H:37
@ rain_accum
Definition: ERF_Morrison.H:51
@ snow_accum
Definition: ERF_Morrison.H:52
@ psacr
Definition: ERF_WSM6.H:222
@ praci
Definition: ERF_WSM6.H:218
@ psmlt
Definition: ERF_WSM6.H:228
@ pgmlt
Definition: ERF_WSM6.H:229
@ piacr
Definition: ERF_WSM6.H:216
@ pracs
Definition: ERF_WSM6.H:219
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
MoistureType moisture_type
Moisture or microphysics model.
Definition: ERF_DataStruct.H:2124