AMRMultiGrid< T > Class Template Reference

#include <AMRMultiGrid.H>

Inheritance diagram for AMRMultiGrid< T >:

Inheritance graph
[legend]
Collaboration diagram for AMRMultiGrid< T >:

Collaboration graph
[legend]

List of all members.


Detailed Description

template<class T>
class AMRMultiGrid< T >

Class to solve elliptic equations using the Martin and Cartwright algorithm.

Public Member Functions

 AMRMultiGrid ()
virtual ~AMRMultiGrid ()
virtual void define (const ProblemDomain &a_coarseDomain, AMRLevelOpFactory< T > &a_factory, LinearSolver< T > *a_bottomSolver, int a_numLevels)
virtual void solve (Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base, bool a_zeroPhi=true)
virtual void solveNoInit (Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base, bool a_zeroPhi=true)
void relaxOnlyHomogeneous (Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base)
virtual void AMRVCycle (Vector< T * > &a_correction, Vector< T * > &a_residual, int l, int l_max, int l_base)
void setMGCycle (int a_numMG)
void init (const Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base)
void revert (const Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base)
AMRLevelOp< T > & levelOp (int level)
Real computeAMRResidual (Vector< T * > &a_resid, Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base, bool a_homogeneousBC=false, bool a_computeNorm=true)
void computeAMROperator (Vector< T * > &a_lph, Vector< T * > &a_phi, int l_max, int l_base, bool a_homogeneousBC=false)
Vector< MGLevelOp< T > * > getAllOperators ()
Vector< MGLevelOp< T > * > getOperatorsOp ()
Vector< Vector< MGLevelOp< T > * > > getOperatorsMG ()
void setSolverParameters (const int &a_pre, const int &a_post, const int &a_bottom, const int &a_numMG, const int &a_iterMax, const Real &a_eps, const Real &a_hang, const Real &a_normThresh)
void setBottomSolver (int l_max, int l_base)
 set up bottom solver for internal MG solver

Public Attributes

Real m_eps
Real m_hang
Real m_normThresh
bool m_solverParamsSet
int m_imin
int m_iterMax
int m_verbosity
int m_exitStatus
int m_pre
int m_post
int m_bottom
int m_numMG
int m_maxDepth
 max no. of coarsenings -- -1 (default) means coarsen as far as possible
Real m_convergenceMetric

Protected Member Functions

void relax (T &phi, T &R, int depth, int nRelax=2)
void computeAMRResidualLevel (Vector< T * > &a_resid, Vector< T * > &a_phi, const Vector< T * > &a_rhs, int l_max, int l_base, int ilev, bool a_homogeneousBC)
void clear ()

Protected Attributes

Vector< AMRLevelOp< T > * > m_op
Vector< MultiGrid< T > * > m_mg
Vector< T * > m_correction
Vector< T * > m_residual
Vector< T * > m_resC
Vector< Copierm_resCopier
Vector< Copierm_reverseCopier
NoOpSolver< T > m_nosolve
LinearSolver< T > * m_bottomSolver

Private Member Functions

 AMRMultiGrid (const AMRMultiGrid< T > &a_opin)
void operator= (const AMRMultiGrid< T > &a_opin)

Constructor & Destructor Documentation

template<class T>
AMRMultiGrid< T >::AMRMultiGrid (  )  [inline]

template<class T>
AMRMultiGrid< T >::~AMRMultiGrid (  )  [inline, virtual]

template<class T>
AMRMultiGrid< T >::AMRMultiGrid ( const AMRMultiGrid< T > &  a_opin  )  [inline, private]


Member Function Documentation

template<class T>
void AMRMultiGrid< T >::define ( const ProblemDomain a_coarseDomain,
AMRLevelOpFactory< T > &  a_factory,
LinearSolver< T > *  a_bottomSolver,
int  a_numLevels 
) [inline, virtual]

Define the solver. a_coarseDomain is the index space on the coarsest AMR level. a_factory is the operator factory through which all special information is conveyed. a_bottomSolver is the solver to be used at the termination of multigrid coarsening. a_numLevels is the number of AMR levels.

