PISM, A Parallel Ice Sheet Model
stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
src
verification
tests
exactTestN.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2010, 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
#ifndef __exactTestN_h
22
#define __exactTestN_h 1
23
24
#ifdef __cplusplus
25
extern
"C"
26
{
27
#endif
28
29
/*
30
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31
! exactTestN is a C implementation of the parabolic solution in
32
! Bodvardsson (1955), treated here as a manufactured exact solution to
33
! a steady-state SSA flow problem, including the mass continuity equation.
34
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
35
*/
36
37
struct
TestNConstants
{
38
double
H0
;
/* = dome thickness (m) */
39
double
L0
;
/* = full flow-line length from dome to margin where H->0 (m) */
40
double
xc
;
/* = in Bueler interpretation, the location of the calving front (m) */
41
double
a
;
/* = surface mass balance lapse rate, with elevation (s-1) */
42
double
H_ela
;
/* = elevation of equilibrium line (m) */
43
double
k
;
/* = coefficient for sliding */
44
double
H_xc
;
/* = thickness at calving front */
45
double
T_xc
;
/* = vertically-integrated longitudinal stress at calving front */
46
};
47
48
struct
TestNConstants
exactNConstants
(void);
49
50
struct
TestNParameters
{
51
int
error_code
;
52
double
H
;
/* (m; ice thickness) */
53
double
h_x
;
/* (; surface slope) */
54
double
u
;
/* (m s-1; ice horizontal velocity) */
55
double
M
;
/* (m s-1; surface mass balance) */
56
double
B
;
/* (Pa s^(1/3); ice hardness) */
57
double
beta
;
/* (Pa s m-1; linear sliding coefficient) */
58
};
59
60
struct
TestNParameters
exactN
(double x);
61
/* input : x (m; 0.0 <= x <= L0)
62
63
Assumes n = 3.
64
65
In Bueler interpretation, M(x) and A(x) are constructed so that the
66
solution in Bodvardsson (1955) can be thought of as solving mass continuity
67
and SSA stress balance simultaneously:
68
69
M(x) - (u H)_x = 0
70
71
(2 H B(x) |u_x|^((1/n)-1) u_x)_x - beta(x) u = rho g H h_x
72
73
Here H = H(x) is ice thickness and u = u(x) is ice velocity. Also
74
h(x) = H(x), up to a constant the user may choose, because the bed is flat.
75
Following Bodvardsson, here is the equilibrium line altitude, surface
76
mass balance, and the sliding coefficient:
77
78
Hela = H0 / 1.5
79
M(x) = a (h(x) - Hela)
80
beta(x) = k rho g H(x)
81
82
The boundary conditions are
83
84
H(0) = H0
85
86
and
87
88
T(xc) = 0.5 (1 - rho/rhow) rho g H(xc)^2
89
90
where T(x) is the vertically-integrated viscous stress,
91
92
T(x) = 2 H(x) B(x) |u_x|^((1/n)-1) u_x.
93
94
But B(x) is chosen so that this quantity is constant: T(x) = T0.
95
96
The boundary condition at x = xc implies that the calving front is
97
exactly at the location where the ice sheet reaches flotation.
98
99
return value =
100
0 if successful
101
1 if x < 0
102
2 if x > L0
103
104
*/
105
106
#ifdef __cplusplus
107
}
108
#endif
109
110
#endif
/* __exactTestN_h */
111
exactN
struct TestNParameters exactN(double x)
Definition:
exactTestN.c:57
exactNConstants
struct TestNConstants exactNConstants(void)
Definition:
exactTestN.c:30
TestNConstants::k
double k
Definition:
exactTestN.h:43
TestNConstants::L0
double L0
Definition:
exactTestN.h:39
TestNConstants::H_xc
double H_xc
Definition:
exactTestN.h:44
TestNConstants::a
double a
Definition:
exactTestN.h:41
TestNConstants::H0
double H0
Definition:
exactTestN.h:38
TestNConstants::xc
double xc
Definition:
exactTestN.h:40
TestNConstants::H_ela
double H_ela
Definition:
exactTestN.h:42
TestNConstants::T_xc
double T_xc
Definition:
exactTestN.h:45
TestNConstants
Definition:
exactTestN.h:37
TestNParameters::M
double M
Definition:
exactTestN.h:55
TestNParameters::B
double B
Definition:
exactTestN.h:56
TestNParameters::H
double H
Definition:
exactTestN.h:52
TestNParameters::h_x
double h_x
Definition:
exactTestN.h:53
TestNParameters::u
double u
Definition:
exactTestN.h:54
TestNParameters::beta
double beta
Definition:
exactTestN.h:57
TestNParameters::error_code
int error_code
Definition:
exactTestN.h:51
TestNParameters
Definition:
exactTestN.h:50
Generated by
1.9.1