#include <AMRSolver.H>
Collaboration diagram for AMRSolver:
Public Methods | |
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 a_ncomp=1, bool a_limitCoarsening=false) | |
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 a_ncomp=1, bool a_limitCoarsening=false) | |
Creates a fully-defined AMRSolver. | |
virtual 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 a_ncomp=1, bool a_limitCoarsening=false) |
Defines AMRSolver object's internal state. | |
virtual 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 a_ncomp=1, bool a_limitCoarsening=false) |
Defines AMRSolver object's internal state. | |
virtual | ~AMRSolver () |
Destructor. | |
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 | setConvergenceMetric (Real a_metric, int a_comp) |
set the convergence metrics (if appropriate) for this problem | |
void | setNormType (int a_normType) |
set norm type to use for evaluating convergence | |
void | solveAMR (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, bool a_initializePhiToZero=true) |
Solves on hierarchy to tolerance m_tolerance. | |
virtual void | AMRVCycleMG (Vector< LevelData< FArrayBox > * > &a_corrLevel, const Vector< LevelData< FArrayBox > * > &a_residLevel) |
Does one relaxation V-cycle using a MG solver. | |
Vector< Real > | computeResidualNorm (Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, int a_normType) |
Calculate norm of multilevel residual on levels lBase to lmax. | |
Vector< Real > | computeResidualNorm (Vector< LevelData< FArrayBox > * > &a_residLevel, Vector< LevelData< FArrayBox > * > &a_phiLevel, const Vector< LevelData< FArrayBox > * > &a_rhsLevel, int a_normType) |
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 > &a_res, int a_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 Methods | |
virtual void | setDefaultValues () |
virtual void | clear () |
Vector< Real > | computeNorm (const Vector< LevelData< FArrayBox > * > &a_phiVect, int a_normType) |
LevelData< FArrayBox > & | getResid (int a_level) |
LevelData< FArrayBox > & | getCorr (int a_level) |
Protected Attributes | |
Real | m_errorTolerance |
Real | m_tolerance |
Vector< Real > | m_convergenceMetrics |
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 |
int | m_normType |
Vector< AMRLevelMG * > | m_amrmgLevel |
bool | m_isDefined |
LevelSolver | m_levelSolver |
int | m_lBase |
int | m_ncomp |
bool | m_verbose |
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 |
|
Destructor.
|
|
Does one relaxation V-cycle using a MG solver. Problem is assumed to already be in residual-correction form. Inputs: Outputs: |
|
Calculate multilevel L(phi). includes refluxing and all that. Includes refluxing and all that. This is the three-level operator. |
|
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. |
|
Clear internal storage |
|
Calculate multilevel residual on level ilev.
|
|
compute multilevel norm on levels lBase to lMax for all components in a_phiVect. Multilevel norm does not include covered regions. |
|
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 AMRSolver object's internal state. Inputs:
|
|
Defines AMRSolver object's internal state. Inputs:
|
|
|
|
|
|
Returns true if full define function has been called.
|
|
set the convergence metrics (if appropriate) for this problem sets metric against which we define convergence (for example, the norm of the RHS). Also passes a_metric through to the LevelMG (and eventually to a bottom solver.) |
|
Set data to default values. not for external use |
|
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 norm type to use for evaluating convergence
|
|
Set number of multigrid smoothings on way down v-cycle; Default is 4.
|
|
Set number of multigrid smoothings on way up v-cycle. Default is 4.
|
|
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. |
|
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. Inputs: Outputs: |
|
|
|
Array of AMRLevelMGs containing data at each refinement level |
|
metrics used to judge convergence |
|
Domains. |
|
Grid spacing. |
|
Error tolerance for error estimation |
|
Maximum number of working level is m_numLevels - 1 |
|
Grids. |
|
Has this solver been defined? |
|
|
|
|
|
Maximum number of solver iterations |
|
Minimum number of solver iterations before "hung converence" criteria is valid |
|
|
|
Norm type to use for evaluatiing convergence |
|
Number of levels allowed |
|
Number of smoother iterations on down cycle |
|
Number of smoother iterations on up cycle |
|
Number of VCycles for max iter of levelsolver |
|
Tolerance on maxOperator |
|
Refinement ratio. |
|
Solver tolerance |
|
default is true |