References AMRLevelOpFactory< T >::AMRnewOp(), CH_TIME, AMRMultiGrid< T >::clear(), i, AMRMultiGrid< T >::m_bottomSolver, AMRMultiGrid< T >::m_correction, AMRMultiGrid< T >::m_maxDepth, AMRMultiGrid< T >::m_mg, AMRMultiGrid< T >::m_nosolve, AMRMultiGrid< T >::m_op, AMRMultiGrid< T >::m_resC, AMRMultiGrid< T >::m_resCopier, AMRMultiGrid< T >::m_residual, AMRMultiGrid< T >::m_reverseCopier, ProblemDomain::refine(), AMRLevelOpFactory< T >::refToFiner(), and Vector< T >::resize().

Referenced by MultilevelLinearOp< T >::define().

template<class T>
void AMRMultiGrid< T >::solve ( Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base,
bool  a_zeroPhi = true 
) [inline, virtual]

Solve L(phi) = rho from l_base to l_max. To solve over all levels, l_base = 0 and l_max = max_level = numLevels-1.

References CH_TIME, AMRMultiGrid< T >::init(), AMRMultiGrid< T >::revert(), and AMRMultiGrid< T >::solveNoInit().

template<class T>
void AMRMultiGrid< T >::solveNoInit ( Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base,
bool  a_zeroPhi = true 
) [inline, virtual]

template<class T>
void AMRMultiGrid< T >::relaxOnlyHomogeneous ( Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base 
) [inline]

template<class T>
void AMRMultiGrid< T >::AMRVCycle ( Vector< T * > &  a_correction,
Vector< T * > &  a_residual,
int  l,
int  l_max,
int  l_base 
) [inline, virtual]

template<class T>
void AMRMultiGrid< T >::setMGCycle ( int  a_numMG  )  [inline]

template<class T>
void AMRMultiGrid< T >::init ( const Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base 
) [inline]

template<class T>
void AMRMultiGrid< T >::revert ( const Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base 
) [inline]

References CH_TIME, i, and AMRMultiGrid< T >::m_mg.

Referenced by AMRMultiGrid< T >::solve().

template<class T>
AMRLevelOp< T > & AMRMultiGrid< T >::levelOp ( int  level  )  [inline]

template<class T>
Real AMRMultiGrid< T >::computeAMRResidual ( Vector< T * > &  a_resid,
Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base,
bool  a_homogeneousBC = false,
bool  a_computeNorm = true 
) [inline]

template<class T>
void AMRMultiGrid< T >::computeAMROperator ( Vector< T * > &  a_lph,
Vector< T * > &  a_phi,
int  l_max,
int  l_base,
bool  a_homogeneousBC = false 
) [inline]

template<class T>
Vector< MGLevelOp< T > * > AMRMultiGrid< T >::getAllOperators (  )  [inline]

For changing coefficients. Use at thy own peril.

References Vector< T >::append(), AMRMultiGrid< T >::m_mg, AMRMultiGrid< T >::m_op, Vector< T >::push_back(), and Vector< T >::size().

template<class T>
Vector< MGLevelOp< T > * > AMRMultiGrid< T >::getOperatorsOp (  )  [inline]

template<class T>
Vector< Vector< MGLevelOp< T > * > > AMRMultiGrid< T >::getOperatorsMG (  )  [inline]

template<class T>
void AMRMultiGrid< T >::setSolverParameters ( const int &  a_pre,
const int &  a_post,
const int &  a_bottom,
const int &  a_numMG,
const int &  a_iterMax,
const Real a_eps,
const Real a_hang,
const Real a_normThresh 
) [inline]

Set parameters of the solve. a_pre is the number of smoothings before averaging. a_post is the number of smoothings after averaging. a_bottom is the number of smoothings at the bottom level. a_numMG = 1 for vcycle, =2 for wcycle (use 1). a_itermax is the max number of v cycles. a_hang is the minimum amount of change per vcycle. a_eps is the solution tolerance. a_normThresh is how close to zero eps*resid is allowed to get.

