tschoof.py - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
(HTM) git clone git://src.adamsgaard.dk/pism
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
tschoof.py (1228B)
---
1 class SchoofSSA1dExact:
2
3 """
4 schoof_ssa_exact
5 Returns certain exact solutions of the ssa equation found in
6 Schoof, A Variational Approach to Ice Stream Flow, 2006, pp 237-238.
7
8 The PDE is:
9
10 -d/dy (Bh/2 |1/2 du/dy|^(-2/3) du/dy) = f (1-|y/L|^m)
11
12 on the domain -3L <= y <= 3L with periodic boundary conditions. The resulting $u$
13 is the downstream velocity on an infinite slab.
14
15 """
16
17 def __init__(self, L, m, B=1, h=1, f=1):
18 self.L = float(L)
19 self.m = float(m)
20 self.f = float(f)
21 self.h = float(h)
22 self.B = float(B)
23 self.scale = 2 * (f / (B * h)) ** 3.
24
25 def eval(self, x):
26 L = self.L
27 m = self.m
28 W = (m + 1.) ** (1. / m)
29 u = abs(x / self.L)
30 if u > W:
31 v = 0
32 else:
33 v = -L ** 4 * ((u ** 4 - (m + 1) ** (4. / m)) / 4 -
34 3 * (u ** (m + 4) - (m + 1) ** (1 + 4. / m)) / ((m + 1) * (m + 4)) +
35 3 * (u ** (2 * m + 4) - (m + 1) ** (2 + 4. / m)) / ((m + 1) ** 2 * (2 * m + 4.)) -
36 (u ** (3 * m + 4) - (m + 1) ** (3 + 4. / m)) / ((m + 1) ** 3 * (3 * m + 4)))
37
38 v *= self.scale
39 return v