1#ifndef AMREX_MLNODETENSORLAPLACIAN_H_
2#define AMREX_MLNODETENSORLAPLACIAN_H_
3#include <AMReX_Config.H>
26#if (AMREX_SPACEDIM == 2)
27 static constexpr int nelems = 3;
73 [[nodiscard]] std::string
name ()
const override {
return std::string(
"MLNodeTensorLaplacian"); }
96 void reflux (
int crse_amrlev,
106 bool skip_fillboundary,
int niter)
const final;
127#if defined(AMREX_USE_HYPRE) && (AMREX_SPACEDIM > 1)
138 void fillIJMatrix (
MFIter const& mfi,
143 Real* mat)
const override;
153 void fillRHS (
MFIter const& mfi,
164 mutable int m_redblack = 0;
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
HYPRE_Int Int
Definition AMReX_HypreNodeLap.H:59
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:88
Definition AMReX_MLNodeLinOp.H:23
Definition AMReX_MLNodeTensorLaplacian.H:23
MLNodeTensorLaplacian(MLNodeTensorLaplacian &&)=delete
static constexpr int nelems
Definition AMReX_MLNodeTensorLaplacian.H:29
std::string name() const override
Definition AMReX_MLNodeTensorLaplacian.H:73
MLNodeTensorLaplacian(const MLNodeTensorLaplacian &)=delete
void define(const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo())
Bind the tensor operator to the AMR hierarchy (no EB support).
Definition AMReX_MLNodeTensorLaplacian.cpp:64
void smooth(int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, bool skip_fillboundary, int niter) const final
Tensor-aware smoother override for nodal data (updates sol against rhs for niter passes; set skip_fil...
Definition AMReX_MLNodeTensorLaplacian.cpp:229
void normalize(int amrlev, int mglev, MultiFab &mf) const final
Divide mf by the diagonal of the operator (used by CG-family bottom solvers).
Definition AMReX_MLNodeTensorLaplacian.cpp:275
void Fapply(int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final
Apply the tensor Laplacian to in at (amrlev,mglev).
Definition AMReX_MLNodeTensorLaplacian.cpp:204
MLNodeTensorLaplacian & operator=(const MLNodeTensorLaplacian &)=delete
void interpolation(int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const final
Add the prolongation of coarse data onto the fine grid (fine += prolong(crse)).
Definition AMReX_MLNodeTensorLaplacian.cpp:129
void setBeta(Array< Real, 3 > const &a_beta) noexcept
Convenience helper that sets sigma = I - beta beta^T.
Definition AMReX_MLNodeTensorLaplacian.cpp:23
void Fsmooth(int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs) const final
Execute the nodal tensor smoother on (amrlev,mglev).
Definition AMReX_MLNodeTensorLaplacian.cpp:247
~MLNodeTensorLaplacian() override=default
void setSigma(Array< Real, nelems > const &a_sigma) noexcept
Configure the symmetric tensor sigma.
Definition AMReX_MLNodeTensorLaplacian.cpp:17
void prepareForSolve() final
Finalize tensor coefficients and BC caches before solving.
Definition AMReX_MLNodeTensorLaplacian.cpp:194
MLNodeTensorLaplacian()=default
void averageDownSolutionRHS(int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final
Average fine AMR data (fine_sol, fine_rhs) into coarse arrays (crse_sol, crse_rhs) on level camrlev.
Definition AMReX_MLNodeTensorLaplacian.cpp:173
void reflux(int crse_amrlev, MultiFab &res, const MultiFab &crse_sol, const MultiFab &crse_rhs, MultiFab &fine_res, MultiFab &fine_sol, const MultiFab &fine_rhs) const final
Flux-register reflux between coarse/fine tensor solves; updates res and fine_res using solutions and ...
Definition AMReX_MLNodeTensorLaplacian.cpp:186
void restriction(int amrlev, int cmglev, MultiFab &crse, MultiFab &fine) const final
Restrict nodal tensor data from fine to coarse on AMR level amrlev / MG level cmglev.
Definition AMReX_MLNodeTensorLaplacian.cpp:82
void fixUpResidualMask(int amrlev, iMultiFab &resmsk) final
Adjust residual masks resmsk so tensor Dirichlet EB nodes remain fixed.
Definition AMReX_MLNodeTensorLaplacian.cpp:281
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
A Collection of IArrayBoxes.
Definition AMReX_iMultiFab.H:34
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
std::array< T, N > Array
Definition AMReX_Array.H:31
Definition AMReX_Amr.cpp:50
A multidimensional array accessor.
Definition AMReX_Array4.H:288
Fixed-size array that can be used on GPU.
Definition AMReX_Array.H:52
Configuration knobs for multilevel linear operators (grid agglomeration, metrics, etc....
Definition AMReX_MLLinOp.H:51