Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

AMRSolver Class Reference

#include <AMRSolver.H>

Collaboration diagram for AMRSolver:

Collaboration graph
[legend]
List of all members.

Detailed Description

Class which manages grid hierarchy and composite elliptic solution.

AMRSolver manages the AMR/multigrid solution to the elliptic equation on a multiple level grid that satisfies certain proper nesting conditions. It can be used either as a solver, or to apply the AMR / multigrid V-cycle as a preconditioner for some other iterative method, such as a Krylov method.


Public Member Functions

 AMRSolver ()
 Creates a AMRSolver whose internal state is undefined.
 AMRSolver (const Vector< DisjointBoxLayout > &a_gridsLevel, const Vector< Box > &a_domainLevel, const Vector< Real > &a_dxLevel, const Vector< int > &a_refRatio, int a_numLevels, int a_lBase, const LevelOp *const a_opin, int ncomp=1)
 Creates a fully-defined AMRSolver.
 AMRSolver (const Vector< DisjointBoxLayout > &a_gridsLevel, const Vector< ProblemDomain > &a_domainLevel, const Vector< Real > &a_dxLevel, const Vector< int > &a_refRatio, int a_numLevels, int a_lBase, const LevelOp *const a_opin, int ncomp=1)
 Creates a fully-defined AMRSolver.
void define (const Vector< DisjointBoxLayout > &a_gridsLevel, const Vector< Box > &a_domainLevel, const Vector< Real > &a_dxLevel, const Vector< int > &a_refRatio, int a_numLevels, int a_lBase, const LevelOp *const a_opin, int ncomp=1)
 Defines AMRSolvers' internal state.
void define (const Vector< DisjointBoxLayout > &a_gridsLevel, const Vector< ProblemDomain > &a_domainLevel, const Vector< Real > &a_dxLevel, const Vector< int > &a_refRatio, int a_numLevels, int a_lBase, const LevelOp *const a_opin, int ncomp=1)
 ~AMRSolver ()
bool isDefined () const
 Returns true if full define function has been called.
void setNumSmoothUp (int a_numSmoothUp)
 Set number of multigrid smoothings on way up v-cycle. Default is 4.
void setNumSmoothDown (int a_numSmoothDown)
 Set number of multigrid smoothings on way down v-cycle; Default is 4.
void setTolerance (Real a_tolerance)
 Set tolerance of iterative solution. Default is 1.0e-10.
void setOperatorTolerance (Real a_operatorTolerance)
 Set "operator tolerance" of iterative solution.
void setMaxIter (int a_maxIter)
 Set max number of iterations. Default is 42.
void setMinIter (int a_minIter)
 Set min number of iterations.
void setNumVCyclesBottom (int a_numVCycleBottom)
 Set the number of V-cycles performed at the bottom of the AMR v-cycle.
void solveAMR (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel)
 Solves on hierarchy to tolerance m_tolerance.
void AMRVCycleMG (Vector< LevelData< FArrayBox > * > &a_corrLevel, const Vector< LevelData< FArrayBox > * > &a_residLevel)
 Does one relaxation V-cycle using a MG solver.
Vector< RealcomputeResidualNorm (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, int normNtype)
 Calculate norm of multilevel residual on levels lBase to lmax.
Vector< RealcomputeResidualNorm (Vector< LevelData< FArrayBox > * > &a_residLevel, Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, int normNtype)
 Calculate norm of multilevel residual on levels lBase to lmax.
void computeAMRResidual (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, LevelData< FArrayBox > &res, int ilev)
 Calculate multilevel residual on level ilev.
void applyAMROperator (Vector< LevelData< FArrayBox > * > &a_phiLevel, LevelData< FArrayBox > &a_LofPhi, int a_ilev)
 Calculate multilevel L(phi). includes refluxing and all that.
void applyAMROperatorHphys (Vector< LevelData< FArrayBox > * > &a_phiLevel, LevelData< FArrayBox > &a_LofPhi, int a_ilev)
 Calculate multilevel L(phi) with homogeneous physical BCs.
