ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_BuoyancyUtils.H
Go to the documentation of this file.
1 #ifndef ERF_BUOYANCY_UTILS_H_
2 #define ERF_BUOYANCY_UTILS_H_
3 
4 #include <ERF_EOS.H>
5 #include <ERF_Constants.H>
6 #include <AMReX_EBCellFlag.H>
7 
8 /**
9  * Compute dry anelastic vertical perturbational gravitational force density [N/m^3].
10  *
11  * @param[in] i x-index
12  * @param[in] j y-index
13  * @param[in] k z-index
14  * @param[in] grav_gpu Gravity
15  * @param[in] r0_arr Dry reference density field
16  * @param[in] th0_arr Reference potential temperature field
17  * @param[in] cell_data State data FAB
18  * @return Dry anelastic vertical force density [N/m^3]
19  */
20 AMREX_GPU_DEVICE
21 AMREX_FORCE_INLINE
23 buoyancy_dry_anelastic (int& i, int& j, int& k,
24  const amrex::Real& grav_gpu,
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)
28 {
29  // The dry anelastic branch averages theta and theta0 before forming their ratio.
30  amrex::Real theta_d_hi = cell_data(i,j,k ,RhoTheta_comp)/cell_data(i,j,k ,Rho_comp);
31  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
32 
33  amrex::Real theta_d_wface = myhalf * (theta_d_lo + theta_d_hi);
34  amrex::Real theta_d0_wface = myhalf * (th0_arr(i,j,k) + th0_arr(i,j,k-1));
35  amrex::Real rho0_wface = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
36 
37  return (-rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface);
38 }
39 
40 /**
41  * Compute dry anelastic force density with embedded boundary handling.
42  *
43  * @param[in] i x-index
44  * @param[in] j y-index
45  * @param[in] k z-index
46  * @param[in] grav_gpu Gravity
47  * @param[in] r0_arr Reference density field
48  * @param[in] th0_arr Reference potential temperature field
49  * @param[in] cell_data State data FAB
50  * @param[in] flag EB cell flags
51  * @return Dry anelastic vertical force density [N/m^3]
52  */
53 AMREX_GPU_DEVICE
54 AMREX_FORCE_INLINE
56 buoyancy_dry_anelastic_eb (int& i, int& j, int& k,
57  const amrex::Real& grav_gpu,
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)
62 {
63  // Select the fluid side of the w-face using both adjacent cell flags.
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())) {
66  return zero;
67  }
68 
69  amrex::Real buoyancy = zero;
70  if (flag(i,j,k).isCovered()) {
71  // Extrapolate from below; use the nearest fluid cell if the second
72  // donor is unavailable. Never read covered-cell state or base data.
73  int kk = k-1;
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)) {
78  kk = k-2;
79  }
80  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
81  amrex::Real theta_d_lolo = cell_data(i,j,kk,RhoTheta_comp)/cell_data(i,j,kk,Rho_comp);
82  amrex::Real theta_d_wface = myhalf * (three*theta_d_lo - theta_d_lolo);
83  amrex::Real theta_d0_wface = myhalf * (three*th0_arr(i,j,k-1) - th0_arr(i,j,kk));
84  amrex::Real rho0_wface = myhalf * (three*r0_arr(i,j,k-1) - r0_arr(i,j,kk));
85  buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
86  } else if (flag(i,j,k-1).isCovered()) {
87  // Extrapolate from above with the same donor fallback.
88  int kk = k;
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)) {
93  kk = k+1;
94  }
95  amrex::Real theta_d_hihi = cell_data(i,j,kk,RhoTheta_comp)/cell_data(i,j,kk,Rho_comp);
96  amrex::Real theta_d_hi = cell_data(i,j,k,RhoTheta_comp)/cell_data(i,j,k,Rho_comp);
97  amrex::Real theta_d_wface = myhalf * (three*theta_d_hi - theta_d_hihi);
98  amrex::Real theta_d0_wface = myhalf * (three*th0_arr(i,j,k) - th0_arr(i,j,kk));
99  amrex::Real rho0_wface = myhalf * (three*r0_arr(i,j,k) - r0_arr(i,j,kk));
100  buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
101  } else {
102  amrex::Real theta_d_hi = cell_data(i,j,k ,RhoTheta_comp)/cell_data(i,j,k ,Rho_comp);
103  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
104  amrex::Real theta_d_wface = myhalf * (theta_d_lo + theta_d_hi);
105  amrex::Real theta_d0_wface = myhalf * (th0_arr(i,j,k) + th0_arr(i,j,k-1));
106  amrex::Real rho0_wface = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
107  buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
108  }
109  return buoyancy;
110 }
111 
112 /**
113  * Compute the exact total-density-perturbation gravitational force density [N/m^3].
114  *
115  * @param[in] i x-index
116  * @param[in] j y-index
117  * @param[in] k z-index
118  * @param[in] grav_gpu Gravity
119  * @param[in] r0_arr Dry reference density field
120  * @param[in] qv0_arr Reference water vapor mixing ratio field
121  * @param[in] cell_data Conserved state FAB
122  * @param[in] qt_arr Total water mixing ratio field
123  * @return Vertical perturbational gravitational force density [N/m^3]
124  */
125 AMREX_GPU_DEVICE
126 AMREX_FORCE_INLINE
128 buoyancy_rhopert (int& i, int& j, int& k,
129  const amrex::Real& grav_gpu,
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)
134 {
135  amrex::Real rhop_hi = cell_data(i,j,k ,Rho_comp) * (one + qt_arr(i,j,k )) -
136  r0_arr(i,j,k ) * (one + qv0_arr(i,j,k ));
137  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
138  r0_arr(i,j,k-1 ) * (one + qv0_arr(i,j,k-1));
139  return( grav_gpu * myhalf * ( rhop_hi + rhop_lo ) );
140 }
141 
142 /**
143  * Compute type-1 total-density-perturbation force density with EB handling.
144  *
145  * @param[in] i x-index
146  * @param[in] j y-index
147  * @param[in] k z-index
148  * @param[in] grav_gpu Gravity
149  * @param[in] r0_arr Reference density field
150  * @param[in] qv0_arr Reference water vapor mixing ratio field
151  * @param[in] cell_data State data FAB
152  * @param[in] qt_arr Total water mixing ratio field
153  * @param[in] flag EB cell flags
154  * @return Vertical perturbational gravitational force density [N/m^3]
155  */
156 AMREX_GPU_DEVICE
157 AMREX_FORCE_INLINE
159 buoyancy_rhopert_eb (int& i, int& j, int& k,
160  const amrex::Real& grav_gpu,
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)
166 {
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())) {
169  return zero;
170  }
171 
172  amrex::Real buoyancy = zero;
173  if (flag(i,j,k).isCovered()) {
174  // Extrapolate the total-density perturbation from the fluid below.
175  int kk = k-1;
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)) {
180  kk = k-2;
181  }
182  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
183  r0_arr(i,j,k-1) * (one + qv0_arr(i,j,k-1));
184  amrex::Real rhop_lolo = cell_data(i,j,kk,Rho_comp) * (one + qt_arr(i,j,kk)) -
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()) {
188  // Extrapolate from above, falling back to the nearest fluid cell.
189  int kk = k;
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)) {
194  kk = k+1;
195  }
196  amrex::Real rhop_hi = cell_data(i,j,k,Rho_comp) * (one + qt_arr(i,j,k)) -
197  r0_arr(i,j,k) * (one + qv0_arr(i,j,k));
198  amrex::Real rhop_hihi = cell_data(i,j,kk,Rho_comp) * (one + qt_arr(i,j,kk)) -
199  r0_arr(i,j,kk) * (one + qv0_arr(i,j,kk));
200  buoyancy = grav_gpu * myhalf * (three*rhop_hi - rhop_hihi);
201  } else {
202  amrex::Real rhop_hi = cell_data(i,j,k ,Rho_comp) * (one + qt_arr(i,j,k )) -
203  r0_arr(i,j,k ) * (one + qv0_arr(i,j,k ));
204  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
205  r0_arr(i,j,k-1 ) * (one + qv0_arr(i,j,k-1));
206  buoyancy = grav_gpu * myhalf * ( rhop_hi + rhop_lo );
207  }
208  return buoyancy;
209 }
210 
211 /**
212  * Compute approximate dry temperature-perturbation force density [N/m^3].
213  * Compressible selectors 2 and 3 both dispatch to this implementation.
214  *
215  * @param[in] i x-index
216  * @param[in] j y-index
217  * @param[in] k z-index
218  * @param[in] grav_gpu Gravity
219  * @param[in] r0_arr Reference density field
220  * @param[in] p0_arr Reference pressure field
221  * @param[in] th0_arr Reference potential temperature field
222  * @param[in] cell_data State data FAB
223  * @return Approximate dry temperature force density [N/m^3]
224  */
225 AMREX_GPU_DEVICE
226 AMREX_FORCE_INLINE
228 buoyancy_dry_Tpert (int& i, int& j, int& k,
229  const amrex::Real& grav_gpu,
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)
234 {
235  amrex::Real t0_hi = getTgivenPandTh(p0_arr(i,j,k), th0_arr(i,j,k), RdoCp);
236  amrex::Real t_hi = getTgivenRandRTh(cell_data(i,j,k ,Rho_comp), cell_data(i,j,k ,RhoTheta_comp));
237 
238  amrex::Real t0_lo = getTgivenPandTh(p0_arr(i,j,k-1), th0_arr(i,j,k-1), RdoCp);
239  amrex::Real t_lo = getTgivenRandRTh(cell_data(i,j,k-1,Rho_comp), cell_data(i,j,k-1,RhoTheta_comp));
240 
241  amrex::Real tprime_hi = (t_hi-t0_hi)/t0_hi;
242  amrex::Real tprime_lo = (t_lo-t0_lo)/t0_lo;
243 
244  amrex::Real tp_avg = myhalf * (tprime_hi + tprime_lo);
245  amrex::Real r0_avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
246 
247  return ( -r0_avg * grav_gpu * tp_avg);
248 }
249 
250 /**
251  * Compute approximate dry potential-temperature force density [N/m^3].
252  *
253  * @param[in] i x-index
254  * @param[in] j y-index
255  * @param[in] k z-index
256  * @param[in] grav_gpu Gravity
257  * @param[in] r0_arr Reference density field
258  * @param[in] th0_arr Reference potential temperature field
259  * @param[in] cell_prim Primitive variable FAB
260  * @return Approximate dry potential-temperature force density [N/m^3]
261  */
262 AMREX_GPU_DEVICE
263 AMREX_FORCE_INLINE
265 buoyancy_dry_Thpert (int& i, int& j, int& k,
266  const amrex::Real& grav_gpu,
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)
270 {
271  amrex::Real thetaprime_hi = (cell_prim(i,j,k ,PrimTheta_comp) - th0_arr(i,j,k )) / th0_arr(i,j,k );
272  amrex::Real thetaprime_lo = (cell_prim(i,j,k-1,PrimTheta_comp) - th0_arr(i,j,k-1)) / th0_arr(i,j,k-1);
273 
274  amrex::Real thp_avg = myhalf * (thetaprime_hi + thetaprime_lo);
275  amrex::Real r0_avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
276 
277  return ( -r0_avg * grav_gpu * thp_avg);
278 }
279 
280 /**
281  * Compute approximate moist temperature-perturbation force density [N/m^3].
282  * Compressible selectors 2 and 3 both dispatch to this implementation.
283  *
284  * @param[in] i x-index
285  * @param[in] j y-index
286  * @param[in] k z-index
287  * @param[in] n_qstate Number of moisture species
288  * @param[in] grav_gpu Gravity
289  * @param[in] r0_arr Reference density field
290  * @param[in] th0_arr Reference potential temperature field
291  * @param[in] qv0_arr Reference water vapor mixing ratio field
292  * @param[in] p0_arr Reference pressure field
293  * @param[in] cell_prim Primitive variable FAB
294  * @param[in] cell_data State data FAB
295  * @param[in] qt_arr Total water mixing ratio field
296  * @return Approximate moist temperature force density [N/m^3]
297  */
298 AMREX_GPU_DEVICE
299 AMREX_FORCE_INLINE
301 buoyancy_moist_Tpert (int& i, int& j, int& k,
302  const int& n_qstate,
303  const amrex::Real& grav_gpu,
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)
311 {
312  amrex::Real qv_hi = (n_qstate >= 1) ? cell_prim(i,j,k ,PrimQ1_comp) : zero;
313  amrex::Real qv_lo = (n_qstate >= 1) ? cell_prim(i,j,k-1,PrimQ1_comp) : zero;
314 
315  amrex::Real t0_hi = getTgivenPandTh(p0_arr(i,j,k ), th0_arr(i,j,k ), RdoCp);
316  amrex::Real t0_lo = getTgivenPandTh(p0_arr(i,j,k-1), th0_arr(i,j,k-1), RdoCp);
317 
318  amrex::Real dt_hi = getTgivenRandRTh(cell_data(i,j,k ,Rho_comp), cell_data(i,j,k ,RhoTheta_comp), qv_hi) - t0_hi;
319  amrex::Real dt_lo = getTgivenRandRTh(cell_data(i,j,k-1,Rho_comp), cell_data(i,j,k-1,RhoTheta_comp), qv_lo) - t0_lo;
320 
321  amrex::Real qv0_hi = qv0_arr(i,j,k );
322  amrex::Real qv0_lo = qv0_arr(i,j,k-1);
323 
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;
326 
327  amrex::Real qavg = myhalf * (q_hi + q_lo);
328 
329  amrex::Real r0avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
330 
331  return ( -r0avg * grav_gpu * qavg);
332 }
333 
334 /**
335  * Compute approximate moist potential-temperature force density [N/m^3].
336  *
337  * @param[in] i x-index
338  * @param[in] j y-index
339  * @param[in] k z-index
340  * @param[in] n_qstate Number of moisture species
341  * @param[in] grav_gpu Gravity
342  * @param[in] r0_arr Reference density field
343  * @param[in] th0_arr Reference potential temperature field
344  * @param[in] qv0_arr Reference water vapor mixing ratio field
345  * @param[in] cell_prim Primitive variable FAB
346  * @param[in] qt_arr Total water mixing ratio field
347  * @return Approximate moist potential-temperature force density [N/m^3]
348  */
349 AMREX_GPU_DEVICE
350 AMREX_FORCE_INLINE
352 buoyancy_moist_Thpert (int& i, int& j, int& k,
353  const int& n_qstate,
354  const amrex::Real& grav_gpu,
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)
360 {
361  amrex::Real qv_hi = (n_qstate >= 1) ? cell_prim(i,j,k ,PrimQ1_comp) : zero;
362  amrex::Real qv_lo = (n_qstate >= 1) ? cell_prim(i,j,k-1,PrimQ1_comp) : zero;
363 
364  amrex::Real qt_hi = qt_arr(i,j,k ) - qv_hi;
365  amrex::Real qt_lo = qt_arr(i,j,k-1) - qv_lo;
366 
367  amrex::Real dth_hi = cell_prim(i,j,k ,PrimTheta_comp) - th0_arr(i,j,k );
368  amrex::Real dth_lo = cell_prim(i,j,k-1,PrimTheta_comp) - th0_arr(i,j,k-1);
369 
370  amrex::Real qv0_hi = qv0_arr(i,j,k );
371  amrex::Real qv0_lo = qv0_arr(i,j,k-1);
372 
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);
375 
376  amrex::Real qavg = myhalf * (q_hi + q_lo);
377 
378  amrex::Real r0avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
379 
380  return ( -r0avg * grav_gpu * qavg);
381 }
382 
383 
384 #endif
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