#include <PoissonOp4.H>
Public Member Functions | |
PoissonOp4 () | |
virtual | ~PoissonOp4 () |
LinearOp functions | |
void | define (const RealVect &a_dx, const ProblemDomain &a_domain, BCFunc a_bc) |
virtual void | createCoarsened (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_rhs, const int &a_refRat) |
virtual void | residual (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs, bool a_homogeneous=false) |
virtual void | preCond (LevelData< FArrayBox > &a_correction, const LevelData< FArrayBox > &a_residual) |
virtual void | applyOp (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_phi, bool a_homogeneous=false) |
virtual void | create (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_rhs) |
virtual void | assign (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_rhs) |
virtual Real | dotProduct (const LevelData< FArrayBox > &a_1, const LevelData< FArrayBox > &a_2) |
virtual void | incr (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_x, Real a_scale) |
virtual void | axby (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_x, const LevelData< FArrayBox > &a_y, Real a, Real b) |
virtual void | scale (LevelData< FArrayBox > &a_lhs, const Real &a_scale) |
virtual Real | norm (const LevelData< FArrayBox > &a_x, int a_ord) |
virtual void | setToZero (LevelData< FArrayBox > &a_x) |
MGLevelOp functions | |
virtual void | relax (LevelData< FArrayBox > &a_e, const LevelData< FArrayBox > &a_residual, int iterations) |
virtual void | createCoarser (LevelData< FArrayBox > &a_coarse, const LevelData< FArrayBox > &a_fine, bool ghost) |
virtual void | restrictResidual (LevelData< FArrayBox > &a_resCoarse, LevelData< FArrayBox > &a_phiFine, const LevelData< FArrayBox > &a_rhsFine) |
virtual void | prolongIncrement (LevelData< FArrayBox > &a_phiThisLevel, const LevelData< FArrayBox > &a_correctCoarse) |
Static Public Attributes | |
static const int | m_nGhost = 2 |
Protected Member Functions | |
void | levelGSRB (LevelData< FArrayBox > &a_e, const LevelData< FArrayBox > &a_residual) |
Protected Attributes | |
RealVect | m_dx |
RealVect | m_dxCrse |
ProblemDomain | m_domain |
BCFunc | m_bc |
LevelDataOps< FArrayBox > | m_levelOps |
DisjointBoxLayout | m_coarsenedMGrids |
PoissonOp4::PoissonOp4 | ( | ) | [inline] |
virtual PoissonOp4::~PoissonOp4 | ( | ) | [inline, virtual] |
void PoissonOp4::define | ( | const RealVect & | a_dx, | |
const ProblemDomain & | a_domain, | |||
BCFunc | a_bc | |||
) |
virtual void PoissonOp4::createCoarsened | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_rhs, | |||
const int & | a_refRat | |||
) | [virtual] |
virtual void PoissonOp4::residual | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_phi, | |||
const LevelData< FArrayBox > & | a_rhs, | |||
bool | a_homogeneous = false | |||
) | [virtual] |
Say you are solving L(phi) = rhs. Make a_lhs = L(a_phi) - a_rhs. If a_homogeneous is true, evaluate the operator using homogeneous boundary conditions.
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::preCond | ( | LevelData< FArrayBox > & | a_cor, | |
const LevelData< FArrayBox > & | a_residual | |||
) | [virtual] |
Given the current state of the residual the correction, apply your preconditioner to a_cor.
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::applyOp | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_phi, | |||
bool | a_homogeneous = false | |||
) | [virtual] |
In the context of solving L(phi) = rhs, set a_lhs = L(a_phi). If a_homogeneous is true, evaluate the operator using homogeneous boundary conditions.
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::create | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_rhs | |||
) | [virtual] |
Creat data holder a_lhs that mirrors a_rhs. You do not need to copy the data of a_rhs, just make a holder the same size.
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::assign | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_rhs | |||
) | [virtual] |
Set a_lhs equal to a_rhs.
Implements LinearOp< LevelData< FArrayBox > >.
virtual Real PoissonOp4::dotProduct | ( | const LevelData< FArrayBox > & | a_1, | |
const LevelData< FArrayBox > & | a_2 | |||
) | [virtual] |
Compute and return the dot product of a_1 and a_2. In most contexts, this means return the sum over all data points of a_1*a_2.
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::incr | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_x, | |||
Real | a_scale | |||
) | [virtual] |
Increment by scaled amount (a_lhs += a_scale*a_x).
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::axby | ( | LevelData< FArrayBox > & | a_lhs, | |
const LevelData< FArrayBox > & | a_x, | |||
const LevelData< FArrayBox > & | a_y, | |||
Real | a_a, | |||
Real | a_b | |||
) | [virtual] |
Set input to a scaled sum (a_lhs = a_a*a_x + a_b*a_y).
Implements LinearOp< LevelData< FArrayBox > >.
Multiply the input by a given scale (a_lhs *= a_scale).
Implements LinearOp< LevelData< FArrayBox > >.
Return the norm of a_rhs. a_ord == 0 max norm, a_ord == 1 sum(abs(a_rhs)), else, L(a_ord) norm.
Implements LinearOp< LevelData< FArrayBox > >.
Set a_lhs to zero.
Implements LinearOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::relax | ( | LevelData< FArrayBox > & | a_correction, | |
const LevelData< FArrayBox > & | a_residual, | |||
int | a_iterations | |||
) | [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).
Implements MGLevelOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::createCoarser | ( | LevelData< FArrayBox > & | a_coarse, | |
const LevelData< FArrayBox > & | a_fine, | |||
bool | ghosted | |||
) | [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).
Implements MGLevelOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::restrictResidual | ( | LevelData< FArrayBox > & | a_resCoarse, | |
LevelData< FArrayBox > & | a_phiFine, | |||
const LevelData< FArrayBox > & | a_rhsFine | |||
) | [virtual] |
calculate restricted residual a_resCoarse[2h] = I[h->2h] (rhsFine[h] - L[h](phiFine[h])
Implements MGLevelOp< LevelData< FArrayBox > >.
virtual void PoissonOp4::prolongIncrement | ( | LevelData< FArrayBox > & | a_phiThisLevel, | |
const LevelData< FArrayBox > & | a_correctCoarse | |||
) | [virtual] |
correct the fine solution based on coarse correction a_phiThisLevel += I[2h->h](a_correctCoarse)
Implements MGLevelOp< LevelData< FArrayBox > >.
void PoissonOp4::levelGSRB | ( | LevelData< FArrayBox > & | a_e, | |
const LevelData< FArrayBox > & | a_residual | |||
) | [protected] |
const int PoissonOp4::m_nGhost = 2 [static] |
RealVect PoissonOp4::m_dx [protected] |
RealVect PoissonOp4::m_dxCrse [protected] |
ProblemDomain PoissonOp4::m_domain [protected] |
BCFunc PoissonOp4::m_bc [protected] |
LevelDataOps<FArrayBox> PoissonOp4::m_levelOps [protected] |
DisjointBoxLayout PoissonOp4::m_coarsenedMGrids [protected] |