PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
basal_resistance.hh
Go to the documentation of this file.
1 // Copyright (C) 2004-2015, 2017, 2019, 2021 Jed Brown, Ed Bueler, and Constantine Khroulev
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 #ifndef __basal_resistance_hh
20 #define __basal_resistance_hh
21 
22 #include "pism/util/Units.hh"
23 
24 namespace pism {
25 
26 class Config;
27 class Logger;
28 
29 //! Class containing physical constants and the constitutive relation describing till for SSA.
30 /*!
31  This *pseudo* -plastic type can actually describe anything from linearly
32  viscous till to purely plastic till.
33 */
35 public:
36  IceBasalResistancePlasticLaw(const Config &config);
37  virtual ~IceBasalResistancePlasticLaw() = default;
38  virtual void print_info(const Logger &log, int threshold, units::System::Ptr system) const;
39  virtual double drag(double tauc, double vx, double vy) const;
40  virtual void drag_with_derivative(double tauc, double vx, double vy,
41  double *drag, double *ddrag) const;
42 protected:
44 };
45 
47 public:
50  virtual void print_info(const Logger &log, int threshold, units::System::Ptr system) const;
51  virtual double drag(double tauc, double vx, double vy) const;
52  virtual void drag_with_derivative(double tauc, double vx, double vy,
53  double *drag, double *ddrag) const;
54 protected:
56 };
57 
59 public:
61  virtual ~IceBasalResistanceRegularizedLaw() = default;
62  virtual void print_info(const Logger &log, int threshold, units::System::Ptr system) const;
63  virtual double drag(double tauc, double vx, double vy) const;
64  virtual void drag_with_derivative(double tauc, double vx, double vy,
65  double *drag, double *ddrag) const;
66 protected:
68 };
69 
70 } // end of namespace pism
71 
72 #endif /* __basal_resistance_hh */
73 
A class for storing and accessing PISM configuration flags and parameters.
virtual double drag(double tauc, double vx, double vy) const
Compute the drag coefficient for the basal shear stress.
virtual void print_info(const Logger &log, int threshold, units::System::Ptr system) const
IceBasalResistancePlasticLaw(const Config &config)
virtual void drag_with_derivative(double tauc, double vx, double vy, double *drag, double *ddrag) const
Compute the drag coefficient and its derivative with respect to .
virtual ~IceBasalResistancePlasticLaw()=default
Class containing physical constants and the constitutive relation describing till for SSA.
IceBasalResistancePseudoPlasticLaw(const Config &config)
virtual double drag(double tauc, double vx, double vy) const
Compute the drag coefficient for the basal shear stress.
virtual ~IceBasalResistancePseudoPlasticLaw()=default
virtual void print_info(const Logger &log, int threshold, units::System::Ptr system) const
virtual void drag_with_derivative(double tauc, double vx, double vy, double *drag, double *ddrag) const
Compute the drag coefficient and its derivative with respect to .
virtual double drag(double tauc, double vx, double vy) const
Compute the drag coefficient for the basal shear stress.
virtual void print_info(const Logger &log, int threshold, units::System::Ptr system) const
IceBasalResistanceRegularizedLaw(const Config &config)
virtual void drag_with_derivative(double tauc, double vx, double vy, double *drag, double *ddrag) const
Compute the drag coefficient and its derivative with respect to .
virtual ~IceBasalResistanceRegularizedLaw()=default
A basic logging class.
Definition: Logger.hh:40
std::shared_ptr< System > Ptr
Definition: Units.hh:47