PISM, A Parallel Ice Sheet Model 2.2.2-d6b3a29ca committed by Constantine Khrulev on 2025-03-28
|
The PISM subglacial hydrology model interface. More...
#include <Hydrology.hh>
Public Member Functions | |
Hydrology (std::shared_ptr< const Grid > g) | |
virtual | ~Hydrology ()=default |
void | restart (const File &input_file, int record) |
void | bootstrap (const File &input_file, const array::Scalar &ice_thickness) |
void | init (const array::Scalar &W_till, const array::Scalar &W, const array::Scalar &P) |
void | update (double t, double dt, const Inputs &inputs) |
const array::Scalar & | till_water_thickness () const |
Return the effective thickness of the water stored in till. | |
const array::Scalar & | subglacial_water_thickness () const |
Return the effective thickness of the transportable basal water layer. | |
const array::Scalar & | overburden_pressure () const |
const array::Scalar & | surface_input_rate () const |
const array::Vector & | flux () const |
const array::Scalar & | mass_change () const |
const array::Scalar & | mass_change_at_grounded_margin () const |
const array::Scalar & | mass_change_at_grounding_line () const |
const array::Scalar & | mass_change_at_domain_boundary () const |
const array::Scalar & | mass_change_due_to_conservation_error () const |
const array::Scalar & | mass_change_due_to_input () const |
const array::Scalar & | mass_change_due_to_lateral_flow () const |
![]() | |
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. | |
void | write_model_state (const File &output) const |
Write model state variables to an output file. | |
MaxTimestep | max_timestep (double t) const |
Reports the maximum time-step the model can take at time t. | |
Protected Member Functions | |
virtual void | restart_impl (const File &input_file, int record) |
virtual void | bootstrap_impl (const File &input_file, const array::Scalar &ice_thickness) |
virtual void | init_impl (const array::Scalar &W_till, const array::Scalar &W, const array::Scalar &P) |
virtual void | update_impl (double t, double dt, const Inputs &inputs)=0 |
virtual std::map< std::string, Diagnostic::Ptr > | diagnostics_impl () const |
virtual void | define_model_state_impl (const File &output) const |
The default (empty implementation). | |
virtual void | write_model_state_impl (const File &output) const |
The default (empty implementation). | |
void | compute_overburden_pressure (const array::Scalar &ice_thickness, array::Scalar &result) const |
Update the overburden pressure from ice thickness. | |
void | compute_surface_input_rate (const array::CellType &mask, const array::Scalar *surface_input_rate, array::Scalar &result) |
void | compute_basal_melt_rate (const array::CellType &mask, const array::Scalar &basal_melt_rate, array::Scalar &result) |
void | enforce_bounds (const array::CellType &cell_type, const array::Scalar *no_model_mask, double max_thickness, double ocean_water_thickness, array::Scalar &water_thickness, array::Scalar &grounded_margin_change, array::Scalar &grounding_line_change, array::Scalar &conservation_error_change, array::Scalar &no_model_mask_change) |
Correct the new water thickness based on boundary requirements. | |
![]() | |
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::Vector | m_Q |
array::Scalar | m_Wtill |
effective thickness of basal water stored in till | |
array::Scalar1 | m_W |
effective thickness of transportable basal water | |
array::Scalar | m_Pover |
overburden pressure | |
array::Scalar | m_surface_input_rate |
array::Scalar | m_basal_melt_rate |
array::Scalar | m_flow_change_incremental |
array::Scalar | m_conservation_error_change |
array::Scalar | m_grounded_margin_change |
array::Scalar | m_grounding_line_change |
array::Scalar | m_input_change |
array::Scalar | m_no_model_mask_change |
array::Scalar | m_total_change |
array::Scalar | m_flow_change |
![]() | |
const std::shared_ptr< const Grid > | m_grid |
grid used by this component | |
const Config::ConstPtr | m_config |
configuration database used by this component | |
const units::System::Ptr | m_sys |
unit system used by this component | |
const Logger::ConstPtr | m_log |
logger (for easy access) | |
Private Member Functions | |
virtual void | initialization_message () const =0 |
Additional Inherited Members | |
![]() | |
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... | |
The PISM subglacial hydrology model interface.
This is a virtual base class.
The purpose of this class and its derived classes is to provide
These correspond to state variables \(W\), \(P\), and \(W_{\text{till}}\) in [BuelervanPeltDRAFT], though not all derived classes of Hydrology have all of them as state variables.
Additional modeled fields, for diagnostic purposes, are
This interface is appropriate to subglacial hydrology models which track a two-dimensional water layer with a well-defined thickness and pressure at each map-plane location. The methods subglacial_water_thickness() and subglacial_water_pressure() return amount and pressure of the transportable water, that is, the subglacial water which moves along a modeled hydraulic head gradient, in contrast to the water stored in the till.
The transportable water moves through a subglacial morphology which is not determined in this base class.
The Hydrology models have separate, but potentially-coupled, water which is held in local till storage. Thus the transportable water (bwat) and till water (tillwat) thicknesses are different. Published models with till storage include [BBssasliding, SchoofTill, TrufferEchelmeyerHarrison2001, Tulaczyketal2000b, vanderWeletal2013].
The till water thickness is can be used, via the theory of [Tulaczyketal2000], to compute an effective pressure for the water in the pore spaces of the till, which can then be used by the Mohr-Coulomb criterion to provide a yield stress. Class MohrCoulombYieldStress does this calculation. Here in Hydrology only the till water thickness tillwat is computed.
Hydrology is a timestepping component. Because of the short physical timescales associated to liquid water moving under a glacier, Hydrology (and derived) classes generally take many substeps in PISM's major ice dynamics time steps. Thus when an update() method in a Hydrology class is called it will advance its internal time to the new goal t+dt using its own internal time steps.
Generally Hydrology classes use the ice geometry, the basal melt rate, and the basal sliding velocity in determining the evolution of the hydrology state variables. Note that the basal melt rate is an energy-conservation-derived field and the basal-sliding velocity is derived from the solution of a stress balance. The basal melt rate and sliding velocity fields therefore generally come from IceModel and StressBalance, respectively.
Additional, time-dependent and spatially-variable water input to the basal layer, taken directly from a file, is possible too.
Ice geometry and energy fields are normally treated as constant in time during the update() call for the interval [t,t+dt]. Thus the coupling is one-way during the update() call.
Definition at line 109 of file Hydrology.hh.