void setVerbose (bool a_verbose)
 set whether the solver does i/o while solving. default is true

Protected Member Functions

void setDefaultValues ()
void clear ()

Protected Attributes

Real m_errorTolerance
Real m_tolerance
Real m_operatorTolerance
int m_numLevels
int m_finestLevel
Vector< int > m_refRatio
Vector< Realm_dxLevel
Vector< DisjointBoxLayoutm_gridsLevel
Vector< ProblemDomainm_domainLevel
int m_maxIter
int m_minIter
int m_numSmoothUp
int m_numVCyclesBottom
int m_numSmoothDown
Vector< AMRLevelMG * > m_amrmgLevel
bool m_isDefined
LevelSolver m_levelSolver
int m_lBase
int m_ncomp
bool m_verbose

Private Member Functions

 AMRSolver (const AMRSolver &)
AMRSolveroperator= (const AMRSolver &)


Constructor & Destructor Documentation

AMRSolver::AMRSolver  ) 
 

Creates a AMRSolver whose internal state is undefined.

Need to call define(...) function to use any of the functionality of the class

AMRSolver::AMRSolver const Vector< DisjointBoxLayout > &  a_gridsLevel,
const Vector< Box > &  a_domainLevel,
const Vector< Real > &  a_dxLevel,
const Vector< int > &  a_refRatio,
int  a_numLevels,
int  a_lBase,
const LevelOp *const  a_opin,
int  ncomp = 1
 

Creates a fully-defined AMRSolver.

Calls define function with identical arguments

AMRSolver::AMRSolver const Vector< DisjointBoxLayout > &  a_gridsLevel,
const Vector< ProblemDomain > &  a_domainLevel,
const Vector< Real > &  a_dxLevel,
const Vector< int > &  a_refRatio,
int  a_numLevels,
int  a_lBase,
const LevelOp *const  a_opin,
int  ncomp = 1
 

Creates a fully-defined AMRSolver.

Calls define function with identical arguments

AMRSolver::~AMRSolver  ) 
 

AMRSolver::AMRSolver const AMRSolver  )  [private]
 


Member Function Documentation

void AMRSolver::define const Vector< DisjointBoxLayout > &  a_gridsLevel,
const Vector< Box > &  a_domainLevel,
const Vector< Real > &  a_dxLevel,
const Vector< int > &  a_refRatio,
int  a_numLevels,
int  a_lBase,
const LevelOp *const  a_opin,
int  ncomp = 1
 

Defines AMRSolvers' internal state.

Inputs:

  • gridsLevel -- The grids at all levels. Each element in the vector is a level's worth of grids. gridsLevel[0] are grids for level 0 and so forth. Vector index corresponds to level number.
  • domainLevel -- The domains at all levels. Each element in the vector is a level's domain. domainLevel[0] is the domain for level 0 and so forth. Vector index corresponds to level number.
  • dxLevel -- The grid spacing at all levels. Each element in the vector is a level's $$. dxLevel[0]--- is $$ for level 0 and so forth. Vector index corresponds to level number.
  • ref_ratio --- The refinement ratio between all levels. ref_ratio[0] is the refinement ratio between level 0 and level 1; Vector index corresponds to level number.
  • numlevels --- The number of AMR levels in the calculation. The length of the Vectors has to be at least numlevels.
  • lBase -- coarsest level on which solution is to be computed. This needs to be set at the time of definition, in order to build the bottom LevelSolver.
  • opin_a -- The levelop to use in the solution.

void AMRSolver::define const Vector< DisjointBoxLayout > &  a_gridsLevel,
const Vector< ProblemDomain > &  a_domainLevel,
const Vector< Real > &  a_dxLevel,
const Vector< int > &  a_refRatio,
int  a_numLevels,
int  a_lBase,
const LevelOp *const  a_opin,
int  ncomp = 1
 

