20#ifndef PISM_SSAFDBASE_H
21#define PISM_SSAFDBASE_H
25#include "pism/stressbalance/ssa/SSA.hh"
26#include "pism/util/array/Staggered.hh"
29namespace stressbalance {
38 SSAFDBase(std::shared_ptr<const Grid>
g,
bool regional_mode);
Converts between specific enthalpy and temperature or liquid content.
Class containing physical constants and the constitutive relation describing till for SSA.
This class represents a 2D vector field (such as ice velocity) at a certain grid point.
A storage vector combining related fields in a struct.
A virtual class collecting methods common to ice and bedrock 3D fields.
A class for storing and accessing internal staggered-grid 2D fields. Uses dof=2 storage....
void compute_driving_stress(const array::Scalar &ice_thickness, const array::Scalar1 &surface_elevation, const array::CellType1 &cell_type, const array::Scalar1 *no_model_mask, const EnthalpyConverter &EC, array::Vector &result) const
Compute the gravitational driving stress.
void assemble_rhs(const Inputs &inputs, const array::CellType1 &cell_type, const array::Vector &driving_stress, double bc_scaling, array::Vector &result) const
Computes the right-hand side ("rhs") of the linear problem for the Picard iteration and finite-differ...
array::Vector m_taud
driving stress
const array::Staggered & integrated_viscosity() const
void compute_nuH_cfbc(const array::Scalar1 &ice_thickness, const array::CellType2 &cell_type, const pism::Vector2d *const *velocity, const array::Staggered &hardness, double nuH_regularization, array::Staggered &result)
Compute the product of ice viscosity and thickness on the staggered grid. Used when CFBC is enabled.
array::Staggered m_hardness
ice hardness
void fd_operator(const Geometry &geometry, const array::Scalar *bc_mask, double bc_scaling, const array::Scalar &basal_yield_stress, IceBasalResistancePlasticLaw *basal_sliding_law, const pism::Vector2d *const *velocity, const array::Staggered1 &nuH, const array::CellType1 &cell_type, Mat *A, Vector2d **Ax) const
Assemble the left-hand side matrix for the KSP-based, Picard iteration, and finite difference impleme...
void initialize_iterations(const Inputs &inputs)
void fracture_induced_softening(const array::Scalar1 &fracture_density, double n_glen, array::Staggered &ice_hardness)
Correct vertically-averaged hardness using a parameterization of the fracture-induced softening.
array::Staggered1 m_nuH
viscosity times thickness
array::CellType2 m_cell_type
const double m_bc_scaling
scaling used for diagonal matrix elements at Dirichlet BC locations
void adjust_driving_stress(const array::Scalar &ice_thickness, const array::Scalar1 &surface_elevation, const array::CellType1 &cell_type, const array::Scalar1 *no_model_mask, array::Vector &driving_stress) const
const bool m_regional_mode
void compute_average_ice_hardness(const array::Scalar1 &thickness, const array::Array3D &enthalpy, const array::CellType1 &cell_type, array::Staggered &result) const
Computes vertically-averaged ice hardness on the staggered grid.
DiagnosticList diagnostics_impl() const
array::Vector m_rhs
right hand side
void compute_nuH(const array::Scalar1 &ice_thickness, const array::CellType2 &cell_type, const pism::Vector2d *const *velocity, const array::Staggered &hardness, double nuH_regularization, array::Staggered1 &result)
array::Array2D< Work > m_work
void compute_nuH_everywhere(const array::Scalar1 &ice_thickness, const pism::Vector2d *const *velocity, const array::Staggered &hardness, double nuH_regularization, array::Staggered &result)
Compute the product of ice thickness and effective viscosity (on the staggered grid).
void compute_residual(const Inputs &inputs, const array::Vector2 &velocity, array::Vector &result)
const array::Vector & driving_stress() const
const array::Vector1 & velocity() const
Get the thickness-advective 2D velocity.
std::map< std::string, Diagnostic::Ptr > DiagnosticList