#include <AMRSolver.H>
Collaboration diagram for AMRSolver:
Public Methods | |
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) | |
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) | |
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) |
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 |
void | setNumSmoothUp (int a_numSmoothUp) |
void | setNumSmoothDown (int a_numSmoothDown) |
void | setTolerance (Real a_tolerance) |
void | setOperatorTolerance (Real a_operatorTolerance) |
void | setMaxIter (int a_maxIter) |
void | setMinIter (int a_minIter) |
void | setNumVCyclesBottom (int a_numVCycleBottom) |
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) |
Vector< Real > | computeResidualNorm (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, int normNtype) |
Vector< Real > | computeResidualNorm (Vector< LevelData< FArrayBox > * > &a_residLevel, Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, int normNtype) |
void | computeAMRResidual (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, LevelData< FArrayBox > &res, int ilev) |
void | applyAMROperator (Vector< LevelData< FArrayBox > * > &a_phiLevel, LevelData< FArrayBox > &a_LofPhi, int a_ilev) |
void | applyAMROperatorHphys (Vector< LevelData< FArrayBox > * > &a_phiLevel, LevelData< FArrayBox > &a_LofPhi, int a_ilev) |
void | setVerbose (bool a_verbose) |
Protected Methods | |
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< Real > | m_dxLevel |
Vector< DisjointBoxLayout > | m_gridsLevel |
Vector< ProblemDomain > | m_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 Methods | |
AMRSolver (const AMRSolver &) | |
AMRSolver & | operator= (const AMRSolver &) |
Friends | |
class | AMRLevelMG |
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.
|
Creates a AMRSolver whose internal state is undefined. Need to call define(...) function to use any of the functionality of the class |
|
Creates a fully-defined AMRSolver. Calls define function with identical arguments |
|
Creates a fully-defined AMRSolver. Calls define function with identical arguments |
|
|
|
|
|
Does one relaxation V-cycle using a MG solver. Problem is assumed to already be in residual-correction form. \ {\bf 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. \{\bf Outputs:} \ corrLevel - LevelData<FArrayBox>s pointed to for levels lMin,...,lMax are updated in place. |
|
Calculate multilevel L(phi). includes refluxing and all that This is the three-level operator. |
|
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. |
|
|
|
Calculate multilevel residual on level ilev. |
|
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. |
|
Calculate norm of multilevel residual on levels lBase to lmax. Does not include data covered by finer levels. |
|
Defines AMRSolvers' internal state \ {\bf 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 $\dx$. dxLevel[0]--- is $\dx$ 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. |
|
Defines AMRSolvers' internal state \ {\bf 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 $\dx$. dxLevel[0]--- is $\dx$ 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. |
|
Returns true if full define function has been called. |
|
|
|
|
|
Set max number of iterations. Default is 42. |
|
Set min number of iterations. Only relevant when residual is not decreasing fast enough to satisfy the "operator tolerance". Default is 4. |
|
Set number of multigrid smoothings on way down v-cycle; Default == 4. |
|
Set number of multigrid smoothings on way up v-cycle. Default == 4 |
|
|
|
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. |
|
Set tolerance of iterative solution. Default is 1.0e-10. |
|
set whether the solver does i/o while solving. default is true |
|
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. \{\bf 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. \{\bf Outputs:} \ phiLevel - LevelData<FArrayBox>s pointed to for levels lMin,...,lMax are updated in place. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|