53 amrex::Interpolater*
mapper =
nullptr;
151 const bool do_bc=
true;
161#ifdef REMORA_USE_NETCDF
180 Box
gbx =
mfi.growntilebox();
228 amrex::Interpolater*
mapper =
nullptr;
338 for (
int i = 0;
i < Vars::NumTypes; ++
i) {
345 for (
int i = 0;
i < Vars::NumTypes; ++
i) {
354 for (
int i = 0;
i < Vars::NumTypes; ++
i) {
364 data.add_var(
mf_tmp, data.owning);
370 amrex::Error(
"Requested data at a time outside the interval [t_old, t_new]");
374 for (
int i = 0;
i < Vars::NumTypes; ++
i) {
445 amrex::Interpolater*
mapper =
nullptr;
487 amrex::Interpolater*
mapper)
492 MultiFab*
mask =
nullptr;
519 amrex::Abort(
"Dont recognize this box type in REMORA_FillPatch");
539 amrex::Abort(
"Dont recognize this box type in REMORA_FillPatch");
558#ifdef REMORA_USE_NETCDF
587 Box
gbx =
mfi.growntilebox();
636 int ihi = domain.bigEnd(0);
637 int jhi = domain.bigEnd(1);
638 int khi = domain.bigEnd(2);
649 n ==
ori.coordDir());
657#pragma omp parallel if (Gpu::notInLaunchRegion())
663 const Box&
bx =
mfi.tilebox();
668 if (
bx.smallEnd(0) <= domain.smallEnd(0)) {
679 if (
bx.bigEnd(0) >= domain.bigEnd(0)) {
690 if (!
Geom(
lev).isPeriodic(1) &&
ng[1] > 0) {
692 if (
bx.smallEnd(1) <= domain.smallEnd(1)) {
703 if (
bx.bigEnd(1) >= domain.bigEnd(1)) {
714 if (!
Geom(
lev).isPeriodic(2) &&
ng[2] > 0) {
716 if (
bx.smallEnd(2) <= domain.smallEnd(2)) {
727 if (
bx.bigEnd(2) >= domain.bigEnd(2)) {
constexpr amrex::Real one
mf_h setVal(geomdata.ProbHi(2))
int zvel_bc() const noexcept
int xvel_bc() const noexcept
amrex::Vector< amrex::BCRec > domain_bcs_type
vector (over BCVars) of BCRecs
void FillCoarsePatchMap(int lev, amrex::Real time, amrex::MultiFab *mf_fine, amrex::MultiFab *mf_crse, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab(), amrex::Interpolater *mapper=nullptr)
fill an entire multifab by interpolating from the coarser level, explicitly specifying interpolator t...
amrex::Vector< REMORAFillPatcher > FPr_v
Vector over levels of FillPatchers for v (3D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr
land/sea mask at cell centers (2D)
int do_substep
Whether to substep fine levels in time.
int yvel_bc() const noexcept
void fill_from_bdyfiles(int lev, amrex::MultiFab &mf_to_fill, const amrex::MultiFab &mf_mask, const amrex::Real time, const int bccomp, const int bdy_var_type, const int icomp_to_fill, const int icomp_calc=0, const amrex::MultiFab &mf_calc=amrex::MultiFab(), const amrex::Real=zero)
Fill boundary data from netcdf file.
amrex::Vector< REMORAFillPatcher > FPr_u
Vector over levels of FillPatchers for u (3D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_msku
land/sea mask at x-faces (2D)
amrex::Vector< amrex::GpuArray< REMORA_BC, AMREX_SPACEDIM *2 > > phys_bc_type
Array holding the "physical" boundary condition types (e.g. "inflow")
amrex::Vector< REMORAFillPatcher > FPr_vbar
Vector over levels of FillPatchers for vbar (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskv
land/sea mask at y-faces (2D)
amrex::Vector< std::unique_ptr< REMORAPhysBCFunct > > physbcs
Vector (over level) of functors to apply physical boundary conditions.
void FillCoarsePatch(int lev, amrex::Real time, amrex::MultiFab *mf_fine, amrex::MultiFab *mf_crse, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab())
fill an entire multifab by interpolating from the coarser level
void FillBdyCCVels(int lev, amrex::MultiFab &mf_cc_vel)
Fill the physical boundary conditions for cell-centered velocity (diagnostic only)
TimeInterpolatedData GetDataAtTime(int lev, amrex::Real time)
utility to copy in data from old and/or new state into another multifab
amrex::Vector< REMORAFillPatcher > FPr_c
Vector over levels of FillPatchers for scalars.
amrex::Vector< REMORAFillPatcher > FPr_w
Vector over levels of FillPatchers for w.
amrex::Vector< amrex::Real > t_new
new time at each level, in seconds since start_time
static SolverChoice solverChoice
Container for algorithmic choices.
int cf_set_width
Width for fixing values at coarse-fine interface.
void FillPatchNoBC(int lev, amrex::Real time, amrex::MultiFab &mf_to_be_filled, amrex::Vector< amrex::MultiFab * > const &mfs, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const bool fill_set=false, amrex::Vector< amrex::MultiFab * > const &mfs_crse_old={}, amrex::Vector< amrex::MultiFab * > const &mfs_crse_new={})
Fill a new MultiFab by copying in phi from valid region and filling ghost cells without applying boun...
void FillCoarsePatchPC(int lev, amrex::Real time, amrex::MultiFab *mf_fine, amrex::MultiFab *mf_crse, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab())
fill an entire multifab by interpolating from the coarser level using the piecewise constant interpol...
void FillPatch(int lev, amrex::Real time, amrex::MultiFab &mf_to_be_filled, amrex::Vector< amrex::MultiFab * > const &mfs, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const bool fill_set=false, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab(), amrex::Vector< amrex::MultiFab * > const &mfs_crse_old={}, amrex::Vector< amrex::MultiFab * > const &mfs_crse_new={})
Fill a new MultiFab by copying in phi from valid region and filling ghost cells.
amrex::Vector< REMORAFillPatcher > FPr_ubar
Vector over levels of FillPatchers for ubar (2D)
amrex::Vector< amrex::Real > t_old
old time at each level, in seconds since start_time
static constexpr int null
bool boundary_from_netcdf