17 for ( MFIter mfi(*
tabs,TilingIfNotGPU()); mfi.isValid(); ++mfi) {
19 const auto& tbx = mfi.tilebox();
27 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
33 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsat);
36 if ((qv_array(i,j,k)+qc_array(i,j,k)) > qsat) {
37 Real qvprev = qv_array(i,j,k);
38 Real qcprev = qc_array(i,j,k);
41 if (qc_array(i,j,k) < 0) {
42 qv_array(i,j,k) += qc_array(i,j,k);
43 qc_array(i,j,k) = 0.0;
48 d_fac_cond, tabs_array, pres_array,
49 qv_array , qc_array );
52 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatnew);
53 amrex::ignore_unused(qvprev);
54 amrex::ignore_unused(qcprev);
55 AMREX_ASSERT(std::abs(qv_array(i,j,k)-qsatnew) < 1e-16);
56 AMREX_ASSERT(std::abs(qv_array(i,j,k)+qc_array(i,j,k)-qvprev-qcprev) < 1e-16);
59 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
70 Real delta_qc = qc_array(i,j,k);
73 qv_array(i,j,k) += qc_array(i,j,k);
74 qc_array(i,j,k) = 0.0;
77 tabs_array(i,j,k) -= d_fac_cond * delta_qc;
80 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
83 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsat);
84 if (qv_array(i,j,k) > qsat) {
85 Real qvprev = qv_array(i,j,k);
86 Real qcprev = qc_array(i,j,k);
87 Real Tprev = tabs_array(i,j,k);
91 d_fac_cond , tabs_array, pres_array,
92 qv_array , qc_array );
95 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatnew);
96 amrex::ignore_unused(qvprev);
97 amrex::ignore_unused(qcprev);
98 amrex::ignore_unused(Tprev);
99 AMREX_ASSERT(qv_array(i,j,k) < qvprev);
100 AMREX_ASSERT(qc_array(i,j,k) > qcprev);
101 AMREX_ASSERT(tabs_array(i,j,k) > Tprev);
102 AMREX_ASSERT(std::abs(qv_array(i,j,k)-qsatnew) < 1e-16);
103 AMREX_ASSERT(std::abs(qv_array(i,j,k)+qc_array(i,j,k)-qvprev-qcprev) < 1e-16);
106 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenPandT(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 m_fac_cond
Definition: ERF_SatAdj.H:205
amrex::Array< FabPtr, MicVar_SatAdj::NumVars > mic_fab_vars
Definition: ERF_SatAdj.H:209
amrex::Real m_rdOcp
Definition: ERF_SatAdj.H:206
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:129
@ 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