17 #ifdef AMREX_USE_FLOAT
25 int k_dom_lo = geom.Domain().smallEnd(2);
26 int k_dom_hi = geom.Domain().bigEnd(2);
28 for (MFIter mfi(
rho,
TileNoZ()); mfi.isValid(); ++mfi) {
29 Box bx = mfi.tilebox();
30 int klo = bx.smallEnd(2);
31 int khi = bx.bigEnd(2);
36 const Array4< Real>& th_arr =
theta.array(mfi);
37 const Array4<const Real>&
qv_arr =
qv.const_array(mfi);
38 const Array4<const Real>& qt_arr =
qt.const_array(mfi);
40 const Array4<const Real>& z_arr = z_phys->const_array(mfi);
42 ParallelFor(bx, [=,RdoCp_d=
RdoCp] AMREX_GPU_DEVICE (
int i,
int j,
int ) noexcept
46 Real rho_tot_hi, rho_tot_lo;
58 z_hi =
Real(0.125) * (z_arr(i,j,klo ) + z_arr(i+1,j,klo ) + z_arr(i,j+1,klo ) + z_arr(i+1,j+1,klo )
59 +z_arr(i,j,klo+1) + z_arr(i+1,j,klo+1) + z_arr(i,j+1,klo+1) + z_arr(i+1,j+1,klo+1));
63 qt_lo = qt_arr(i,j,klo);
65 Th_lo = th_arr(i,j,klo);
68 rho_tot_lo = R_lo * (
one + qt_lo);
69 C = -P_lo +
myhalf*rho_tot_lo*grav*
dz;
72 qt_hi = qt_arr(i,j,klo);
74 Th_hi = th_arr(i,j,klo);
78 rho_tot_hi = R_hi * (
one + qt_hi);
79 F = P_hi +
myhalf*rho_tot_hi*grav*
dz + C;
85 P_hi, R_hi, F, maintain_Th);
89 if (!maintain_Th) { th_arr(i,j,klo) =
getThgivenTandP(T_hi, P_hi, RdoCp_d); }
95 z_lo =
Real(0.125) * (z_arr(i,j,klo ) + z_arr(i+1,j,klo ) + z_arr(i,j+1,klo ) + z_arr(i+1,j+1,klo )
96 +z_arr(i,j,klo+1) + z_arr(i+1,j,klo+1) + z_arr(i,j+1,klo+1) + z_arr(i+1,j+1,klo+1));
101 for (
int k(klo+1); k<=
khi; ++k)
103 z_hi =
Real(0.125) * (z_arr(i,j,k ) + z_arr(i+1,j,k ) + z_arr(i,j+1,k ) + z_arr(i+1,j+1,k )
104 +z_arr(i,j,k+1) + z_arr(i+1,j,k+1) + z_arr(i,j+1,k+1) + z_arr(i+1,j+1,k+1));
108 qt_lo = qt_arr(i,j,k-1);
110 Th_lo = th_arr(i,j,k-1);
112 rho_tot_lo = R_lo * (
one + qt_lo);
113 C = -P_lo +
myhalf*rho_tot_lo*grav*
dz;
116 qt_hi = qt_arr(i,j,k);
118 Th_hi = th_arr(i,j,k);
121 rho_tot_hi = R_hi * (
one + qt_hi);
122 F = P_hi +
myhalf*rho_tot_hi*grav*
dz + C;
126 grav, C, Th_hi, T_hi,
128 P_hi, R_hi, F, maintain_Th);
132 if (!maintain_Th) { th_arr(i,j,k) =
getThgivenTandP(T_hi, P_hi, RdoCp_d); }
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
constexpr amrex::Real p_0
Definition: ERF_Constants.H:61
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:64
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:54
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getRhogivenThetaPress(const amrex::Real th, const amrex::Real p, const amrex::Real rdOcp, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:96
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 amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:81
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenPandTh(const amrex::Real P, const amrex::Real th, const amrex::Real rdOcp)
Definition: ERF_EOS.H:32
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
rho
Definition: ERF_InitCustomPert_Bubble.H:107
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
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_GPU_HOST_DEVICE AMREX_FORCE_INLINE void Newton_Raphson_hse(const Real &m_tol, const Real &RdoCp, const Real &dz, const Real &g, const Real &C, const Real &Th, const Real &T, const Real &qt, const Real &qv, Real &P, Real &rd, Real &F, const bool &maintain_Th)
Definition: ERF_HSEUtils.H:44
@ theta
Definition: ERF_MM5.H:20
@ qt
Definition: ERF_Kessler.H:29
@ qv
Definition: ERF_Kessler.H:30
@ dz
Definition: ERF_AdvanceWSM6.cpp:104