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);
33 const amrex::Array4<const amrex::Real>& r0_arr,
34 const amrex::Array4<const amrex::Real>& th0_arr,
35 const amrex::Array4<const amrex::Real>& qv0_arr,
36 const amrex::Array4<const amrex::Real>& cell_data,
37 const amrex::Array4<const amrex::Real>& qt_arr)
48 amrex::Real th_v_hi = th_d_hi * (1.0 - Fact*qt_hi - rv_over_rd*qt_hi);
51 amrex::Real th_v_lo = th_d_lo * (1.0 - Fact*qt_lo - rv_over_rd*qt_lo);
53 amrex::Real th_v0_hi = th0_arr(i,j,k ) * (1.0 - Fact*qv0_arr(i,j,k ));
54 amrex::Real th_v0_lo = th0_arr(i,j,k-1) * (1.0 - Fact*qv0_arr(i,j,k-1));
59 amrex::Real q_hi = (qv_hi-qv0_hi) - qt_hi + (th_v_hi - th_v0_hi) / th_v0_hi;
60 amrex::Real q_lo = (qv_lo-qv0_lo) - qt_lo + (th_v_lo - th_v0_lo) / th_v0_lo;
66 return (-r0avg * grav_gpu * qavg);
74 const amrex::Array4<const amrex::Real>& r0_arr,
75 const amrex::Array4<const amrex::Real>& cell_data,
76 const amrex::Array4<const amrex::Real>& qt_arr)
79 amrex::Real rhop_lo = cell_data(i,j,k-1,
Rho_comp) * (1.0 + qt_arr(i,j,k-1))- r0_arr(i,j,k-1);
80 return( grav_gpu *
amrex::Real(0.5) * ( rhop_hi + rhop_lo ) );
88 const amrex::Array4<const amrex::Real>& r0_arr,
89 const amrex::Array4<const amrex::Real>& cell_data,
90 const amrex::Array4<const amrex::Real>& qt_arr,
91 amrex::Array4<amrex::EBCellFlag const>
const& flag)
94 if (flag(i,j,k).isRegular()) {
96 amrex::Real rhop_lo = cell_data(i,j,k-1,
Rho_comp) * (1.0 + qt_arr(i,j,k-1))- r0_arr(i,j,k-1);
97 buoyancy = grav_gpu *
amrex::Real(0.5) * ( rhop_hi + rhop_lo );
98 }
else if (flag(i,j,k).isSingleValued()) {
99 if (flag(i,j,k-1).isCovered()) {
100 amrex::Real rhop_hihi = cell_data(i,j,k+1,
Rho_comp) * (1.0 + qt_arr(i,j,k+1))- r0_arr(i,j,k+1);
102 buoyancy = grav_gpu * 0.5 * ( 3.0 * rhop_hi - rhop_hihi );
104 }
else if (flag(i,j,k).isCovered()) {
105 amrex::Real rhop_lo = cell_data(i,j,k-1,
Rho_comp) * (1.0 + qt_arr(i,j,k-1))- r0_arr(i,j,k-1);
106 amrex::Real rhop_lolo = cell_data(i,j,k-2,
Rho_comp) * (1.0 + qt_arr(i,j,k-2))- r0_arr(i,j,k-2);
107 buoyancy = grav_gpu * 0.5 * ( 3.0 * rhop_lo - rhop_lolo );
111 amrex::Real rhop_lo = cell_data(i,j,k-1,
Rho_comp) * (1.0 + qt_arr(i,j,k-1))- r0_arr(i,j,k-1);
112 buoyancy = grav_gpu *
amrex::Real(0.5) * ( rhop_hi + rhop_lo );
124 const amrex::Array4<const amrex::Real>& r0_arr,
125 const amrex::Array4<const amrex::Real>& p0_arr,
126 const amrex::Array4<const amrex::Real>& th0_arr,
127 const amrex::Array4<const amrex::Real>& cell_data)
141 return ( -r0_avg * grav_gpu * tp_avg);
149 const amrex::Array4<const amrex::Real>& r0_arr,
150 const amrex::Array4<const amrex::Real>& th0_arr,
151 const amrex::Array4<const amrex::Real>& cell_prim)
159 return ( -r0_avg * grav_gpu * thp_avg);
169 const amrex::Array4<const amrex::Real>& r0_arr,
170 const amrex::Array4<const amrex::Real>& th0_arr,
171 const amrex::Array4<const amrex::Real>& qv0_arr,
172 const amrex::Array4<const amrex::Real>& p0_arr,
173 const amrex::Array4<const amrex::Real>& cell_prim,
174 const amrex::Array4<const amrex::Real>& cell_data,
175 const amrex::Array4<const amrex::Real>& qt_arr)
196 return ( -r0avg * grav_gpu * qavg);
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>& qv0_arr,
208 const amrex::Array4<const amrex::Real>& cell_prim,
209 const amrex::Array4<const amrex::Real>& qt_arr)
230 return ( -r0avg * grav_gpu * qavg);
243 const amrex::Array4<const amrex::Real>& r0_arr,
244 const amrex::Array4<const amrex::Real>& p0_arr,
245 const amrex::Array4<const amrex::Real>& cell_data)
258 return (-r0_q_avg * grav_gpu);
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_anelastic(int &i, int &j, int &k, amrex::Real const &grav_gpu, amrex::Real const &rv_over_rd, 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:30
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_Tpert(int &i, int &j, int &k, const int &n_qstate, amrex::Real const &grav_gpu, amrex::Real const &rd_over_cp, 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:165
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_Thpert(int &i, int &j, int &k, const int &n_qstate, amrex::Real const &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:202
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_anelastic(int &i, int &j, int &k, amrex::Real const &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
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Thpert(int &i, int &j, int &k, amrex::Real const &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:147
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_rhopert_eb(int &i, int &j, int &k, amrex::Real const &grav_gpu, const amrex::Array4< const amrex::Real > &r0_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:86
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Tpert(int &i, int &j, int &k, amrex::Real const &grav_gpu, amrex::Real const &rd_over_cp, 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:121
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_anelastic_T(int &i, int &j, int &k, amrex::Real const &grav_gpu, amrex::Real const &rd_over_cp, 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:240
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_rhopert(int &i, int &j, int &k, amrex::Real const &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &qt_arr)
Definition: ERF_BuoyancyUtils.H:72
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getRhoThetagivenP(const amrex::Real p, const amrex::Real qv=0.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=0.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:53
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
amrex::Real Real
Definition: ERF_ShocInterface.H:16