21 #ifndef FUB_AMREX_BOUNDARY_CONDITION_REFLECTIVE_BOUNDARY_HPP
22 #define FUB_AMREX_BOUNDARY_CONDITION_REFLECTIVE_BOUNDARY_HPP
46 void FillBoundary(::amrex::MultiFab& mf, const ::amrex::Geometry& geom);
56 template <
typename Equation>
60 template <
typename Tag,
typename Equation>
67 template <
typename Tag,
typename Equation>
69 ::amrex::MultiFab& mf, const ::amrex::Geometry& geom) {
70 const int ngrow = mf.nGrow(
int(dir_));
71 ::amrex::Box grown_box = geom.growNonPeriodicDomain(ngrow);
72 ::amrex::BoxList boundaries =
73 ::amrex::complementIn(grown_box, ::amrex::BoxList{geom.Domain()});
74 if (boundaries.isEmpty()) {
77 ForEachFab(Tag(), mf, [&](const ::amrex::MFIter& mfi) {
78 ::amrex::FArrayBox& fab = mf[mfi];
81 ::amrex::shift(boundary,
int(dir_),
GetSign(side_) * ngrow);
82 if (!geom.Domain().intersects(shifted)) {
85 ::amrex::Box box_to_fill = mfi.growntilebox() & boundary;
86 if (!box_to_fill.isEmpty()) {
87 auto states = MakeView<Complete<Equation>>(
88 fab, implementation_->GetEquation(), mfi.growntilebox());
89 auto box = AsIndexBox<Equation::Rank()>(box_to_fill);
90 implementation_->FillBoundary(states, box, dir_, side_);
96 template <
typename Tag,
typename Equation>
102 template <
typename Tag,
typename Equation>
111 template <
typename Tag,
typename Equation>
113 ->ReflectiveBoundary<Tag,
Equation>;
This class modifies and initializes a PatchLevel in a PatchHierarchy.
Definition: AMReX/GriddingAlgorithm.hpp:60
PatchHierarchy & GetPatchHierarchy() noexcept
Definition: AMReX/GriddingAlgorithm.hpp:108
const ::amrex::Geometry & GetGeometry(int level) const
Returns a Geometry object for a specified level.
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:34
void FillBoundary(::amrex::MultiFab &mf, const GriddingAlgorithm &gridding, int level, Direction dir)
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:103
ReflectiveBoundary(const Equation &equation, Direction dir, int side)
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:36
Local< Tag, ::fub::ReflectiveBoundary< Equation > > implementation_
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:49
ReflectiveBoundary(Tag, const Equation &equation, Direction dir, int side)
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:61
Direction dir_
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:50
void FillBoundary(::amrex::MultiFab &mf, const ::amrex::Geometry &geom)
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:68
void FillBoundary(::amrex::MultiFab &mf, const GriddingAlgorithm &gridding, int level)
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:97
int side_
Definition: AMReX/boundary_condition/ReflectiveBoundary.hpp:51
ReflectiveBoundary(const Equation &, Direction, int) -> ReflectiveBoundary< execution::SequentialTag, Equation >
void ForEachFab(Tag, const ::amrex::FabArrayBase &fabarray, F function)
Iterate through all local FArrayBox objects in a MultiFab.
Definition: ForEachFab.hpp:34
The amrex namespace.
Definition: AverageState.hpp:33
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
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
IndexBox< Rank > Box(const BasicView< State, Layout, Rank > &view)
Definition: State.hpp:486
typename detail::LocalType< Tag, T >::type Local
Definition: Execution.hpp:56
Definition: Execution.hpp:30