5 #include "AMReX_MultiFab.H"
6 #include "AMReX_BCRec.H"
15 void ChopGrids2D (amrex::BoxArray& ba,
const amrex::Box& domain,
int target_size);
27 void make_J (
const amrex::Geometry& geom,
28 amrex::MultiFab& z_phys_nd,
29 amrex::MultiFab& detJ_cc);
32 amrex::MultiFab& z_phys_nd,
41 amrex::MultiFab& z_phys_nd,
42 amrex::MultiFab& z_phys_cc);
48 amrex::MultiFab& yvel_out,
49 amrex::MultiFab& zvel_out,
50 const amrex::MultiFab& cons_in,
51 const amrex::MultiFab& xmom_in,
52 const amrex::MultiFab& ymom_in,
53 const amrex::MultiFab& zmom_in,
54 const amrex::Box& domain,
55 const amrex::Vector<amrex::BCRec>& domain_bcs_type_h,
56 const amrex::MultiFab* c_vfrac =
nullptr
63 const amrex::IntVect & xvel_ngrow,
64 const amrex::MultiFab& yvel_in,
65 const amrex::IntVect & yvel_ngrow,
66 const amrex::MultiFab& zvel_in,
67 const amrex::IntVect & zvel_ngrow,
68 const amrex::MultiFab& cons_in,
69 amrex::MultiFab& xmom_out,
70 amrex::MultiFab& ymom_out,
71 amrex::MultiFab& zmom_out,
72 const amrex::Box& domain,
73 const amrex::Vector<amrex::BCRec>& domain_bcs_type_h,
74 const amrex::MultiFab* c_vfrac =
nullptr
82 amrex::MultiFab&
xmom, amrex::MultiFab&
ymom, amrex::MultiFab&
zmom,
83 const amrex::Box& domain,
const amrex::Vector<amrex::BCRec>& domain_bcs_type_h);
90 const amrex::Box& domain,
96 const int& set_width=0,
97 const amrex::IntVect& ng_vect=amrex::IntVect(0,0,0),
98 const bool get_int_ng=
false);
105 const amrex::Box& domain,
106 const int& set_width,
111 const amrex::IntVect& ng_vect=amrex::IntVect(0,0,0));
122 const amrex::Geometry& geom,
123 amrex::Vector<amrex::MultiFab>& S_rhs,
124 amrex::Vector<amrex::MultiFab>& S_old_data,
125 amrex::Vector<amrex::MultiFab>& S_cur_data,
126 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_xlo,
127 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_xhi,
128 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_ylo,
129 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_yhi);
138 const int& set_width,
139 const amrex::Geometry& geom,
144 amrex::Vector<amrex::BCRec>& domain_bcs_type,
145 amrex::Vector<amrex::MultiFab>& S_rhs_f,
146 amrex::Vector<amrex::MultiFab>& S_data_f);
154 amrex::MultiFab* vel_t_avg,
155 amrex::MultiFab&
xvel,
156 amrex::MultiFab&
yvel,
157 amrex::MultiFab&
zvel);
177 const int& set_width_x,
178 const int& set_width_y,
179 const amrex::Dim3&
dom_lo,
180 const amrex::Dim3&
dom_hi,
181 const amrex::Box& bx_xlo,
182 const amrex::Box& bx_xhi,
183 const amrex::Box& bx_ylo,
184 const amrex::Box& bx_yhi,
185 const amrex::Array4<const amrex::Real>& arr_xlo,
186 const amrex::Array4<const amrex::Real>& arr_xhi,
187 const amrex::Array4<const amrex::Real>& arr_ylo,
188 const amrex::Array4<const amrex::Real>& arr_yhi,
189 const amrex::Array4<const amrex::Real>& data_arr,
190 const amrex::Array4<amrex::Real>& rhs_arr)
192 int Spec_z_x = set_width_x;
193 int Spec_z_y = set_width_y;
194 amrex::ParallelFor(bx_xlo, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
197 int j_lo = std::min(j-
dom_lo.y,width-1);
198 int j_hi = std::min(
dom_hi.y-j,width-1);
199 int jj = std::min(j_lo,j_hi);
200 int n_ind_y = jj + 1;
201 int n_ind_x = i -
dom_lo.x + 1;
202 if ((n_ind_x <= Spec_z_x) || (n_ind_y <= Spec_z_y)) {
203 amrex::Real tend = ( arr_xlo(i,j,k) - data_arr(i,j,k,n+icomp) ) / dt;
204 rhs_arr(i,j,k,n+icomp) = tend;
207 bx_xhi, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
210 int j_lo = std::min(j-
dom_lo.y,width-1);
211 int j_hi = std::min(
dom_hi.y-j,width-1);
212 int jj = std::min(j_lo,j_hi);
213 int n_ind_y = jj + 1;
214 int n_ind_x =
dom_hi.x - i + 1;
215 if ((n_ind_x <= Spec_z_x) || (n_ind_y <= Spec_z_y)) {
216 amrex::Real tend = ( arr_xhi(i,j,k) - data_arr(i,j,k,n+icomp) ) / dt;
217 rhs_arr(i,j,k,n+icomp) = tend;
221 amrex::ParallelFor(bx_ylo, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
224 int n_ind = j -
dom_lo.y + 1;
225 if (n_ind <= Spec_z_y) {
226 amrex::Real tend = ( arr_ylo(i,j,k) - data_arr(i,j,k,n+icomp) ) / dt;
227 rhs_arr(i,j,k,n+icomp) = tend;
230 bx_yhi, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
233 int n_ind =
dom_hi.y - j + 1;
234 if (n_ind <= Spec_z_y) {
235 amrex::Real tend = ( arr_yhi(i,j,k) - data_arr(i,j,k,n+icomp) ) / dt;
236 rhs_arr(i,j,k,n+icomp) = tend;
270 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& dx,
271 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& ProbLo,
272 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& ProbHi,
275 const amrex::Box& bx_xlo,
276 const amrex::Box& bx_xhi,
277 const amrex::Box& bx_ylo,
278 const amrex::Box& bx_yhi,
279 const amrex::Array4<const amrex::Real>& arr_xlo,
280 const amrex::Array4<const amrex::Real>& arr_xhi,
281 const amrex::Array4<const amrex::Real>& arr_ylo,
282 const amrex::Array4<const amrex::Real>& arr_yhi,
283 const amrex::Array4<const amrex::Real>& data_arr,
284 const amrex::Array4<amrex::Real>& rhs_arr)
287 amrex::IntVect iv = bx_xlo.type();
290 amrex::ParallelFor(bx_xlo, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
295 amrex::Real x_end = ProbLo[0] + (width + ioff) * dx[0];
296 amrex::Real y_end = ProbLo[1] + (width + joff) * dx[1];
297 amrex::Real y_strt = ProbHi[1] - (width + joff) * dx[1];
299 amrex::Real eta_lo = (
y < y_end ) ? (y_end -
y) / (y_end - ProbLo[1]) : 0.0;
300 amrex::Real eta_hi = (
y > y_strt) ? (
y - y_strt) / (ProbHi[1] - y_strt) : 0.0;
310 amrex::Real delta_xp = arr_xlo(i+1,j ,k,n) - d_ip1;
311 amrex::Real delta_xm = arr_xlo(i-1,j ,k,n) - d_im1;
312 amrex::Real delta_yp = arr_xlo(i ,j+1,k,n) - d_jp1;
313 amrex::Real delta_ym = arr_xlo(i ,j-1,k,n) - d_jm1;
314 amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
315 amrex::Real Temp = (F1*delta - F2*Laplacian) * Factor;
316 rhs_arr(i,j,k,n+icomp) += Temp;
318 bx_xhi, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
323 amrex::Real x_strt = ProbHi[0] - (width + ioff) * dx[0];
324 amrex::Real y_strt = ProbHi[1] - (width + joff) * dx[1];
325 amrex::Real y_end = ProbLo[1] + (width + joff) * dx[1];
327 amrex::Real eta_lo = (
y < y_end ) ? (y_end -
y) / (y_end - ProbLo[1]) : 0.0;
328 amrex::Real eta_hi = (
y > y_strt) ? (
y - y_strt) / (ProbHi[1] - y_strt) : 0.0;
338 amrex::Real delta_xp = arr_xhi(i+1,j ,k,n) - d_ip1;
339 amrex::Real delta_xm = arr_xhi(i-1,j ,k,n) - d_im1;
340 amrex::Real delta_yp = arr_xhi(i ,j+1,k,n) - d_jp1;
341 amrex::Real delta_ym = arr_xhi(i ,j-1,k,n) - d_jm1;
342 amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
343 amrex::Real Temp = (F1*delta - F2*Laplacian) * Factor;
344 rhs_arr(i,j,k,n+icomp) += Temp;
347 amrex::ParallelFor(bx_ylo, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
351 amrex::Real y_end = ProbLo[1] + (width + joff) * dx[1];
361 amrex::Real delta_xp = arr_ylo(i+1,j ,k,n) - d_ip1;
362 amrex::Real delta_xm = arr_ylo(i-1,j ,k,n) - d_im1;
363 amrex::Real delta_yp = arr_ylo(i ,j+1,k,n) - d_jp1;
364 amrex::Real delta_ym = arr_ylo(i ,j-1,k,n) - d_jm1;
365 amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
366 amrex::Real Temp = (F1*delta - F2*Laplacian) * Factor;
367 rhs_arr(i,j,k,n+icomp) += Temp;
369 bx_yhi, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
373 amrex::Real y_strt = ProbHi[1] - (width + joff) * dx[1];
383 amrex::Real delta_xp = arr_yhi(i+1,j ,k,n) - d_ip1;
384 amrex::Real delta_xm = arr_yhi(i-1,j ,k,n) - d_im1;
385 amrex::Real delta_yp = arr_yhi(i ,j+1,k,n) - d_jp1;
386 amrex::Real delta_ym = arr_yhi(i ,j-1,k,n) - d_jm1;
387 amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
388 amrex::Real Temp = (F1*delta - F2*Laplacian) * Factor;
389 rhs_arr(i,j,k,n+icomp) += Temp;
400 const amrex::iMultiFab& imask,
401 const int nghost = 0)
403 for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
405 const amrex::Box& bx = mfi.growntilebox(nghost);
408 auto dstFab = dst.array(mfi);
409 const auto maskFab = imask.const_array(mfi);
410 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
412 dstFab(i,j,k) *= maskFab(i,j,k);
422 const amrex::iMultiFab& imask,
423 const int nghost = 0)
425 for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
427 const amrex::Box& bx = mfi.growntilebox(nghost);
430 auto dstFab = dst.array(mfi);
431 const auto maskFab = imask.const_array(mfi);
432 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
434 dstFab(i,j,k) *= (1-maskFab(i,j,k));
442 amrex::Vector<amrex::IntVect>& xfaces,
443 amrex::Vector<amrex::IntVect>& yfaces,
444 amrex::Vector<amrex::IntVect>& zfaces,
445 const amrex::Geometry& geomdata,
446 std::unique_ptr<amrex::MultiFab>& z_phys_cc);
const auto & dom_hi
Definition: ERF_DiffSetup.H:10
const auto & dom_lo
Definition: ERF_DiffSetup.H:9
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)
AMREX_GPU_HOST AMREX_FORCE_INLINE void realbdy_set_rhs_in_spec_region(const amrex::Real &dt, const int &icomp, const int &num_var, const int &width, const int &set_width_x, const int &set_width_y, const amrex::Dim3 &dom_lo, const amrex::Dim3 &dom_hi, 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 > &data_arr, const amrex::Array4< amrex::Real > &rhs_arr)
Definition: ERF_Utils.H:173
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)
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)
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 int &set_width=0, const amrex::IntVect &ng_vect=amrex::IntVect(0, 0, 0), const bool get_int_ng=false)
amrex::BoxArray ERFPostProcessBaseGrids(const amrex::Box &domain, bool decompose_in_z)
void realbdy_compute_interior_ghost_rhs(const amrex::Real &bdy_time_interval, const amrex::Real &time, const amrex::Real &delta_t, const amrex::Real &stop_time_elapsed, int width, int set_width, const amrex::Geometry &geom, amrex::Vector< amrex::MultiFab > &S_rhs, amrex::Vector< amrex::MultiFab > &S_old_data, 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)
void make_zcc(const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::MultiFab &z_phys_cc)
void realbdy_bc_bxs_xy(const amrex::Box &bx, const amrex::Box &domain, const int &set_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))
AMREX_GPU_HOST AMREX_FORCE_INLINE void realbdy_compute_laplacian_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::Real &F2, 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 > &data_arr, const amrex::Array4< amrex::Real > &rhs_arr)
Definition: ERF_Utils.H:267
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:421
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:399
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 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:160
@ zmom
Definition: ERF_IndexDefines.H:161
@ xmom
Definition: ERF_IndexDefines.H:159
@ xvel
Definition: ERF_IndexDefines.H:141
@ zvel
Definition: ERF_IndexDefines.H:143
@ yvel
Definition: ERF_IndexDefines.H:142