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

Implemnets ConstitutiveRelation to give the effective viscosity in the L1L2 stress model. More...

#include <L1L2ConstitutiveRelation.H>

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

Public Member Functions

 L1L2ConstitutiveRelation ()
 
void parseParameters ()
 
virtual ~L1L2ConstitutiveRelation ()
 
GlensFlowRelation * getGlensFlowRelationPtr ()
 
GlensFlowRelation & getGlensFlowRelation ()
 
virtual Real power () const
 
virtual ConstitutiveRelationgetNewConstitutiveRelation () const
 creates a new copy of this ConstitutiveRelation object. More...
 
virtual void computeMu (LevelData< FArrayBox > &a_mu, const LevelData< FArrayBox > &a_vel, const Real &a_scale, const LevelData< FArrayBox > *a_crseVelPtr, int a_nRefCrse, const LevelData< FArrayBox > &a_A, const LevelSigmaCS &a_coordSys, const ProblemDomain &a_domain, const IntVect &a_ghostVect=IntVect::Zero) const
 computes cell-centered $\mu_{AS}$ based on the cell-centered velocity More...
 
virtual void computeDissipation (LevelData< FArrayBox > &a_dissipation, const LevelData< FArrayBox > &a_vel, const LevelData< FArrayBox > *a_crseVel, int a_nRefCrse, const LevelData< FArrayBox > &a_A, const LevelSigmaCS &a_coordSys, const ProblemDomain &a_domain, const IntVect &a_ghostVect=IntVect::Zero) const
 
virtual void computeFaceMu (LevelData< FluxBox > &a_mu, LevelData< FArrayBox > &a_vel, const Real &a_scale, const LevelData< FArrayBox > *a_crseVelPtr, int nRefCrse, const LevelData< FluxBox > &a_A, const LevelSigmaCS &a_coordSys, const ProblemDomain &a_domain, const IntVect &a_ghostVect=IntVect::Zero) const
 computes face-centered $\mu_{AS}$ based on cell-centered velocity More...
 
virtual void modifyTransportCoefficients (const LevelData< FArrayBox > &a_cellVel, const LevelData< FArrayBox > *a_crseVelPtr, const LevelData< FArrayBox > *a_crseDiffusivityPtr, int a_nRefCrse, const LevelSigmaCS &a_coordSys, const DisjointBoxLayout &a_grids, const ProblemDomain &a_domain, const LevelData< FArrayBox > &a_A, const LevelData< FArrayBox > &a_sA, const LevelData< FArrayBox > &a_bA, LevelData< FluxBox > &a_faceVelAdvection, LevelData< FluxBox > &a_faceVelTotal, LevelData< FluxBox > &a_faceDiffusivity, LevelData< FArrayBox > &a_cellDiffusivity, LevelData< FluxBox > &a_layerXYFaceXYVel, LevelData< FArrayBox > &a_layerSFaceXYVel) const
 modify 2D thickness advection velocity and diffusion coefficients, also 3D ice velocity More...
 
void solverTolerance (Real a_solverTol)
 sets tolerance for secant solve More...
 
- Public Member Functions inherited from ConstitutiveRelation
 ConstitutiveRelation ()
 
virtual ~ConstitutiveRelation ()
 
void computeStrainRateInvariant (LevelData< FArrayBox > &a_epsilonSquared, const LevelData< FArrayBox > &a_velocity, const LevelData< FArrayBox > *a_crseVel, int nRefCrse, const LevelSigmaCS &a_coordSys, const IntVect &a_ghostVect=IntVect::Zero) const
 compute cell-centered strainrate invariant epsilon^2 More...
 
void computeStrainRateInvariantFace (LevelData< FluxBox > &a_epsilonSquared, LevelData< FArrayBox > &a_velocity, const LevelData< FArrayBox > *a_crseVel, int a_nRefCrse, const LevelSigmaCS &a_coordSys, const IntVect &a_ghostVect=IntVect::Zero) const
 compute face-centered strainrate invariant epsilon^2 based on cell-centered velocity More...
 
void computeStrainRateInvariant (LevelData< FArrayBox > &a_epsilonSquared, LevelData< FArrayBox > &a_gradVelocity, const LevelData< FArrayBox > &a_velocity, const LevelData< FArrayBox > *a_crseVel, int a_nRefCrse, const LevelSigmaCS &a_coordSys, const IntVect &a_ghostVect=IntVect::Zero) const
 compute cell-centered strainrate invariant epsilon^2 and velocity gradients. No more costly than just computing epsilon^2 More...
 
void computeStrainRateInvariantFace (LevelData< FluxBox > &a_epsilonSquared, LevelData< FluxBox > &a_gradVelocity, LevelData< FArrayBox > &a_velocity, const LevelData< FArrayBox > *a_crseVel, int a_nRefCrse, const LevelSigmaCS &a_coordSys, const IntVect &a_ghostVect=IntVect::Zero) const
 compute face-centered strainrate invariant epsilon^2 and velocity gradients based on cell-centered velocity. No more costly than just computing epsilon^2 More...
 

