21 #ifndef FUB_AMREX_BOUNDARY_CUTCELL_CONDITION_CONSTANT_BOUNDARY_HPP
22 #define FUB_AMREX_BOUNDARY_CUTCELL_CONDITION_CONSTANT_BOUNDARY_HPP
30 #include <AMReX_MultiFab.H>
45 const std::shared_ptr<::amrex::EBFArrayBoxFactory>& factory =
52 if (
dir == this->dir) {
59 const std::shared_ptr<::amrex::EBFArrayBoxFactory>& factory) {
60 int idir =
static_cast<int>(
dir);
61 if (!geom.isPeriodic(idir)) {
62 const int ngrow = mf.nGrow(idir);
63 ::amrex::Box fully_grown_box = geom.growNonPeriodicDomain(ngrow);
64 ::amrex::Box grown_dir_box = ::amrex::grow(fully_grown_box, idir, -ngrow);
65 ::amrex::BoxList boundaries = ::amrex::complementIn(
66 fully_grown_box, ::amrex::BoxList{grown_dir_box});
67 if (boundaries.isEmpty()) {
70 const ::amrex::MultiFab& volfrac = factory->getVolFrac();
72 ::amrex::FArrayBox& fab = mf[mfi];
73 const ::amrex::FArrayBox& alpha = volfrac[mfi];
76 ::amrex::shift(boundary, idir,
GetSign(
side) * ngrow);
77 if (!geom.Domain().intersects(shifted)) {
80 ::amrex::Box box_to_fill = mfi.growntilebox() & boundary;
81 if (!box_to_fill.isEmpty()) {
83 MakeView<Complete<Equation>>(fab,
equation, box_to_fill);
85 ::amrex::IntVect iv{
static_cast<int>(is)...};
86 if (alpha(iv) > 0.0) {
89 for (
int comp = 0; comp < fab.nComp(); ++comp) {
This class modifies and initializes a cutcell::PatchLevel in a cutcell::PatchHierarchy.
Definition: AMReX/cutcell/GriddingAlgorithm.hpp:56
const PatchHierarchy & GetPatchHierarchy() const noexcept
const std::shared_ptr<::amrex::EBFArrayBoxFactory > & GetEmbeddedBoundary(int level) const
Returns the number of cycles done for a specific level.
const ::amrex::Geometry & GetGeometry(int level) const
Returns the number of cycles done for a specific level.
void ForEachFab(Tag, const ::amrex::FabArrayBase &fabarray, F function)
Iterate through all local FArrayBox objects in a MultiFab.
Definition: ForEachFab.hpp:34
Definition: FillCutCellData.hpp:30
void ForEachIndex(const ::amrex::Box &box, F function)
Definition: ForEachIndex.hpp:29
constexpr OpenMpTag openmp
Definition: Execution.hpp:37
int GetSign(int side)
Definition: AnyBoundaryCondition.hpp:104
Direction
This is a type safe type to denote a dimensional split direction.
Definition: Direction.hpp:30
void Store(const BasicView< Conservative< Eq >, Layout, Eq::Rank()> &view, const Conservative< Eq > &state, const std::array< std::ptrdiff_t, Eq::Rank()> &index)
Definition: State.hpp:663
IndexBox< Rank > Box(const BasicView< State, Layout, Rank > &view)
Definition: State.hpp:486
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:36
void FillBoundary(::amrex::MultiFab &mf, const ::amrex::Geometry &geom, const std::shared_ptr<::amrex::EBFArrayBoxFactory > &factory)
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:58
Complete< Equation > state
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:40
void FillBoundary(::amrex::MultiFab &mf, const GriddingAlgorithm &gridding, int level, Direction dir)
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:50
Equation equation
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:39
int side
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:38
void FillBoundary(::amrex::MultiFab &mf, const GriddingAlgorithm &grid, int level)
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:42
Direction dir
Definition: cutcell/boundary_condition/ConstantBoundary.hpp:37