1 #ifndef AMREX_MLLINOP_TEMP_H_
2 #define AMREX_MLLINOP_TEMP_H_
34 define(a_geom, a_grids, a_dmap, a_info, a_factory);
66 auto const& ba =
m_grids[amrlev][mglev];
67 auto const& dm =
m_dmap [amrlev][mglev];
68 auto const& fc = *
m_factory[amrlev][mglev];
89 auto const& dm =
m_dmap[amrlev][mglev];
109 auto const& dm =
m_dmap[famrlev][0];
139 return mfs[0].nGrowVect();
153 for (
int idim=0; idim < 3; ++idim) {
169 for (
int idim=0; idim < 3; ++idim) {
182 for (
int idim=0; idim < 3; ++idim) {
183 mfs[idim].setVal(amrex::Real(0.0));
195 for (
int idim=0; idim < 3; ++idim) {
196 mfs[idim].setBndry(amrex::Real(0.0), 0, 1);
206 virtual void AnySetCoveredToZero (
amrex::Any& a)
const override
209 for (
int idim=0; idim < 3; ++idim) {
230 for (
int idim=0; idim < 3; ++idim) {
231 dmf[idim].ParallelCopy_nowait(smf[idim], 0, 0, 1, src_nghost, dst_nghost, period);
233 for (
int idim=0; idim < 3; ++idim) {
234 dmf[idim].ParallelCopy_finish();
246 amrex::Real r = amrex::Real(0.0);
247 for (
int idim=0; idim < 3; ++idim) {
248 auto tmp = mfs[idim].norminf(0, 0,
true);
270 return amrex::Real(0.0);
284 amrex::Any const* crse_bcdata =
nullptr)
override
303 const amrex::Any* crse_bcdata=
nullptr)
override
371 bool skip_fillboundary=
false)
const override
Array4< Real > fine
Definition: AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition: AMReX_InterpFaceRegister.cpp:92
Definition: AMReX_Any.H:16
MF & get()
Returns a reference to the contained object.
Definition: AMReX_Any.H:51
Definition: AMReX_IntVect.H:47
Definition: AMReX_MLLinOp.H:81
Vector< IntVect > mg_coarsen_ratio_vec
Definition: AMReX_MLLinOp.H:369
Vector< Vector< BoxArray > > m_grids
Definition: AMReX_MLLinOp.H:373
Vector< Vector< DistributionMapping > > m_dmap
Definition: AMReX_MLLinOp.H:374
const Vector< int > & AMRRefRatio() const noexcept
Definition: AMReX_MLLinOp.H:416
void define(const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info, const Vector< FabFactory< FArrayBox > const * > &a_factory, bool eb_limit_coarsening=true)
Definition: AMReX_MLLinOp.cpp:132
Vector< Vector< std::unique_ptr< FabFactory< FArrayBox > > > > m_factory
Definition: AMReX_MLLinOp.H:375
A collection (stored as an array) of FArrayBox objects. This class is useful for storing floating poi...
Definition: AMReX_MultiFab.H:40
static void Add(MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Add src to dst including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray...
Definition: AMReX_MultiFab.cpp:151
static void Copy(MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
Copy from src to dst including nghost ghost cells. The two MultiFabs MUST have the same underlying Bo...
Definition: AMReX_MultiFab.cpp:171
This provides length of period for periodic domains. 0 means it is not periodic in that direction....
Definition: AMReX_Periodicity.H:17
static const Periodicity & NonPeriodic() noexcept
Definition: AMReX_Periodicity.cpp:49
Definition: AMReX_MLLinOp_temp.H:13
virtual void AnyAverageDownSolutionRHS(int camrlev, amrex::Any &crse_sol, amrex::Any &crse_rhs, const amrex::Any &fine_sol, const amrex::Any &fine_rhs) override
Average down x and b from fine to coarse AMR level.
Definition: AMReX_MLLinOp_temp.H:450
virtual amrex::Any AnyMakeAlias(amrex::Any const &a) const override
Make an alias of the given Any without deepcopying.
Definition: AMReX_MLLinOp_temp.H:123
MLLinOpTemp & operator=(const MLLinOpTemp &)=delete
virtual void prepareForSolve() override
Prepare the solver for MG cycle.
Definition: AMReX_MLLinOp_temp.H:477
virtual void AnyAvgDownResAmr(int clev, amrex::Any &cres, amrex::Any const &fres) const override
Average down residual from fine to coarse AMR level.
Definition: AMReX_MLLinOp_temp.H:338
virtual void AnyReflux(int crse_amrlev, amrex::Any &res, const amrex::Any &crse_sol, const amrex::Any &crse_rhs, amrex::Any &fine_res, amrex::Any &fine_sol, const amrex::Any &fine_rhs) override
Reflux.
Definition: AMReX_MLLinOp_temp.H:322
amrex::Array< amrex::MultiFab, 3 > Container
In this example, there are 3 edge based MultiFabs.
Definition: AMReX_MLLinOp_temp.H:17
virtual void AnySmooth(int amrlev, int mglev, amrex::Any &sol, const amrex::Any &rhs, bool skip_fillboundary=false) const override
Smooth the given level.
Definition: AMReX_MLLinOp_temp.H:370
virtual ~MLLinOpTemp()
Definition: AMReX_MLLinOp_temp.H:21
virtual void AnyInterpAssignMG(int amrlev, int fmglev, amrex::Any &fine, amrex::Any &crse) const override
Assign (i.e., copy) interpolated coarse data onto the fine MG level.
Definition: AMReX_MLLinOp_temp.H:418
MLLinOpTemp(MLLinOpTemp &&)=delete
virtual void AnyInterpolationAmr(int famrlev, amrex::Any &fine, const amrex::Any &crse, amrex::IntVect const &) const override
Interpolate data from coarse to fine AMR level.
Definition: AMReX_MLLinOp_temp.H:431
virtual void AnyParallelCopy(amrex::Any &dst, amrex::Any const &src, amrex::IntVect const &src_nghost, amrex::IntVect const &dst_nghost, amrex::Periodicity const &period=amrex::Periodicity::NonPeriodic()) const override
ParallelCopy from source Any ot destination Any.
Definition: AMReX_MLLinOp_temp.H:224
virtual amrex::IntVect AnyGrowVect(amrex::Any const &a) const override
Retuen the number of ghost cells in the given Any.
Definition: AMReX_MLLinOp_temp.H:136
MLLinOpTemp(const amrex::Vector< amrex::Geometry > &a_geom, const amrex::Vector< amrex::BoxArray > &a_grids, const amrex::Vector< amrex::DistributionMapping > &a_dmap, const amrex::LPInfo &a_info=amrex::LPInfo(), const amrex::Vector< amrex::FabFactory< amrex::FArrayBox > const * > &a_factory={})
Definition: AMReX_MLLinOp_temp.H:28
virtual amrex::BottomSolver getDefaultBottomSolver() const override
Return the default solver at the bottom of MG cycles. By default, MLLinOp uses a BiCGStab solver impl...
Definition: AMReX_MLLinOp_temp.H:53
virtual void AnyCopy(amrex::Any &dst, amrex::Any const &src, amrex::IntVect const &ng) const override
Copy data from source Any to destination Any.
Definition: AMReX_MLLinOp_temp.H:149
virtual amrex::Real AnyNormInf(amrex::Any &a) const override
Return the infinity norm of the given Any.
Definition: AMReX_MLLinOp_temp.H:243
virtual amrex::Real AnyNormInfMask(int amrlev, amrex::Any const &a, bool local) const override
Return the infinity norm of the masked region of the given Any.
Definition: AMReX_MLLinOp_temp.H:265
virtual amrex::Any AnyMake(int amrlev, int mglev, amrex::IntVect const &ng) const override
Make data container (e.g., MultiFabs stored in Any) for given level.
Definition: AMReX_MLLinOp_temp.H:64
virtual void AnyCorrectionResidual(int amrlev, int mglev, amrex::Any &resid, amrex::Any &x, const amrex::Any &b, MLLinOp::BCMode bc_mode, const amrex::Any *crse_bcdata=nullptr) override
Compute residual of the residual correction form, r = b - Ax.
Definition: AMReX_MLLinOp_temp.H:301
virtual void AnyRestriction(int amrlev, int cmglev, amrex::Any &crse, amrex::Any &fine) const override
Restriction from fine to coarse MG level.
Definition: AMReX_MLLinOp_temp.H:385
virtual void AnySolutionResidual(int amrlev, amrex::Any &resid, amrex::Any &x, amrex::Any const &b, amrex::Any const *crse_bcdata=nullptr) override
Compute residual of the original form, r = b - Ax.
Definition: AMReX_MLLinOp_temp.H:283
virtual amrex::Any AnyMakeCoarseAmr(int famrlev, amrex::IntVect const &ng) const override
Make data container with coarsened BoxArray and DistributionMapping of the given AMR level.
Definition: AMReX_MLLinOp_temp.H:105
void define(const amrex::Vector< amrex::Geometry > &a_geom, const amrex::Vector< amrex::BoxArray > &a_grids, const amrex::Vector< amrex::DistributionMapping > &a_dmap, const amrex::LPInfo &a_info=amrex::LPInfo(), const amrex::Vector< amrex::FabFactory< amrex::FArrayBox > const * > &a_factory={})
Definition: AMReX_MLLinOp_temp.H:37
virtual amrex::Any AnyMakeCoarseMG(int amrlev, int mglev, amrex::IntVect const &ng) const override
Make data container with coarsened BoxArray and DistributionMapping of the give MG level.
Definition: AMReX_MLLinOp_temp.H:85
virtual void AnySetToZero(amrex::Any &a) const override
Set the given Any to zero.
Definition: AMReX_MLLinOp_temp.H:179
MLLinOpTemp()
Definition: AMReX_MLLinOp_temp.H:19
virtual void AnyAverageDownAndSync(amrex::Vector< amrex::Any > &sol) const override
Average down and synchronize AMR data.
Definition: AMReX_MLLinOp_temp.H:467
MLLinOpTemp(const MLLinOpTemp &)=delete
virtual void AnyInterpolationMG(int amrlev, int fmglev, amrex::Any &fine, const amrex::Any &crse) const override
Add interpolated coarse data onto the fine MG level.
Definition: AMReX_MLLinOp_temp.H:401
virtual void AnyAvgDownResMG(int clev, amrex::Any &cres, amrex::Any const &fres) const override
Average down residual from fine to coarse MG level.
Definition: AMReX_MLLinOp_temp.H:355
virtual void AnyAdd(amrex::Any &dst, amrex::Any const &src, amrex::IntVect const &ng) const override
Add data from source Any to destination Any.
Definition: AMReX_MLLinOp_temp.H:165
virtual void AnySetBndryToZero(amrex::Any &a) const override
Set boundary (i.e., ghost cells) the given Any to zero.
Definition: AMReX_MLLinOp_temp.H:192
void Max(ValLocPair< TV, TI > &vi, MPI_Comm comm)
Definition: AMReX_ParallelReduce.H:125
MPI_Comm CommunicatorSub() noexcept
sub-communicator for current frame
Definition: AMReX_ParallelContext.H:69
@ max
Definition: AMReX_ParallelReduce.H:17
This is a template for writing your own linear operator class for Ax=b.
Definition: AMReX_MLLinOp_temp.H:9
@ make_alias
Definition: AMReX_MakeType.H:7
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Box convert(const Box &b, const IntVect &typ) noexcept
Returns a Box with different type.
Definition: AMReX_Box.H:1323
void EB_set_covered(MultiFab &mf, Real val)
Definition: AMReX_EBMultiFabUtil.cpp:21
BottomSolver
Definition: AMReX_MLLinOp.H:25
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
This shuts up the compiler about unused variables.
Definition: AMReX.H:101
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Box coarsen(const Box &b, int ref_ratio) noexcept
Coarsen Box by given (positive) refinement ratio. NOTE: if type(dir) = CELL centered: lo <- lo/ratio ...
Definition: AMReX_Box.H:1210
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition: AMReX.cpp:191
std::array< T, N > Array
Definition: AMReX_Array.H:23
Definition: AMReX_MLLinOp.H:36
Definition: AMReX_FabArray.H:116