PISM, A Parallel Ice Sheet Model
stable v2.1.1 committed by Constantine Khrulev on 2024-12-04 13:36:58 -0900
|
A subglacial hydrology model which assumes water pressure equals overburden pressure. More...
#include <Routing.hh>
Public Member Functions | |
Routing (std::shared_ptr< const Grid > g) | |
virtual | ~Routing ()=default |
const array::Scalar & | subglacial_water_pressure () const |
const array::Staggered & | velocity_staggered () const |
Public Member Functions inherited from pism::hydrology::Hydrology | |
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. More... | |
const array::Scalar & | subglacial_water_thickness () const |
Return the effective thickness of the transportable basal water layer. More... | |
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 |
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... | |
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) |
Update the model state variables W and Wtill by applying the subglacial hydrology model equations. More... | |
virtual std::map< std::string, Diagnostic::Ptr > | diagnostics_impl () const |
virtual std::map< std::string, TSDiagnostic::Ptr > | ts_diagnostics_impl () const |
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... | |
double | max_timestep_W_diff (double KW_max) const |
double | max_timestep_W_cfl () const |
void | water_thickness_staggered (const array::Scalar &W, const array::CellType1 &mask, array::Staggered &result) |
Average the regular grid water thickness to values at the center of cell edges. More... | |
void | compute_conductivity (const array::Staggered &W, const array::Scalar &P, const array::Scalar &bed, array::Staggered &result, double &maxKW) const |
Compute the nonlinear conductivity at the center of cell edges. More... | |
void | compute_velocity (const array::Staggered &W, const array::Scalar &P, const array::Scalar &bed, const array::Staggered &K, const array::Scalar1 *no_model_mask, array::Staggered &result) const |
Get the advection velocity V at the center of cell edges. More... | |
void | advective_fluxes (const array::Staggered &V, const array::Scalar &W, array::Staggered &result) const |
Compute Q = V W at edge-centers (staggered grid) by first-order upwinding. More... | |
void | W_change_due_to_flow (double dt, const array::Scalar1 &W, const array::Staggered1 &Wstag, const array::Staggered1 &K, const array::Staggered1 &Q, array::Scalar &result) |
void | update_W (double dt, const array::Scalar &surface_input_rate, const array::Scalar &basal_melt_rate, const array::Scalar1 &W, const array::Staggered1 &Wstag, const array::Scalar &Wtill, const array::Scalar &Wtill_new, const array::Staggered1 &K, const array::Staggered1 &Q, array::Scalar &W_new) |
The computation of Wnew, called by update(). More... | |
void | update_Wtill (double dt, const array::Scalar &Wtill, const array::Scalar &surface_input_rate, const array::Scalar &basal_melt_rate, array::Scalar &Wtill_new) |
The computation of Wtillnew, called by update(). More... | |
Protected Member Functions inherited from pism::hydrology::Hydrology | |
void | compute_overburden_pressure (const array::Scalar &ice_thickness, array::Scalar &result) const |
Update the overburden pressure from ice thickness. More... | |
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. More... | |
Protected Member Functions inherited from pism::Component | |
virtual MaxTimestep | max_timestep_impl (double t) const |
void | regrid (const std::string &module_name, array::Array &variable, RegriddingFlag flag=NO_REGRID_WITHOUT_REGRID_VARS) |
Private Member Functions | |
virtual void | initialization_message () const |
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... | |
A subglacial hydrology model which assumes water pressure equals overburden pressure.
This PISM hydrology model has lateral motion of subglacial water and which conserves the water mass. Further documentation is in [BuelervanPeltDRAFT].
The water velocity is along the steepest descent route for the hydraulic potential. This potential is (mostly) a function of ice sheet geometry, because the water pressure is set to the overburden pressure, a simplified but well-established model [Shreve1972]. However, the water layer thickness is also a part of the hydraulic potential because it is actually the potential of the top of the water layer.
This (essential) model has been used for finding locations of subglacial lakes [Siegertetal2007, Livingstoneetal2013]. Subglacial lakes occur at local minima of the hydraulic potential. If water builds up significantly (e.g. thickness of 10s of meters or more) then in the model here the resulting lakes diffuse instead of becoming infinitely deep. Thus we avoid delta functions of water thickness at the minima of the hydraulic potential in this well-posed model.
This model should generally be tested using static ice geometry first.
The state space includes both the till water effective thickness \(W_{till}\), which is in Hydrology, and the transportable water layer thickness \(W\).
For more complete modeling where the water pressure is determined by a physical model for the opening and closing of cavities, and where the state space includes a nontrivial pressure variable, see hydrology::Distributed.
There is an option -hydrology_null_strip
X
which produces a strip of X
km around the edge of the computational domain. In that strip the water flow velocity is set to zero. The water amount is also reset to zero at the end of each time step in this strip (in an accounted way).
As noted this is the minimal model which has a lateral water flux. This flux is
\[ \mathbf{q} = - K \nabla \psi = \mathbf{V} W - D \nabla W \]
where \(\psi\) is the hydraulic potential
\[ \psi = P + \rho_w g (b + W). \]
The generalized conductivity \(K\) is nontrivial and it generally also depends on the water thickness:
\[ K = k W^{\alpha-1} |\nabla (P+\rho_w g b)|^{\beta-2}. \]
This model contains enough information (enough modeled fields) so that we can compute the wall melt generated by dissipating the gravitational potential energy in the moving, presumably turbulent, subglacial water. If we suppose that this heat is dissipated immediately as melt on the cavity/conduit walls then we get a formula for a wall melt contribution. (This is in addition to the basal_melt_rate_grounded
field coming from conserving energy in the flowing ice.) See wall_melt(). At this time the wall melt is diagnostic only and does not add to the water amount W; such an addition is generally unstable.
Definition at line 81 of file Routing.hh.