1 #ifndef ERF_BUOYANCY_UTILS_H_
2 #define ERF_BUOYANCY_UTILS_H_
24 const amrex::Array4<const amrex::Real>& r0_arr,
25 const amrex::Array4<const amrex::Real>& th0_arr,
26 const amrex::Array4<const amrex::Real>& cell_data)
36 return (-rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface);
57 const amrex::Array4<const amrex::Real>& r0_arr,
58 const amrex::Array4<const amrex::Real>& th0_arr,
59 const amrex::Array4<const amrex::Real>& cell_data,
60 amrex::Array4<amrex::EBCellFlag const>
const& flag)
63 if (flag(i,j,k).isRegular()) {
69 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
70 }
else if (flag(i,j,k).isSingleValued()) {
71 if (flag(i,j,k-1).isCovered()) {
77 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
78 }
else if (flag(i,j,k).isCovered()) {
84 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
91 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
115 const amrex::Array4<const amrex::Real>& r0_arr,
116 const amrex::Array4<const amrex::Real>& qv0_arr,
117 const amrex::Array4<const amrex::Real>& cell_data,
118 const amrex::Array4<const amrex::Real>& qt_arr)
121 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
123 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
124 return( grav_gpu *
myhalf * ( rhop_hi + rhop_lo ) );
146 const amrex::Array4<const amrex::Real>& r0_arr,
147 const amrex::Array4<const amrex::Real>& qv0_arr,
148 const amrex::Array4<const amrex::Real>& cell_data,
149 const amrex::Array4<const amrex::Real>& qt_arr,
150 amrex::Array4<amrex::EBCellFlag const>
const& flag)
153 if (flag(i,j,k).isRegular()) {
155 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
157 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
158 buoyancy = grav_gpu *
myhalf * ( rhop_hi + rhop_lo );
159 }
else if (flag(i,j,k).isSingleValued()) {
160 if (flag(i,j,k-1).isCovered()) {
162 r0_arr(i,j,k+1 ) * (
one + qv0_arr(i,j,k+1));
164 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
165 buoyancy = grav_gpu *
myhalf * (
three * rhop_hi - rhop_hihi );
167 }
else if (flag(i,j,k).isCovered()) {
169 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
171 r0_arr(i,j,k-2 ) * (
one + qv0_arr(i,j,k-2));
172 buoyancy = grav_gpu *
myhalf * (
three * rhop_lo - rhop_lolo );
176 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
178 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
179 buoyancy = grav_gpu *
myhalf * ( rhop_hi + rhop_lo );
204 const amrex::Array4<const amrex::Real>& r0_arr,
205 const amrex::Array4<const amrex::Real>& p0_arr,
206 const amrex::Array4<const amrex::Real>& th0_arr,
207 const amrex::Array4<const amrex::Real>& cell_data)
221 return ( -r0_avg * grav_gpu * tp_avg);
241 const amrex::Array4<const amrex::Real>& r0_arr,
242 const amrex::Array4<const amrex::Real>& th0_arr,
243 const amrex::Array4<const amrex::Real>& cell_prim)
251 return ( -r0_avg * grav_gpu * thp_avg);
278 const amrex::Array4<const amrex::Real>& r0_arr,
279 const amrex::Array4<const amrex::Real>& th0_arr,
280 const amrex::Array4<const amrex::Real>& qv0_arr,
281 const amrex::Array4<const amrex::Real>& p0_arr,
282 const amrex::Array4<const amrex::Real>& cell_prim,
283 const amrex::Array4<const amrex::Real>& cell_data,
284 const amrex::Array4<const amrex::Real>& qt_arr)
298 amrex::Real q_hi =
epsv * (qv_hi-qv0_hi) - (qt_arr(i,j,k )-qv_hi) + dt_hi/t0_hi;
299 amrex::Real q_lo =
epsv * (qv_lo-qv0_lo) - (qt_arr(i,j,k-1)-qv_lo) + dt_lo/t0_lo;
305 return ( -r0avg * grav_gpu * qavg);
329 const amrex::Array4<const amrex::Real>& r0_arr,
330 const amrex::Array4<const amrex::Real>& th0_arr,
331 const amrex::Array4<const amrex::Real>& qv0_arr,
332 const amrex::Array4<const amrex::Real>& cell_prim,
333 const amrex::Array4<const amrex::Real>& qt_arr)
347 amrex::Real q_hi =
epsv * (qv_hi-qv0_hi) - qt_hi + dth_hi/th0_arr(i,j,k );
348 amrex::Real q_lo =
epsv * (qv_lo-qv0_lo) - qt_lo + dth_lo/th0_arr(i,j,k-1);
354 return ( -r0avg * grav_gpu * qavg);
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Thpert(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_prim)
Definition: ERF_BuoyancyUtils.H:239
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_rhopert(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &qt_arr)
Definition: ERF_BuoyancyUtils.H:113
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_Tpert(int &i, int &j, int &k, const int &n_qstate, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &p0_arr, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &qt_arr)
Definition: ERF_BuoyancyUtils.H:275
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_Thpert(int &i, int &j, int &k, const int &n_qstate, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &qt_arr)
Definition: ERF_BuoyancyUtils.H:326
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_anelastic_eb(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::EBCellFlag const > const &flag)
Definition: ERF_BuoyancyUtils.H:55
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_rhopert_eb(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &qt_arr, amrex::Array4< amrex::EBCellFlag const > const &flag)
Definition: ERF_BuoyancyUtils.H:144
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_anelastic(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:22
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Tpert(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &p0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:202
constexpr amrex::Real epsv
Definition: ERF_Constants.H:52
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:53
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenRandRTh(const amrex::Real rho, const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:46
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
#define PrimQ1_comp
Definition: ERF_IndexDefines.H:64
#define Rho_comp
Definition: ERF_IndexDefines.H:42
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:43
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:61
constexpr amrex::Real three
Definition: ERF_NumericalConstants.H:39
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
amrex::Real Real
Definition: ERF_ShocInterface.H:19