BISICLES AMR ice sheet model
0.9
|
Implement NonlinearViscousTensor for typical (velocity-depenendent) ice rheology. More...
#include <NonlinearViscousTensor.H>
Public Member Functions | |
~IceNonlinearViscousTensor () | |
virtual NonlinearViscousTensor * | newNonlinearViscousTensor () |
factory method More... | |
IceNonlinearViscousTensor (const IceNonlinearViscousTensor &) | |
IceNonlinearViscousTensor (const Vector< DisjointBoxLayout > &a_grids, const Vector< int > &a_refRatio, const Vector< ProblemDomain > &a_domains, const Vector< RealVect > &a_dxs, const Vector< RefCountedPtr< LevelSigmaCS > > &a_coordSys, const Vector< LevelData< FArrayBox > *> &a_u, const Vector< LevelData< FArrayBox > *> &a_C, const Vector< LevelData< FArrayBox > *> &a_C0, const int a_finestLevel, const ConstitutiveRelation &a_constRel, const BasalFrictionRelation &a_basalFrictionRel, IceThicknessIBC &a_bc, const Vector< LevelData< FArrayBox > *> &a_A, const Vector< LevelData< FluxBox > *> &a_faceFlowLawCoefficient, Real a_time, Real a_vtopSafety, int a_vtopRelaxMinIter, Real a_vtopRelaxTol, Real a_muMin=0.0, Real a_muMax=1.234567e+300, Real a_scale=1.0, Real a_artificialDragCoef=0.0, Real a_artificialDragPower=8.0) | |
virtual void | setState (const Vector< LevelData< FArrayBox > *> &a_u) |
set the state (velocity) More... | |
virtual void | applyBC (Vector< LevelData< FArrayBox > *> &a_phi) |
fill ghost cells of a_state as per the boundary conditions More... | |
virtual Vector< LevelData< FArrayBox > * > & | getState () |
retrieve the state More... | |
virtual Vector< RefCountedPtr< LevelData< FluxBox > > > & | mu () |
Retrieve the viscosity coefficient, mu. More... | |
virtual Vector< RefCountedPtr< LevelData< FluxBox > > > & | lambda () |
Retrieve the compressibility coefficient, lambda. More... | |
virtual Vector< RefCountedPtr< LevelData< FArrayBox > > > & | alpha () |
Retrieve the drag coefficient, alpha. More... | |
virtual RefCountedPtr< AMRLevelOpFactory< LevelData< FArrayBox > > > | opFactoryPtr () |
provide a pointer to an AMRLevelOpFactory<LevelData<FArrayBox> > defined at the current state More... | |
virtual Vector< LevelData< FArrayBox > * > & | getC () |
virtual void | setState (const Vector< LevelData< FArrayBox > *> &a_u, const Vector< LevelData< FArrayBox > *> &a_basalFrictionCoefficent) |
virtual void | setFaceViscCoef (const Vector< LevelData< FluxBox > *> &a_muCoef) |
virtual void | unsetFaceViscCoef () |
virtual void | computeViscousTensorFace (const Vector< LevelData< FluxBox > *> &a_viscousTensor) |
![]() | |
virtual | ~NonlinearViscousTensor () |
Implement NonlinearViscousTensor for typical (velocity-depenendent) ice rheology.
Provides the means to compute the coefficients ,
and
in
and provide the appropriate ViscousTensorOpFactory for a given
. Also provides the means to compute the stress tensor components
The velocity dependencies of and
,
are determined by BasalFrictionRelation and ConstitutiveRelation objects, while the velocity independent parts are set seperately, in the contructor and can be modified using setState, and setFaceViscCoef.
The effective basal drag coefficient is computed as , with fb defined by a BasalFrictionRelation, ie
The effective viscosity is computed as , with
defined by a ConstitutiveRelation, and
IceNonlinearViscousTensor::~IceNonlinearViscousTensor | ( | ) |
IceNonlinearViscousTensor::IceNonlinearViscousTensor | ( | const IceNonlinearViscousTensor & | a | ) |
Referenced by newNonlinearViscousTensor().
IceNonlinearViscousTensor::IceNonlinearViscousTensor | ( | const Vector< DisjointBoxLayout > & | a_grids, |
const Vector< int > & | a_refRatio, | ||
const Vector< ProblemDomain > & | a_domains, | ||
const Vector< RealVect > & | a_dxs, | ||
const Vector< RefCountedPtr< LevelSigmaCS > > & | a_coordSys, | ||
const Vector< LevelData< FArrayBox > *> & | a_u, | ||
const Vector< LevelData< FArrayBox > *> & | a_C, | ||
const Vector< LevelData< FArrayBox > *> & | a_C0, | ||
const int | a_finestLevel, | ||
const ConstitutiveRelation & | a_constRel, | ||
const BasalFrictionRelation & | a_basalFrictionRel, | ||
IceThicknessIBC & | a_bc, | ||
const Vector< LevelData< FArrayBox > *> & | a_A, | ||
const Vector< LevelData< FluxBox > *> & | a_faceFlowLawCoefficient, | ||
Real | a_time, | ||
Real | a_vtopSafety, | ||
int | a_vtopRelaxMinIter, | ||
Real | a_vtopRelaxTol, | ||
Real | a_muMin = 0.0 , |
||
Real | a_muMax = 1.234567e+300 , |
||
Real | a_scale = 1.0 , |
||
Real | a_artificialDragCoef = 0.0 , |
||
Real | a_artificialDragPower = 8.0 |
||
) |
The usual constructor.
a_grids | hierarchy of AMR layouts |
a_refRatio | refinement ratio from levels l to levels l + 1 |
a_domains | domain boundaries for each level |
a_dxs | mesh spacing for each level |
a_coordSys | the ice sheet geometry |
a_u | ice velocity |
a_C | velocity independent part of the basal friction |
a_C0 | additional basal friction, such that Tb = C * fb(u)*u + C0 * u |
a_finestLevel | finest AMR level |
a_constRel | velocity dependent part of the viscosity, fv(A, u) |
a_basalFrictionRel | velocity dependent part of the basal friction, fb(u) |
a_bc | Ice thickness and velocity boundary conditions |
a_A | velocity independent part of the viscosity, A |
a_faceFlowLawCoefficient | another velocity independent part of the viscosity, phi |
a_time | |
a_vtopSafety | [DEPRECATE?] |
|
inlinevirtual |
Retrieve the drag coefficient, alpha.
Implements NonlinearViscousTensor.
Referenced by newNonlinearViscousTensor(), and AmrIce::updateViscousTensor().
|
inlinevirtual |
fill ghost cells of a_state as per the boundary conditions
Implements NonlinearViscousTensor.
|
virtual |
Provide the components of the Viscous Tensor G[ij] at cell faces, such that j-faces we have G[ij] for all i and so on
Referenced by InverseVerticallyIntegratedVelocitySolver::computeObjectiveAndGradient(), main(), and AmrIce::updateViscousTensor().
|
inlinevirtual |
Retrieve the basal friction coeffcient (not the effective drag coeffient, alpha() )
|
inlinevirtual |
retrieve the state
Implements NonlinearViscousTensor.
|
inlinevirtual |
Retrieve the compressibility coefficient, lambda.
Implements NonlinearViscousTensor.
Referenced by setState().
|
inlinevirtual |
Retrieve the viscosity coefficient, mu.
Implements NonlinearViscousTensor.
Referenced by AmrIce::updateViscousTensor().
|
virtual |
factory method
Implements NonlinearViscousTensor.
References alpha(), IceNonlinearViscousTensor(), setFaceViscCoef(), and IceThicknessIBC::velocitySolveBC().
|
inlinevirtual |
provide a pointer to an AMRLevelOpFactory<LevelData<FArrayBox> > defined at the current state
Implements NonlinearViscousTensor.
|
inlinevirtual |
Allows an additional coefficient f of the face-centered viscosity to be specified, so that H*mu*(grad(u) ... ) is replaced with f*H*mu*(grad(u) ... ).
Referenced by newNonlinearViscousTensor(), and JFNKSolver::solve().
|
virtual |
set the state (velocity)
Modify state, and thus the coefficients in the linear ViscousTensorOp: alpha, mu, lambda.
[in] | a_state | an amr hierarchy of velocity data |
Implements NonlinearViscousTensor.
References BasalFrictionRelation::computeAlpha(), LevelSigmaCS::getFaceH(), lambda(), and IceThicknessIBC::velocityGhostBC().
Referenced by InverseVerticallyIntegratedVelocitySolver::computeObjectiveAndGradient(), main(), JFNKSolver::solve(), and AmrIce::updateViscousTensor().
|
inlinevirtual |
An overloaded setState, because beta changes with time
References NonlinearViscousTensor::setState().
|
inlinevirtual |
Reset to default (NULL) the coefficient set in setFaceViscCoef