18 auto domain =
m_geom.Domain();
19 int i_lo = domain.smallEnd(0);
20 int i_hi = domain.bigEnd(0);
21 int j_lo = domain.smallEnd(1);
22 int j_hi = domain.bigEnd(1);
25 for ( MFIter mfi(*
tabs,TilingIfNotGPU()); mfi.isValid(); ++mfi) {
27 auto tbx = mfi.tilebox();
28 if (tbx.smallEnd(0) == i_lo) { tbx.growLo(0,-
m_real_width); }
29 if (tbx.bigEnd(0) == i_hi) { tbx.growHi(0,-
m_real_width); }
30 if (tbx.smallEnd(1) == j_lo) { tbx.growLo(1,-
m_real_width); }
31 if (tbx.bigEnd(1) == j_hi) { tbx.growHi(1,-
m_real_width); }
39 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
43 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsat);
46 if ((qv_array(i,j,k)+qc_array(i,j,k)) > qsat) {
47 Real qvprev = qv_array(i,j,k);
48 Real qcprev = qc_array(i,j,k);
51 if (qc_array(i,j,k) < 0) {
52 qv_array(i,j,k) += qc_array(i,j,k);
53 qc_array(i,j,k) = 0.0;
58 d_fac_cond, tabs_array, pres_array,
59 qv_array , qc_array );
62 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatnew);
64 AMREX_ASSERT(std::abs(qv_array(i,j,k)-qsatnew) < 1e-12);
66 amrex::ignore_unused(qvprev);
67 amrex::ignore_unused(qcprev);
68 AMREX_ASSERT(std::abs(qv_array(i,j,k)+qc_array(i,j,k)-qvprev-qcprev) < 1e-14);
71 theta_array(i,j,k) =
getThgivenTandP(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
82 Real delta_qc = qc_array(i,j,k);
85 qv_array(i,j,k) += qc_array(i,j,k);
86 qc_array(i,j,k) = 0.0;
89 tabs_array(i,j,k) -= d_fac_cond * delta_qc;
92 theta_array(i,j,k) =
getThgivenTandP(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
95 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsat);
96 if (qv_array(i,j,k) > qsat) {
97 Real qvprev = qv_array(i,j,k);
98 Real qcprev = qc_array(i,j,k);
99 Real Tprev = tabs_array(i,j,k);
103 d_fac_cond , tabs_array, pres_array,
104 qv_array , qc_array );
107 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatnew);
108 amrex::ignore_unused(qvprev);
109 amrex::ignore_unused(qcprev);
110 amrex::ignore_unused(Tprev);
111 AMREX_ASSERT(qv_array(i,j,k) < qvprev);
112 AMREX_ASSERT(qc_array(i,j,k) > qcprev);
113 AMREX_ASSERT(tabs_array(i,j,k) > Tprev);
114 AMREX_ASSERT(std::abs(qv_array(i,j,k)-qsatnew) < 1e-14);
115 AMREX_ASSERT(std::abs(qv_array(i,j,k)+qc_array(i,j,k)-qvprev-qcprev) < 1e-14);
118 theta_array(i,j,k) =
getThgivenTandP(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenTandP(const amrex::Real T, const amrex::Real P, const amrex::Real rdOcp)
Definition: ERF_EOS.H:18
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:166
amrex::Real Real
Definition: ERF_ShocInterface.H:19
amrex::Real m_fac_cond
Definition: ERF_SatAdj.H:212
amrex::Geometry m_geom
Definition: ERF_SatAdj.H:203
amrex::Array< FabPtr, MicVar_SatAdj::NumVars > mic_fab_vars
Definition: ERF_SatAdj.H:217
amrex::Real m_rdOcp
Definition: ERF_SatAdj.H:213
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real NewtonIterSat(int &i, int &j, int &k, const amrex::Real &fac_cond, const amrex::Array4< amrex::Real > &tabs_array, const amrex::Array4< amrex::Real > &pres_array, const amrex::Array4< amrex::Real > &qv_array, const amrex::Array4< amrex::Real > &qc_array)
Definition: ERF_SatAdj.H:133
bool m_do_cond
Definition: ERF_SatAdj.H:214
int m_real_width
Definition: ERF_SatAdj.H:206
@ tabs
Definition: ERF_Kessler.H:24
@ theta
Definition: ERF_SatAdj.H:31
@ pres
Definition: ERF_SatAdj.H:33
@ qv
Definition: ERF_SatAdj.H:35
@ tabs
Definition: ERF_SatAdj.H:32
@ qc
Definition: ERF_SatAdj.H:36