19 for ( MFIter mfi(*
tabs,TilingIfNotGPU()); mfi.isValid(); ++mfi) {
21 const auto& tbx = mfi.tilebox();
29 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
35 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsat);
38 if ((qv_array(i,j,k)+qc_array(i,j,k)) > qsat) {
39 Real qvprev = qv_array(i,j,k);
40 Real qcprev = qc_array(i,j,k);
43 if (qc_array(i,j,k) < 0) {
44 qv_array(i,j,k) += qc_array(i,j,k);
45 qc_array(i,j,k) = 0.0;
50 d_fac_cond, tabs_array, pres_array,
51 qv_array , qc_array );
54 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatnew);
56 AMREX_ASSERT(std::abs(qv_array(i,j,k)-qsatnew) < 1e-12);
58 amrex::ignore_unused(qvprev);
59 amrex::ignore_unused(qcprev);
60 AMREX_ASSERT(std::abs(qv_array(i,j,k)+qc_array(i,j,k)-qvprev-qcprev) < 1e-14);
63 theta_array(i,j,k) =
getThgivenTandP(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
74 Real delta_qc = qc_array(i,j,k);
77 qv_array(i,j,k) += qc_array(i,j,k);
78 qc_array(i,j,k) = 0.0;
81 tabs_array(i,j,k) -= d_fac_cond * delta_qc;
84 theta_array(i,j,k) =
getThgivenTandP(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
87 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsat);
88 if (qv_array(i,j,k) > qsat) {
89 Real qvprev = qv_array(i,j,k);
90 Real qcprev = qc_array(i,j,k);
91 Real Tprev = tabs_array(i,j,k);
95 d_fac_cond , tabs_array, pres_array,
96 qv_array , qc_array );
99 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatnew);
100 amrex::ignore_unused(qvprev);
101 amrex::ignore_unused(qcprev);
102 amrex::ignore_unused(Tprev);
103 AMREX_ASSERT(qv_array(i,j,k) < qvprev);
104 AMREX_ASSERT(qc_array(i,j,k) > qcprev);
105 AMREX_ASSERT(tabs_array(i,j,k) > Tprev);
106 AMREX_ASSERT(std::abs(qv_array(i,j,k)-qsatnew) < 1e-14);
107 AMREX_ASSERT(std::abs(qv_array(i,j,k)+qc_array(i,j,k)-qvprev-qcprev) < 1e-14);
110 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:163
amrex::Real Real
Definition: ERF_ShocInterface.H:19
amrex::Real m_fac_cond
Definition: ERF_SatAdj.H:206
amrex::Array< FabPtr, MicVar_SatAdj::NumVars > mic_fab_vars
Definition: ERF_SatAdj.H:211
amrex::Real m_rdOcp
Definition: ERF_SatAdj.H:207
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:130
bool m_do_cond
Definition: ERF_SatAdj.H:208
@ 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