1 #ifndef ERF_BUOYANCY_UTILS_H_
2 #define ERF_BUOYANCY_UTILS_H_
6 #include <AMReX_EBCellFlag.H>
25 const amrex::Array4<const amrex::Real>& r0_arr,
26 const amrex::Array4<const amrex::Real>& th0_arr,
27 const amrex::Array4<const amrex::Real>& cell_data)
37 return (-rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface);
58 const amrex::Array4<const amrex::Real>& r0_arr,
59 const amrex::Array4<const amrex::Real>& th0_arr,
60 const amrex::Array4<const amrex::Real>& cell_data,
61 amrex::Array4<amrex::EBCellFlag const>
const& flag)
64 if (flag(i,j,k).isMultiValued() || flag(i,j,k-1).isMultiValued() ||
65 (flag(i,j,k).isCovered() && flag(i,j,k-1).isCovered())) {
70 if (flag(i,j,k).isCovered()) {
74 if (flag.contains(i,j,k-2) &&
75 (flag(i,j,k-2).isRegular() || flag(i,j,k-2).isSingleValued()) &&
76 cell_data.contains(i,j,k-2) && r0_arr.contains(i,j,k-2) &&
77 th0_arr.contains(i,j,k-2)) {
85 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
86 }
else if (flag(i,j,k-1).isCovered()) {
89 if (flag.contains(i,j,k+1) &&
90 (flag(i,j,k+1).isRegular() || flag(i,j,k+1).isSingleValued()) &&
91 cell_data.contains(i,j,k+1) && r0_arr.contains(i,j,k+1) &&
92 th0_arr.contains(i,j,k+1)) {
100 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
107 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
130 const amrex::Array4<const amrex::Real>& r0_arr,
131 const amrex::Array4<const amrex::Real>& qv0_arr,
132 const amrex::Array4<const amrex::Real>& cell_data,
133 const amrex::Array4<const amrex::Real>& qt_arr)
136 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
138 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
139 return( grav_gpu *
myhalf * ( rhop_hi + rhop_lo ) );
161 const amrex::Array4<const amrex::Real>& r0_arr,
162 const amrex::Array4<const amrex::Real>& qv0_arr,
163 const amrex::Array4<const amrex::Real>& cell_data,
164 const amrex::Array4<const amrex::Real>& qt_arr,
165 amrex::Array4<amrex::EBCellFlag const>
const& flag)
167 if (flag(i,j,k).isMultiValued() || flag(i,j,k-1).isMultiValued() ||
168 (flag(i,j,k).isCovered() && flag(i,j,k-1).isCovered())) {
173 if (flag(i,j,k).isCovered()) {
176 if (flag.contains(i,j,k-2) &&
177 (flag(i,j,k-2).isRegular() || flag(i,j,k-2).isSingleValued()) &&
178 cell_data.contains(i,j,k-2) && r0_arr.contains(i,j,k-2) &&
179 qv0_arr.contains(i,j,k-2) && qt_arr.contains(i,j,k-2)) {
183 r0_arr(i,j,k-1) * (
one + qv0_arr(i,j,k-1));
185 r0_arr(i,j,kk) * (
one + qv0_arr(i,j,kk));
186 buoyancy = grav_gpu *
myhalf * (
three*rhop_lo - rhop_lolo);
187 }
else if (flag(i,j,k-1).isCovered()) {
190 if (flag.contains(i,j,k+1) &&
191 (flag(i,j,k+1).isRegular() || flag(i,j,k+1).isSingleValued()) &&
192 cell_data.contains(i,j,k+1) && r0_arr.contains(i,j,k+1) &&
193 qv0_arr.contains(i,j,k+1) && qt_arr.contains(i,j,k+1)) {
197 r0_arr(i,j,k) * (
one + qv0_arr(i,j,k));
199 r0_arr(i,j,kk) * (
one + qv0_arr(i,j,kk));
200 buoyancy = grav_gpu *
myhalf * (
three*rhop_hi - rhop_hihi);
203 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
205 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
206 buoyancy = grav_gpu *
myhalf * ( rhop_hi + rhop_lo );
230 const amrex::Array4<const amrex::Real>& r0_arr,
231 const amrex::Array4<const amrex::Real>& p0_arr,
232 const amrex::Array4<const amrex::Real>& th0_arr,
233 const amrex::Array4<const amrex::Real>& cell_data)
247 return ( -r0_avg * grav_gpu * tp_avg);
267 const amrex::Array4<const amrex::Real>& r0_arr,
268 const amrex::Array4<const amrex::Real>& th0_arr,
269 const amrex::Array4<const amrex::Real>& cell_prim)
277 return ( -r0_avg * grav_gpu * thp_avg);
304 const amrex::Array4<const amrex::Real>& r0_arr,
305 const amrex::Array4<const amrex::Real>& th0_arr,
306 const amrex::Array4<const amrex::Real>& qv0_arr,
307 const amrex::Array4<const amrex::Real>& p0_arr,
308 const amrex::Array4<const amrex::Real>& cell_prim,
309 const amrex::Array4<const amrex::Real>& cell_data,
310 const amrex::Array4<const amrex::Real>& qt_arr)
324 amrex::Real q_hi =
epsv * (qv_hi-qv0_hi) - (qt_arr(i,j,k )-qv_hi) + dt_hi/t0_hi;
325 amrex::Real q_lo =
epsv * (qv_lo-qv0_lo) - (qt_arr(i,j,k-1)-qv_lo) + dt_lo/t0_lo;
331 return ( -r0avg * grav_gpu * qavg);
355 const amrex::Array4<const amrex::Real>& r0_arr,
356 const amrex::Array4<const amrex::Real>& th0_arr,
357 const amrex::Array4<const amrex::Real>& qv0_arr,
358 const amrex::Array4<const amrex::Real>& cell_prim,
359 const amrex::Array4<const amrex::Real>& qt_arr)
373 amrex::Real q_hi =
epsv * (qv_hi-qv0_hi) - qt_hi + dth_hi/th0_arr(i,j,k );
374 amrex::Real q_lo =
epsv * (qv_lo-qv0_lo) - qt_lo + dth_lo/th0_arr(i,j,k-1);
380 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:265
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:128
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:301
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:352
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:56
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:159
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:23
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:228
constexpr amrex::Real epsv
Definition: ERF_Constants.H:56
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:57
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:82
#define Rho_comp
Definition: ERF_IndexDefines.H:53
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:54
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:79
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