5 #include "AMReX_MultiFab.H"
6 #include "AMReX_BCRec.H"
16 void ChopGrids2D (amrex::BoxArray& ba,
const amrex::Box& domain,
int target_size);
28 void make_J (
const amrex::Geometry& geom,
29 amrex::MultiFab& z_phys_nd,
30 amrex::MultiFab& detJ_cc);
33 amrex::MultiFab& z_phys_nd,
42 amrex::MultiFab& z_phys_nd,
43 amrex::MultiFab& z_phys_cc);
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
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
83 amrex::MultiFab&
xmom, amrex::MultiFab&
ymom, amrex::MultiFab&
zmom,
84 const amrex::Box& domain,
const amrex::Vector<amrex::BCRec>& domain_bcs_type_h);
91 amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& vels_vec,
92 amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& area_vec,
93 const amrex::Geometry& geom);
100 const amrex::Box& domain,
106 const amrex::IntVect& ng_vect=amrex::IntVect(0,0,0),
107 const bool get_int_ng=
false);
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);
136 const int& set_width,
137 const amrex::Geometry& geom,
142 amrex::Vector<amrex::BCRec>& domain_bcs_type,
143 amrex::Vector<amrex::MultiFab>& S_rhs_f,
144 amrex::Vector<amrex::MultiFab>& S_data_f);
152 amrex::MultiFab* vel_t_avg,
153 amrex::MultiFab&
xvel,
154 amrex::MultiFab&
yvel,
155 amrex::MultiFab&
zvel);
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,
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)
208 amrex::IntVect iv = bx_xlo.type();
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
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;
227 amrex::Real delta = arr_xlo(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
230 rhs_arr(i,j,k,n+icomp) += Temp;
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;
241 bx_xhi, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
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;
255 amrex::Real delta = arr_xhi(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
258 rhs_arr(i,j,k,n+icomp) += Temp;
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;
270 amrex::ParallelFor(bx_ylo, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
278 amrex::Real delta = arr_ylo(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
281 rhs_arr(i,j,k,n+icomp) += Temp;
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;
289 bx_yhi, num_var, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
297 amrex::Real delta = arr_yhi(i ,j ,k,n) - data_arr(i ,j ,k ,n+icomp);
300 rhs_arr(i,j,k,n+icomp) += Temp;
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;
317 const amrex::iMultiFab& imask,
318 const int nghost = 0)
320 for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
322 const amrex::Box& bx = mfi.growntilebox(nghost);
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
329 dstFab(i,j,k) *= maskFab(i,j,k);
339 const amrex::iMultiFab& imask,
340 const int nghost = 0)
342 for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
344 const amrex::Box& bx = mfi.growntilebox(nghost);
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
351 dstFab(i,j,k) *= (1-maskFab(i,j,k));
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);
368 AMREX_GPU_HOST_DEVICE
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) );
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