BISICLES AMR ice sheet model  0.9
Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
PetscIceSolver Class Reference

#include <PetscIceSolver.H>

Inheritance diagram for PetscIceSolver:
Inheritance graph
[legend]
Collaboration diagram for PetscIceSolver:
Collaboration graph
[legend]

Public Member Functions

 PetscIceSolver ()
 
virtual ~PetscIceSolver ()
 
virtual void define (const ProblemDomain &a_coarseDomain, ConstitutiveRelation *a_constRel, BasalFrictionRelation *a_basalFrictionRel, const Vector< DisjointBoxLayout > &a_vectGrids, const Vector< int > &a_vectRefRatio, const RealVect &a_dxCrse, IceThicknessIBC *a_bc, int a_numLevels)
 (Re-)define IceVelocitySolver object for a given mesh and set of physics rules More...
 
void setSolverType (int a_solver_type)
 
void setTolerance (Real a_tolerance)
 if relevant, set solver tolerance More...
 
void setAbsoluteTolerance (Real a_tolerance)
 
void setMaxIterations (int a_max_iter)
 if relevant, set max number of solver iterations More...
 
void setVerbosity (int a_verbosity)
 
void computeAMRResidual (Vector< RefCountedPtr< LevelData< FArrayBox > > > &a_resid, const Vector< LevelData< FArrayBox > * > &a_horizontalVel, const Vector< LevelData< FArrayBox > * > &a_rhs, int a_lbase, int a_maxLevel)
 
void computeAMRResidualLevel (Vector< RefCountedPtr< LevelData< FArrayBox > > > &a_resid, const Vector< LevelData< FArrayBox > * > &a_horizontalVel, const Vector< LevelData< FArrayBox > * > &a_rhs, int a_lbase, int a_maxLevel, int a_ilev)
 
virtual int solve (Vector< LevelData< FArrayBox > * > &a_horizontalVel, Vector< LevelData< FArrayBox > * > &a_calvedIce, Vector< LevelData< FArrayBox > * > &a_addedIce, Vector< LevelData< FArrayBox > * > &a_removedIce, Real &a_initialResidualNorm, Real &a_finalResidualNorm, const Real a_convergenceMetric, const Vector< LevelData< FArrayBox > * > &a_rhs, const Vector< LevelData< FArrayBox > * > &a_C, const Vector< LevelData< FArrayBox > * > &a_C0, const Vector< LevelData< FArrayBox > * > &a_A, const Vector< LevelData< FArrayBox > * > &a_muCoef, Vector< RefCountedPtr< LevelSigmaCS > > &a_coordSys, Real a_time, int a_lbase, int a_maxLevel)
 solve for isothermal ice More...
 
void picardSolve_private (int a_ilev, LevelData< FArrayBox > &a_horizontalVel, const LevelData< FArrayBox > &a_rhs, Real a_norm0, Real &a_norm, int a_numIts, int &a_it)
 
void jfnkSolve_private (int a_ilev, LevelData< FArrayBox > &a_horizontalVel, const LevelData< FArrayBox > &a_rhs, Real a_norm0, int a_numIts, int &a_it)
 
void computeMu (LevelData< FArrayBox > &a_horizontalVel, const LevelData< FluxBox > &a_A, const LevelData< FluxBox > &a_muCoef, const RefCountedPtr< LevelSigmaCS > &a_coordSys, LevelData< FArrayBox > *crseVelPtr, LevelData< FArrayBox > *fineVelPtr, int a_ilev, Real a_time)
 
virtual void updateCoefs (LevelData< FArrayBox > &a_horizontalVel, int)
 
void AMRProlong (LevelData< FArrayBox > &a_fineU, const LevelData< FArrayBox > &a_CrsU, LevelData< FArrayBox > &a_CrsCover, Copier a_copier, int a_refRatio)
 
- Public Member Functions inherited from IceVelocitySolver
 IceVelocitySolver ()
 
virtual ~IceVelocitySolver ()
 
virtual bool isDefined ()
 

Public Attributes

Vector< ProblemDomain > m_domains
 
RefCountedPtr< ViscousTensorOpFactory > m_opFactoryPtr
 
Vector< RefCountedPtr< ViscousTensorOp > > m_op
 
RefCountedPtr< LevelData< FArrayBox > > m_twork1
 
RefCountedPtr< LevelData< FArrayBox > > m_twork2
 
RefCountedPtr< LevelData< FluxBox > > m_tfaceA
 
LevelData< FArrayBox > * m_tcrseVel
 
LevelData< FArrayBox > * m_tphi0
 
