PISM, A Parallel Ice Sheet Model 2.3.0-79cae578d committed by Constantine Khrulev on 2026-03-22
Loading...
Searching...
No Matches
PatersonBudd.cc
Go to the documentation of this file.
1/* Copyright (C) 2015, 2023, 2025 PISM Authors
2 *
3 * This file is part of PISM.
4 *
5 * PISM is free software; you can redistribute it and/or modify it under the
6 * terms of the GNU General Public License as published by the Free Software
7 * Foundation; either version 3 of the License, or (at your option) any later
8 * version.
9 *
10 * PISM is distributed in the hope that it will be useful, but WITHOUT ANY
11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with PISM; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include "pism/rheology/PatersonBudd.hh"
21#include <cmath> // for pow
22#include <memory> // for shared_ptr
23
24namespace pism {
25namespace rheology {
26
27// PatersonBudd
28
29PatersonBudd::PatersonBudd(double exponent, const Config &config,
30 std::shared_ptr<EnthalpyConverter> ec)
31 : FlowLaw(exponent, config, ec) {
32 m_name = "Paterson-Budd";
33}
34
35/*! Converts enthalpy to temperature and uses the Paterson-Budd formula. */
36double PatersonBudd::softness_impl(double E, double pressure) const {
37 double T_pa = m_EC->pressure_adjusted_temperature(E, pressure);
38 return softness_from_temp(T_pa);
39}
40
41/*! Converts enthalpy to temperature and calls flow_from_temp. */
42double PatersonBudd::flow_impl(double stress, double E,
43 double pressure, double gs) const {
44 double temp = m_EC->temperature(E, pressure);
45 return flow_from_temp(stress, temp, pressure, gs);
46}
47
48//! The flow law (temperature-dependent version).
49double PatersonBudd::flow_from_temp(double stress, double temp,
50 double pressure, double /*gs*/) const {
51 // pressure-adjusted temperature:
52 const double T_pa = temp + (m_beta_CC_grad / m_rho_g) * pressure;
53 return softness_from_temp(T_pa) * pow(stress, m_n-1);
54}
55
56double PatersonBudd::softness_from_temp(double T_pa) const {
57 return softness_paterson_budd(T_pa);
58}
59
60double PatersonBudd::hardness_from_temp(double T_pa) const {
61 return pow(softness_from_temp(T_pa), m_hardness_power);
62}
63
64} // end of namespace rheology
65} // end of namespace pism
A class for storing and accessing PISM configuration flags and parameters.
Definition Config.hh:56
double softness_paterson_budd(double T_pa) const
Return the softness parameter A(T) for a given temperature T.
Definition FlowLaw.cc:82
std::shared_ptr< EnthalpyConverter > m_EC
Definition FlowLaw.hh:124
double m_rho_g
ice density times acceleration due to gravity
Definition FlowLaw.hh:120
double m_hardness_power
; used to compute hardness
Definition FlowLaw.hh:134
double m_beta_CC_grad
Clausius-Clapeyron gradient.
Definition FlowLaw.hh:122
double m_n
power law exponent
Definition FlowLaw.hh:150
virtual double flow_from_temp(double stress, double temp, double pressure, double gs) const
The flow law (temperature-dependent version).
virtual double hardness_from_temp(double T_pa) const
virtual double softness_from_temp(double T_pa) const
PatersonBudd(double exponent, const Config &config, std::shared_ptr< EnthalpyConverter > EC)
virtual double flow_impl(double stress, double E, double pressure, double gs) const
virtual double softness_impl(double enthalpy, double pressure) const