#include <NodeLevelOp.H>
NodeLevelOp is a pure base class to encapsulate level operations API for node-centered elliptic solvers. All elliptic operators used by AMRNodeSolver inherit the NodeLevelOp interface.
Public Member Functions | |
Constructors, destructor and defines | |
NodeLevelOp () | |
virtual NodeLevelOp * | new_levelop () const =0 |
virtual | ~NodeLevelOp () |
virtual void | define (const DisjointBoxLayout &a_grids, const DisjointBoxLayout *a_gridsCoarsePtr, Real a_dx, int a_refToCoarse, const ProblemDomain &a_domain, bool a_homogeneousOnly=false, int a_ncomp=1, bool a_verbose=false)=0 |
virtual void | define (const DisjointBoxLayout &a_grids, const DisjointBoxLayout *a_gridsCoarsePtr, Real a_dx, int a_refToCoarse, const Box &a_domain, bool a_homogeneousOnly=false, int a_ncomp=1, bool a_verbose=false)=0 |
virtual void | define (const NodeLevelOp *a_opfine, int a_refToFine)=0 |
Access functions | |
virtual bool | isDefined () const =0 |
Parameter-setting functions | |
virtual void | setVerbose (bool a_verbose) |
Coarse/fine interpolation functions | |
virtual void | CFInterp (LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > &a_phiCoarse, bool a_inhomogeneous)=0 |
virtual void | homogeneousCFInterp (LevelData< NodeFArrayBox > &a_phi)=0 |
Evaluation of residual | |
virtual void | residualI (LevelData< NodeFArrayBox > &a_resid, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > *a_phiCoarsePtr, const LevelData< NodeFArrayBox > &a_rhs)=0 |
virtual void | residualH (LevelData< NodeFArrayBox > &a_resid, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > &a_rhs)=0 |
virtual void | residualIcfHphys (LevelData< NodeFArrayBox > &a_resid, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > *a_phiCoarsePtr, const LevelData< NodeFArrayBox > &a_rhs)=0 |
virtual void | residualHcfIphys (LevelData< NodeFArrayBox > &a_resid, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > &a_rhs)=0 |
Evaluation of operator | |
virtual void | applyOpI (LevelData< NodeFArrayBox > &a_LofPhi, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > *a_phiCoarsePtr)=0 |
virtual void | applyOpH (LevelData< NodeFArrayBox > &a_LofPhi, LevelData< NodeFArrayBox > &a_phi)=0 |
virtual void | applyOpIcfHphys (LevelData< NodeFArrayBox > &a_LofPhi, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > *a_phiCoarsePtr)=0 |
virtual void | applyOpHcfIphys (LevelData< NodeFArrayBox > &a_LofPhi, LevelData< NodeFArrayBox > &a_phi)=0 |
Evaluation of gradient | |
virtual void | gradient (LevelData< NodeFArrayBox > &a_gradPhi, LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > *a_phiCoarsePtr)=0 |
Smoothing functions | |
virtual void | smooth (LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > &a_rhs)=0 |
virtual void | levelPreconditioner (LevelData< NodeFArrayBox > &a_phihat, const LevelData< NodeFArrayBox > &a_rhshat)=0 |
virtual void | bottomSmoother (LevelData< NodeFArrayBox > &a_phi, const LevelData< NodeFArrayBox > &a_rhs)=0 |
Public Attributes | |
ProblemDomain | m_domain |
LayoutData< Vector< IntVectSet > > | m_IVSVext |
bool | m_verbose |
NodeLevelOp::NodeLevelOp | ( | ) | [inline] |
Default constructor. User must subsequently call define().
virtual NodeLevelOp::~NodeLevelOp | ( | ) | [inline, virtual] |
Destructor.
virtual NodeLevelOp* NodeLevelOp::new_levelop | ( | ) | const [pure virtual] |
This gets around the "no virtual constructor" rule.
Implemented in NodePoissonOp.
virtual void NodeLevelOp::define | ( | const DisjointBoxLayout & | a_grids, | |
const DisjointBoxLayout * | a_gridsCoarsePtr, | |||
Real | a_dx, | |||
int | a_refToCoarse, | |||
const ProblemDomain & | a_domain, | |||
bool | a_homogeneousOnly = false , |
|||
int | a_ncomp = 1 , |
|||
bool | a_verbose = false | |||
) | [pure virtual] |
Full define function. Makes all coarse/fine information and sets internal variables. The current level is taken to be the fine level.
a_grids | grids at this level |
a_gridsCoarsePtr | pointer to grids at next coarser AMR level, or NULL if none |
a_dx | mesh spacing at this level |
a_refToCoarse | refinement ratio between this and next coarser level |
a_domain | physical domain at this level |
a_homogeneousOnly | only homogeneous coarse/fine interpolation? |
a_ncomp | number of components |
a_verbose | verbose output? |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::define | ( | const DisjointBoxLayout & | a_grids, | |
const DisjointBoxLayout * | a_gridsCoarsePtr, | |||
Real | a_dx, | |||
int | a_refToCoarse, | |||
const Box & | a_domain, | |||
bool | a_homogeneousOnly = false , |
|||
int | a_ncomp = 1 , |
|||
bool | a_verbose = false | |||
) | [pure virtual] |
Full define function. Makes all coarse/fine information and sets internal variables. The current level is taken to be the fine level.
a_grids | grids at this level |
a_gridsCoarsePtr | pointer to grids at next coarser AMR level, or NULL if none |
a_dx | mesh spacing at this level |
a_refToCoarse | refinement ratio between this and next coarser level |
a_domain | physical domain at this level |
a_homogeneousOnly | only homogeneous coarse/fine interpolation? |
a_ncomp | number of components |
a_verbose | verbose output? |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::define | ( | const NodeLevelOp * | a_opfine, | |
int | a_refToFine | |||
) | [pure virtual] |
Full define function, based on a coarsening of the finer NodeLevelOp. Coarse-level grids are not set because only homogeneous interpolation is used.
a_opfine | pointer to NodeLevelOp at next finer level |
a_refToFine | refinement ratio between a_opfine's and this level |
Implemented in NodePoissonOp.
virtual bool NodeLevelOp::isDefined | ( | ) | const [pure virtual] |
Returns true
if this object was created with the defining constructor or if define() has been called.
Implemented in NodePoissonOp.
virtual void NodeLevelOp::setVerbose | ( | bool | a_verbose | ) | [inline, virtual] |
virtual void NodeLevelOp::CFInterp | ( | LevelData< NodeFArrayBox > & | a_phi, | |
const LevelData< NodeFArrayBox > & | a_phiCoarse, | |||
bool | a_inhomogeneous | |||
) | [pure virtual] |
Coarse / Fine (inhomogeneous) interpolation operator. Fill the nodes of a_phi on the coarse/fine interface with interpolated data from a_phiCoarse.
a_phi | the data at this level |
a_phiCoarse | the data at the next coarser level |
a_inhomogeneous | inhomogeneous physical boundary condition? |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::homogeneousCFInterp | ( | LevelData< NodeFArrayBox > & | a_phi | ) | [pure virtual] |
Homogeneous coarse/fine interpolation operator. Fill the nodes of a_phi on the coarse/fine interface with zeroes.
a_phi | the data at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::residualI | ( | LevelData< NodeFArrayBox > & | a_resid, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > * | a_phiCoarsePtr, | |||
const LevelData< NodeFArrayBox > & | a_rhs | |||
) | [pure virtual] |
Evaluate residual of operator,
a_resid = a_rhs - operator(a_phi),
with inhomogeneous coarse/fine boundary conditions, inhomogeneous physical boundary conditions.
The operator is evaluated on a_phi, after interpolating from *a_phiCoarsePtr at the coarse/fine boundary and applying the physical boundary conditions.
a_resid | the residual, at interior nodes |
a_phi | the data at this level, interpolated from *a_phiCoarsePtr at coarse/fine boundary |
a_phiCoarsePtr | pointer to data at next coarser level |
a_rhs | right-hand side at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::residualH | ( | LevelData< NodeFArrayBox > & | a_resid, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > & | a_rhs | |||
) | [pure virtual] |
Evaluate residual of operator,
a_resid = a_rhs - operator(a_phi),
with homogeneous coarse/fine boundary conditions, homogeneous physical boundary conditions.
The operator is evaluated on a_phi, after setting to zero at the coarse/fine boundary and applying homogeneous physical boundary conditions.
a_resid | the residual, at interior nodes |
a_phi | the data at this level, set to zero at coarse/fine boundary |
a_rhs | right-hand side at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::residualIcfHphys | ( | LevelData< NodeFArrayBox > & | a_resid, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > * | a_phiCoarsePtr, | |||
const LevelData< NodeFArrayBox > & | a_rhs | |||
) | [pure virtual] |
Evaluate residual of operator,
a_resid = a_rhs - operator(a_phi),
with inhomogeneous coarse/fine boundary conditions, homogeneous physical boundary conditions.
The operator is evaluated on a_phi, after interpolating from *a_phiCoarsePtr at the coarse/fine boundary and applying homogeneous physical boundary conditions.
a_resid | the residual, at interior nodes |
a_phi | the data at this level, interpolated from *a_phiCoarsePtr at coarse/fine boundary |
a_phiCoarsePtr | pointer to data at next coarser level |
a_rhs | right-hand side at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::residualHcfIphys | ( | LevelData< NodeFArrayBox > & | a_resid, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > & | a_rhs | |||
) | [pure virtual] |
Evaluate residual of operator,
a_resid = a_rhs - operator(a_phi),
with homogeneous coarse/fine boundary conditions, inhomogeneous physical boundary conditions.
The operator is evaluated on a_phi, after setting to zero at the coarse/fine boundary and applying the physical boundary conditions.
a_resid | the residual, at interior nodes |
a_phi | the data at this level, set to zero at coarse/fine boundary |
a_rhs | right-hand side at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::applyOpI | ( | LevelData< NodeFArrayBox > & | a_LofPhi, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > * | a_phiCoarsePtr | |||
) | [pure virtual] |
Evaluate operator, inhomogeneous coarse/fine boundary conditions, inhomogeneous physical boundary conditions.
The operator is evaluated on a_phi after interpolating from *a_phiCoarsePtr at the coarse/fine boundary and applying the physical boundary conditions.
a_LofPhi | value of the operator, at interior nodes |
a_phi | the data at this level, interpolated from *a_phiCoarsePtr at coarse/fine boundary |
a_phiCoarsePtr | pointer to data at next coarser level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::applyOpH | ( | LevelData< NodeFArrayBox > & | a_LofPhi, | |
LevelData< NodeFArrayBox > & | a_phi | |||
) | [pure virtual] |
Evaluate operator, homogeneous coarse/fine boundary conditions, homogeneous physical boundary conditions.
The operator is evaluated on a_phi, after setting to zero at the coarse/fine boundary and applying homogeneous physical boundary conditions.
a_LofPhi | value of the operator, at interior nodes |
a_phi | the data at this level, set to zero at coarse/fine boundary |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::applyOpIcfHphys | ( | LevelData< NodeFArrayBox > & | a_LofPhi, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > * | a_phiCoarsePtr | |||
) | [pure virtual] |
Evaluate operator, inhomogeneous coarse/fine boundary conditions, homogeneous physical boundary conditions.
The operator is evaluated on a_phi, after interpolating from *a_phiCoarsePtr at the coarse/fine boundary and applying homogeneous physical boundary conditions.
a_LofPhi | value of the operator, at interior nodes |
a_phi | the data at this level, interpolated from *a_phiCoarsePtr at coarse/fine boundary |
a_phiCoarsePtr | pointer to data at next coarser level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::applyOpHcfIphys | ( | LevelData< NodeFArrayBox > & | a_LofPhi, | |
LevelData< NodeFArrayBox > & | a_phi | |||
) | [pure virtual] |
Evaluate operator, homogeneous coarse/fine boundary conditions, inhomogeneous physical boundary conditions.
The operator is evaluated on a_phi, after setting to zero at the coarse/fine boundary and applying the physical boundary conditions.
a_LofPhi | value of the operator, at interior nodes |
a_phi | the data at this level, interpolated from *a_phiCoarsePtr at coarse/fine boundary |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::gradient | ( | LevelData< NodeFArrayBox > & | a_gradPhi, | |
LevelData< NodeFArrayBox > & | a_phi, | |||
const LevelData< NodeFArrayBox > * | a_phiCoarsePtr | |||
) | [pure virtual] |
Evaluate gradient, inhomogeneous coarse/fine boundary conditions, inhomogeneous physical boundary conditions.
The gradient is evaluated on a_phi after interpolating from *a_phiCoarsePtr at the coarse/fine boundary and applying the physical boundary conditions.
a_gradPhi | value of the gradient, at interior nodes |
a_phi | the data at this level, interpolated from *a_phiCoarsePtr at coarse/fine boundary |
a_phiCoarsePtr | pointer to data at next coarser level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::smooth | ( | LevelData< NodeFArrayBox > & | a_phi, | |
const LevelData< NodeFArrayBox > & | a_rhs | |||
) | [pure virtual] |
Smoother. Assumes that problem has already been put in residual-correction form, so that coarse/fine boundary conditions are homogeneous.
a_phi | the data at this level |
a_rhs | right-hand side at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::levelPreconditioner | ( | LevelData< NodeFArrayBox > & | a_phihat, | |
const LevelData< NodeFArrayBox > & | a_rhshat | |||
) | [pure virtual] |
Apply preconditioning to the solution on this level. Given a_rhshat, returns a_phihat from M(a_phihat) = a_rhshat .
a_phihat | data at this level |
a_rhshat | right-hand side at this level |
Implemented in NodePoissonOp.
virtual void NodeLevelOp::bottomSmoother | ( | LevelData< NodeFArrayBox > & | a_phi, | |
const LevelData< NodeFArrayBox > & | a_rhs | |||
) | [pure virtual] |
Smoother at bottom level.
a_phi | data at this level |
a_rhs | right-hand side at this level |
Implemented in NodePoissonOp.
CELL-centered physical domain of current level
exterior boundary nodes
enable output to stdout if true
Referenced by setVerbose().