171 Real dt = dt_advance;
175 bool use_morr_cpp_answer =
true;
176 pp.query(
"use_morr_cpp_answer", use_morr_cpp_answer);
179 bool run_morr_cpp = use_morr_cpp_answer;
180 bool run_morr_fort = !run_morr_cpp;
182 std::string filename = std::string(
"output_cpp") + std::to_string(use_morr_cpp_answer) +
".txt";
187 pp.query(
"morrison_ndcnst", m_ndcnst);
192 auto box = mfi.tilebox();
215 #ifdef ERF_USE_MORR_FORT
229 const int ilo = box.loVect()[0];
230 const int ihi = box.hiVect()[0];
231 const int jlo = box.loVect()[1];
232 const int jhi = box.hiVect()[1];
233 const int klo = box.loVect()[2];
234 const int khi = box.hiVect()[2];
236 Box grown_box(box); grown_box.grow(3);
238 #if defined(ERF_USE_MORR_FORT) && defined(AMREX_USE_GPU)
247 auto const& pii_arr = pii_fab.array();
254 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
257 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
262 auto const& dz_arr = dz_fab.array();
267 ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
268 dz_arr(i,j,k) = (z_arr) ?
Real(0.25) * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
269 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
270 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
271 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz_val;
274 Box grown_boxD(grown_box); grown_boxD.makeSlab(2,0);
277 FArrayBox rainncv_fab(grown_boxD, 1,
Arena_Used);
279 FArrayBox snowncv_fab(grown_boxD, 1,
Arena_Used);
280 FArrayBox graupelncv_fab(grown_boxD, 1,
Arena_Used);
282 auto const& rainncv_arr = rainncv_fab.array();
283 auto const& sr_arr = sr_fab.array();
284 auto const& snowncv_arr = snowncv_fab.array();
285 auto const& graupelncv_arr = graupelncv_fab.array();
288 ParallelFor(grown_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
289 rainncv_arr(i,j,k) =
Real(0);
290 sr_arr(i,j,k) =
Real(0);
291 snowncv_arr(i,j,k) =
Real(0);
292 graupelncv_arr(i,j,k) =
Real(0);
296 FArrayBox ht_fab(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), 1,
Arena_Used);
297 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
372 Real m_lammaxi, m_lammini;
373 Real m_lammaxr, m_lamminr;
374 Real m_lammaxs, m_lammins;
375 Real m_lammaxg, m_lamming;
403 Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
404 Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
405 Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
406 Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
407 Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
408 Real m_cons26, m_cons27, m_cons28, m_cons29;
409 Real m_cons31, m_cons32, m_cons34, m_cons35;
410 Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
415 m_ndcnst =
Real(250.0);
417 m_pi =
Real(3.1415926535897932384626434);
424 m_ep_2 = m_Rd / m_Rv;
430 m_rhow =
Real(997.0);
431 m_rhoi =
Real(500.0);
432 m_rhosn =
Real(100.0);
436 m_rhog =
Real(400.0);
438 m_rhog =
Real(900.0);
455 m_ar =
Real(841.99667);
471 m_bimm =
Real(100.0);
473 m_dcs =
Real(125.0E-6);
474 m_mi0 =
Real(4.0)/
three*m_pi*m_rhoi*amrex::Math::powi<3>(
Real(10.0E-6));
475 m_mg0 =
Real(1.6E-10);
484 m_qsmall =
Real(1.0E-14);
491 m_cpw =
Real(4187.0);
494 m_ci = m_rhoi * m_pi /
Real(6.0);
496 m_cs = m_rhosn * m_pi /
Real(6.0);
498 m_cg = m_rhog * m_pi /
Real(6.0);
502 m_rin =
Real(0.1E-6);
505 m_mmult =
Real(4.0)/
three*m_pi*m_rhoi*amrex::Math::powi<3>(
Real(5.0E-6));
512 m_lamminr =
one/
Real(2800.0E-6);
514 m_lammins =
one/
Real(2000.0E-6);
516 m_lamming =
one/
Real(2000.0E-6);
544 m_nanew1 =
Real(72.2E6);
551 m_nanew2 =
Real(1.8E6);
571 m_cons15 = -
Real(1108.0) * m_eii * std::pow(m_pi, (
one-m_bs)/
three) *
574 m_cons17 =
Real(4.0) *
Real(2) *
three * m_rhosu * m_pi * m_eci * m_eci *
576 m_cons18 = m_rhosn * m_rhosn;
577 m_cons19 = m_rhow * m_rhow;
578 m_cons20 =
Real(20.0) * m_pi * m_pi * m_rhow * m_bimm;
579 m_cons21 =
Real(4.0) / (m_dcs * m_rhoi);
580 m_cons22 = m_pi * m_rhoi * amrex::Math::powi<3>(m_dcs) /
Real(6.0);
584 m_cons26 = m_pi /
Real(6.0) * m_rhow;
587 m_cons29 =
Real(4.0)/
three * m_pi * m_rhow * amrex::Math::powi<3>(
Real(25.0E-6));
588 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
589 m_cons32 = m_pi /
Real(2) * m_ecr;
593 m_cons37 =
Real(4.0) * m_pi *
Real(1.38E-23) / (
Real(6.0) * m_pi * m_rin);
594 m_cons38 = m_pi * m_pi /
three * m_rhow;
595 m_cons39 = m_pi * m_pi /
Real(36.0) * m_rhow * m_bimm;
596 m_cons40 = m_pi /
Real(6.0) * m_bimm;
597 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
624 m_nanew1 =
Real(72.2E6);
631 m_nanew2 =
Real(1.8E6);
648 Box boxD(box); boxD.makeSlab(2,0);
654 morr_fab.template setVal<RunOn::Device>(0);
655 auto const& morr_arr = morr_fab.array();
662 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
677 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
690 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
696 for (
int k=klo; k<=
khi; k++) {
885 if (qvqvs <
Real(0.9)) {
888 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);
893 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);
897 if (qvqvsi <
Real(0.9)) {
900 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);
905 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);
910 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);
919 const Real QSMALL = m_qsmall;
954 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));
973 bool skipMicrophysics =
false;
974 bool skipConcentrations =
false;
975 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) {
977 skipMicrophysics =
true;
981 if(!skipMicrophysics) {
994 dum = (m_Rv * amrex::Math::powi<2>(morr_arr(i,j,k,
MORRInd::t3d)));
1018 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);
1026 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);
1031 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)) {
1032 skipConcentrations=
true;
1034 if(!skipConcentrations) {
1046 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);
1052 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);
1056 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);
1077 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);
1088 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1093 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1103 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);
1111 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;
1115 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;
1123 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);
1131 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;
1135 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;
1182 nprc1 = prc / m_cons29;
1187 nprc1 = std::min(nprc1, nprc);
1202 ums_local = std::min(ums_local,
Real(1.2)*dum);
1203 uns_local = std::min(uns_local,
Real(1.2)*dum);
1204 umr_local = std::min(umr_local,
Real(9.1)*dum);
1205 unr_local = std::min(unr_local,
Real(9.1)*dum);
1212 pracs = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2)*umr_local-
Real(0.95)*ums_local) +
1233 umg_local = std::min(umg_local,
Real(20.0)*dum);
1234 ung_local = std::min(ung_local,
Real(20.0)*dum);
1235 umr_local = std::min(umr_local,
Real(9.1)*dum);
1236 unr_local = std::min(unr_local,
Real(9.1)*dum);
1239 pracg = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2)*umr_local-
Real(0.95)*umg_local) +
1247 dum = pracg/
Real(5.2e-7);
1249 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(
Real(1.7)*amrex::Math::powi<2>(unr_local-ung_local) +
1256 npracg = npracg - dum;
1266 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
1277 dum1 =
Real(300.0e-6);
1290 std::pow(sc_schmidt,
one/
three) * m_cons9 /
1298 pre = std::min(pre,
Real(0));
1315 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1323 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1328 evpms = std::max(evpms,
psmlt);
1346 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1354 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1359 evpmg = std::max(evpmg,
pgmlt);
1371 dum = (prc + pra) * dt;
1386 evpms = evpms * ratio;
1391 dum = (-
pgmlt - evpmg + pracg) * dt;
1397 evpmg = evpmg * ratio;
1398 pracg = pracg * ratio;
1430 if (pre <
Real(0)) {
1432 dum = std::max(-
one, dum);
1438 dum = std::max(-
one, dum);
1444 dum = std::max(-
one, dum);
1450 dum = std::max(-
one, dum);
1456 dum = std::max(-
one, dum);
1473 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1475 dumqc = std::max(dumqc,
Real(0));
1478 dums = dumqv - dumqss;
1479 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;
1480 if (pcc * dt + dumqc <
Real(0)) {
1484 if (!do_cond) { pcc =
Real(0); }
1514 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);
1519 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);
1523 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);
1527 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);
1548 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);
1559 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1564 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1574 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);
1582 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;
1586 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;
1594 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);
1603 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;
1609 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;
1617 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);
1625 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;
1629 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;
1713 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
1720 mnuccc = mnuccc + m_cons39 *
1730 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
1748 nprc1 = prc / m_cons29;
1753 nprc1 = std::min(nprc1, nprc);
1760 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);
1812 ums_local = std::min(ums_local,
Real(1.2) * dum);
1813 uns_local = std::min(uns_local,
Real(1.2) * dum);
1814 umr_local = std::min(umr_local,
Real(9.1) * dum);
1815 unr_local = std::min(unr_local,
Real(9.1) * dum);
1817 pracs = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * ums_local) +
1823 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * amrex::Math::powi<2>(unr_local - uns_local) +
1838 psacr = m_cons31 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * ums_local) +
1857 umg_local = std::min(umg_local,
Real(20.0) * dum);
1858 ung_local = std::min(ung_local,
Real(20.0) * dum);
1859 umr_local = std::min(umr_local,
Real(9.1) * dum);
1860 unr_local = std::min(unr_local,
Real(9.1) * dum);
1862 pracg = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * umg_local) +
1868 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * amrex::Math::powi<2>(unr_local - ung_local) +
1877 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
1905 if (psacws >
Real(0)) {
1906 nmults =
Real(35.0e4) * psacws * fmult *
Real(1000.0);
1907 qmults = nmults * m_mmult;
1911 qmults = std::min(qmults, psacws);
1912 psacws = psacws - qmults;
1918 qmultr = nmultr * m_mmult;
1922 qmultr = std::min(qmultr,
pracs);
1938 if (psacwg >
Real(0) || pracg >
Real(0)) {
1954 if (psacwg >
Real(0)) {
1955 nmultg =
Real(35.0e4) * psacwg * fmult *
Real(1000.0);
1956 qmultg = nmultg * m_mmult;
1960 qmultg = std::min(qmultg, psacwg);
1961 psacwg = psacwg - qmultg;
1965 if (pracg >
Real(0)) {
1966 nmultrg =
Real(35.0e4) * pracg * fmult *
Real(1000.0);
1967 qmultrg = nmultrg * m_mmult;
1971 qmultrg = std::min(qmultrg, pracg);
1972 pracg = pracg - qmultrg;
1980 if (psacws >
Real(0)) {
1984 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) *
1989 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw,
Real(0));
1994 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
1997 psacws = psacws - pgsacw;
2009 dum = std::min(dum,
Real(1));
2010 dum = std::max(dum,
Real(0));
2013 ngracs = (
one - dum) * npracs;
2016 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2017 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2021 npracs = npracs - ngracs;
2040 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2050 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
2060 dum1 =
Real(300.0e-6);
2076 prci = m_cons22 * nprci;
2077 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2084 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) /
2089 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2102 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);
2105 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2106 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2111 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);
2114 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2115 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2126 kc2 = std::min(kc2,
Real(500.0e3));
2131 mnuccd = nnuccd * m_mi0;
2134 }
else if (m_inuc == 1) {
2139 mnuccd = nnuccd * m_mi0;
2148 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));
2156 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) *
2157 std::pow(sc_schmidt, (
one /
three)) * m_cons10 /
2166 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) *
2167 std::pow(sc_schmidt, (
one /
three)) * m_cons11 /
2176 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) *
2177 std::pow(sc_schmidt, (
one /
three)) * m_cons9 /
2186 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2197 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (
one - dum);
2206 pre = std::min(pre,
Real(0));
2215 fudgef =
Real(0.9999);
2216 sum_dep = prd + prds + mnuccd + prdg;
2218 if ((dum >
Real(0) && sum_dep > dum * fudgef) ||
2219 (dum <
Real(0) && sum_dep < dum * fudgef)) {
2220 mnuccd = fudgef * mnuccd * dum / sum_dep;
2221 prd = fudgef * prd * dum / sum_dep;
2222 prds = fudgef * prds * dum / sum_dep;
2223 prdg = fudgef * prdg * dum / sum_dep;
2227 if (prd <
Real(0)) {
2231 if (prds <
Real(0)) {
2235 if (prdg <
Real(0)) {
2263 if (m_igraup == 1) {
2280 piacrs = piacrs +
piacr;
2284 pracis = pracis +
praci;
2286 psacws = psacws + pgsacw;
2293 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2300 mnuccc = mnuccc * ratio;
2301 psacws = psacws * ratio;
2302 psacwi = psacwi * ratio;
2303 qmults = qmults * ratio;
2304 qmultg = qmultg * ratio;
2305 psacwg = psacwg * ratio;
2306 pgsacw = pgsacw * ratio;
2310 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2311 - mnuccd +
praci + pracis - eprd - psacwi) * dt;
2314 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2316 (prci + prai +
praci + pracis - eprd);
2318 prci = prci * ratio;
2319 prai = prai * ratio;
2321 pracis = pracis * ratio;
2322 eprd = eprd * ratio;
2326 dum = ((
pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2327 piacr + piacrs + pgracs + pracg) * dt;
2331 (-pre + qmultr + qmultrg +
pracs + mnuccr +
piacr + piacrs + pgracs + pracg);
2335 qmultr = qmultr * ratio;
2336 qmultrg = qmultrg * ratio;
2337 mnuccr = mnuccr * ratio;
2339 piacrs = piacrs * ratio;
2340 pgracs = pgracs * ratio;
2341 pracg = pracg * ratio;
2345 if (m_igraup == 0) {
2346 dum = (-prds - psacws - prai - prci -
pracs - eprds +
psacr - piacrs - pracis) * dt;
2349 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci +
pracs + piacrs + pracis) /
2352 eprds = eprds * ratio;
2355 }
else if (m_igraup == 1) {
2357 dum = (-prds - psacws - prai - prci -
pracs - eprds +
psacr - piacrs - pracis - mnuccr) * dt;
2360 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci +
pracs + piacrs + pracis + mnuccr) /
2363 eprds = eprds * ratio;
2369 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg -
piacr -
praci -
psacr) * dt;
2372 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr +
psacr +
2375 eprdg = eprdg * ratio;
2383 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2384 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg +
pracs +
2388 (-pra - prc - mnuccc + pcc -
2389 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2392 (prd + eprd + psacwi + mnuccc - prci -
2393 prai + qmults + qmultg + qmultr + qmultrg + mnuccd -
praci - pracis);
2396 (pre + pra + prc -
pracs - mnuccr - qmultr - qmultrg -
2397 piacr - piacrs - pracg - pgracs);
2398 if (m_igraup == 0) {
2400 (prai + psacws + prds +
pracs + prci + eprds -
psacr + piacrs + pracis);
2408 }
else if (m_igraup == 1) {
2411 (prai + psacws + prds +
pracs + prci + eprds -
psacr + piacrs + pracis + mnuccr);
2417 npra - nprc - npsacwi - npsacwg);
2420 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2421 nnuccd - niacr - niacrs);
2424 nragg - niacr - niacrs - npracg - ngracs);
2436 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2439 dumqc = std::max(dumqc,
Real(0));
2442 dums = dumqv - dumqss;
2444 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;
2446 if (pcc * dt + dumqc <
Real(0)) {
2451 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);
2456 if (eprd <
Real(0)) {
2458 dum = std::max(-
one, dum);
2462 if (eprds <
Real(0)) {
2464 dum = std::max(-
one, dum);
2468 if (pre <
Real(0)) {
2470 dum = std::max(-
one, dum);
2474 if (eprdg <
Real(0)) {
2476 dum = std::max(-
one, dum);
2491 for(
int k=klo; k<=
khi; k++) {
2509 for(
int k=
khi; k>=klo; k--) {
2549 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);
2556 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);
2579 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);
2586 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);
2605 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);
2606 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);
2614 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);
2615 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);
2623 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);
2624 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);
2632 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);
2633 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);
2647 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)));
2648 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)));
2700 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),
2701 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),
2720 for (
int n = 1; n <= nstep; n++) {
2722 for (
int k = klo; k <=
khi; k++) {
2751 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);
2752 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);
2753 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);
2754 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);
2755 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);
2756 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);
2757 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);
2758 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);
2759 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);
2760 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);
2775 for (k =
khi-1; k >= klo; k--) {
2777 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);
2778 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);
2779 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);
2780 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);
2781 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);
2782 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);
2783 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);
2784 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);
2785 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);
2786 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);
2789 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);
2790 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);
2791 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);
2792 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);
2793 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);
2794 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);
2795 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);
2796 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);
2797 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);
2798 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);
2815 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) +
2817 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;
2824 for(
int k=klo; k<=
khi; k++) {
2842 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);
2843 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);
2858 if (m_igraup == 0) {
2885 if (qvqvs <
Real(0.9)) {
2888 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);
2893 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);
2897 if (qvqvsi <
Real(0.9)) {
2900 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);
2905 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);
2910 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);
2959 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);
2965 if ((m_iliq != 1)) {
2970 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);
2976 if (m_igraup == 0) {
2979 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);
2984 }
else if (m_igraup == 1) {
2987 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);
3008 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);
3024 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);
3070 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);
3087 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);
3124 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);
3141 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));
3144 if (iinum == 0 && m_iact == 2) {
3145 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));
3161 if(use_morr_cpp_answer) {
3162 for (
int k=klo; k<=
khi; k++) {
3175 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3194 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3195 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3196 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3203 if (run_morr_fort) {
3204 #ifdef ERF_USE_MORR_FORT
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
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:17
ParallelFor(grown_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:180
amrex::MultiFab * m_z_phys_nd
Definition: ERF_Morrison.H:190
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:183
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:194
bool m_do_cond
Definition: ERF_Morrison.H:184
@ 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: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
@ 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
@ psacr
Definition: ERF_WSM6.H:207
@ praci
Definition: ERF_WSM6.H:203
@ psmlt
Definition: ERF_WSM6.H:213
@ pgmlt
Definition: ERF_WSM6.H:214
@ piacr
Definition: ERF_WSM6.H:201
@ pracs
Definition: ERF_WSM6.H:204
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
MoistureType moisture_type
Definition: ERF_DataStruct.H:1299