RefCountedPtr< LevelData< FluxBox > > m_tmuCoef
 
RefCountedPtr< LevelSigmaCSm_tcoordSys
 
Real m_ttime
 
Vector< RefCountedPtr< LevelData< FArrayBox > > > m_fineCover
 
Vector< Copier > m_restCopier
 
Vector< Copier > m_projCopier
 

Protected Member Functions

void defineOpFactory (RealVect, const ProblemDomain &, int)
 define operator factory. In 2D, this is a ViscousTensorOp. More...
 
void getOperatorScaleFactors (Real &a_alpha, Real &a_beta) const
 get ViscousTensorOp scaling factors (alpha and beta) More...
 

Protected Attributes

ConstitutiveRelationm_constRelPtr
 
BasalFrictionRelationm_basalFrictionRelPtr
 
Vector< DisjointBoxLayout > m_grids
 
Real m_vtopSafety
 
int m_verbosity
 
bool m_isOpDefined
 
bool m_isSolverDefined
 
IceThicknessIBCm_bc
 
int m_max_its
 
Real m_rtol
 
Real m_atol
 
int m_minPicardIterations
 
int m_amr_max_level
 
bool m_plotResidual
 
Vector< int > m_refRatios
 
Vector< RefCountedPtr< LevelData< FluxBox > > > m_Mu
 
Vector< RefCountedPtr< LevelData< FluxBox > > > m_Lambda
 
Vector< const LevelData< FArrayBox > * > m_Beta
 
Vector< const LevelData< FArrayBox > * > m_Beta0
 
Vector< RefCountedPtr< LevelData< FArrayBox > > > m_C
 
Real m_constThetaVal
 
- Protected Attributes inherited from IceVelocitySolver
bool m_isDefined
 
int m_verbosity
 

Detailed Description

virtual class to manage the nonlinear solve for the ice-sheet momentum This is a virtual base class to facilitate the implementation of different solution algorithms.

Constructor & Destructor Documentation

◆ PetscIceSolver()

PetscIceSolver::PetscIceSolver ( )

◆ ~PetscIceSolver()

PetscIceSolver::~PetscIceSolver ( )
virtual

References m_bc.

Member Function Documentation

◆ AMRProlong()

void PetscIceSolver::AMRProlong ( LevelData< FArrayBox > &  a_fineU,
const LevelData< FArrayBox > &  a_CrsU,
LevelData< FArrayBox > &  a_CrsCover,
Copier  a_copier,
int  a_refRatio 
)

◆ computeAMRResidual()

void PetscIceSolver::computeAMRResidual ( Vector< RefCountedPtr< LevelData< FArrayBox > > > &  a_resid,
const Vector< LevelData< FArrayBox > * > &  a_horizontalVel,
const Vector< LevelData< FArrayBox > * > &  a_rhs,
int  a_lbase,
int  a_maxLevel 
)

References computeAMRResidualLevel().

Referenced by setVerbosity().

◆ computeAMRResidualLevel()

void PetscIceSolver::computeAMRResidualLevel ( Vector< RefCountedPtr< LevelData< FArrayBox > > > &  a_resid,
const Vector< LevelData< FArrayBox > * > &  a_horizontalVel,
const Vector< LevelData< FArrayBox > * > &  a_rhs,
int  a_lbase,
int  a_maxLevel,
int  a_ilev 
)

References m_op.

Referenced by computeAMRResidual(), and setVerbosity().

◆ computeMu()

void PetscIceSolver::computeMu ( LevelData< FArrayBox > &  a_horizontalVel,
const LevelData< FluxBox > &  a_A,
const LevelData< FluxBox > &  a_muCoef,
const RefCountedPtr< LevelSigmaCS > &  a_coordSys,
LevelData< FArrayBox > *  crseVelPtr,
LevelData< FArrayBox > *  fineVelPtr,
int  a_ilev,
Real  a_time 
)

◆ define()

void PetscIceSolver::define ( const ProblemDomain &  a_coarseDomain,
ConstitutiveRelation a_constRel,
BasalFrictionRelation a_FrictionRel,
const Vector< DisjointBoxLayout > &  a_vectGrids,
const Vector< int > &  a_vectRefRatio,
const RealVect &  a_dxCrse,
IceThicknessIBC a_bc,
int  a_numLevels 
)
virtual

(Re-)define IceVelocitySolver object for a given mesh and set of physics rules

