1 | import numpy as np
|
---|
2 | from scipy.special import erf
|
---|
3 |
|
---|
4 |
|
---|
5 | def robintemperature(heatflux, accumrate, thickness, surftemp, z):
|
---|
6 | '''
|
---|
7 | Compute vertical temperature profile of an ice sheet (Robin, 1955)
|
---|
8 |
|
---|
9 | This routine computes the vertical temperature profile of an ice sheet
|
---|
10 | according to the solution of Robin (1955), neglecting friction and
|
---|
11 | horizontal advection. The solution is thus most appropriate at an ice
|
---|
12 | divide.
|
---|
13 |
|
---|
14 | The coordinate system for the solution runs from z = 0 at the base
|
---|
15 | to z = H at the surface of the ice.
|
---|
16 |
|
---|
17 | Parameters (SI units):
|
---|
18 | - heatflux Geothermal heat flux (W m^-2)
|
---|
19 | - accumrate Surface accumulation rate (m s^-1 ice equivalent)
|
---|
20 | - thickness Ice thickness (m)
|
---|
21 | - surftemp Surface temperature (K)
|
---|
22 | - z Vertical position at which to calculate temperature
|
---|
23 | (z can be a scalar or a vector)
|
---|
24 |
|
---|
25 | Returns a vector the same length as z containing the temperature in K
|
---|
26 |
|
---|
27 | Usage:
|
---|
28 | tprofile = robintemperature(heatflux, accumrate, thickness, surftemp, z)
|
---|
29 | '''
|
---|
30 |
|
---|
31 | # some constants (from Holland and Jenkins, 1999)
|
---|
32 | alphaT = 1.14e-6 # thermal diffusivity (m^2 s^-1)
|
---|
33 | c = 2009. # specific heat capacity (J kg^-1 K^-1)
|
---|
34 | rho = 917. # ice density (kg m^-3)
|
---|
35 |
|
---|
36 | #create vertical coordinate variable
|
---|
37 | zstar = np.sqrt(2. * alphaT * thickness / accumrate)
|
---|
38 |
|
---|
39 | tprofile = surftemp + np.sqrt(2. * thickness * np.pi / accumrate / alphaT) * (-heatflux) / 2. / rho / c * (erf(z / zstar) - erf(thickness / zstar))
|
---|
40 |
|
---|
41 | return tprofile
|
---|
42 | # difference between surface and base temperature for check (Cuffey2010 p412):
|
---|
43 | # print tprofile-surftemp
|
---|