PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
pism::hydrology::Routing Class Reference

A subglacial hydrology model which assumes water pressure equals overburden pressure. More...

#include <Routing.hh>

+ Inheritance diagram for pism::hydrology::Routing:

Public Member Functions

 Routing (std::shared_ptr< const Grid > g)
 
virtual ~Routing ()=default
 
const array::Scalarsubglacial_water_pressure () const
 
const array::Staggeredvelocity_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::Scalartill_water_thickness () const
 Return the effective thickness of the water stored in till. More...
 
const array::Scalarsubglacial_water_thickness () const
 Return the effective thickness of the transportable basal water layer. More...
 
const array::Scalaroverburden_pressure () const
 
const array::Scalarsurface_input_rate () const
 
const array::Vectorflux () const
 
const array::Scalarmass_change () const
 
const array::Scalarmass_change_at_grounded_margin () const
 
const array::Scalarmass_change_at_grounding_line () const
 
const array::Scalarmass_change_at_domain_boundary () const
 
const array::Scalarmass_change_due_to_conservation_error () const
 
const array::Scalarmass_change_due_to_input () const
 
const array::Scalarmass_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 Gridgrid () const
 
const Timetime () const
 
const Profilingprofiling () 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::Ptrdiagnostics_impl () const
 
virtual std::map< std::string, TSDiagnostic::Ptrts_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)
 

Protected Attributes

array::Staggered1 m_Qstag
 
array::Staggered1 m_Qstag_average
 
array::Staggered m_Vstag
 
array::Staggered1 m_Wstag
 
array::Staggered1 m_Kstag
 
array::Scalar m_Wnew
 
array::Scalar m_Wtillnew
 
array::Scalar1 m_R
 
double m_dx
 
double m_dy
 
double m_rg
 
array::Scalar1 m_bottom_surface
 
- Protected Attributes inherited from pism::hydrology::Hydrology
array::Vector m_Q
 
array::Scalar m_Wtill
 effective thickness of basal water stored in till More...
 
array::Scalar1 m_W
 effective thickness of transportable basal water More...
 
array::Scalar m_Pover
 overburden pressure More...
 
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
 
- Protected Attributes inherited from pism::Component
const std::shared_ptr< const Gridm_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...
 

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...
 

Detailed Description

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.


The documentation for this class was generated from the following files: