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