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

Implement NonlinearViscousTensor for typical (velocity-depenendent) ice rheology. More...

#include <NonlinearViscousTensor.H>

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

Public Member Functions

 ~IceNonlinearViscousTensor ()
 
virtual NonlinearViscousTensornewNonlinearViscousTensor ()
 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)
 
- Public Member Functions inherited from NonlinearViscousTensor
virtual ~NonlinearViscousTensor ()
 

Detailed Description

Implement NonlinearViscousTensor for typical (velocity-depenendent) ice rheology.

Provides the means to compute the coefficients $ \mu(u) $, $ \lambda(u) = 2*\mu(u) $ and $ \alpha(u) $ in $ L[u] = \nabla \cdot ( \mu(h,A(T),u) (\nabla u + (\nabla u)^T + \lambda \nabla. u I) - \alpha(u) u $ and provide the appropriate ViscousTensorOpFactory for a given $u$. Also provides the means to compute the stress tensor components

The velocity dependencies of $\alpha(u)$ and $\mu(u)$, $\lambda(u)$ 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 $alpha(u) = C f_b(u) + C_0$ , with fb defined by a BasalFrictionRelation, ie $ \tau _b = [ C f_b(u) + C_0 ] u $

The effective viscosity is computed as $ \mu(u) = \phi h f_v(A(T),u)$, with $f_v $ defined by a ConstitutiveRelation, and $ \lambda(u) = 2 \mu(u)$

Constructor & Destructor Documentation

◆ ~IceNonlinearViscousTensor()

IceNonlinearViscousTensor::~IceNonlinearViscousTensor ( )

◆ IceNonlinearViscousTensor() [1/2]

IceNonlinearViscousTensor::IceNonlinearViscousTensor ( const IceNonlinearViscousTensor a)

◆ IceNonlinearViscousTensor() [2/2]

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.

Parameters
a_gridshierarchy of AMR layouts
a_refRatiorefinement ratio from levels l to levels l + 1
a_domainsdomain boundaries for each level
a_dxsmesh spacing for each level
a_coordSysthe ice sheet geometry
a_uice velocity
a_Cvelocity independent part of the basal friction
a_C0additional basal friction, such that Tb = C * fb(u)*u + C0 * u
a_finestLevelfinest AMR level
a_constRelvelocity dependent part of the viscosity, fv(A, u)
a_basalFrictionRelvelocity dependent part of the basal friction, fb(u)
a_bcIce thickness and velocity boundary conditions
a_Avelocity independent part of the viscosity, A
a_faceFlowLawCoefficientanother velocity independent part of the viscosity, phi
a_time
a_vtopSafety[DEPRECATE?]

Member Function Documentation

◆ alpha()

virtual Vector<RefCountedPtr<LevelData<FArrayBox> > >& IceNonlinearViscousTensor::alpha ( )
inlinevirtual

Retrieve the drag coefficient, alpha.

Returns
an amr hierarchy representing the coefficient $ \alpha(x,y) $, that appears in ViscousTensorOp as the coeffcient of the velocity $ u $.

Implements NonlinearViscousTensor.

Referenced by newNonlinearViscousTensor(), and AmrIce::updateViscousTensor().

◆ applyBC()

virtual void IceNonlinearViscousTensor::applyBC ( Vector< LevelData< FArrayBox > *> &  a_phi)
inlinevirtual

fill ghost cells of a_state as per the boundary conditions

Implements NonlinearViscousTensor.

◆ computeViscousTensorFace()

void IceNonlinearViscousTensor::computeViscousTensorFace ( const Vector< LevelData< FluxBox > *> &  a_viscousTensor)
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().

◆ getC()

virtual Vector<LevelData<FArrayBox>*>& IceNonlinearViscousTensor::getC ( )
inlinevirtual

Retrieve the basal friction coeffcient (not the effective drag coeffient, alpha() )

◆ getState()

virtual Vector<LevelData<FArrayBox>*>& IceNonlinearViscousTensor::getState ( )
inlinevirtual

retrieve the state

Returns
a reference to the current state (velocity)

Implements NonlinearViscousTensor.

◆ lambda()

virtual Vector<RefCountedPtr<LevelData<FluxBox> > >& IceNonlinearViscousTensor::lambda ( )
inlinevirtual

Retrieve the compressibility coefficient, lambda.

Returns
an amr hierarchy representing the coefficient $ \lambda(x,y) $, that appears in ViscousTensorOp as the coeffcient of the compression rate $ \nabla. \vec{u} I $.

Implements NonlinearViscousTensor.

Referenced by setState().

◆ mu()

virtual Vector<RefCountedPtr<LevelData<FluxBox> > >& IceNonlinearViscousTensor::mu ( )
inlinevirtual

Retrieve the viscosity coefficient, mu.

Returns
an amr hierarchy representing the coefficient $ \mu(x,y) $, that appears in ViscousTensorOp as the coeffcient of the strain rate $ \nabla \vec{u} + ( \nabla \vec{u})^T $.

Implements NonlinearViscousTensor.

Referenced by AmrIce::updateViscousTensor().

◆ newNonlinearViscousTensor()

NonlinearViscousTensor * IceNonlinearViscousTensor::newNonlinearViscousTensor ( )
virtual

◆ opFactoryPtr()

virtual RefCountedPtr< AMRLevelOpFactory<LevelData<FArrayBox> > > IceNonlinearViscousTensor::opFactoryPtr ( )
inlinevirtual

provide a pointer to an AMRLevelOpFactory<LevelData<FArrayBox> > defined at the current state

Implements NonlinearViscousTensor.

◆ setFaceViscCoef()

virtual void IceNonlinearViscousTensor::setFaceViscCoef ( const Vector< LevelData< FluxBox > *> &  a_muCoef)
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().

◆ setState() [1/2]

void IceNonlinearViscousTensor::setState ( const Vector< LevelData< FArrayBox > *> &  a_state)
virtual

set the state (velocity)

Modify state, and thus the coefficients in the linear ViscousTensorOp: alpha, mu, lambda.

Parameters
[in]a_statean 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().

◆ setState() [2/2]

virtual void IceNonlinearViscousTensor::setState ( const Vector< LevelData< FArrayBox > *> &  a_u,
const Vector< LevelData< FArrayBox > *> &  a_basalFrictionCoefficent 
)
inlinevirtual

An overloaded setState, because beta changes with time

References NonlinearViscousTensor::setState().

◆ unsetFaceViscCoef()

virtual void IceNonlinearViscousTensor::unsetFaceViscCoef ( )
inlinevirtual

Reset to default (NULL) the coefficient set in setFaceViscCoef


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