Defines AMRSolvers' internal state

Inputs:

  • gridsLevel --- The grids at all levels. Each element in the vector is a level's worth of grids. gridsLevel[0] are grids for level 0 and so forth. Vector index corresponds to level number.
  • domainLevel --- The domains at all levels. Each element in the vector is a level's domain. domainLevel[0] is the domain for level 0 and so forth. Vector index corresponds to level number.
  • dxLevel --- The grid spacing at all levels. Each element in the vector is a level's $$. dxLevel[0]--- is $$ for level 0 and so forth. Vector index corresponds to level number.
  • ref_ratio --- The refinement ratio between all levels. ref_ratio[0] is the refinement ratio between level 0 and level 1; Vector index corresponds to level number.
  • numlevels -- The number of AMR levels in the calculation. The length of the Vector~s has to be at least numlevels.
  • lBase - coarsest level on which solution is to be computed. This needs to be set at the time of definition, in order to build the bottom LevelSolver.
  • opin_a -- The levelop to use in the solution.

bool AMRSolver::isDefined  )  const
 

Returns true if full define function has been called.

void AMRSolver::setNumSmoothUp int  a_numSmoothUp  ) 
 

Set number of multigrid smoothings on way up v-cycle. Default is 4.

void AMRSolver::setNumSmoothDown int  a_numSmoothDown  ) 
 

Set number of multigrid smoothings on way down v-cycle; Default is 4.

void AMRSolver::setTolerance Real  a_tolerance  ) 
 

Set tolerance of iterative solution. Default is 1.0e-10.

void AMRSolver::setOperatorTolerance Real  a_operatorTolerance  ) 
 

Set "operator tolerance" of iterative solution.

Iteration will stop if (new_residual/old_residual) > 1-operatorTolerance (and at least minIter iterations have been performed). Default is 1.0e-5.

void AMRSolver::setMaxIter int  a_maxIter  ) 
 

Set max number of iterations. Default is 42.

void AMRSolver::setMinIter int  a_minIter  ) 
 

Set min number of iterations.

Only relevant when residual is not decreasing fast enough to satisfy the "operator tolerance". Default is 4.

void AMRSolver::setNumVCyclesBottom int  a_numVCycleBottom  ) 
 

Set the number of V-cycles performed at the bottom of the AMR v-cycle.

Set the number of v-cycles performed from the base level to the maximum coarsening of the base level during one overall v-cycle on the AMR hierarchy. Default is 1.

void AMRSolver::solveAMR Vector< LevelData< FArrayBox > * > &  a_phiLevel,
const Vector< LevelData< FArrayBox > * > &  a_rhsLevel
 

Solves on hierarchy to tolerance m_tolerance.

Solves the elliptic equation over the hierarchy of levels lBase ... lMax where $lMax = numlevels-1$. If lBase > 0, then the data at level lBase - 1 is used to interpolate boundary conditions at boundary cells that are not adjacent to the domain boundary.

Inputs:

  • phiLevel - pointers to current guess at the solution values for levels (lMin = max(lBase-1,0)) ... lMax. Vector index corresponds to level number.
  • rhsLevel - pointers to right-hand side for levels lmin ... lMax. Vector index corresponds to level number.

Outputs:

void AMRSolver::AMRVCycleMG Vector< LevelData< FArrayBox > * > &  a_corrLevel,
const Vector< LevelData< FArrayBox > * > &  a_residLevel
 

Does one relaxation V-cycle using a MG solver.

Problem is assumed to already be in residual-correction form.

Inputs:

  • corrLevel - pointers to current guess at the correction values for levels lMin = max(lBase-1,0) ... lMax. Vector index corresponds to level number.
  • residLevel - pointers to AMR residual for levels lMin ... lMax. Vector index corresponds to level number.

Outputs:

Vector<Real> AMRSolver::computeResidualNorm Vector< LevelData< FArrayBox > * > &  a_phiLevel,
const Vector< LevelData< FArrayBox > * > &  a_rhsLevel,
int  normNtype
 

