BISICLES AMR ice sheet model
0.9
|
#include <AVCAMRPoissonOp.H>
Public Member Functions | |
virtual void | restrictResidual (LevelData< FArrayBox > &a_resCoarse, LevelData< FArrayBox > &a_phiFine, const LevelData< FArrayBox > &a_rhsFine) |
void | finerOperatorChanged (const MGLevelOp< LevelData< FArrayBox > > &a_operator, int a_coarseningFactor) |
LevelData< FArrayBox > & | identityCoef () |
Returns identity coefficient data. More... | |
void | setBCoefInterpolator (RefCountedPtr< CoefficientInterpolator< LevelData< FluxBox >, LevelData< FArrayBox > > > &a_bCoefInterpolator) |
LevelData< FluxBox > & | BCoef () |
Returns the B coefficient. More... | |
RefCountedPtr< CoefficientInterpolator< LevelData< FluxBox >, LevelData< FArrayBox > > > | BCoefInterpolator () |
void | setTime (Real a_time) |
AVCAMRPoissonOp functions | |
AVCAMRPoissonOp () | |
virtual | ~AVCAMRPoissonOp () |
virtual void | residualI (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 | applyOpI (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_phi, bool a_homogeneous=false) |
virtual void | applyOpNoBoundary (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_phi) |
virtual void | setAlphaAndBeta (const Real &a_alpha, const Real &a_beta) |
For tga stuff. More... | |
virtual void | setCoefs (const RefCountedPtr< LevelData< FArrayBox > > &a_aCoef, const RefCountedPtr< LevelData< FluxBox > > &a_bCoef, const Real &a_alpha, const Real &a_beta) |
Also calls reset lambda. More... | |
virtual void | resetLambda () |
Should be called before the relaxation parameter is needed. More... | |
virtual void | computeLambda () |
Compute lambda once alpha, aCoef, beta, bCoef are defined. More... | |
virtual void | reflux (const LevelData< FArrayBox > &a_phiFine, const LevelData< FArrayBox > &a_phi, LevelData< FArrayBox > &a_residual, AMRLevelOp< LevelData< FArrayBox > > *a_finerOp) |
Public Attributes | |
RefCountedPtr< LevelData< FArrayBox > > | m_aCoef |
Identity operator spatially varying coefficient storage (cell-centered) — if you change this call resetLambda() More... | |
RefCountedPtr< LevelData< FluxBox > > | m_bCoef |
Laplacian operator spatially varying coefficient storage (face-centered) — if you change this call resetLambda() More... | |
LevelData< FArrayBox > | m_lambda |
Reciprocal of the diagonal entry of the operator matrix. More... | |
Protected Member Functions | |
virtual void | levelGSRB (LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs) |
virtual void | levelMultiColor (LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs) |
virtual void | looseGSRB (LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs) |
virtual void | overlapGSRB (LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs) |
virtual void | levelGSRBLazy (LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs) |
virtual void | levelJacobi (LevelData< FArrayBox > &a_phi, const LevelData< FArrayBox > &a_rhs) |
virtual void | getFlux (FArrayBox &a_flux, const FArrayBox &a_data, const FluxBox &a_bCoef, const Box &a_facebox, int a_dir, int a_ref=1) const |
computes flux over face-centered a_facebox. More... | |
void | computeOperatorNoBCs (LevelData< FArrayBox > &a_lhs, const LevelData< FArrayBox > &a_phi) |
utility function which computes operator after all bc's have been set More... | |
Protected Attributes | |
LayoutData< CFIVS > | m_loCFIVS [SpaceDim] |
LayoutData< CFIVS > | m_hiCFIVS [SpaceDim] |
RefCountedPtr< CoefficientInterpolator< LevelData< FluxBox >, LevelData< FArrayBox > > > | m_bCoefInterpolator |
Real | m_time |
bool | m_lambdaNeedsResetting |
Operator for solving variable-coefficient (alpha * aCoef(x) * I - beta * Div( bCoef(x) . Grad)) phi = rho over an AMR hierarchy. Similar to VCAMRPoissonOp2 but bCoef(x) is a tensor, b_ij = p + q n_i n_j + r m_i m_j. As a result, the stencil fills the whole cube surrounding a cell (9pt rather than 5pt in 2D, etc)
|
inline |
References m_lambdaNeedsResetting.
Referenced by AVCAMRPoissonOpFactory::AMRnewOp(), and AVCAMRPoissonOpFactory::MGnewOp().
|
inlinevirtual |
|
virtual |
References applyOpNoBoundary().
Referenced by ~AVCAMRPoissonOp().
|
virtual |
References m_aCoef.
Referenced by applyOpI(), and ~AVCAMRPoissonOp().
|
inline |
Returns the B coefficient.
References m_bCoef.
|
inline |
References m_bCoefInterpolator, and setTime().
|
virtual |
Compute lambda once alpha, aCoef, beta, bCoef are defined.
References m_aCoef, m_lambda, and resetLambda().
Referenced by AVCAMRPoissonOpFactory::AMRnewOp(), AVCAMRPoissonOpFactory::MGnewOp(), and ~AVCAMRPoissonOp().
|
protected |
utility function which computes operator after all bc's have been set
void AVCAMRPoissonOp::finerOperatorChanged | ( | const MGLevelOp< LevelData< FArrayBox > > & | a_operator, |
int | a_coarseningFactor | ||
) |
This is called on multigrid operators when their AMR operators are altered.
References m_aCoef, m_bCoef, and m_lambdaNeedsResetting.
Referenced by AVCAMRPoissonOpFactory::refToFiner(), and ~AVCAMRPoissonOp().
|
protectedvirtual |
|
inline |
Returns identity coefficient data.
References m_aCoef.
|
protectedvirtual |
References m_aCoef, m_lambda, and resetLambda().
|
protectedvirtual |
|
protectedvirtual |
References m_lambda, and resetLambda().
|
protectedvirtual |
|
protectedvirtual |
References m_aCoef, m_lambda, and resetLambda().
|
protectedvirtual |
|
virtual |
References m_bCoef, m_lambda, relax, and resetLambda().
Referenced by ~AVCAMRPoissonOp().
|
virtual |
References getFlux(), and m_bCoef.
Referenced by ~AVCAMRPoissonOp().
|
virtual |
Should be called before the relaxation parameter is needed.
References m_lambda, and m_lambdaNeedsResetting.
Referenced by computeLambda(), levelGSRB(), levelJacobi(), looseGSRB(), preCond(), and ~AVCAMRPoissonOp().
|
virtual |
References m_aCoef.
Referenced by ~AVCAMRPoissonOp().
|
virtual |
calculate restricted residual a_resCoarse[2h] = I[h->2h] (rhsFine[h] - L[h](phiFine[h])
Referenced by ~AVCAMRPoissonOp().
|
virtual |
|
inline |
Sets up a model that modifies b coefficient data when the operator's time is set.
a_bCoefInterpolator | A CoefficientInterpolator that will be used to compute the b coefficient at specific times. |
References m_bCoefInterpolator.
|
virtual |
Also calls reset lambda.
References m_aCoef, m_bCoef, and m_lambdaNeedsResetting.
Referenced by ~AVCAMRPoissonOp().
void AVCAMRPoissonOp::setTime | ( | Real | a_time | ) |
Sets the time centering of the operator. This interpolates b coefficient data at the given time if an interpolator is set.
References m_bCoef, m_bCoefInterpolator, m_lambdaNeedsResetting, and m_time.
Referenced by BCoefInterpolator(), and getFlux().
RefCountedPtr<LevelData<FArrayBox> > AVCAMRPoissonOp::m_aCoef |
Identity operator spatially varying coefficient storage (cell-centered) — if you change this call resetLambda()
Referenced by AVCAMRPoissonOpFactory::AMRnewOp(), applyOpNoBoundary(), computeLambda(), AVCAMRPoissonOpFactory::define(), finerOperatorChanged(), identityCoef(), levelGSRB(), looseGSRB(), AVCAMRPoissonOpFactory::MGnewOp(), residualI(), and setCoefs().
RefCountedPtr<LevelData<FluxBox> > AVCAMRPoissonOp::m_bCoef |
Laplacian operator spatially varying coefficient storage (face-centered) — if you change this call resetLambda()
Referenced by AVCAMRPoissonOpFactory::AMRnewOp(), BCoef(), AVCAMRPoissonOpFactory::define(), finerOperatorChanged(), AVCAMRPoissonOpFactory::MGnewOp(), preCond(), reflux(), setCoefs(), and setTime().
|
protected |
Referenced by BCoefInterpolator(), setBCoefInterpolator(), and setTime().
|
protected |
LevelData<FArrayBox> AVCAMRPoissonOp::m_lambda |
Reciprocal of the diagonal entry of the operator matrix.
Referenced by computeLambda(), levelGSRB(), levelJacobi(), looseGSRB(), preCond(), and resetLambda().
|
protected |
Referenced by AVCAMRPoissonOp(), finerOperatorChanged(), resetLambda(), setAlphaAndBeta(), setCoefs(), and setTime().
|
protected |
|
protected |
Referenced by setTime().