PISM, A Parallel Ice Sheet Model
stable v2.1.1 committed by Constantine Khrulev on 2024-12-04 13:36:58 -0900
|
#include <SSA.hh>
Public Member Functions | |
SSA (std::shared_ptr< const Grid > g) | |
virtual | ~SSA () |
virtual void | update (const Inputs &inputs, bool full_update) |
Update the SSA solution. More... | |
void | set_initial_guess (const array::Vector &guess) |
Set the initial guess of the SSA velocity. More... | |
virtual std::string | stdout_report () const |
Produce a report string for the standard output. More... | |
const array::Vector & | driving_stress () const |
Public Member Functions inherited from pism::stressbalance::ShallowStressBalance | |
ShallowStressBalance (std::shared_ptr< const Grid > g) | |
virtual | ~ShallowStressBalance () |
void | init () |
const array::Vector1 & | velocity () const |
Get the thickness-advective 2D velocity. More... | |
const array::Scalar & | basal_frictional_heating () |
Get the basal frictional heating (for the adaptive energy time-stepping). More... | |
void | compute_basal_frictional_heating (const array::Vector &velocity, const array::Scalar &tauc, const array::CellType &mask, array::Scalar &result) const |
Compute the basal frictional heating. More... | |
std::shared_ptr< const rheology::FlowLaw > | flow_law () const |
EnthalpyConverter::Ptr | enthalpy_converter () const |
const IceBasalResistancePlasticLaw * | sliding_law () const |
double | flow_enhancement_factor () const |
Public Member Functions inherited from pism::Component | |
Component (std::shared_ptr< const Grid > grid) | |
virtual | ~Component ()=default |
DiagnosticList | diagnostics () const |
TSDiagnosticList | ts_diagnostics () const |
std::shared_ptr< const Grid > | grid () const |
const Time & | time () const |
const Profiling & | profiling () const |
void | define_model_state (const File &output) const |
Define model state variables in an output file. More... | |
void | write_model_state (const File &output) const |
Write model state variables to an output file. More... | |
MaxTimestep | max_timestep (double t) const |
Reports the maximum time-step the model can take at time t. More... | |
Public Attributes | |
SSAStrengthExtension * | strength_extension |
Protected Member Functions | |
virtual void | define_model_state_impl (const File &output) const |
The default (empty implementation). More... | |
virtual void | write_model_state_impl (const File &output) const |
The default (empty implementation). More... | |
virtual void | init_impl () |
Initialize a generic regular-grid SSA solver. More... | |
virtual DiagnosticList | diagnostics_impl () const |
virtual 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, array::Vector &result) const |
Compute the gravitational driving stress. More... | |
virtual void | solve (const Inputs &inputs)=0 |
void | extrapolate_velocity (const array::CellType1 &cell_type, array::Vector1 &velocity) const |
Protected Member Functions inherited from pism::Component | |
virtual MaxTimestep | max_timestep_impl (double t) const |
virtual TSDiagnosticList | ts_diagnostics_impl () const |
void | regrid (const std::string &module_name, array::Array &variable, RegriddingFlag flag=NO_REGRID_WITHOUT_REGRID_VARS) |
Protected Attributes | |
array::CellType2 | m_mask |
array::Vector | m_taud |
std::string | m_stdout_ssa |
std::shared_ptr< petsc::DM > | m_da |
array::Vector | m_velocity_global |
int | m_event_ssa |
Protected Attributes inherited from pism::stressbalance::ShallowStressBalance | |
IceBasalResistancePlasticLaw * | m_basal_sliding_law |
std::shared_ptr< rheology::FlowLaw > | m_flow_law |
EnthalpyConverter::Ptr | m_EC |
array::Vector2 | m_velocity |
array::Scalar | m_basal_frictional_heating |
double | m_e_factor |
flow enhancement factor More... | |
Protected Attributes inherited from pism::Component | |
const std::shared_ptr< const Grid > | m_grid |
grid used by this component More... | |
const Config::ConstPtr | m_config |
configuration database used by this component More... | |
const units::System::Ptr | m_sys |
unit system used by this component More... | |
const Logger::ConstPtr | m_log |
logger (for easy access) More... | |
Additional Inherited Members | |
Protected Types inherited from pism::Component | |
enum | RegriddingFlag { REGRID_WITHOUT_REGRID_VARS , NO_REGRID_WITHOUT_REGRID_VARS } |
This flag determines whether a variable is read from the -regrid_file file even if it is not listed among variables in -regrid_vars . More... | |
PISM's SSA solver.
An object of this type solves equations for the vertically-constant horizontal velocity of ice that is sliding over land or is floating. The equations are, in their clearest divergence form
\[ - \frac{\partial T_{ij}}{\partial x_j} - \tau_{(b)i} = f_i \]
where \(i,j\) range over \(x,y\), \(T_{ij}\) is a depth-integrated viscous stress tensor (i.e. equation (2.6) in [SchoofStream]). These equations determine velocity in a more-or-less elliptic manner. Here \(\tau_{(b)i}\) are the components of the basal shear stress applied to the base of the ice. The right-hand side \(f_i\) is the driving shear stress,
\[ f_i = - \rho g H \frac{\partial h}{\partial x_i}. \]
Here \(H\) is the ice thickness and \(h\) is the elevation of the surface of the ice. More concretely, the SSA equations are
\begin{align*} - 2 \left[\nu H \left(2 u_x + v_y\right)\right]_x - \left[\nu H \left(u_y + v_x\right)\right]_y - \tau_{(b)1} &= - \rho g H h_x, \\ - \left[\nu H \left(u_y + v_x\right)\right]_x - 2 \left[\nu H \left(u_x + 2 v_y\right)\right]_y - \tau_{(b)2} &= - \rho g H h_y, \end{align*}
where \(u\) is the \(x\)-component of the velocity and \(v\) is the \(y\)-component of the velocity [MacAyeal, Morland, WeisGreveHutter].
Derived classes actually implement numerical methods to solve these equations. This class is virtual, but it actually implements some helper functions believed to be common to all implementations (i.e. regular grid implementations) and it provides the basic fields.