Additional Inherited Members

- Static Public Member Functions inherited from ConstitutiveRelation
static ConstitutiveRelationparse (const char *a_prefix)
 

Detailed Description

Implemnets ConstitutiveRelation to give the effective viscosity in the L1L2 stress model.

The L1L2 stress model is described by Schoof and Hindmarsh 2010.

Like GlensFlowRelation, this class computes $\mu$ such that (stress = $\mu$*strainrate ) assuming that $\mu = \mu(\nabla(\vec{u}),A(T))$. But $\mu$\ is now found by solving a nonlinear problem $1 - 2 \mu A (4 \mu ^2 \epsilon^2 + \tau_d^2)^((n-1)/2) = 0 $ numerically for mu at each point and integrating vertically. $\tau_d = \rho g h \nabla{s} $ is the gravitaional driving stress, and its appearance means that vertical shear strains computed accoding to the shallow ice approximation are included in the effective viscosity (so that ice softens in the region of steep slopes). Although an analytic solution does exist when n = 3, it is expensive/unreliable to compute

Constructor & Destructor Documentation

◆ L1L2ConstitutiveRelation()

L1L2ConstitutiveRelation::L1L2ConstitutiveRelation ( )
inline

References parseParameters().

Referenced by getNewConstitutiveRelation().

◆ ~L1L2ConstitutiveRelation()

virtual L1L2ConstitutiveRelation::~L1L2ConstitutiveRelation ( )
inlinevirtual

Member Function Documentation

◆ computeDissipation()

void L1L2ConstitutiveRelation::computeDissipation ( LevelData< FArrayBox > &  a_dissipation,
const LevelData< FArrayBox > &  a_vel,
const LevelData< FArrayBox > *  a_crseVel,
int  a_nRefCrse,
const LevelData< FArrayBox > &  a_A,
const LevelSigmaCS a_coordSys,
const ProblemDomain &  a_domain,
const IntVect &  a_ghostVect = IntVect::Zero 
) const
virtual

Compute a cell centred bulk dissipation $\Phi = 4\mu\epsilon^2$ (heat source) at the cell centres. This ought to have the same dependencies as cell centred mu a_dissipation – $\Phi$ based on the local velocity field. a_vel – Cell-centered velocity field. a_crseVel – coarse-level velocity field (for coarse-fine bc's). (NULL if no coarser level) a_nRefCrse – refinement ratio to next coarser level a_A: Cell-centered flow law coefficient (Glenn's A) field a_coordSys: SigmaCS object containing the geometry of this patch. a_box: cell-centered box over which to do this computation

Implements ConstitutiveRelation.

References computeMu(), and ConstitutiveRelation::computeStrainRateInvariant().

Referenced by power().

◆ computeFaceMu()

void L1L2ConstitutiveRelation::computeFaceMu ( LevelData< FluxBox > &  a_mu,
LevelData< FArrayBox > &  a_vel,
const Real &  a_scale,
const LevelData< FArrayBox > *  a_crseVelPtr,
int  nRefCrse,
const LevelData< FluxBox > &  a_A,
const LevelSigmaCS a_coordSys,
const ProblemDomain &  a_domain,
const IntVect &  a_ghostVect = IntVect::Zero 
) const
virtual

computes face-centered $\mu_{AS}$ based on cell-centered velocity

