#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().
1.5.5