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 
7 /**
8  * Compute dry anelastic vertical perturbational gravitational force density [N/m^3].
9  *
10  * @param[in] i x-index
11  * @param[in] j y-index
12  * @param[in] k z-index
13  * @param[in] grav_gpu Gravity
14  * @param[in] r0_arr Dry reference density field
15  * @param[in] th0_arr Reference potential temperature field
16  * @param[in] cell_data State data FAB
17  * @return Dry anelastic vertical force density [N/m^3]
18  */
19 AMREX_GPU_DEVICE
20 AMREX_FORCE_INLINE
22 buoyancy_dry_anelastic (int& i, int& j, int& k,
23  const amrex::Real& grav_gpu,
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)
27 {
28  // The dry anelastic branch averages theta and theta0 before forming their ratio.
29  amrex::Real theta_d_hi = cell_data(i,j,k ,RhoTheta_comp)/cell_data(i,j,k ,Rho_comp);
30  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
31 
32  amrex::Real theta_d_wface = myhalf * (theta_d_lo + theta_d_hi);
33  amrex::Real theta_d0_wface = myhalf * (th0_arr(i,j,k) + th0_arr(i,j,k-1));
34  amrex::Real rho0_wface = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
35 
36  return (-rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface);
37 }
38 
39 /**
40  * Compute dry anelastic force density with embedded boundary handling.
41  *
42  * @param[in] i x-index
43  * @param[in] j y-index
44  * @param[in] k z-index
45  * @param[in] grav_gpu Gravity
46  * @param[in] r0_arr Reference density field
47  * @param[in] th0_arr Reference potential temperature field
48  * @param[in] cell_data State data FAB
49  * @param[in] flag EB cell flags
50  * @return Dry anelastic vertical force density [N/m^3]
51  */
52 AMREX_GPU_DEVICE
53 AMREX_FORCE_INLINE
55 buoyancy_dry_anelastic_eb (int& i, int& j, int& k,
56  const amrex::Real& grav_gpu,
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)
61 {
62  amrex::Real buoyancy = zero;
63  if (flag(i,j,k).isRegular()) {
64  amrex::Real theta_d_hi = cell_data(i,j,k ,RhoTheta_comp)/cell_data(i,j,k ,Rho_comp);
65  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
66  amrex::Real theta_d_wface = myhalf * (theta_d_lo + theta_d_hi);
67  amrex::Real theta_d0_wface = myhalf * (th0_arr(i,j,k) + th0_arr(i,j,k-1));
68  amrex::Real rho0_wface = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
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()) {
72  amrex::Real theta_d_hihi = cell_data(i,j,k+1,RhoTheta_comp)/cell_data(i,j,k+1,Rho_comp);
73  amrex::Real theta_d_hi = cell_data(i,j,k ,RhoTheta_comp)/cell_data(i,j,k ,Rho_comp);
74  amrex::Real theta_d_wface = myhalf * (three*theta_d_hi - theta_d_hihi);
75  amrex::Real theta_d0_wface = myhalf * (three*th0_arr(i,j,k) - th0_arr(i,j,k+1));
76  amrex::Real rho0_wface = myhalf * (three*r0_arr(i,j,k) - r0_arr(i,j,k+1));
77  buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
78  } else if (flag(i,j,k).isCovered()) {
79  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
80  amrex::Real theta_d_lolo = cell_data(i,j,k-2,RhoTheta_comp)/cell_data(i,j,k-2,Rho_comp);
81  amrex::Real theta_d_wface = myhalf * (three*theta_d_lo - theta_d_lolo);
82  amrex::Real theta_d0_wface = myhalf * (three*th0_arr(i,j,k-1) - th0_arr(i,j,k-2));
83  amrex::Real rho0_wface = myhalf * (three*r0_arr(i,j,k-1) - r0_arr(i,j,k-2));
84  buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
85  } else {
86  amrex::Real theta_d_hi = cell_data(i,j,k ,RhoTheta_comp)/cell_data(i,j,k ,Rho_comp);
87  amrex::Real theta_d_lo = cell_data(i,j,k-1,RhoTheta_comp)/cell_data(i,j,k-1,Rho_comp);
88  amrex::Real theta_d_wface = myhalf * (theta_d_lo + theta_d_hi);
89  amrex::Real theta_d0_wface = myhalf * (th0_arr(i,j,k) + th0_arr(i,j,k-1));
90  amrex::Real rho0_wface = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
91  buoyancy = -rho0_wface * grav_gpu * (theta_d_wface - theta_d0_wface) / theta_d0_wface;
92  }
93  }
94  return buoyancy;
95 }
96 
97 /**
98  * Compute the exact total-density-perturbation gravitational force density [N/m^3].
99  *
100  * @param[in] i x-index
101  * @param[in] j y-index
102  * @param[in] k z-index
103  * @param[in] grav_gpu Gravity
104  * @param[in] r0_arr Dry reference density field
105  * @param[in] qv0_arr Reference water vapor mixing ratio field
106  * @param[in] cell_data Conserved state FAB
107  * @param[in] qt_arr Total water mixing ratio field
108  * @return Vertical perturbational gravitational force density [N/m^3]
109  */
110 AMREX_GPU_DEVICE
111 AMREX_FORCE_INLINE
113 buoyancy_rhopert (int& i, int& j, int& k,
114  const amrex::Real& grav_gpu,
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)
119 {
120  amrex::Real rhop_hi = cell_data(i,j,k ,Rho_comp) * (one + qt_arr(i,j,k )) -
121  r0_arr(i,j,k ) * (one + qv0_arr(i,j,k ));
122  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
123  r0_arr(i,j,k-1 ) * (one + qv0_arr(i,j,k-1));
124  return( grav_gpu * myhalf * ( rhop_hi + rhop_lo ) );
125 }
126 
127 /**
128  * Compute type-1 total-density-perturbation force density with EB handling.
129  *
130  * @param[in] i x-index
131  * @param[in] j y-index
132  * @param[in] k z-index
133  * @param[in] grav_gpu Gravity
134  * @param[in] r0_arr Reference density field
135  * @param[in] qv0_arr Reference water vapor mixing ratio field
136  * @param[in] cell_data State data FAB
137  * @param[in] qt_arr Total water mixing ratio field
138  * @param[in] flag EB cell flags
139  * @return Vertical perturbational gravitational force density [N/m^3]
140  */
141 AMREX_GPU_DEVICE
142 AMREX_FORCE_INLINE
144 buoyancy_rhopert_eb (int& i, int& j, int& k,
145  const amrex::Real& grav_gpu,
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)
151 {
152  amrex::Real buoyancy = zero;
153  if (flag(i,j,k).isRegular()) {
154  amrex::Real rhop_hi = cell_data(i,j,k ,Rho_comp) * (one + qt_arr(i,j,k )) -
155  r0_arr(i,j,k ) * (one + qv0_arr(i,j,k ));
156  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
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()) {
161  amrex::Real rhop_hihi = cell_data(i,j,k+1,Rho_comp) * (one + qt_arr(i,j,k+1)) -
162  r0_arr(i,j,k+1 ) * (one + qv0_arr(i,j,k+1));
163  amrex::Real rhop_hi = cell_data(i,j,k ,Rho_comp) * (one + qt_arr(i,j,k )) -
164  r0_arr(i,j,k ) * (one + qv0_arr(i,j,k ));
165  buoyancy = grav_gpu * myhalf * ( three * rhop_hi - rhop_hihi );
166  // buoyancy = grav_gpu * rhop_hi;
167  } else if (flag(i,j,k).isCovered()) {
168  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
169  r0_arr(i,j,k-1 ) * (one + qv0_arr(i,j,k-1));
170  amrex::Real rhop_lolo = cell_data(i,j,k-2,Rho_comp) * (one + qt_arr(i,j,k-2)) -
171  r0_arr(i,j,k-2 ) * (one + qv0_arr(i,j,k-2));
172  buoyancy = grav_gpu * myhalf * ( three * rhop_lo - rhop_lolo );
173  // buoyancy = grav_gpu * rhop_lo;
174  } else {
175  amrex::Real rhop_hi = cell_data(i,j,k ,Rho_comp) * (one + qt_arr(i,j,k )) -
176  r0_arr(i,j,k ) * (one + qv0_arr(i,j,k ));
177  amrex::Real rhop_lo = cell_data(i,j,k-1,Rho_comp) * (one + qt_arr(i,j,k-1)) -
178  r0_arr(i,j,k-1 ) * (one + qv0_arr(i,j,k-1));
179  buoyancy = grav_gpu * myhalf * ( rhop_hi + rhop_lo );
180  }
181  }
182  return buoyancy;
183 }
184 
185 /**
186  * Compute approximate dry temperature-perturbation force density [N/m^3].
187  * Compressible selectors 2 and 3 both dispatch to this implementation.
188  *
189  * @param[in] i x-index
190  * @param[in] j y-index
191  * @param[in] k z-index
192  * @param[in] grav_gpu Gravity
193  * @param[in] r0_arr Reference density field
194  * @param[in] p0_arr Reference pressure field
195  * @param[in] th0_arr Reference potential temperature field
196  * @param[in] cell_data State data FAB
197  * @return Approximate dry temperature force density [N/m^3]
198  */
199 AMREX_GPU_DEVICE
200 AMREX_FORCE_INLINE
202 buoyancy_dry_Tpert (int& i, int& j, int& k,
203  const amrex::Real& grav_gpu,
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)
208 {
209  amrex::Real t0_hi = getTgivenPandTh(p0_arr(i,j,k), th0_arr(i,j,k), RdoCp);
210  amrex::Real t_hi = getTgivenRandRTh(cell_data(i,j,k ,Rho_comp), cell_data(i,j,k ,RhoTheta_comp));
211 
212  amrex::Real t0_lo = getTgivenPandTh(p0_arr(i,j,k-1), th0_arr(i,j,k-1), RdoCp);
213  amrex::Real t_lo = getTgivenRandRTh(cell_data(i,j,k-1,Rho_comp), cell_data(i,j,k-1,RhoTheta_comp));
214 
215  amrex::Real tprime_hi = (t_hi-t0_hi)/t0_hi;
216  amrex::Real tprime_lo = (t_lo-t0_lo)/t0_lo;
217 
218  amrex::Real tp_avg = myhalf * (tprime_hi + tprime_lo);
219  amrex::Real r0_avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
220 
221  return ( -r0_avg * grav_gpu * tp_avg);
222 }
223 
224 /**
225  * Compute approximate dry potential-temperature force density [N/m^3].
226  *
227  * @param[in] i x-index
228  * @param[in] j y-index
229  * @param[in] k z-index
230  * @param[in] grav_gpu Gravity
231  * @param[in] r0_arr Reference density field
232  * @param[in] th0_arr Reference potential temperature field
233  * @param[in] cell_prim Primitive variable FAB
234  * @return Approximate dry potential-temperature force density [N/m^3]
235  */
236 AMREX_GPU_DEVICE
237 AMREX_FORCE_INLINE
239 buoyancy_dry_Thpert (int& i, int& j, int& k,
240  const amrex::Real& grav_gpu,
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)
244 {
245  amrex::Real thetaprime_hi = (cell_prim(i,j,k ,PrimTheta_comp) - th0_arr(i,j,k )) / th0_arr(i,j,k );
246  amrex::Real thetaprime_lo = (cell_prim(i,j,k-1,PrimTheta_comp) - th0_arr(i,j,k-1)) / th0_arr(i,j,k-1);
247 
248  amrex::Real thp_avg = myhalf * (thetaprime_hi + thetaprime_lo);
249  amrex::Real r0_avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
250 
251  return ( -r0_avg * grav_gpu * thp_avg);
252 }
253 
254 /**
255  * Compute approximate moist temperature-perturbation force density [N/m^3].
256  * Compressible selectors 2 and 3 both dispatch to this implementation.
257  *
258  * @param[in] i x-index
259  * @param[in] j y-index
260  * @param[in] k z-index
261  * @param[in] n_qstate Number of moisture species
262  * @param[in] grav_gpu Gravity
263  * @param[in] r0_arr Reference density field
264  * @param[in] th0_arr Reference potential temperature field
265  * @param[in] qv0_arr Reference water vapor mixing ratio field
266  * @param[in] p0_arr Reference pressure field
267  * @param[in] cell_prim Primitive variable FAB
268  * @param[in] cell_data State data FAB
269  * @param[in] qt_arr Total water mixing ratio field
270  * @return Approximate moist temperature force density [N/m^3]
271  */
272 AMREX_GPU_DEVICE
273 AMREX_FORCE_INLINE
275 buoyancy_moist_Tpert (int& i, int& j, int& k,
276  const int& n_qstate,
277  const amrex::Real& grav_gpu,
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)
285 {
286  amrex::Real qv_hi = (n_qstate >= 1) ? cell_prim(i,j,k ,PrimQ1_comp) : zero;
287  amrex::Real qv_lo = (n_qstate >= 1) ? cell_prim(i,j,k-1,PrimQ1_comp) : zero;
288 
289  amrex::Real t0_hi = getTgivenPandTh(p0_arr(i,j,k ), th0_arr(i,j,k ), RdoCp);
290  amrex::Real t0_lo = getTgivenPandTh(p0_arr(i,j,k-1), th0_arr(i,j,k-1), RdoCp);
291 
292  amrex::Real dt_hi = getTgivenRandRTh(cell_data(i,j,k ,Rho_comp), cell_data(i,j,k ,RhoTheta_comp), qv_hi) - t0_hi;
293  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;
294 
295  amrex::Real qv0_hi = qv0_arr(i,j,k );
296  amrex::Real qv0_lo = qv0_arr(i,j,k-1);
297 
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;
300 
301  amrex::Real qavg = myhalf * (q_hi + q_lo);
302 
303  amrex::Real r0avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
304 
305  return ( -r0avg * grav_gpu * qavg);
306 }
307 
308 /**
309  * Compute approximate moist potential-temperature force density [N/m^3].
310  *
311  * @param[in] i x-index
312  * @param[in] j y-index
313  * @param[in] k z-index
314  * @param[in] n_qstate Number of moisture species
315  * @param[in] grav_gpu Gravity
316  * @param[in] r0_arr Reference density field
317  * @param[in] th0_arr Reference potential temperature field
318  * @param[in] qv0_arr Reference water vapor mixing ratio field
319  * @param[in] cell_prim Primitive variable FAB
320  * @param[in] qt_arr Total water mixing ratio field
321  * @return Approximate moist potential-temperature force density [N/m^3]
322  */
323 AMREX_GPU_DEVICE
324 AMREX_FORCE_INLINE
326 buoyancy_moist_Thpert (int& i, int& j, int& k,
327  const int& n_qstate,
328  const amrex::Real& grav_gpu,
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)
334 {
335  amrex::Real qv_hi = (n_qstate >= 1) ? cell_prim(i,j,k ,PrimQ1_comp) : zero;
336  amrex::Real qv_lo = (n_qstate >= 1) ? cell_prim(i,j,k-1,PrimQ1_comp) : zero;
337 
338  amrex::Real qt_hi = qt_arr(i,j,k ) - qv_hi;
339  amrex::Real qt_lo = qt_arr(i,j,k-1) - qv_lo;
340 
341  amrex::Real dth_hi = cell_prim(i,j,k ,PrimTheta_comp) - th0_arr(i,j,k );
342  amrex::Real dth_lo = cell_prim(i,j,k-1,PrimTheta_comp) - th0_arr(i,j,k-1);
343 
344  amrex::Real qv0_hi = qv0_arr(i,j,k );
345  amrex::Real qv0_lo = qv0_arr(i,j,k-1);
346 
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);
349 
350  amrex::Real qavg = myhalf * (q_hi + q_lo);
351 
352  amrex::Real r0avg = myhalf * (r0_arr(i,j,k) + r0_arr(i,j,k-1));
353 
354  return ( -r0avg * grav_gpu * qavg);
355 }
356 
357 
358 #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: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