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);
195 const IntVect morr_tile_size = run_morr_fort ? IntVect::TheZeroVector() :
TileNoZ();
198 auto box = mfi.tilebox();
221 #ifdef ERF_USE_MORR_FORT
235 const int ilo = box.loVect()[0];
236 const int ihi = box.hiVect()[0];
237 const int jlo = box.loVect()[1];
238 const int jhi = box.hiVect()[1];
239 const int klo = box.loVect()[2];
240 const int khi = box.hiVect()[2];
242 Box grown_box(box); grown_box.grow(3);
251 const Box& fab_box = mfi.fabbox();
253 #if defined(ERF_USE_MORR_FORT) && defined(AMREX_USE_GPU)
262 auto const& pii_arr = pii_fab.array();
269 ParallelFor(fab_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
272 pii_arr(i,j,k) = std::pow((pres_arr(i,j,k)) /
p0, rdcp);
277 auto const& dz_arr = dz_fab.array();
284 ParallelFor(fab_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
285 dz_arr(i,j,k) = (z_arr) ?
Real(0.25) * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
286 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
287 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
288 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz_val;
293 Box fab_boxD(fab_box); fab_boxD.makeSlab(2,0);
296 FArrayBox rainncv_fab(fab_boxD, 1,
Arena_Used);
298 FArrayBox snowncv_fab(fab_boxD, 1,
Arena_Used);
299 FArrayBox graupelncv_fab(fab_boxD, 1,
Arena_Used);
301 auto const& rainncv_arr = rainncv_fab.array();
302 auto const& sr_arr = sr_fab.array();
303 auto const& snowncv_arr = snowncv_fab.array();
304 auto const& graupelncv_arr = graupelncv_fab.array();
307 ParallelFor(fab_boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
308 rainncv_arr(i,j,k) =
Real(0);
309 sr_arr(i,j,k) =
Real(0);
310 snowncv_arr(i,j,k) =
Real(0);
311 graupelncv_arr(i,j,k) =
Real(0);
315 FArrayBox ht_fab(Box(IntVect(ilo, jlo, 0), IntVect(ihi, jhi, 0)), 1,
Arena_Used);
316 [[maybe_unused]]
auto const& ht_arr = ht_fab.array();
391 Real m_lammaxi, m_lammini;
392 Real m_lammaxr, m_lamminr;
393 Real m_lammaxs, m_lammins;
394 Real m_lammaxg, m_lamming;
422 Real m_cons1, m_cons2, m_cons3, m_cons4, m_cons5;
423 Real m_cons6, m_cons7, m_cons8, m_cons9, m_cons10;
424 Real m_cons11, m_cons12, m_cons13, m_cons14, m_cons15;
425 Real m_cons16, m_cons17, m_cons18, m_cons19, m_cons20;
426 Real m_cons21, m_cons22, m_cons23, m_cons24, m_cons25;
427 Real m_cons26, m_cons27, m_cons28, m_cons29;
428 Real m_cons31, m_cons32, m_cons34, m_cons35;
429 Real m_cons36, m_cons37, m_cons38, m_cons39, m_cons40;
434 m_ndcnst =
Real(250.0);
436 m_pi =
Real(3.1415926535897932384626434);
443 m_ep_2 = m_Rd / m_Rv;
449 m_rhow =
Real(997.0);
450 m_rhoi =
Real(500.0);
451 m_rhosn =
Real(100.0);
455 m_rhog =
Real(400.0);
457 m_rhog =
Real(900.0);
474 m_ar =
Real(841.99667);
490 m_bimm =
Real(100.0);
492 m_dcs =
Real(125.0E-6);
493 m_mi0 =
Real(4.0)/
three*m_pi*m_rhoi*amrex::Math::powi<3>(
Real(10.0E-6));
494 m_mg0 =
Real(1.6E-10);
503 m_qsmall =
Real(1.0E-14);
510 m_cpw =
Real(4187.0);
513 m_ci = m_rhoi * m_pi /
Real(6.0);
515 m_cs = m_rhosn * m_pi /
Real(6.0);
517 m_cg = m_rhog * m_pi /
Real(6.0);
521 m_rin =
Real(0.1E-6);
524 m_mmult =
Real(4.0)/
three*m_pi*m_rhoi*amrex::Math::powi<3>(
Real(5.0E-6));
531 m_lamminr =
one/
Real(2800.0E-6);
533 m_lammins =
one/
Real(2000.0E-6);
535 m_lamming =
one/
Real(2000.0E-6);
563 m_nanew1 =
Real(72.2E6);
570 m_nanew2 =
Real(1.8E6);
590 m_cons15 = -
Real(1108.0) * m_eii * std::pow(m_pi, (
one-m_bs)/
three) *
593 m_cons17 =
Real(4.0) *
Real(2) *
three * m_rhosu * m_pi * m_eci * m_eci *
595 m_cons18 = m_rhosn * m_rhosn;
596 m_cons19 = m_rhow * m_rhow;
597 m_cons20 =
Real(20.0) * m_pi * m_pi * m_rhow * m_bimm;
598 m_cons21 =
Real(4.0) / (m_dcs * m_rhoi);
599 m_cons22 = m_pi * m_rhoi * amrex::Math::powi<3>(m_dcs) /
Real(6.0);
603 m_cons26 = m_pi /
Real(6.0) * m_rhow;
606 m_cons29 =
Real(4.0)/
three * m_pi * m_rhow * amrex::Math::powi<3>(
Real(25.0E-6));
607 m_cons31 = m_pi * m_pi * m_ecr * m_rhosn;
608 m_cons32 = m_pi /
Real(2) * m_ecr;
612 m_cons37 =
Real(4.0) * m_pi *
Real(1.38E-23) / (
Real(6.0) * m_pi * m_rin);
613 m_cons38 = m_pi * m_pi /
three * m_rhow;
614 m_cons39 = m_pi * m_pi /
Real(36.0) * m_rhow * m_bimm;
615 m_cons40 = m_pi /
Real(6.0) * m_bimm;
616 m_cons41 = m_pi * m_pi * m_ecr * m_rhow;
643 m_nanew1 =
Real(72.2E6);
650 m_nanew2 =
Real(1.8E6);
667 Box boxD(box); boxD.makeSlab(2,0);
673 morr_fab.template setVal<RunOn::Device>(0);
674 auto const& morr_arr = morr_fab.array();
681 ParallelFor( box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
696 morr_arr(i,j,k,
MORRInd::t3d) = theta_arr(i,j,k) * pii_arr(i,j,k);
709 ParallelFor( boxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
715 for (
int k=klo; k<=
khi; k++) {
904 if (qvqvs <
Real(0.9)) {
907 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);
912 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);
916 if (qvqvsi <
Real(0.9)) {
919 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);
924 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);
929 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);
938 const Real QSMALL = m_qsmall;
973 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));
992 bool skipMicrophysics =
false;
993 bool skipConcentrations =
false;
994 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) {
996 skipMicrophysics =
true;
1000 if(!skipMicrophysics) {
1013 dum = (m_Rv * amrex::Math::powi<2>(morr_arr(i,j,k,
MORRInd::t3d)));
1037 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);
1045 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);
1050 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)) {
1051 skipConcentrations=
true;
1053 if(!skipConcentrations) {
1065 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);
1071 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);
1075 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);
1096 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);
1107 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1112 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1122 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);
1130 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;
1134 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;
1142 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);
1150 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;
1154 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;
1201 nprc1 = prc / m_cons29;
1206 nprc1 = std::min(nprc1, nprc);
1221 ums_local = std::min(ums_local,
Real(1.2)*dum);
1222 uns_local = std::min(uns_local,
Real(1.2)*dum);
1223 umr_local = std::min(umr_local,
Real(9.1)*dum);
1224 unr_local = std::min(unr_local,
Real(9.1)*dum);
1231 pracs = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2)*umr_local-
Real(0.95)*ums_local) +
1252 umg_local = std::min(umg_local,
Real(20.0)*dum);
1253 ung_local = std::min(ung_local,
Real(20.0)*dum);
1254 umr_local = std::min(umr_local,
Real(9.1)*dum);
1255 unr_local = std::min(unr_local,
Real(9.1)*dum);
1258 pracg = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2)*umr_local-
Real(0.95)*umg_local) +
1266 dum = pracg/
Real(5.2e-7);
1268 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * (std::sqrt(
Real(1.7)*amrex::Math::powi<2>(unr_local-ung_local) +
1275 npracg = npracg - dum;
1285 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
1296 dum1 =
Real(300.0e-6);
1309 std::pow(sc_schmidt,
one/
three) * m_cons9 /
1317 pre = std::min(pre,
Real(0));
1334 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1342 std::pow(sc_schmidt,
one/
three) * m_cons10 /
1347 evpms = std::max(evpms,
psmlt);
1365 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1373 std::pow(sc_schmidt,
one/
three) * m_cons11 /
1378 evpmg = std::max(evpmg,
pgmlt);
1390 dum = (prc + pra) * dt;
1405 evpms = evpms * ratio;
1410 dum = (-
pgmlt - evpmg + pracg) * dt;
1416 evpmg = evpmg * ratio;
1417 pracg = pracg * ratio;
1449 if (pre <
Real(0)) {
1451 dum = std::max(-
one, dum);
1457 dum = std::max(-
one, dum);
1463 dum = std::max(-
one, dum);
1469 dum = std::max(-
one, dum);
1475 dum = std::max(-
one, dum);
1493 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
1495 dumqc = std::max(dumqc,
Real(0));
1498 dums = dumqv - dumqss;
1499 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;
1500 if (pcc * dt + dumqc <
Real(0)) {
1533 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);
1538 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);
1542 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);
1546 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);
1567 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);
1578 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1583 std::log(gamma_pgam_plus_1) - std::log(gamma_pgam_plus_4))/ m_cons26;
1593 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);
1601 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;
1605 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;
1613 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);
1622 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;
1628 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;
1636 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);
1644 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;
1648 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;
1732 mnuccc = m_cons38 * dap * nacnt * std::exp(std::log(morr_arr(i,j,k,
MORRInd::cdist1)) +
1739 mnuccc = mnuccc + m_cons39 *
1749 nnuccc = std::min(nnuccc, morr_arr(i,j,k,
MORRInd::nc3d) / dt);
1767 nprc1 = prc / m_cons29;
1772 nprc1 = std::min(nprc1, nprc);
1779 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);
1831 ums_local = std::min(ums_local,
Real(1.2) * dum);
1832 uns_local = std::min(uns_local,
Real(1.2) * dum);
1833 umr_local = std::min(umr_local,
Real(9.1) * dum);
1834 unr_local = std::min(unr_local,
Real(9.1) * dum);
1836 pracs = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * ums_local) +
1842 npracs = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * amrex::Math::powi<2>(unr_local - uns_local) +
1857 psacr = m_cons31 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * ums_local) +
1876 umg_local = std::min(umg_local,
Real(20.0) * dum);
1877 ung_local = std::min(ung_local,
Real(20.0) * dum);
1878 umr_local = std::min(umr_local,
Real(9.1) * dum);
1879 unr_local = std::min(unr_local,
Real(9.1) * dum);
1881 pracg = m_cons41 * (std::sqrt(amrex::Math::powi<2>(
Real(1.2) * umr_local -
Real(0.95) * umg_local) +
1887 npracg = m_cons32 * morr_arr(i,j,k,
MORRInd::rho) * std::sqrt(
Real(1.7) * amrex::Math::powi<2>(unr_local - ung_local) +
1896 pracg = std::min(pracg, morr_arr(i,j,k,
MORRInd::qr3d) / dt);
1924 if (psacws >
Real(0)) {
1925 nmults =
Real(35.0e4) * psacws * fmult *
Real(1000.0);
1926 qmults = nmults * m_mmult;
1930 qmults = std::min(qmults, psacws);
1931 psacws = psacws - qmults;
1937 qmultr = nmultr * m_mmult;
1941 qmultr = std::min(qmultr,
pracs);
1957 if (psacwg >
Real(0) || pracg >
Real(0)) {
1973 if (psacwg >
Real(0)) {
1974 nmultg =
Real(35.0e4) * psacwg * fmult *
Real(1000.0);
1975 qmultg = nmultg * m_mmult;
1979 qmultg = std::min(qmultg, psacwg);
1980 psacwg = psacwg - qmultg;
1984 if (pracg >
Real(0)) {
1985 nmultrg =
Real(35.0e4) * pracg * fmult *
Real(1000.0);
1986 qmultrg = nmultrg * m_mmult;
1990 qmultrg = std::min(qmultrg, pracg);
1991 pracg = pracg - qmultrg;
1999 if (psacws >
Real(0)) {
2003 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) *
2008 dum = std::max(m_rhosn / (m_rhog - m_rhosn) * pgsacw,
Real(0));
2013 nscng = std::min(nscng, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2016 psacws = psacws - pgsacw;
2028 dum = std::min(dum,
Real(1));
2029 dum = std::max(dum,
Real(0));
2032 ngracs = (
one - dum) * npracs;
2035 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2036 ngracs = std::min(ngracs, morr_arr(i,j,k,
MORRInd::ns3d) / dt);
2040 npracs = npracs - ngracs;
2059 nnuccr = std::min(nnuccr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2069 pra =
Real(67.0) * std::pow(dum,
Real(1.15));
2079 dum1 =
Real(300.0e-6);
2095 prci = m_cons22 * nprci;
2096 nprci = std::min(nprci, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2103 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) /
2108 nprai = std::min(nprai, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2121 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);
2124 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2125 niacr = std::min(niacr, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2130 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);
2133 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::nr3d) / dt);
2134 niacrs = std::min(niacrs, morr_arr(i,j,k,
MORRInd::ni3d) / dt);
2145 kc2 = std::min(kc2,
Real(500.0e3));
2150 mnuccd = nnuccd * m_mi0;
2153 }
else if (m_inuc == 1) {
2158 mnuccd = nnuccd * m_mi0;
2167 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));
2175 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) *
2176 std::pow(sc_schmidt, (
one /
three)) * m_cons10 /
2185 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) *
2186 std::pow(sc_schmidt, (
one /
three)) * m_cons11 /
2195 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) *
2196 std::pow(sc_schmidt, (
one /
three)) * m_cons9 /
2205 prd = epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * dum;
2216 prd = prd + epsi * (morr_arr(i,j,k,
MORRInd::qv3d) - qvi) / abi * (
one - dum);
2225 pre = std::min(pre,
Real(0));
2234 fudgef =
Real(0.9999);
2235 sum_dep = prd + prds + mnuccd + prdg;
2237 if ((dum >
Real(0) && sum_dep > dum * fudgef) ||
2238 (dum <
Real(0) && sum_dep < dum * fudgef)) {
2239 mnuccd = fudgef * mnuccd * dum / sum_dep;
2240 prd = fudgef * prd * dum / sum_dep;
2241 prds = fudgef * prds * dum / sum_dep;
2242 prdg = fudgef * prdg * dum / sum_dep;
2246 if (prd <
Real(0)) {
2250 if (prds <
Real(0)) {
2254 if (prdg <
Real(0)) {
2282 if (m_igraup == 1) {
2299 piacrs = piacrs +
piacr;
2303 pracis = pracis +
praci;
2305 psacws = psacws + pgsacw;
2312 dum = (prc + pra + mnuccc + psacws + psacwi + qmults + psacwg + pgsacw + qmultg) * dt;
2319 mnuccc = mnuccc * ratio;
2320 psacws = psacws * ratio;
2321 psacwi = psacwi * ratio;
2322 qmults = qmults * ratio;
2323 qmultg = qmultg * ratio;
2324 psacwg = psacwg * ratio;
2325 pgsacw = pgsacw * ratio;
2329 dum = (-prd - mnuccc + prci + prai - qmults - qmultg - qmultr - qmultrg
2330 - mnuccd +
praci + pracis - eprd - psacwi) * dt;
2333 ratio = (morr_arr(i,j,k,
MORRInd::qi3d) / dt + prd + mnuccc + qmults + qmultg + qmultr + qmultrg +
2335 (prci + prai +
praci + pracis - eprd);
2337 prci = prci * ratio;
2338 prai = prai * ratio;
2340 pracis = pracis * ratio;
2341 eprd = eprd * ratio;
2345 dum = ((
pracs - pre) + (qmultr + qmultrg - prc) + (mnuccr - pra) +
2346 piacr + piacrs + pgracs + pracg) * dt;
2350 (-pre + qmultr + qmultrg +
pracs + mnuccr +
piacr + piacrs + pgracs + pracg);
2354 qmultr = qmultr * ratio;
2355 qmultrg = qmultrg * ratio;
2356 mnuccr = mnuccr * ratio;
2358 piacrs = piacrs * ratio;
2359 pgracs = pgracs * ratio;
2360 pracg = pracg * ratio;
2364 if (m_igraup == 0) {
2365 dum = (-prds - psacws - prai - prci -
pracs - eprds +
psacr - piacrs - pracis) * dt;
2368 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci +
pracs + piacrs + pracis) /
2371 eprds = eprds * ratio;
2374 }
else if (m_igraup == 1) {
2376 dum = (-prds - psacws - prai - prci -
pracs - eprds +
psacr - piacrs - pracis - mnuccr) * dt;
2379 ratio = (morr_arr(i,j,k,
MORRInd::qni3d) / dt + prds + psacws + prai + prci +
pracs + piacrs + pracis + mnuccr) /
2382 eprds = eprds * ratio;
2388 dum = (-psacwg - pracg - pgsacw - pgracs - prdg - mnuccr - eprdg -
piacr -
praci -
psacr) * dt;
2391 ratio = (morr_arr(i,j,k,
MORRInd::qg3d) / dt + psacwg + pracg + pgsacw + pgracs + prdg + mnuccr +
psacr +
2394 eprdg = eprdg * ratio;
2402 (prd + prds + mnuccd + eprd + eprds + prdg + eprdg) * morr_arr(i,j,k,
MORRInd::xxls) +
2403 (psacws + psacwi + mnuccc + mnuccr + qmults + qmultg + qmultr + qmultrg +
pracs +
2407 (-pra - prc - mnuccc + pcc -
2408 psacws - psacwi - qmults - qmultg - psacwg - pgsacw);
2411 (prd + eprd + psacwi + mnuccc - prci -
2412 prai + qmults + qmultg + qmultr + qmultrg + mnuccd -
praci - pracis);
2415 (pre + pra + prc -
pracs - mnuccr - qmultr - qmultrg -
2416 piacr - piacrs - pracg - pgracs);
2417 if (m_igraup == 0) {
2419 (prai + psacws + prds +
pracs + prci + eprds -
psacr + piacrs + pracis);
2427 }
else if (m_igraup == 1) {
2430 (prai + psacws + prds +
pracs + prci + eprds -
psacr + piacrs + pracis + mnuccr);
2436 npra - nprc - npsacwi - npsacwg);
2439 (nnuccc - nprci - nprai + nmults + nmultg + nmultr + nmultrg +
2440 nnuccd - niacr - niacrs);
2443 nragg - niacr - niacrs - npracg - ngracs);
2456 dumqss = m_ep_2 * dum / (morr_arr(i,j,k,
MORRInd::pres) - dum);
2459 dumqc = std::max(dumqc,
Real(0));
2462 dums = dumqv - dumqss;
2464 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;
2466 if (pcc * dt + dumqc <
Real(0)) {
2471 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);
2477 if (eprd <
Real(0)) {
2479 dum = std::max(-
one, dum);
2483 if (eprds <
Real(0)) {
2485 dum = std::max(-
one, dum);
2489 if (pre <
Real(0)) {
2491 dum = std::max(-
one, dum);
2495 if (eprdg <
Real(0)) {
2497 dum = std::max(-
one, dum);
2512 for(
int k=klo; k<=
khi; k++) {
2530 for(
int k=
khi; k>=klo; k--) {
2570 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);
2577 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);
2600 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);
2607 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);
2626 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);
2627 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);
2635 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);
2636 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);
2644 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);
2645 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);
2653 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);
2654 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);
2668 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)));
2669 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)));
2721 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),
2722 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),
2741 for (
int n = 1; n <= nstep; n++) {
2743 for (
int k = klo; k <=
khi; k++) {
2772 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);
2773 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);
2774 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);
2775 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);
2776 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);
2777 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);
2778 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);
2779 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);
2780 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);
2781 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);
2796 for (k =
khi-1; k >= klo; k--) {
2798 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);
2799 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);
2800 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);
2801 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);
2802 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);
2803 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);
2804 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);
2805 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);
2806 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);
2807 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);
2810 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);
2811 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);
2812 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);
2813 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);
2814 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);
2815 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);
2816 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);
2817 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);
2818 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);
2819 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);
2836 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) +
2838 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;
2845 for(
int k=klo; k<=
khi; k++) {
2863 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);
2864 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);
2879 if (m_igraup == 0) {
2906 if (qvqvs <
Real(0.9)) {
2909 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);
2914 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);
2918 if (qvqvsi <
Real(0.9)) {
2921 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);
2926 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);
2931 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);
2980 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);
2986 if ((m_iliq != 1)) {
2991 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);
2997 if (m_igraup == 0) {
3000 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);
3005 }
else if (m_igraup == 1) {
3008 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);
3029 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);
3045 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);
3091 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);
3108 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);
3145 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);
3162 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));
3165 if (iinum == 0 && m_iact == 2) {
3166 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));
3182 if(use_morr_cpp_answer) {
3183 for (
int k=klo; k<=
khi; k++) {
3196 theta_arr(i,j,k) = morr_arr(i,j,k,
MORRInd::t3d) / pii_arr(i,j,k);
3215 rain_accum_arr(i,j,klo) = rain_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::precrt);
3216 snow_accum_arr(i,j,klo) = snow_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::snowprt);
3217 graup_accum_arr(i,j,klo) = graup_accum_arr(i,j,klo) + morr_arr(i,j,klo,
MORRInd::grplprt);
3224 if (run_morr_fort) {
3225 #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:1604