22 #include "pism/stressbalance/SSB_Modifier.hh"
28 namespace stressbalance {
53 SIAFD(std::shared_ptr<const Grid>
g);
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....
PISM bed smoother, plus bed roughness parameterization, based on Schoof (2003).
virtual void compute_diffusivity(bool full_update, const Geometry &geometry, const array::Array3D *enthalpy, const array::Array3D *age, const array::Staggered1 &h_x, const array::Staggered1 &h_y, array::Staggered1 &result)
Compute the SIA diffusivity. If full_update, also store delta on the staggered grid.
virtual void compute_surface_gradient(const Inputs &inputs, array::Staggered1 &h_x, array::Staggered1 &h_y)
Compute the ice surface gradient for the SIA.
virtual void surface_gradient_eta(const array::Scalar2 &ice_thickness, const array::Scalar2 &bed_elevation, array::Staggered1 &h_x, array::Staggered1 &h_y)
Compute the ice surface gradient using the eta-transformation.
virtual void update(const array::Vector &sliding_velocity, const Inputs &inputs, bool full_update)
Do the update; if full_update == false skip the update of 3D velocities and strain heating.
const unsigned int m_stencil_width
array::Scalar2 m_work_2d_0
temporary storage for eta, theta and the smoothed thickness
const array::Staggered & surface_gradient_x() const
bool interglacial(double accumulation_time) const
Determine if accumulation_time corresponds to an interglacial period.
virtual void surface_gradient_haseloff(const array::Scalar2 &ice_surface_elevation, const array::CellType2 &cell_type, array::Staggered1 &h_x, array::Staggered1 &h_y)
Compute the ice surface gradient using a modification of Marianne Haseloff's approach.
array::Staggered1 m_h_x
temporary storage for the surface gradient and the diffusivity
double m_seconds_per_year
const BedSmoother & bed_smoother() const
array::Array3D m_work_3d_1
virtual void compute_3d_horizontal_velocity(const Geometry &geometry, const array::Staggered &h_x, const array::Staggered &h_y, const array::Vector &vel_input, array::Array3D &u_out, array::Array3D &v_out)
Compute horizontal components of the SIA velocity (in 3D).
const array::Staggered1 & diffusivity() const
virtual void surface_gradient_mahaffy(const array::Scalar &ice_surface_elevation, array::Staggered1 &h_x, array::Staggered1 &h_y)
Compute the ice surface gradient using the Mary Anne Mahaffy method; see [Mahaffy].
array::Array3D m_work_3d_0
temporary storage used to store I and strain_heating on the staggered grid
array::Array3D m_delta_0
temporary storage for delta on the staggered grid
double m_e_factor_interglacial
BedSmoother * m_bed_smoother
virtual void init()
Initialize the SIA module.
virtual void compute_I(const Geometry &geometry)
Compute I.
array::Scalar2 m_work_2d_1
virtual void compute_diffusive_flux(const array::Staggered &h_x, const array::Staggered &h_y, const array::Staggered &diffusivity, array::Staggered &result)
SIAFD(std::shared_ptr< const Grid > g)
virtual DiagnosticList diagnostics_impl() const
const array::Staggered & surface_gradient_y() const
Shallow stress balance modifier (such as the non-sliding SIA).
std::map< std::string, Diagnostic::Ptr > DiagnosticList