PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
Runoff_SMB.hh
Go to the documentation of this file.
1 // Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2021 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 #ifndef _PO_RUNOFF_SMB_H_
20 #define _PO_RUNOFF_SMB_H_
21 
22 #include "pism/coupler/OceanModel.hh"
23 
24 namespace pism {
25 
26 class ScalarForcing;
27 
28 namespace ocean {
29 
30 /** Modify the shelf base mass flux using a function of air temperature changes.
31  *
32  * This modifier multiplies the input shelf base mass flux by a factor
33  * @f$ F @f$, which depends on the change in the global average
34  * near-surface air temperature =delta_T= read from an input file.
35  *
36  * The parameterization described below is inspired by [@ref Xu2013]
37  * with the relationship between air temperatures and subglacial
38  * runoff flux parameterized using a linear function (a fit to
39  * results of GCM simulations).
40  *
41  * @f[ F(\Delta T) = 1 + B \times (a \Delta T)^\alpha \times (\Delta T)^\beta. @f]
42  *
43  * Here @f$ a @f$, @f$ B @f$, @f$ \alpha @f$, and @f$ \beta @f$ are constants.
44  *
45  * The paper [@ref Xu2013] approximates the sub-shelf melt rate as a
46  * function of *ocean* temperature above the freezing point and the
47  * subglacial runoff.
48  *
49  * We assume that the lag between the air and ocean temperatures is
50  * negligible and a change in air temperature is directly translated
51  * into a change in ocean temperature.
52  */
53 class Runoff_SMB : public OceanModel
54 {
55 public:
56  Runoff_SMB(std::shared_ptr<const Grid> g, std::shared_ptr<OceanModel> in);
57  virtual ~Runoff_SMB();
58 
59 private:
60  void init_impl(const Geometry &geometry);
61 
62  void update_impl(const Geometry &geometry, double t, double dt);
63 
64  void mass_flux(double delta_T, array::Scalar &result) const;
65 
66  // @brief constant in the parameterization of the subglacial
67  // runoff flux as a function of air temperature
69 
70  // Constants in the parameterization of the sub-shelf melt rate.
74 
75  std::shared_ptr<array::Scalar> m_shelf_base_mass_flux;
76  std::unique_ptr<ScalarForcing> m_forcing;
77 };
78 
79 } // end of namespace ocean
80 } // end of namespace pism
81 
82 #endif /* _PO_RUNOFF_SMB_H_ */
A very rudimentary PISM ocean model.
Definition: OceanModel.hh:33
std::unique_ptr< ScalarForcing > m_forcing
Definition: Runoff_SMB.hh:76
double m_runoff_to_ocean_melt_power_beta
Definition: Runoff_SMB.hh:73
void mass_flux(double delta_T, array::Scalar &result) const
Definition: Runoff_SMB.cc:65
double m_runoff_to_ocean_melt_power_alpha
Definition: Runoff_SMB.hh:72
std::shared_ptr< array::Scalar > m_shelf_base_mass_flux
Definition: Runoff_SMB.hh:75
void update_impl(const Geometry &geometry, double t, double dt)
Definition: Runoff_SMB.cc:59
Runoff_SMB(std::shared_ptr< const Grid > g, std::shared_ptr< OceanModel > in)
Definition: Runoff_SMB.cc:27
void init_impl(const Geometry &geometry)
Definition: Runoff_SMB.cc:50
bool ocean(int M)
An ocean cell (floating ice or ice-free).
Definition: Mask.hh:40
static const double g
Definition: exactTestP.cc:36