Calculate norm of multilevel residual on levels lBase to lmax.

Does not include data covered by finer levels.

Vector<Real> AMRSolver::computeResidualNorm Vector< LevelData< FArrayBox > * > &  a_residLevel,
Vector< LevelData< FArrayBox > * > &  a_phiLevel,
const Vector< LevelData< FArrayBox > * > &  a_rhsLevel,
int  normNtype
 

Calculate norm of multilevel residual on levels lBase to lmax.

Does not include data covered by finer levels. Also returns residual in argument a_residLevel.

void AMRSolver::computeAMRResidual Vector< LevelData< FArrayBox > * > &  a_phiLevel,
const Vector< LevelData< FArrayBox > * > &  a_rhsLevel,
LevelData< FArrayBox > &  res,
int  ilev
 

Calculate multilevel residual on level ilev.

void AMRSolver::applyAMROperator Vector< LevelData< FArrayBox > * > &  a_phiLevel,
LevelData< FArrayBox > &  a_LofPhi,
int  a_ilev
 

Calculate multilevel L(phi). includes refluxing and all that.

Includes refluxing and all that. This is the three-level operator.

void AMRSolver::applyAMROperatorHphys Vector< LevelData< FArrayBox > * > &  a_phiLevel,
LevelData< FArrayBox > &  a_LofPhi,
int  a_ilev
 

Calculate multilevel L(phi) with homogeneous physical BCs.

Calculate multilevel L(phi) with homogeneous physical BCs (but with inhomogeneous C/F BCs). includes refluxing and all that This is the three-level operator.

void AMRSolver::setVerbose bool  a_verbose  ) 
 

set whether the solver does i/o while solving. default is true

void AMRSolver::setDefaultValues  )  [protected]
 

set data to default values. not for external use

void AMRSolver::clear  )  [protected]
 

Clear internal storage

AMRSolver& AMRSolver::operator= const AMRSolver  )  [private]
 


Member Data Documentation

Real AMRSolver::m_errorTolerance [protected]
 

error tolerance for error estimation

Real AMRSolver::m_tolerance [protected]
 

solver tolerance

Real AMRSolver::m_operatorTolerance [protected]
 

tolerance on maxOperator

int AMRSolver::m_numLevels [protected]
 

number of levels allowed

int AMRSolver::m_finestLevel [protected]
 

Maximum number of working level is m_numLevels - 1

Vector<int> AMRSolver::m_refRatio [protected]
 

refinement ratio.

Vector<Real> AMRSolver::m_dxLevel [protected]
 

grid spacing.

Vector<DisjointBoxLayout> AMRSolver::m_gridsLevel [protected]
 

grids.

Vector<ProblemDomain> AMRSolver::m_domainLevel [protected]
 

domains.

int AMRSolver::m_maxIter [protected]
 

maximum number of solver iterations

int AMRSolver::m_minIter [protected]
 

minimum number of solver iterations before "hung converence" criteria is valid

int AMRSolver::m_numSmoothUp [protected]
 

number of smoother iterations on up cycle

int AMRSolver::m_numVCyclesBottom [protected]
 

number of VCycles for max iter of levelsolver

int AMRSolver::m_numSmoothDown [protected]
 

number of smoother iterations on down cycle

Vector<AMRLevelMG*> AMRSolver::m_amrmgLevel [protected]
 

array of AMRLevelMGs containing data at each refinement level

bool AMRSolver::m_isDefined [protected]
 

Has this solver been defined?

LevelSolver AMRSolver::m_levelSolver [protected]
 

int AMRSolver::m_lBase [protected]
 

int AMRSolver::m_ncomp [protected]
 

bool AMRSolver::m_verbose [protected]
 

default is true


The documentation for this class was generated from the following file:
Generated on Thu May 12 18:21:05 2005 for Chombo by doxygen 1.3.8