|
| MGLevelOp () |
| Constructor. More...
|
|
virtual | ~MGLevelOp () |
| Destructor. More...
|
|
virtual void | createCoarser (T &a_coarse, const T &a_fine, bool ghosted)=0 |
|
virtual void | relax (T &a_correction, const T &a_residual, int a_iterations)=0 |
|
virtual void | relaxNF (T &a_phi, const T *a_phiCoarse, const T &a_rhs, int a_iterations) |
| specialized no-fine relax function, useful for full-multigrid schemes, defaults to regular relax More...
|
|
virtual void | restrictResidual (T &a_resCoarse, T &a_phiFine, const T &a_rhsFine)=0 |
|
virtual void | restrictResidual (T &a_resCoarse, T &a_phiFine, const T *a_phiCoarse, const T &a_rhsFine, bool homogeneous) |
| full-multigrid version of restrictResidual, useful for FAS-type schemes. Defaults to standard restriction More...
|
|
virtual void | restrictR (T &a_phiCoarse, const T &a_phiFine) |
| simple restriction function More...
|
|
virtual void | prolongIncrement (T &a_phiThisLevel, const T &a_correctCoarse)=0 |
|
void | addObserver (MGLevelOpObserver< T > *a_observer) |
|
virtual void | applyOpMg (T &a_lhs, T &a_phi, T *a_phiCoarse, bool a_homogeneous) |
| Apply an operator. More...
|
|
virtual void | residualNF (T &a_lhs, T &a_phi, const T *a_phiCoarse, const T &a_rhs, bool a_homogeneous=false) |
|
void | removeObserver (MGLevelOpObserver< T > *a_observer) |
|
void | addCoarserObserver (MGLevelOp< T > *a_operator, int a_coarseningFactor) |
|
void | notifyObserversOfChange () |
| This should be called whenever the operator's data is updated. More...
|
|
virtual void | finerOperatorChanged (const MGLevelOp< T > &a_operator, int a_coarseningFactor) |
|
int | numObservers () const |
| Returns the number of objects observing this operator. More...
|
|
virtual | ~LinearOp () |
|
virtual void | residual (T &a_lhs, const T &a_phi, const T &a_rhs, bool a_homogeneous=false)=0 |
|
virtual void | preCond (T &a_cor, const T &a_residual)=0 |
|
virtual void | applyOp (T &a_lhs, const T &a_phi, bool a_homogeneous=false)=0 |
|
virtual void | create (T &a_lhs, const T &a_rhs)=0 |
|
virtual void | clear (T &a_lhs) |
|
virtual void | assign (T &a_lhs, const T &a_rhs)=0 |
|
virtual void | assignLocal (T &a_lhs, const T &a_rhs) |
|
virtual Real | dotProduct (const T &a_1, const T &a_2)=0 |
|
virtual void | mDotProduct (const T &a_1, const int a_sz, const T a_2[], Real a_mdots[]) |
|
virtual void | incr (T &a_lhs, const T &a_x, Real a_scale)=0 |
|
virtual void | axby (T &a_lhs, const T &a_x, const T &a_y, Real a_a, Real a_b)=0 |
|
virtual void | scale (T &a_lhs, const Real &a_scale)=0 |
|
virtual Real | norm (const T &a_rhs, int a_ord)=0 |
|
virtual Real | dx () const |
|
virtual void | setToZero (T &a_lhs)=0 |
|
virtual void | write (const T *a, const char *filename) |
|
| MGLevelOpObserver () |
| Base level Constructor. Called by all subclasses. More...
|
|
virtual | ~MGLevelOpObserver () |
| Destructor. More...
|
|
virtual void | operatorChanged (const MGLevelOp< T > &a_operator) |
|
void | setObservee (MGLevelOp< T > *a_observee) |
|
void | clearObservee () |
|
template<typename T>
class MGLevelOp< T >
This class handles the additional tasks of coordinating operations between this level and the level one coarser than this 'level'. This class is also an MGLevelOpObserver, so objects of this type can observe other MGLevelOp objects.
template<typename T>
virtual void MGLevelOp< T >::createCoarser |
( |
T & |
a_coarse, |
|
|
const T & |
a_fine, |
|
|
bool |
ghosted |
|
) |
| |
|
pure virtual |
Create a coarsened (by two) version of the input data. This does not include averaging the data. So if a_fine is over a Box of (0, 0, 0) (63, 63, 63), a_fine should be over a Box (0, 0, 0) (31, 31, 31).
Implemented in EBAMRPoissonOp, NWOEBViscousTensorOp, EBViscousTensorOp, EBConductivityOp, NWOEBConductivityOp, NWOViscousTensorOp, ViscousTensorOp, slowEBCO, AMRPoissonOp, EBPoissonOp, ResistivityOp, AMRNodeOp, PoissonOp4, NewPoissonOp, and NewPoissonOp4.
template<typename T>
virtual void MGLevelOp< T >::relax |
( |
T & |
a_correction, |
|
|
const T & |
a_residual, |
|
|
int |
a_iterations |
|
) |
| |
|
pure virtual |
Use your relaxation operator to remove the high frequency wave numbers from the correction so that it may be averaged to a coarser refinement. A point relaxtion scheme, for example takes the form a_correction -= lambda*(L(a_correction) - a_residual).
Implemented in EBAMRPoissonOp, NWOEBViscousTensorOp, EBViscousTensorOp, EBConductivityOp, NWOEBConductivityOp, NWOViscousTensorOp, slowEBCO, ViscousTensorOp, EBPoissonOp, AMRPoissonOp, ResistivityOp, AMRNodeOp, PoissonOp4, NewPoissonOp, and NewPoissonOp4.
Referenced by AMRMultiGrid< LevelData< T > >::getAMROperators().