Parameters
a_coarseDomaindomain boundaries on the coarsest level
a_constRelphysics rule (e.g Glen's flow law) relating englacial stress and strian-rate
a_FrictionRelphysics rule (e.g Weertman law) relating basal stress and strain-rate
a_vectGridsmesh layout for each level
a_vectGridsrefinement ratio for each level
a_dxCrsemesh spacing on coarsest level
a_bcice thickness and velocity boundary conditions
a_numLevelsnumber of mesh levels.

Implements IceVelocitySolver.

References defineOpFactory(), getOperatorScaleFactors(), m_basalFrictionRelPtr, m_bc, m_Beta, m_Beta0, m_C, m_constRelPtr, m_domains, m_fineCover, m_grids, m_Lambda, m_Mu, m_op, m_opFactoryPtr, m_projCopier, m_refRatios, m_restCopier, nc, and IceThicknessIBC::new_thicknessIBC().

◆ defineOpFactory()

void PetscIceSolver::defineOpFactory ( RealVect  a_Crsdx,
const ProblemDomain &  a_domainCoar,
int  a_numLevels 
)
protected

define operator factory. In 2D, this is a ViscousTensorOp.

References getOperatorScaleFactors(), m_bc, m_C, m_grids, m_isOpDefined, m_Lambda, m_Mu, m_opFactoryPtr, m_refRatios, m_vtopSafety, and IceThicknessIBC::velocitySolveBC().

Referenced by define().

◆ getOperatorScaleFactors()

void PetscIceSolver::getOperatorScaleFactors ( Real &  a_alpha,
Real &  a_beta 
) const
protected

get ViscousTensorOp scaling factors (alpha and beta)

put this in a function because we need them in two separate places

Referenced by define(), defineOpFactory(), jfnkSolve_private(), picardSolve_private(), and solve().

◆ jfnkSolve_private()

void PetscIceSolver::jfnkSolve_private ( int  a_ilev,
LevelData< FArrayBox > &  a_horizontalVel,
const LevelData< FArrayBox > &  a_rhs,
Real  a_norm0,
int  a_numIts,
int &  a_it 
)

◆ picardSolve_private()

void PetscIceSolver::picardSolve_private ( int  a_ilev,
LevelData< FArrayBox > &  a_horizontalVel,
const LevelData< FArrayBox > &  a_rhs,
Real  a_norm0,
Real &  a_norm,
int  a_numIts,
int &  a_it 
)

◆ setAbsoluteTolerance()

void PetscIceSolver::setAbsoluteTolerance ( Real  a_tolerance)
inline

If norm(residual) drops below the absolute tolerance (regardless of the initial residual), we declare ourselves "done" – this is a simple way to avoid solver hangs.

References m_atol.

◆ setMaxIterations()

void PetscIceSolver::setMaxIterations ( int  a_max_iter)
inlinevirtual

if relevant, set max number of solver iterations

default implementation does nothing – it's assumed that derived classes will implement this in a meaningful way

Reimplemented from IceVelocitySolver.

References m_max_its.

◆ setSolverType()

void PetscIceSolver::setSolverType ( int  a_solver_type)
inline

◆ setTolerance()

void PetscIceSolver::setTolerance ( Real  a_tolerance)
inlinevirtual

if relevant, set solver tolerance

default implementation does nothing – it's assumed that derived classes will implement this in a meaningful way

Reimplemented from IceVelocitySolver.

References m_rtol.

◆ setVerbosity()

void PetscIceSolver::setVerbosity ( int  a_verbosity)
inlinevirtual

◆ solve()

int PetscIceSolver::solve ( Vector< LevelData< FArrayBox > * > &  a_horizontalVel,
Vector< LevelData< FArrayBox > * > &  a_calvedIce,
Vector< LevelData< FArrayBox > * > &  a_addedIce,
Vector< LevelData< FArrayBox > * > &  a_removedIce,
Real &  a_initialResidualNorm,
Real &  a_finalResidualNorm,
const Real  a_convergenceMetric,
const Vector< LevelData< FArrayBox > * > &  a_rhs,
const Vector< LevelData< FArrayBox > * > &  a_beta,
const Vector< LevelData< FArrayBox > * > &  a_beta0,
const Vector< LevelData< FArrayBox > * > &  a_A,
const Vector< LevelData< FArrayBox > * > &  a_muCoef,
Vector< RefCountedPtr< LevelSigmaCS > > &  a_coordSys,
Real  a_time,
int  a_lbase,
int  a_maxLevel 
)
virtual

◆ updateCoefs()

void PetscIceSolver::updateCoefs ( LevelData< FArrayBox > &  a_horizontalVel,
int  a_ilev 
)
virtual

Member Data Documentation

◆ m_amr_max_level

int PetscIceSolver::m_amr_max_level
protected

Referenced by PetscIceSolver(), and solve().

◆ m_atol

Real PetscIceSolver::m_atol
protected

◆ m_basalFrictionRelPtr

BasalFrictionRelation* PetscIceSolver::m_basalFrictionRelPtr
protected

◆ m_bc

IceThicknessIBC* PetscIceSolver::m_bc
protected

◆ m_Beta

Vector<const LevelData<FArrayBox> *> PetscIceSolver::m_Beta
protected

Referenced by computeMu(), define(), and solve().

◆ m_Beta0

Vector<const LevelData<FArrayBox> *> PetscIceSolver::m_Beta0
protected

Referenced by computeMu(), define(), and solve().

◆ m_C

Vector<RefCountedPtr<LevelData<FArrayBox> > > PetscIceSolver::m_C
protected

◆ m_constRelPtr

ConstitutiveRelation* PetscIceSolver::m_constRelPtr
protected

◆ m_constThetaVal

Real PetscIceSolver::m_constThetaVal
protected

Referenced by PetscIceSolver().

◆ m_domains

Vector<ProblemDomain> PetscIceSolver::m_domains

Referenced by computeMu(), define(), and solve().

◆ m_fineCover

Vector<RefCountedPtr<LevelData<FArrayBox> > > PetscIceSolver::m_fineCover

Referenced by define(), and solve().

◆ m_grids

Vector<DisjointBoxLayout> PetscIceSolver::m_grids
protected

◆ m_isOpDefined

bool PetscIceSolver::m_isOpDefined
protected

◆ m_isSolverDefined

bool PetscIceSolver::m_isSolverDefined
protected

◆ m_Lambda

Vector<RefCountedPtr<LevelData<FluxBox> > > PetscIceSolver::m_Lambda
protected

◆ m_max_its

int PetscIceSolver::m_max_its
protected

◆ m_minPicardIterations

int PetscIceSolver::m_minPicardIterations
protected

Referenced by PetscIceSolver(), and solve().

◆ m_Mu

Vector<RefCountedPtr<LevelData<FluxBox> > > PetscIceSolver::m_Mu
protected

◆ m_op

Vector<RefCountedPtr<ViscousTensorOp> > PetscIceSolver::m_op

◆ m_opFactoryPtr

RefCountedPtr<ViscousTensorOpFactory> PetscIceSolver::m_opFactoryPtr

Referenced by define(), defineOpFactory(), and solve().

◆ m_plotResidual

bool PetscIceSolver::m_plotResidual
protected

Referenced by PetscIceSolver(), and solve().

◆ m_projCopier

Vector<Copier> PetscIceSolver::m_projCopier

Referenced by define().

◆ m_refRatios

Vector<int> PetscIceSolver::m_refRatios
protected

◆ m_restCopier

Vector<Copier> PetscIceSolver::m_restCopier

Referenced by define(), and solve().

◆ m_rtol

Real PetscIceSolver::m_rtol
protected

◆ m_tcoordSys

RefCountedPtr<LevelSigmaCS> PetscIceSolver::m_tcoordSys

Referenced by solve(), and updateCoefs().

◆ m_tcrseVel

LevelData<FArrayBox>* PetscIceSolver::m_tcrseVel

Referenced by solve(), and updateCoefs().

◆ m_tfaceA

RefCountedPtr<LevelData<FluxBox> > PetscIceSolver::m_tfaceA

Referenced by solve(), and updateCoefs().

◆ m_tmuCoef

RefCountedPtr<LevelData<FluxBox> > PetscIceSolver::m_tmuCoef

Referenced by solve(), and updateCoefs().

◆ m_tphi0

LevelData<FArrayBox>* PetscIceSolver::m_tphi0

Referenced by FormFunction(), and solve().

◆ m_ttime

Real PetscIceSolver::m_ttime

Referenced by solve(), and updateCoefs().

◆ m_twork1

RefCountedPtr<LevelData<FArrayBox> > PetscIceSolver::m_twork1

Referenced by FormFunction(), and solve().

◆ m_twork2

RefCountedPtr<LevelData<FArrayBox> > PetscIceSolver::m_twork2

Referenced by FormFunction(), and solve().

◆ m_verbosity

int PetscIceSolver::m_verbosity
protected

◆ m_vtopSafety

Real PetscIceSolver::m_vtopSafety
protected

Referenced by defineOpFactory(), and PetscIceSolver().


The documentation for this class was generated from the following files: