1 #ifndef ERF_BUOYANCY_UTILS_H_
2 #define ERF_BUOYANCY_UTILS_H_
12 const amrex::Array4<const amrex::Real>& r0_arr,
13 const amrex::Array4<const amrex::Real>& th0_arr,
14 const amrex::Array4<const amrex::Real>& cell_data)
24 return (-rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface);
32 const amrex::Array4<const amrex::Real>& r0_arr,
33 const amrex::Array4<const amrex::Real>& th0_arr,
34 const amrex::Array4<const amrex::Real>& cell_data,
35 amrex::Array4<amrex::EBCellFlag const>
const& flag)
38 if (flag(i,j,k).isRegular()) {
44 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
45 }
else if (flag(i,j,k).isSingleValued()) {
46 if (flag(i,j,k-1).isCovered()) {
52 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
53 }
else if (flag(i,j,k).isCovered()) {
59 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
66 buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
77 const amrex::Array4<const amrex::Real>& r0_arr,
78 const amrex::Array4<const amrex::Real>& th0_arr,
79 const amrex::Array4<const amrex::Real>& qv0_arr,
80 const amrex::Array4<const amrex::Real>& cell_data,
81 const amrex::Array4<const amrex::Real>& qt_arr)
97 amrex::Real th_v0_hi = th0_arr(i,j,k ) * (
one - Fact*qv0_arr(i,j,k ));
98 amrex::Real th_v0_lo = th0_arr(i,j,k-1) * (
one - Fact*qv0_arr(i,j,k-1));
103 amrex::Real q_hi = (qv_hi-qv0_hi) - qt_hi + (th_v_hi - th_v0_hi) / th_v0_hi;
104 amrex::Real q_lo = (qv_lo-qv0_lo) - qt_lo + (th_v_lo - th_v0_lo) / th_v0_lo;
110 return (-r0avg * grav_gpu * qavg);
118 const amrex::Array4<const amrex::Real>& r0_arr,
119 const amrex::Array4<const amrex::Real>& qv0_arr,
120 const amrex::Array4<const amrex::Real>& cell_data,
121 const amrex::Array4<const amrex::Real>& qt_arr)
124 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
126 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
127 return( grav_gpu *
myhalf * ( rhop_hi + rhop_lo ) );
135 const amrex::Array4<const amrex::Real>& r0_arr,
136 const amrex::Array4<const amrex::Real>& qv0_arr,
137 const amrex::Array4<const amrex::Real>& cell_data,
138 const amrex::Array4<const amrex::Real>& qt_arr,
139 amrex::Array4<amrex::EBCellFlag const>
const& flag)
142 if (flag(i,j,k).isRegular()) {
144 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
146 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
147 buoyancy = grav_gpu *
myhalf * ( rhop_hi + rhop_lo );
148 }
else if (flag(i,j,k).isSingleValued()) {
149 if (flag(i,j,k-1).isCovered()) {
151 r0_arr(i,j,k+1 ) * (
one + qv0_arr(i,j,k+1));
153 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
154 buoyancy = grav_gpu *
myhalf * (
three * rhop_hi - rhop_hihi );
156 }
else if (flag(i,j,k).isCovered()) {
158 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
160 r0_arr(i,j,k-2 ) * (
one + qv0_arr(i,j,k-2));
161 buoyancy = grav_gpu *
myhalf * (
three * rhop_lo - rhop_lolo );
165 r0_arr(i,j,k ) * (
one + qv0_arr(i,j,k ));
167 r0_arr(i,j,k-1 ) * (
one + qv0_arr(i,j,k-1));
168 buoyancy = grav_gpu *
myhalf * ( rhop_hi + rhop_lo );
180 const amrex::Array4<const amrex::Real>& r0_arr,
181 const amrex::Array4<const amrex::Real>& p0_arr,
182 const amrex::Array4<const amrex::Real>& th0_arr,
183 const amrex::Array4<const amrex::Real>& cell_data)
197 return ( -r0_avg * grav_gpu * tp_avg);
205 const amrex::Array4<const amrex::Real>& r0_arr,
206 const amrex::Array4<const amrex::Real>& th0_arr,
207 const amrex::Array4<const amrex::Real>& cell_prim)
215 return ( -r0_avg * grav_gpu * thp_avg);
225 const amrex::Array4<const amrex::Real>& r0_arr,
226 const amrex::Array4<const amrex::Real>& th0_arr,
227 const amrex::Array4<const amrex::Real>& qv0_arr,
228 const amrex::Array4<const amrex::Real>& p0_arr,
229 const amrex::Array4<const amrex::Real>& cell_prim,
230 const amrex::Array4<const amrex::Real>& cell_data,
231 const amrex::Array4<const amrex::Real>& qt_arr)
245 amrex::Real q_hi =
epsv * (qv_hi-qv0_hi) - (qt_arr(i,j,k )-qv_hi) + dt_hi/t0_hi;
246 amrex::Real q_lo =
epsv * (qv_lo-qv0_lo) - (qt_arr(i,j,k-1)-qv_lo) + dt_lo/t0_lo;
252 return ( -r0avg * grav_gpu * qavg);
261 const amrex::Array4<const amrex::Real>& r0_arr,
262 const amrex::Array4<const amrex::Real>& th0_arr,
263 const amrex::Array4<const amrex::Real>& qv0_arr,
264 const amrex::Array4<const amrex::Real>& cell_prim,
265 const amrex::Array4<const amrex::Real>& qt_arr)
279 amrex::Real q_hi =
epsv * (qv_hi-qv0_hi) - qt_hi + dth_hi/th0_arr(i,j,k );
280 amrex::Real q_lo =
epsv * (qv_lo-qv0_lo) - qt_lo + dth_lo/th0_arr(i,j,k-1);
286 return ( -r0avg * grav_gpu * qavg);
299 const amrex::Array4<const amrex::Real>& r0_arr,
300 const amrex::Array4<const amrex::Real>& p0_arr,
301 const amrex::Array4<const amrex::Real>& cell_data)
314 return (-r0_q_avg * grav_gpu);
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_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 > &qv0_arr, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &qt_arr)
Definition: ERF_BuoyancyUtils.H:75
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:203
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Tpert(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Real &, 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:177
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:116
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::Real &, 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:221
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:258
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_anelastic_T(int &i, int &j, int &k, const amrex::Real &grav_gpu, const amrex::Real &, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &p0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:296
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:30
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:133
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:10
constexpr amrex::Real epsv
Definition: ERF_Constants.H:53
constexpr amrex::Real three
Definition: ERF_Constants.H:11
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 RvoRd
Definition: ERF_Constants.H:56
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:54
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getRhoThetagivenP(const amrex::Real p, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:172
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:58
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:55
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
amrex::Real Real
Definition: ERF_ShocInterface.H:19