5 #include "AMReX_MultiFab.H"
6 #include "AMReX_BCRec.H"
19 const amrex::MultiFab&
qt,
const amrex::MultiFab&
qv,
20 const amrex::MultiFab* z_phys,
const amrex::Geometry& geom,
21 bool use_existing_sfc_density);
26 void ChopGrids2D (amrex::BoxArray& ba,
const amrex::Box& domain,
int target_size);
36 cons_to_prim(
const amrex::MultiFab& cons_state, amrex::MultiFab& S_prim,
int ng);
39 make_qt(
const amrex::MultiFab& cons_state, amrex::MultiFab&
qt,
int n_qstate_into_total);
44 void make_J (
const amrex::Geometry& geom,
45 amrex::MultiFab& z_phys_nd,
46 amrex::MultiFab& detJ_cc);
49 amrex::MultiFab& z_phys_nd,
58 amrex::MultiFab& z_phys_nd,
59 amrex::MultiFab& z_phys_cc);
65 amrex::MultiFab& yvel_out,
66 amrex::MultiFab& zvel_out,
67 const amrex::MultiFab& cons_in,
68 const amrex::MultiFab& xmom_in,
69 const amrex::MultiFab& ymom_in,
70 const amrex::MultiFab& zmom_in,
71 const amrex::Box& domain,
72 const amrex::Vector<amrex::BCRec>& domain_bcs_type_h,
73 const amrex::MultiFab* c_vfrac =
nullptr
80 const amrex::IntVect & xvel_ngrow,
81 const amrex::MultiFab& yvel_in,
82 const amrex::IntVect & yvel_ngrow,
83 const amrex::MultiFab& zvel_in,
84 const amrex::IntVect & zvel_ngrow,
85 const amrex::MultiFab& cons_in,
86 amrex::MultiFab& xmom_out,
87 amrex::MultiFab& ymom_out,
88 amrex::MultiFab& zmom_out,
89 const amrex::Box& domain,
90 const amrex::Vector<amrex::BCRec>& domain_bcs_type_h,
91 const amrex::MultiFab* c_vfrac =
nullptr
99 amrex::MultiFab&
xmom, amrex::MultiFab&
ymom, amrex::MultiFab&
zmom,
100 const amrex::Box& domain,
const amrex::Vector<amrex::BCRec>& domain_bcs_type_h);
108 amrex::FArrayBox& bdy_data_ylo, amrex::FArrayBox& bdy_data_yhi,
109 amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& area_vec,
110 const amrex::Geometry& geom,
119 amrex::FArrayBox& bdy_data_xlo,
120 amrex::FArrayBox& bdy_data_xhi,
121 amrex::FArrayBox& bdy_data_ylo,
122 amrex::FArrayBox& bdy_data_yhi,
123 amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& area_vec,
124 const amrex::Geometry& geom,
125 const amrex::Vector<amrex::BCRec>& domain_bcs_type_h);
132 amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& vels_vec,
133 amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>& area_vec,
134 const amrex::Geometry& geom);
141 const amrex::Box& domain,
147 const amrex::IntVect& ng_vect=amrex::IntVect(0,0,0),
148 const bool get_int_ng=
false);
155 const amrex::Box& domain,
156 const int& set_width,
161 const amrex::IntVect& ng_vect=amrex::IntVect(0,0,0));
173 const amrex::Geometry& geom,
174 amrex::Vector<amrex::MultiFab>& S_rhs,
175 amrex::Vector<amrex::MultiFab>& S_cur_data,
176 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_xlo,
177 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_xhi,
178 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_ylo,
179 amrex::Vector<amrex::Vector<amrex::FArrayBox>>& bdy_data_yhi,
180 std::unique_ptr<ReadBndryPlanes>& m_r2d,
191 const int& set_width,
192 const amrex::Geometry& geom,
197 amrex::Vector<amrex::BCRec>& domain_bcs_type,
198 amrex::Vector<amrex::MultiFab>& S_rhs_f,
199 amrex::Vector<amrex::MultiFab>& S_data_f);
207 amrex::MultiFab* vel_t_avg,
208 amrex::MultiFab&
xvel,
209 amrex::MultiFab&
yvel,
210 amrex::MultiFab&
zvel);
239 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>&
dx,
240 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& ProbLo,
241 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>& ProbHi,
243 const amrex::Box& bx_xlo,
244 const amrex::Box& bx_xhi,
245 const amrex::Box& bx_ylo,
246 const amrex::Box& bx_yhi,
247 const amrex::Array4<const amrex::Real>& arr_xlo,
248 const amrex::Array4<const amrex::Real>& arr_xhi,
249 const amrex::Array4<const amrex::Real>& arr_ylo,
250 const amrex::Array4<const amrex::Real>& arr_yhi,
251 const amrex::Array4<const amrex::Real>& data_arr,
252 const amrex::Array4<amrex::Real>& rhs_arr,
255 const int bdy_moist_nudge_type=0)
257 amrex::IntVect iv = bx_xlo.type();
269 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
289 amrex::Real delta = arr_xlo(i,j,k,0) - data_arr(i,j,k,icomp);
290 rhs_arr(i,j,k,icomp) += Factor*delta;
292 if (bdy_moist_nudge_type==2) {
294 delta = -data_arr(i,j,k,icomp+1);
295 rhs_arr(i,j,k,icomp+1 ) += Factor*delta;
296 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * cond_fac / exner_pi;
298 for (
int n = 2; n < nq; n++) {
299 delta = -data_arr(i,j,k,icomp+n);
300 rhs_arr(i,j,k,icomp+n) += Factor*delta;
301 if (nq > 3 && n == 2) {
302 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * sub_fac / exner_pi;
307 for (
int n = 0; n < nq; n++) {
308 amrex::Real delta = arr_xlo(i,j,k,n) - data_arr(i,j,k,n+icomp);
309 rhs_arr(i,j,k,n+icomp) += Factor*delta;
313 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
333 amrex::Real delta = arr_xhi(i,j,k,0) - data_arr(i,j,k,icomp);
334 rhs_arr(i,j,k,icomp) += Factor*delta;
336 if (bdy_moist_nudge_type==2) {
338 delta = -data_arr(i,j,k,icomp+1);
339 rhs_arr(i,j,k,icomp+1 ) += Factor*delta;
340 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * cond_fac / exner_pi;
342 for (
int n = 2; n < nq; n++) {
343 delta = -data_arr(i,j,k,icomp+n);
344 rhs_arr(i,j,k,icomp+n) += Factor*delta;
345 if (nq > 3 && n == 2) {
346 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * sub_fac / exner_pi;
351 for (
int n = 0; n < nq; n++) {
352 amrex::Real delta = arr_xhi(i,j,k,n) - data_arr(i,j,k,n+icomp);
353 rhs_arr(i,j,k,n+icomp) += Factor*delta;
359 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
372 amrex::Real delta = arr_ylo(i,j,k,0) - data_arr(i,j,k,icomp);
373 rhs_arr(i,j,k,icomp) += Factor*delta;
375 if (bdy_moist_nudge_type==2) {
377 delta = -data_arr(i,j,k,icomp+1);
378 rhs_arr(i,j,k,icomp+1 ) += Factor*delta;
379 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * cond_fac / exner_pi;
381 for (
int n = 2; n < nq; n++) {
382 delta = -data_arr(i,j,k,icomp+n);
383 rhs_arr(i,j,k,icomp+n) += Factor*delta;
384 if (nq > 3 && n == 2) {
385 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * sub_fac / exner_pi;
390 for (
int n = 0; n < nq; n++) {
391 amrex::Real delta = arr_ylo(i,j,k,n) - data_arr(i,j,k,n+icomp);
392 rhs_arr(i,j,k,n+icomp) += Factor*delta;
396 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
409 amrex::Real delta = arr_yhi(i,j,k,0) - data_arr(i,j,k,icomp);
410 rhs_arr(i,j,k,icomp) += Factor*delta;
412 if (bdy_moist_nudge_type==2) {
414 delta = -data_arr(i,j,k,icomp+1);
415 rhs_arr(i,j,k,icomp+1 ) += Factor*delta;
416 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * cond_fac / exner_pi;
418 for (
int n = 2; n < nq; n++) {
419 delta = -data_arr(i,j,k,icomp+n);
420 rhs_arr(i,j,k,icomp+n) += Factor*delta;
421 if (nq > 3 && n == 2) {
422 rhs_arr(i,j,k,
RhoTheta_comp) += Factor * delta * sub_fac / exner_pi;
427 for (
int n = 0; n < nq; n++) {
428 amrex::Real delta = arr_yhi(i,j,k,n) - data_arr(i,j,k,n+icomp);
429 rhs_arr(i,j,k,n+icomp) += Factor*delta;
442 const amrex::iMultiFab& imask,
443 const int nghost = 0)
445 for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
447 const amrex::Box& bx = mfi.growntilebox(nghost);
450 auto dstFab = dst.array(mfi);
451 const auto maskFab = imask.const_array(mfi);
452 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
454 dstFab(i,j,k) *= maskFab(i,j,k);
464 const amrex::iMultiFab& imask,
465 const int nghost = 0)
467 for (amrex::MFIter mfi(dst,amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
469 const amrex::Box& bx = mfi.growntilebox(nghost);
472 auto dstFab = dst.array(mfi);
473 const auto maskFab = imask.const_array(mfi);
474 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
476 dstFab(i,j,k) *= (1-maskFab(i,j,k));
484 amrex::Vector<amrex::IntVect>& xfaces,
485 amrex::Vector<amrex::IntVect>& yfaces,
486 amrex::Vector<amrex::IntVect>& zfaces,
487 const amrex::Geometry& geomdata,
488 std::unique_ptr<amrex::MultiFab>& z_phys_cc);
493 AMREX_GPU_HOST_DEVICE
501 return p0 * ( (
z - z1) * (
z - z2) ) / ( (
z0 - z1) * (
z0 - z2) )
502 + p1 * ( (
z -
z0) * (
z - z2) ) / ( (z1 -
z0) * (z1 - z2) )
503 + p2 * ( (
z -
z0) * (
z - z1) ) / ( (z2 -
z0) * (z2 - z1) );
constexpr amrex::Real lsub
Definition: ERF_Constants.H:100
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real lcond
Definition: ERF_Constants.H:98
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getExnergivenRTh(const amrex::Real rhotheta, const amrex::Real rdOcp, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:156
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
Real z0
Definition: ERF_InitCustomPertVels_ScalarAdvDiff.H:8
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
const Real rdOcp
Definition: ERF_InitCustomPert_Bomex.H:16
rho
Definition: ERF_InitCustomPert_Bubble.H:106
ParallelFor(grown_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
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 compute_influx_outflux_bdy(amrex::FArrayBox &bdy_data_xlo, amrex::FArrayBox &bdy_data_xhi, amrex::FArrayBox &bdy_data_ylo, amrex::FArrayBox &bdy_data_yhi, amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > &area_vec, const amrex::Geometry &geom, amrex::Real &influx, amrex::Real &outflux, const int n)
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 cons_to_prim(const amrex::MultiFab &cons_state, amrex::MultiFab &S_prim, int ng)
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 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, 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, const amrex::Real &c_p, const amrex::Real &rdOcp)
void enforceInOutSolvability_bdy(const amrex::MultiFab &rho0, amrex::FArrayBox &bdy_data_xlo, amrex::FArrayBox &bdy_data_xhi, amrex::FArrayBox &bdy_data_ylo, amrex::FArrayBox &bdy_data_yhi, amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > &area_vec, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type_h)
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:496
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_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))
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)
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 &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, const amrex::Real &c_p, const amrex::Real &rdOcp, const int bdy_moist_nudge_type=0)
Definition: ERF_Utils.H:236
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:463
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:441
void rebalance_columns(amrex::MultiFab &rho, const amrex::MultiFab &theta, const amrex::MultiFab &qt, const amrex::MultiFab &qv, const amrex::MultiFab *z_phys, const amrex::Geometry &geom, bool use_existing_sfc_density)
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)
void make_qt(const amrex::MultiFab &cons_state, amrex::MultiFab &qt, int n_qstate_into_total)
Definition: ERF_FillPatcher.H:9
@ ymom
Definition: ERF_IndexDefines.H:194
@ zmom
Definition: ERF_IndexDefines.H:195
@ xmom
Definition: ERF_IndexDefines.H:193
@ theta
Definition: ERF_MM5.H:20
@ qt
Definition: ERF_Kessler.H:28
@ qv
Definition: ERF_Kessler.H:29
@ ng
Definition: ERF_Morrison.H:48
@ xvel
Definition: ERF_IndexDefines.H:175
@ zvel
Definition: ERF_IndexDefines.H:177
@ yvel
Definition: ERF_IndexDefines.H:176
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40