18#include <AMReX_ParallelDescriptor.H>
19#include <AMReX_ParmParse.H>
20#include <AMReX_BCRec.H>
21#include <AMReX_PhysBCFunct.H>
22#include <AMReX_LO_BCTYPES.H>
23#include <AMReX_Mask.H>
24#include <AMReX_Periodicity.H>
36 yhi = 1 + AMREX_SPACEDIM,
37 zhi = 2 + AMREX_SPACEDIM)
47 void define(
const amrex::Geometry& a_geom) { m_geom = a_geom; };
50 const amrex::Box& box,
51 int ngrow,
int dcomp,
int ncomp,
54 const amrex::Mask* mask =
nullptr) = 0;
58 amrex::Real time,
int )
60 mf.FillBoundary(m_geom.periodicity());
61 for (amrex::MFIter mfi(mf,
true); mfi.isValid(); ++mfi)
63 const amrex::Box& box = mfi.tilebox();
64 amrex::BaseFab<T>& in = mf[mfi];
65 FillBoundary(in, box, mf.nGrow(), dcomp, ncomp, time);
70 int dcomp,
int ncomp, amrex::IntVect
const& ,
71 amrex::Real time,
int bccomp)
73 FillBoundary(mf, dcomp, ncomp, time, bccomp);
76 void operator () (amrex::FabArray<amrex::BaseFab<T>>& mf,
77 int dcomp,
int ncomp, amrex::IntVect
const& ,
78 amrex::Real time,
int bccomp)
80 FillBoundary(mf, dcomp, ncomp, time, bccomp);
85 template <
class Q = T>
86 typename std::enable_if<std::is_same<Q, amrex::Real>::value>::type
89 amrex::Real time,
int )
91 mf.FillBoundary(m_geom.periodicity());
92 for (amrex::MFIter mfi(mf,
true); mfi.isValid(); ++mfi)
94 const amrex::Box& box = mfi.tilebox();
95 amrex::BaseFab<T>& in = mf[mfi];
96 FillBoundary(in, box, mf.nGrow(), dcomp, ncomp, time);
100 template <
class Q = T>
101 typename std::enable_if<std::is_same<Q, amrex::Real>::value>::type
102 operator () (amrex::MultiFab& mf,
103 int dcomp,
int ncomp, amrex::IntVect
const& ,
104 amrex::Real time,
int bccomp)
106 FillBoundary(mf, dcomp, ncomp, time, bccomp);
114 return { {
AMREX_D_DECL(m_geom.isPeriodic(0),m_geom.isPeriodic(1),m_geom.isPeriodic(2))} };
118 return m_geom.periodicity();
122 return m_geom.periodicity(b);
virtual amrex::Array< int, AMREX_SPACEDIM > IsPeriodic()
virtual void FillBoundary(amrex::FabArray< amrex::BaseFab< T > > &mf, int dcomp, int ncomp, amrex::Real time, int)
void define(const amrex::Geometry &a_geom)
virtual void FillBoundary(amrex::BaseFab< T > &in, const amrex::Box &box, int ngrow, int dcomp, int ncomp, amrex::Real time, Orientation face=Orientation::All, const amrex::Mask *mask=nullptr)=0
virtual amrex::Periodicity Periodicity(const amrex::Box &b)
virtual amrex::BCRec GetBCRec()=0
std::enable_if< std::is_same< Q, amrex::Real >::value >::type FillBoundary(amrex::MultiFab &mf, int dcomp, int ncomp, amrex::Real time, int)
virtual void FillBoundary(amrex::FabArray< amrex::BaseFab< T > > &mf, int dcomp, int ncomp, amrex::IntVect const &, amrex::Real time, int bccomp)
virtual amrex::Periodicity Periodicity() const
bool IsDirichlet(int bctype)
bool IsPeriodic(int bctype)
bool IsNeumann(int bctype)
bool IsReflectOdd(int bctype)
bool IsReflectEven(int bctype)
int ReadString(std::string bcstring)
Collection of boundary condition (BC) objects.