Loading [MathJax]/extensions/tex2jax.js
PISM, A Parallel Ice Sheet Model
2.2.2-d6b3a29ca committed by Constantine Khrulev on 2025-03-28
Toggle main menu visibility
Main Page
Related Pages
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
z
Variables
a
b
c
d
f
g
h
i
k
l
m
n
r
s
t
u
v
w
Typedefs
Enumerations
a
b
c
d
e
f
i
k
l
m
n
p
r
t
u
v
Enumerator
_
a
b
c
d
e
f
g
h
i
l
m
n
p
q
s
t
u
w
x
y
z
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
c
d
f
g
h
l
m
p
s
v
w
Enumerations
Enumerator
c
d
e
f
h
i
j
m
n
o
p
r
s
t
w
y
Related Symbols
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
k
l
m
n
p
r
s
t
u
w
z
Functions
a
b
c
d
e
f
g
h
i
l
m
p
r
s
u
Variables
b
c
d
e
g
h
k
l
m
n
p
r
s
t
u
w
z
Typedefs
Macros
_
a
b
c
g
h
i
k
m
n
r
s
t
u
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
Loading...
Searching...
No Matches
src
verification
tests
exactTestO.c
Go to the documentation of this file.
1
/*
2
Copyright (C) 2011, 2013, 2014, 2016, 2023 Ed Bueler
3
4
This file is part of PISM.
5
6
PISM is free software; you can redistribute it and/or modify it under the
7
terms of the GNU General Public License as published by the Free Software
8
Foundation; either version 3 of the License, or (at your option) any later
9
version.
10
11
PISM is distributed in the hope that it will be useful, but WITHOUT ANY
12
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
details.
15
16
You should have received a copy of the GNU General Public License
17
along with PISM; if not, write to the Free Software
18
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "pism/verification/tests/exactTestO.h"
22
23
static
const
double
beta_CC
= 7.9e-8;
/* K Pa-1; Clausius-Clapeyron constant [@ref Luethi2002] */
24
static
const
double
T_triple
= 273.15;
/* K; triple point of pure water */
25
static
const
double
L
= 3.34e5;
/* J kg-1; latent heat of fusion for water [@ref AschwandenBlatter] */
26
static
const
double
grav
= 9.81;
/* m/s^2; accel of gravity */
27
static
const
double
rho_ICE
= 910.0;
/* kg/(m^3) density of ice */
28
static
const
double
k_ICE
= 2.10;
/* J/(m K s) = W/(m K) thermal conductivity of ice */
29
static
const
double
k_BEDROCK
= 3.0;
/* J/(m K s) = W/(m K) thermal conductivity of bedrock */
30
static
const
double
H0
= 3000.0;
/* m */
31
static
const
double
Ts
= 223.15;
/* K */
32
static
const
double
G
= 0.042;
/* W/(m^2) = J m-2 s-1 */
33
34
/*! \brief Implements an exact solution for basal melt rate. Utterly straightforward arithmetic. */
35
/*!
36
Assumes a steady-state temperature profile in ice and bedrock. This steady
37
profile is driven by geothermal flux `G` from the crust below the bedrock
38
thermal layer. The heat flux is everywhere upward in the bedrock thermal layer,
39
and it is equal by construction to `G`. The heat flux upward in the ice is
40
also a constant everywhere in the ice, but its value is smaller than `G`. This
41
imbalance is balanced by the basal melt rate `bmelt`.
42
43
Geometry and dynamics context: The top of the ice is flat so the ice
44
does not flow; the ice thickness has constant value `H0`. The ice surface has
45
temperature `Ts` which is below the melting point. The basal melt rate
46
`bmelt` does not contribute to the vertical velocity in the ice. The ice
47
pressure is hydrostatic: \f$p = \rho_i g (h-z)\f$.
48
49
The basic equation relates the fluxes in the basal ice, and in the top of the
50
bedrock layer, with the basal melt rate `bmelt` \f$= - M_b / \rho_i \f$. The
51
equation is from [\ref AschwandenBuelerKhroulevBlatter],
52
\f[ M_b H + (\mathbf{q} - \mathbf{q_{lith}}) \cdot \mathbf{n} = F_b + Q_b. \f]
53
Here \f$-M_b\f$ is the basal melt rate in units of mass per area per time.
54
In the above equation the basal friction heating
55
\f$F_b\f$ is zero and the subglacial aquifer enthalpy flux \f$Q_b\f$ includes no
56
horizontal velocity. (Note that \f$Q_b\f$ is the heat delivered by subglacial
57
water to the base of the ice.) We assume the subglacial water is at the ice
58
overburden pressure \f$p_0=\rho_i g H_0\f$, and we assume that the temperate
59
layer at the base of the ice has zero thickness, so \f$\omega = 0\f$. Thus
60
\f[ H_l(p_b) = H_l(p_0) = H_s(p_0) + L, \f]
61
\f[ H = H_s(p_0) + \omega L = H_s(p_0), \f]
62
\f[ Q_b = H_l(p_0) M_b. \f]
63
64
The basic equation therefore reduces to
65
\f[ \mathbf{q} \cdot \mathbf{n} - G = M_b L \f]
66
or
67
\f[ \text{\texttt{bmelt}} = -\frac{M_b}{\rho_i}
68
= \frac{G - \mathbf{q} \cdot \mathbf{n}}{L \rho_i}. \f]
69
On the other hand, the temperature in the ice is the steady-state result wherein
70
the upward flux is constant and the (absolute) temperature is a linear function
71
of the elevation \f$z\f$, so
72
\f[ \mathbf{q} \cdot \mathbf{n} = - k_i \frac{T_s - T_m(p)}{H_0}.\f]
73
74
The temperature in the ice (\f$0 \le z \le H_0\f$) is this linear function,
75
\f[ T(z) = T_m(p) + \frac{T_s - T_m(p)}{H_0} z \f]
76
and in the bedrock (\f$z \le 0\f$) is also linear,
77
\f[ T_b(z) = T_m(p) - \frac{G}{k_b} z. \f]
78
79
This method implements these formulas. It should be called both when setting-up
80
a verification test by setting temperature at different elevations within
81
the ice and bedrock, and when doing the verification itself by checking against
82
the exact `bmelt` value.
83
*/
84
int
exactO_old
(
double
z,
double
*TT,
double
*Tm,
double
*qice,
double
*qbed,
double
*bmelt) {
85
86
double
P_base;
87
88
P_base =
rho_ICE
*
grav
*
H0
;
/* Pa; hydrostatic approximation to pressure
89
at base */
90
91
*Tm =
T_triple
-
beta_CC
* P_base;
/* K; pressure-melting point at base */
92
93
*qice = -
k_ICE
* (
Ts
- *Tm) /
H0
;
/* J m-1 K-1 s-1 K m-1 = J m-2 s-1 = W m-2;
94
equilibrium heat flux everywhere in ice */
95
96
*qbed =
G
;
/* J m-2 s-1 = W m-2; equilibrium heat flux
97
everywhere in bedrock */
98
99
*bmelt = (
G
- *qice) / (
L
*
rho_ICE
);
/* J m-2 s-1 / (J kg-1 kg m-3) = m s-1;
100
ice-equivalent basal melt rate */
101
102
if
(z >
H0
) {
103
*TT =
Ts
;
/* K; in air above ice */
104
}
else
if
(z >= 0.0) {
105
*TT = *Tm + (
Ts
- *Tm) * (z /
H0
);
/* in ice */
106
}
else
{
107
*TT = *Tm - (
G
/
k_BEDROCK
) * z;
/* in bedrock */
108
}
109
return
0;
110
}
84
int
exactO_old
(
double
z,
double
*TT,
double
*Tm,
double
*qice,
double
*qbed,
double
*bmelt) {
…
}
111
112
struct
TestOParameters
exactO
(
double
z) {
113
struct
TestOParameters
result;
114
115
exactO_old
(z, &result.
TT
, &result.
Tm
, &result.
qice
, &result.
qbed
, &result.
bmelt
);
116
117
return
result;
118
}
112
struct
TestOParameters
exactO
(
double
z) {
…
}
double
L
static const double L
Definition
exactTestO.c:25
rho_ICE
static const double rho_ICE
Definition
exactTestO.c:27
T_triple
static const double T_triple
Definition
exactTestO.c:24
grav
static const double grav
Definition
exactTestO.c:26
k_ICE
static const double k_ICE
Definition
exactTestO.c:28
H0
static const double H0
Definition
exactTestO.c:30
beta_CC
static const double beta_CC
Definition
exactTestO.c:23
exactO_old
int exactO_old(double z, double *TT, double *Tm, double *qice, double *qbed, double *bmelt)
Implements an exact solution for basal melt rate. Utterly straightforward arithmetic.
Definition
exactTestO.c:84
exactO
struct TestOParameters exactO(double z)
Definition
exactTestO.c:112
G
static const double G
Definition
exactTestO.c:32
Ts
static const double Ts
Definition
exactTestO.c:31
k_BEDROCK
static const double k_BEDROCK
Definition
exactTestO.c:29
TestOParameters::qice
double qice
Definition
exactTestO.h:46
TestOParameters::TT
double TT
Definition
exactTestO.h:44
TestOParameters::Tm
double Tm
Definition
exactTestO.h:45
TestOParameters::bmelt
double bmelt
Definition
exactTestO.h:48
TestOParameters::qbed
double qbed
Definition
exactTestO.h:47
TestOParameters
Definition
exactTestO.h:43
Generated by
1.9.8