ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_Utils.H
Go to the documentation of this file.
1 #ifndef ERF_UTILS_H_
2 #define ERF_UTILS_H_
3 
4 #include "AMReX.H"
5 #include "AMReX_MultiFab.H"
6 #include "AMReX_BCRec.H"
7 #include "ERF_DataStruct.H"
8 #include "ERF_IndexDefines.H"
9 #include "ERF_SurfaceLayer.H"
10 #include "ERF_FillPatcher.H"
11 #include "ERF_ReadBndryPlanes.H"
12 
13 /*
14  * Create a new BoxArray in which every grid touches the bottom boundary
15  */
16 void ChopGrids2D (amrex::BoxArray& ba, const amrex::Box& domain, int target_size);
17 
18 /*
19  * Create a new BoxArray with exactly the number of boxes as MPI ranks.
20  * This is designed to work only on the base level which covers the entire domain.
21  */
22 amrex::BoxArray
23 ERFPostProcessBaseGrids (const amrex::Box& domain, bool decompose_in_z);
24 
25 /*
26  * Create the Jacobian for the metric transformation when use_terrain is true
27  */
28 void make_J (const amrex::Geometry& geom,
29  amrex::MultiFab& z_phys_nd,
30  amrex::MultiFab& detJ_cc);
31 
32 void make_areas (const amrex::Geometry& geom,
33  amrex::MultiFab& z_phys_nd,
34  amrex::MultiFab& ax,
35  amrex::MultiFab& ay,
36  amrex::MultiFab& az);
37 
38 /*
39  * Average z_phys_nd on nodes to cell centers
40  */
41 void make_zcc (const amrex::Geometry& geom,
42  amrex::MultiFab& z_phys_nd,
43  amrex::MultiFab& z_phys_cc);
44 
45 /*
46  * Convert momentum to velocity by dividing by density averaged onto faces
47  */
48 void MomentumToVelocity (amrex::MultiFab& xvel_out,
49  amrex::MultiFab& yvel_out,
50  amrex::MultiFab& zvel_out,
51  const amrex::MultiFab& cons_in,
52  const amrex::MultiFab& xmom_in,
53  const amrex::MultiFab& ymom_in,
54  const amrex::MultiFab& zmom_in,
55  const amrex::Box& domain,
56  const amrex::Vector<amrex::BCRec>& domain_bcs_type_h,
57  const amrex::MultiFab* c_vfrac = nullptr // optional
58  );
59 
60 /*
61  * Convert velocity to momentum by multiplying by density averaged onto faces
62  */
63 void VelocityToMomentum (const amrex::MultiFab& xvel_in,
64  const amrex::IntVect & xvel_ngrow,
65  const amrex::MultiFab& yvel_in,
66  const amrex::IntVect & yvel_ngrow,
67  const amrex::MultiFab& zvel_in,
68  const amrex::IntVect & zvel_ngrow,
69  const amrex::MultiFab& cons_in,
70  amrex::MultiFab& xmom_out,
71  amrex::MultiFab& ymom_out,
72  amrex::MultiFab& zmom_out,
73  const amrex::Box& domain,
74  const amrex::Vector<amrex::BCRec>& domain_bcs_type_h,
75  const amrex::MultiFab* c_vfrac = nullptr // optional
76  );
77 
78 /*
79  * Convert (den_div u) to (den_mlt u) by multiplying by (den_mlt/den_div)
80  */
81 void
82 ConvertForProjection (const amrex::MultiFab& den_div, const amrex::MultiFab& den_mlt,
83  amrex::MultiFab& xmom, amrex::MultiFab& ymom, amrex::MultiFab& zmom,
84  const amrex::Box& domain, const amrex::Vector<amrex::BCRec>& domain_bcs_type_h);
85 
86 /*
87  * \brief Enforces solvability by scaling outflow to match with inflow.
88  *
89  */
91  amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& vels_vec,
92  amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& area_vec,
93  const amrex::Geometry& geom);
94 
95 /*
96  * Compute boxes for looping over interior/exterior ghost cells
97  * for use by fillpatch, erf_slow_rhs_pre, and erf_slow_rhs_post
98  */
99 void realbdy_interior_bxs_xy (const amrex::Box& bx,
100  const amrex::Box& domain,
101  const int& width,
102  amrex::Box& bx_xlo,
103  amrex::Box& bx_xhi,
104  amrex::Box& bx_ylo,
105  amrex::Box& bx_yhi,
106  const amrex::IntVect& ng_vect=amrex::IntVect(0,0,0),
107  const bool get_int_ng=false);
108 
109 /*
110  * Compute relaxation region RHS with wrfbdy
111  */
113  const amrex::Real& delta_t,
114  const amrex::Real& start_bdy_time,
115  const amrex::Real& final_bdy_time,
116  const amrex::Real& bdy_time_interval,
117  const amrex::Real& nudge_factor,
118  int width,
119  bool do_upwind,
120  const amrex::Geometry& geom,
121  amrex::Vector<amrex::MultiFab>& S_rhs,
122  amrex::Vector<amrex::MultiFab>& S_cur_data,
123  amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_xlo,
124  amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_xhi,
125  amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_ylo,
126  amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_yhi,
127  std::unique_ptr<ReadBndryPlanes>& m_r2d);
128 
129 /*
130  * Compute relaxation region RHS at fine-crse interface
131  */
132 void
134  const amrex::Real& delta_t,
135  const int& width,
136  const int& set_width,
137  const amrex::Geometry& geom,
138  ERFFillPatcher* FPr_c,
139  ERFFillPatcher* FPr_u,
140  ERFFillPatcher* FPr_v,
141  ERFFillPatcher* FPr_w,
142  amrex::Vector<amrex::BCRec>& domain_bcs_type,
143  amrex::Vector<amrex::MultiFab>& S_rhs_f,
144  amrex::Vector<amrex::MultiFab>& S_data_f);
145 
146 /*
147  * Accumulate time averaged velocity fields
148  */
149 void
151  amrex::Real& t_avg_cnt,
152  amrex::MultiFab* vel_t_avg,
153  amrex::MultiFab& xvel,
154  amrex::MultiFab& yvel,
155  amrex::MultiFab& zvel);
156 
157 /**
158  * Compute the nudging relaxation
159  *
160  * @param[in] delta_t time step
161  * @param[in] icomp component offset
162  * @param[in] num_var number of variables to loop
163  * @param[in] width width of wrf bdy file
164  * @param[in] dom_lo low bound of domain
165  * @param[in] dom_hi high bound of domain
166  * @param[in] F1 drift relaxation parameter
167  * @param[in] F2 Laplacian relaxation parameter
168  * @param[in] bx_xlo box for low x relaxation
169  * @param[in] bx_xhi box for high x relaxation
170  * @param[in] bx_ylo box for low y relaxation
171  * @param[in] bx_yhi box for high y relaxation
172  * @param[in] arr_xlo array for low x relaxation
173  * @param[in] arr_xhi array for high x relaxation
174  * @param[in] arr_ylo array for low y relaxation
175  * @param[in] arr_yhi array for high y relaxation
176  * @param[in] data_arr data array
177  * @param[out] rhs_arr RHS array
178  */
179 AMREX_GPU_HOST
180 AMREX_FORCE_INLINE
181 void
182 realbdy_compute_relaxation (const int& icomp,
183  const int& num_var,
184  const int& width,
185  const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& dx,
186  const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& ProbLo,
187  const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& ProbHi,
188  const amrex::Real& F1,
189  const amrex::Box& domain_cc,
190  const amrex::Box& bx_xlo,
191  const amrex::Box& bx_xhi,
192  const amrex::Box& bx_ylo,
193  const amrex::Box& bx_yhi,
194  const amrex::Array4<const amrex::Real>& arr_xlo,
195  const amrex::Array4<const amrex::Real>& arr_xhi,
196  const amrex::Array4<const amrex::Real>& arr_ylo,
197  const amrex::Array4<const amrex::Real>& arr_yhi,
198  const amrex::Array4<const amrex::Real>& u_xlo,
199  const amrex::Array4<const amrex::Real>& u_xhi,
200  const amrex::Array4<const amrex::Real>& v_xlo,
201  const amrex::Array4<const amrex::Real>& v_xhi,
202  const amrex::Array4<const amrex::Real>& v_ylo,
203  const amrex::Array4<const amrex::Real>& v_yhi,
204  const amrex::Array4<const amrex::Real>& data_arr,
205  const amrex::Array4<amrex::Real>& rhs_arr,
206  const bool& do_upwind)
207 {
208  amrex::IntVect iv = bx_xlo.type();
209  amrex::Real ioff = (iv[0]==1) ? 0.0 : 0.5;
210  amrex::Real joff = (iv[1]==1) ? 0.0 : 0.5;
211  const auto& dom_cc_lo = lbound(domain_cc);
212  const auto& dom_cc_hi = ubound(domain_cc);
213  amrex::ParallelFor(bx_xlo, num_var, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
214  {
215  // Corners with x boxes
216  amrex::Real x = ProbLo[0] + (i + ioff) * dx[0];
217  amrex::Real y = ProbLo[1] + (j + joff) * dx[1];
218  amrex::Real x_end = ProbLo[0] + width * dx[0];
219  amrex::Real y_end = ProbLo[1] + width * dx[1];
220  amrex::Real y_strt = ProbHi[1] - width * dx[1];
221  amrex::Real xi = (x_end - x) / (x_end - ProbLo[0]);
222  amrex::Real eta_lo = (y < y_end ) ? (y_end - y) / (y_end - ProbLo[1]) : 0.0;
223  amrex::Real eta_hi = (y > y_strt) ? (y - y_strt) / (ProbHi[1] - y_strt) : 0.0;
224  amrex::Real eta = std::max(eta_lo,eta_hi);
225  amrex::Real Factor = std::max(xi*xi,eta*eta);
226 
227  amrex::Real delta = arr_xlo(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
228  amrex::Real Temp = Factor*F1*delta;
229  if (!do_upwind) {
230  rhs_arr(i,j,k,n+icomp) += Temp;
231  } else {
232  int jju = std::min(std::max(j,dom_cc_lo.y),dom_cc_hi.y);
233  int iiv = std::min(std::max(i,dom_cc_lo.x),dom_cc_hi.x);
234  if ( (u_xlo(dom_cc_lo.x,jju,k) >= 0.0) ||
235  ((j == dom_cc_lo.y ) && (v_xlo(iiv,dom_cc_lo.y ,k) >= 0.0)) ||
236  ((j == dom_cc_hi.y+iv[1]) && (v_xlo(iiv,dom_cc_hi.y+1,k) <= 0.0)) ) {
237  rhs_arr(i,j,k,n+icomp) += Temp;
238  }
239  }
240  },
241  bx_xhi, num_var, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
242  {
243  // Corners with x boxes
244  amrex::Real x = ProbLo[0] + (i + ioff) * dx[0];
245  amrex::Real y = ProbLo[1] + (j + joff) * dx[1];
246  amrex::Real x_strt = ProbHi[0] - width * dx[0];
247  amrex::Real y_strt = ProbHi[1] - width * dx[1];
248  amrex::Real y_end = ProbLo[1] + width * dx[1];
249  amrex::Real xi = (x - x_strt) / (ProbHi[0] - x_strt);
250  amrex::Real eta_lo = (y < y_end ) ? (y_end - y) / (y_end - ProbLo[1]) : 0.0;
251  amrex::Real eta_hi = (y > y_strt) ? (y - y_strt) / (ProbHi[1] - y_strt) : 0.0;
252  amrex::Real eta = std::max(eta_lo,eta_hi);
253  amrex::Real Factor = std::max(xi*xi,eta*eta);
254 
255  amrex::Real delta = arr_xhi(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
256  amrex::Real Temp = Factor*F1*delta;
257  if (!do_upwind) {
258  rhs_arr(i,j,k,n+icomp) += Temp;
259  } else {
260  int jju = std::min(std::max(j,dom_cc_lo.y),dom_cc_hi.y);
261  int iiv = std::min(std::max(i,dom_cc_lo.x),dom_cc_hi.x);
262  if ( (u_xhi(dom_cc_hi.x+1,jju,k) <= 0.0) ||
263  ((j == dom_cc_lo.y ) && (v_xhi(iiv,dom_cc_lo.y ,k) >= 0.0)) ||
264  ((j == dom_cc_hi.y+iv[1]) && (v_xhi(iiv,dom_cc_hi.y+1,k) <= 0.0)) ) {
265  rhs_arr(i,j,k,n+icomp) += Temp;
266  }
267  }
268  });
269 
270  amrex::ParallelFor(bx_ylo, num_var, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
271  {
272  // No corners for y boxes
273  amrex::Real y = ProbLo[1] + (j + joff) * dx[1];
274  amrex::Real y_end = ProbLo[1] + width * dx[1];
275  amrex::Real eta = (y_end - y) / (y_end - ProbLo[1]);
276  amrex::Real Factor = eta*eta;
277 
278  amrex::Real delta = arr_ylo(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
279  amrex::Real Temp = Factor*F1*delta;
280  if (!do_upwind) {
281  rhs_arr(i,j,k,n+icomp) += Temp;
282  } else {
283  int iiv = std::min(std::max(i,dom_cc_lo.x+width),dom_cc_hi.x-width);
284  if (v_ylo(iiv,dom_cc_lo.y,k) >= 0.0) {
285  rhs_arr(i,j,k,n+icomp) += Temp;
286  }
287  }
288  },
289  bx_yhi, num_var, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
290  {
291  // No corners for y boxes
292  amrex::Real y = ProbLo[1] + (j + joff) * dx[1];
293  amrex::Real y_strt = ProbHi[1] - width * dx[1];
294  amrex::Real eta = (y - y_strt) / (ProbHi[1] - y_strt);
295  amrex::Real Factor = eta*eta;
296 
297  amrex::Real delta = arr_yhi(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
298  amrex::Real Temp = Factor*F1*delta;
299  if (!do_upwind) {
300  rhs_arr(i,j,k,n+icomp) += Temp;
301  } else {
302  int iiv = std::min(std::max(i,dom_cc_lo.x+width),dom_cc_hi.x-width);
303  if (v_yhi(iiv,dom_cc_hi.y+1,k) >= 0.0) {
304  rhs_arr(i,j,k,n+icomp) += Temp;
305  }
306  }
307  });
308 }
309 
310 /*
311  * Effectively a Multiply for a MultiFab and an iMultiFab mask
312  */
313 AMREX_GPU_HOST
314 AMREX_FORCE_INLINE
315 void
316 ApplyMask (amrex::MultiFab& dst,
317  const amrex::iMultiFab& imask,
318  const int nghost = 0)
319 {
320  for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
321  {
322  const amrex::Box& bx = mfi.growntilebox(nghost);
323  if (bx.ok())
324  {
325  auto dstFab = dst.array(mfi);
326  const auto maskFab = imask.const_array(mfi);
327  ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
328  {
329  dstFab(i,j,k) *= maskFab(i,j,k);
330  });
331  }
332  }
333 }
334 
335 AMREX_GPU_HOST
336 AMREX_FORCE_INLINE
337 void
338 ApplyInvertedMask (amrex::MultiFab& dst,
339  const amrex::iMultiFab& imask,
340  const int nghost = 0)
341 {
342  for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
343  {
344  const amrex::Box& bx = mfi.growntilebox(nghost);
345  if (bx.ok())
346  {
347  auto dstFab = dst.array(mfi);
348  const auto maskFab = imask.const_array(mfi);
349  ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
350  {
351  dstFab(i,j,k) *= (1-maskFab(i,j,k));
352  });
353  }
354  }
355 }
356 
357 void
358 thinbody_wall_dist (std::unique_ptr<amrex::MultiFab>& wdist,
359  amrex::Vector<amrex::IntVect>& xfaces,
360  amrex::Vector<amrex::IntVect>& yfaces,
361  amrex::Vector<amrex::IntVect>& zfaces,
362  const amrex::Geometry& geomdata,
363  std::unique_ptr<amrex::MultiFab>& z_phys_cc);
364 
365 
367 
368 AMREX_GPU_HOST_DEVICE
369 AMREX_FORCE_INLINE
373  amrex::Real z1, amrex::Real p1,
374  amrex::Real z2, amrex::Real p2)
375 {
376  return p0 * ( (z - z1) * (z - z2) ) / ( (z0 - z1) * (z0 - z2) )
377  + p1 * ( (z - z0) * (z - z2) ) / ( (z1 - z0) * (z1 - z2) )
378  + p2 * ( (z - z0) * (z - z1) ) / ( (z2 - z0) * (z2 - z1) );
379 }
380 
381 #endif
Real z0
Definition: ERF_InitCustomPertVels_ScalarAdvDiff.H:8
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const auto prob_lo=geomdata.ProbLo();const auto dx=geomdata.CellSize();const Real x=(prob_lo[0]+(i+0.5) *dx[0])/mf_m(i, j, 0);const Real z=z_cc(i, j, k);Real L=std::sqrt(std::pow((x - x_c)/x_r, 2)+std::pow((z - z_c)/z_r, 2));if(L<=1.0) { Real dT=T_pert *(std::cos(PI *L)+1.0)/2.0;Real Tbar_hse=p_hse(i, j, k)/(R_d *r_hse(i, j, k));Real theta_perturbed=(Tbar_hse+dT) *std::pow(p_0/p_hse(i, j, k), rdOcp);Real theta_0=(Tbar_hse) *std::pow(p_0/p_hse(i, j, k), rdOcp);if(const_rho) { state_pert(i, j, k, RhoTheta_comp)=r_hse(i, j, k) *(theta_perturbed - theta_0);} else { state_pert(i, j, k, Rho_comp)=getRhoThetagivenP(p_hse(i, j, k))/theta_perturbed - r_hse(i, j, k);} } })
amrex::Real Real
Definition: ERF_ShocInterface.H:19
void MomentumToVelocity(amrex::MultiFab &xvel_out, amrex::MultiFab &yvel_out, amrex::MultiFab &zvel_out, const amrex::MultiFab &cons_in, const amrex::MultiFab &xmom_in, const amrex::MultiFab &ymom_in, const amrex::MultiFab &zmom_in, const amrex::Box &domain, const amrex::Vector< amrex::BCRec > &domain_bcs_type_h, const amrex::MultiFab *c_vfrac=nullptr)
void VelocityToMomentum(const amrex::MultiFab &xvel_in, const amrex::IntVect &xvel_ngrow, const amrex::MultiFab &yvel_in, const amrex::IntVect &yvel_ngrow, const amrex::MultiFab &zvel_in, const amrex::IntVect &zvel_ngrow, const amrex::MultiFab &cons_in, amrex::MultiFab &xmom_out, amrex::MultiFab &ymom_out, amrex::MultiFab &zmom_out, const amrex::Box &domain, const amrex::Vector< amrex::BCRec > &domain_bcs_type_h, const amrex::MultiFab *c_vfrac=nullptr)
void WeatherDataInterpolation(const amrex::Real time)
void fine_compute_interior_ghost_rhs(const amrex::Real &time, const amrex::Real &delta_t, const int &width, const int &set_width, const amrex::Geometry &geom, ERFFillPatcher *FPr_c, ERFFillPatcher *FPr_u, ERFFillPatcher *FPr_v, ERFFillPatcher *FPr_w, amrex::Vector< amrex::BCRec > &domain_bcs_type, amrex::Vector< amrex::MultiFab > &S_rhs_f, amrex::Vector< amrex::MultiFab > &S_data_f)
AMREX_GPU_HOST AMREX_FORCE_INLINE void realbdy_compute_relaxation(const int &icomp, const int &num_var, const int &width, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dx, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &ProbLo, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &ProbHi, const amrex::Real &F1, const amrex::Box &domain_cc, const amrex::Box &bx_xlo, const amrex::Box &bx_xhi, const amrex::Box &bx_ylo, const amrex::Box &bx_yhi, const amrex::Array4< const amrex::Real > &arr_xlo, const amrex::Array4< const amrex::Real > &arr_xhi, const amrex::Array4< const amrex::Real > &arr_ylo, const amrex::Array4< const amrex::Real > &arr_yhi, const amrex::Array4< const amrex::Real > &u_xlo, const amrex::Array4< const amrex::Real > &u_xhi, const amrex::Array4< const amrex::Real > &v_xlo, const amrex::Array4< const amrex::Real > &v_xhi, const amrex::Array4< const amrex::Real > &v_ylo, const amrex::Array4< const amrex::Real > &v_yhi, const amrex::Array4< const amrex::Real > &data_arr, const amrex::Array4< amrex::Real > &rhs_arr, const bool &do_upwind)
Definition: ERF_Utils.H:182
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real quad_interp_1d(amrex::Real z, amrex::Real z0, amrex::Real p0, amrex::Real z1, amrex::Real p1, amrex::Real z2, amrex::Real p2)
Definition: ERF_Utils.H:371
void realbdy_compute_interior_ghost_rhs(const amrex::Real &total_time, const amrex::Real &delta_t, const amrex::Real &start_bdy_time, const amrex::Real &final_bdy_time, const amrex::Real &bdy_time_interval, const amrex::Real &nudge_factor, int width, bool do_upwind, const amrex::Geometry &geom, amrex::Vector< amrex::MultiFab > &S_rhs, amrex::Vector< amrex::MultiFab > &S_cur_data, amrex::Vector< amrex::Vector< amrex::FArrayBox >> &bdy_data_xlo, amrex::Vector< amrex::Vector< amrex::FArrayBox >> &bdy_data_xhi, amrex::Vector< amrex::Vector< amrex::FArrayBox >> &bdy_data_ylo, amrex::Vector< amrex::Vector< amrex::FArrayBox >> &bdy_data_yhi, std::unique_ptr< ReadBndryPlanes > &m_r2d)
void thinbody_wall_dist(std::unique_ptr< amrex::MultiFab > &wdist, amrex::Vector< amrex::IntVect > &xfaces, amrex::Vector< amrex::IntVect > &yfaces, amrex::Vector< amrex::IntVect > &zfaces, const amrex::Geometry &geomdata, std::unique_ptr< amrex::MultiFab > &z_phys_cc)
amrex::BoxArray ERFPostProcessBaseGrids(const amrex::Box &domain, bool decompose_in_z)
void make_zcc(const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::MultiFab &z_phys_cc)
void realbdy_interior_bxs_xy(const amrex::Box &bx, const amrex::Box &domain, const int &width, amrex::Box &bx_xlo, amrex::Box &bx_xhi, amrex::Box &bx_ylo, amrex::Box &bx_yhi, const amrex::IntVect &ng_vect=amrex::IntVect(0, 0, 0), const bool get_int_ng=false)
void Time_Avg_Vel_atCC(const amrex::Real &dt, amrex::Real &t_avg_cnt, amrex::MultiFab *vel_t_avg, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::MultiFab &zvel)
AMREX_GPU_HOST AMREX_FORCE_INLINE void ApplyInvertedMask(amrex::MultiFab &dst, const amrex::iMultiFab &imask, const int nghost=0)
Definition: ERF_Utils.H:338
void make_J(const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::MultiFab &detJ_cc)
AMREX_GPU_HOST AMREX_FORCE_INLINE void ApplyMask(amrex::MultiFab &dst, const amrex::iMultiFab &imask, const int nghost=0)
Definition: ERF_Utils.H:316
void ConvertForProjection(const amrex::MultiFab &den_div, const amrex::MultiFab &den_mlt, amrex::MultiFab &xmom, amrex::MultiFab &ymom, amrex::MultiFab &zmom, const amrex::Box &domain, const amrex::Vector< amrex::BCRec > &domain_bcs_type_h)
void ChopGrids2D(amrex::BoxArray &ba, const amrex::Box &domain, int target_size)
void enforceInOutSolvability(int lev, amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > &vels_vec, amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > &area_vec, const amrex::Geometry &geom)
void make_areas(const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::MultiFab &ax, amrex::MultiFab &ay, amrex::MultiFab &az)
Definition: ERF_FillPatcher.H:9
@ ymom
Definition: ERF_IndexDefines.H:176
@ zmom
Definition: ERF_IndexDefines.H:177
@ xmom
Definition: ERF_IndexDefines.H:175
@ xvel
Definition: ERF_IndexDefines.H:157
@ zvel
Definition: ERF_IndexDefines.H:159
@ yvel
Definition: ERF_IndexDefines.H:158
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40