Parameters
a_muface-centered mu_{AS} based on the local velocity field.
a_velCell-centered velocity field.
a_crseVel– coarse-level velocity field (for coarse-fine bc's). (NULL if no coarser level)
a_nRefCrse– refinement ratio to next coarser level
a_ACell-centered flow law coefficient (Glenn's A) field
a_coordSysLevelSigmaCS object containing the geometry.
a_ghostVecthow the boxes on which we want to compute mu compare with the DisjointBoxLayout. (can be negative)

Implements ConstitutiveRelation.

References ConstitutiveRelation::computeStrainRateInvariant(), ConstitutiveRelation::computeStrainRateInvariantFace(), derivComponent(), LevelSigmaCS::getDSigma(), LevelSigmaCS::getFaceH(), LevelSigmaCS::getFaceSigma(), LevelSigmaCS::getGradSurface(), LevelSigmaCS::getGradSurfaceFace(), LevelSigmaCS::getH(), LevelSigmaCS::getSigma(), LevelSigmaCS::gravity(), LevelSigmaCS::iceDensity(), modifyTransportCoefficients(), and ReflectGhostCells().

Referenced by power().

◆ computeMu()

void L1L2ConstitutiveRelation::computeMu ( LevelData< FArrayBox > &  a_mu,
const LevelData< FArrayBox > &  a_vel,
const Real &  a_scale,
const LevelData< FArrayBox > *  a_crseVelPtr,
int  a_nRefCrse,
const LevelData< FArrayBox > &  a_A,
const LevelSigmaCS a_coordSys,
const ProblemDomain &  a_domain,
const IntVect &  a_ghostVect = IntVect::Zero 
) const
virtual

computes cell-centered $\mu_{AS}$ based on the cell-centered velocity

Parameters
a_mu– mu_{AS} based on the local velocity field.
a_vel– Cell-centered velocity field.
a_crseVel– coarse-level velocity field (for coarse-fine bc's). (NULL if no coarser level)
a_nRefCrse– refinement ratio to next coarser level
a_ACell-centered flow law coefficient (Glenn's A) field
a_coordSysLevelSigmaCS object containing the geometry.
a_ghostVecthow the boxes on which we want to compute mu compare with the DisjointBoxLayout. (can be negative)

Implements ConstitutiveRelation.

References LevelSigmaCS::getDSigma(), and LevelSigmaCS::getSigma().

Referenced by computeDissipation(), and power().

◆ getGlensFlowRelation()

GlensFlowRelation& L1L2ConstitutiveRelation::getGlensFlowRelation ( )
inline

◆ getGlensFlowRelationPtr()

GlensFlowRelation* L1L2ConstitutiveRelation::getGlensFlowRelationPtr ( )
inline

◆ getNewConstitutiveRelation()

ConstitutiveRelation * L1L2ConstitutiveRelation::getNewConstitutiveRelation ( ) const
virtual

creates a new copy of this ConstitutiveRelation object.

Implements ConstitutiveRelation.

References getGlensFlowRelationPtr(), and L1L2ConstitutiveRelation().

Referenced by power().

◆ modifyTransportCoefficients()

void L1L2ConstitutiveRelation::modifyTransportCoefficients ( const LevelData< FArrayBox > &  a_cellVel,
const LevelData< FArrayBox > *  a_crseVelPtr,
const LevelData< FArrayBox > *  a_crseDiffusivityPtr,
int  a_nRefCrse,
const LevelSigmaCS a_coordSys,
const DisjointBoxLayout &  a_grids,
const ProblemDomain &  a_domain,
const LevelData< FArrayBox > &  a_A,
const LevelData< FArrayBox > &  a_sA,
const LevelData< FArrayBox > &  a_bA,
LevelData< FluxBox > &  a_faceVelAdvection,
LevelData< FluxBox > &  a_faceVelTotal,
LevelData< FluxBox > &  a_faceDiffusivity,
LevelData< FArrayBox > &  a_cellDiffusivity,
LevelData< FluxBox > &  a_layerXYFaceXYVel,
LevelData< FArrayBox > &  a_layerSFaceXYVel 
) const
virtual

modify 2D thickness advection velocity and diffusion coefficients, also 3D ice velocity

Parameters
a_cellVel: cell-centered basal velocity field $u(z=b)$
a_crseVelPtr: coarser level cell-centered velocity field (NULL if no coarser level)
a_crseVelPtr: coarser level cell-centered diffusivity field (NULL if no coarser level)
a_nRefCrse: refinement ratio to next coarser level
a_coordSysLevelSigmaCS object containing the geometry.
a_grids: DisjointBoxLayout of grids for the level
a_domain: ProblemDomain for the level
a_A(x,y,sigma) cell-centered flow law coefficient (Glenn's A) field
a_sA(x,y) cell-centered A field at the ice surface ( $\sigma = 0$)
a_bA(x,y) cell-centered A field at the ice base ( $\sigma = 1$)
faceVelAdvection: face-centered vertically averaged advection velocity. Should contain the velocity at the ice base on entry.
a_faceVelTotal: face-centered vertically averaged total velocity (including diffusion). Should contain the velocity at the ice base on entry
a_faceDiffusivityface-centered vertically thickness diffusivity. : cell-centered vertically thickness diffusivity.
a_layerXYFaceXYVel: (x,y) face-centered, sigma cell-centered 3D x and y velocity
a_layerSFaceXYVel: (x,y) cell-centered, sigma face centered 3D x and y velocity

References LevelSigmaCS::dx(), LevelSigmaCS::getFaceSigma(), LevelSigmaCS::getFloatingMask(), LevelSigmaCS::getH(), LevelSigmaCS::getSigma(), LevelSigmaCS::getSurfaceHeight(), LevelSigmaCS::getTopography(), LevelSigmaCS::iceDensity(), and LevelSigmaCS::waterDensity().

Referenced by computeFaceMu(), IceUtility::computeFaceVelocity(), and power().

◆ parseParameters()

void L1L2ConstitutiveRelation::parseParameters ( )

◆ power()

virtual Real L1L2ConstitutiveRelation::power ( ) const
inlinevirtual

◆ solverTolerance()

void L1L2ConstitutiveRelation::solverTolerance ( Real  a_solverTol)
inline

sets tolerance for secant solve


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