References AMRMultiGrid< T >::m_bottom, AMRMultiGrid< T >::m_eps, AMRMultiGrid< T >::m_hang, AMRMultiGrid< T >::m_iterMax, AMRMultiGrid< T >::m_mg, AMRMultiGrid< T >::m_normThresh, AMRMultiGrid< T >::m_post, AMRMultiGrid< T >::m_pre, AMRMultiGrid< T >::m_solverParamsSet, AMRMultiGrid< T >::setMGCycle(), and Vector< T >::size().

Referenced by MultilevelLinearOp< T >::define().

template<class T>
void AMRMultiGrid< T >::setBottomSolver ( int  l_max,
int  l_base 
) [inline]

set up bottom solver for internal MG solver

This function is normally called by the solve(...) function. However, it must be called if solve will not be called (in particular, if only the V-cycle is being used)

References AMRMultiGrid< T >::m_bottom, AMRMultiGrid< T >::m_bottomSolver, AMRMultiGrid< T >::m_mg, AMRMultiGrid< T >::m_nosolve, AMRMultiGrid< T >::m_post, AMRMultiGrid< T >::m_pre, and AMRMultiGrid< T >::m_solverParamsSet.

Referenced by MultilevelLinearOp< T >::preCond(), and AMRMultiGrid< T >::solveNoInit().

template<class T>
void AMRMultiGrid< T >::relax ( T &  phi,
T &  R,
int  depth,
int  nRelax = 2 
) [inline, protected]

template<class T>
void AMRMultiGrid< T >::computeAMRResidualLevel ( Vector< T * > &  a_resid,
Vector< T * > &  a_phi,
const Vector< T * > &  a_rhs,
int  l_max,
int  l_base,
int  ilev,
bool  a_homogeneousBC 
) [inline, protected]

template<class T>
void AMRMultiGrid< T >::clear (  )  [inline, protected]

template<class T>
void AMRMultiGrid< T >::operator= ( const AMRMultiGrid< T > &  a_opin  )  [inline, private]


Member Data Documentation

template<class T>
Real AMRMultiGrid< T >::m_eps

template<class T>
Real AMRMultiGrid< T >::m_hang

template<class T>
Real AMRMultiGrid< T >::m_normThresh

template<class T>
bool AMRMultiGrid< T >::m_solverParamsSet

template<class T>
int AMRMultiGrid< T >::m_imin

template<class T>
int AMRMultiGrid< T >::m_iterMax

template<class T>
int AMRMultiGrid< T >::m_verbosity

template<class T>
int AMRMultiGrid< T >::m_exitStatus

template<class T>
int AMRMultiGrid< T >::m_pre

template<class T>
int AMRMultiGrid< T >::m_post

template<class T>
int AMRMultiGrid< T >::m_bottom

template<class T>
int AMRMultiGrid< T >::m_numMG

template<class T>
int AMRMultiGrid< T >::m_maxDepth

max no. of coarsenings -- -1 (default) means coarsen as far as possible

If using a value besides the default, need to set it _before_ define function is called

Referenced by MultilevelLinearOp< T >::define(), and AMRMultiGrid< T >::define().

template<class T>
Real AMRMultiGrid< T >::m_convergenceMetric

template<class T>
Vector<AMRLevelOp<T>*> AMRMultiGrid< T >::m_op [protected]

template<class T>
Vector<MultiGrid<T> *> AMRMultiGrid< T >::m_mg [protected]

template<class T>
Vector<T*> AMRMultiGrid< T >::m_correction [protected]

template<class T>
Vector<T*> AMRMultiGrid< T >::m_residual [protected]

template<class T>
Vector<T*> AMRMultiGrid< T >::m_resC [protected]

template<class T>
Vector<Copier> AMRMultiGrid< T >::m_resCopier [protected]

template<class T>
Vector<Copier> AMRMultiGrid< T >::m_reverseCopier [protected]

template<class T>
NoOpSolver<T> AMRMultiGrid< T >::m_nosolve [protected]

template<class T>
LinearSolver<T>* AMRMultiGrid< T >::m_bottomSolver [protected]


The documentation for this class was generated from the following file:

Generated on Tue Apr 14 14:22:48 2009 for Chombo + EB by  doxygen 1.5.5