PISM, A Parallel Ice Sheet Model stable 0.4.1779
Defines | Functions

src/verif/tests/exactTestO.c File Reference

#include "exactTestO.h"

Go to the source code of this file.

Defines

#define beta_CC   7.9e-8
#define T_triple   273.15
#define L   3.34e5
#define grav   9.81
#define rho_ICE   910.0
#define k_ICE   2.10
#define k_BEDROCK   3.0
#define H0   3000.0
#define B0   1000.0
#define Ts   223.15
#define G   0.042

Functions

int exactO (const double z, double *TT, double *Tm, double *qice, double *qbed, double *bmelt)
 Implements an exact solution for basal melt rate. Utterly straightforward arithmetic.

Define Documentation

#define B0   1000.0

Definition at line 34 of file exactTestO.c.

#define beta_CC   7.9e-8

Definition at line 23 of file exactTestO.c.

Referenced by exactO().

#define G   0.042

Definition at line 36 of file exactTestO.c.

Referenced by exactO().

#define grav   9.81

Definition at line 26 of file exactTestO.c.

Referenced by exactO(), vd_integrand(), and viscDisc().

#define H0   3000.0

Definition at line 33 of file exactTestO.c.

Referenced by exactO().

#define k_BEDROCK   3.0

Definition at line 31 of file exactTestO.c.

Referenced by exactO().

#define k_ICE   2.10

Definition at line 29 of file exactTestO.c.

Referenced by exactO().

#define L   3.34e5

Definition at line 25 of file exactTestO.c.

Referenced by exactO().

#define rho_ICE   910.0

Definition at line 28 of file exactTestO.c.

Referenced by exactO().

#define T_triple   273.15

Definition at line 24 of file exactTestO.c.

Referenced by exactO().

#define Ts   223.15

Definition at line 35 of file exactTestO.c.

Referenced by exactO().


Function Documentation

int exactO ( const double  z,
double *  TT,
double *  Tm,
double *  qice,
double *  qbed,
double *  bmelt 
)

Implements an exact solution for basal melt rate. Utterly straightforward arithmetic.

Assumes a steady-state temperature profile in ice and bedrock. This steady profile is driven by geothermal flux G from the crust below the bedrock thermal layer. The heat flux is everywhere upward in the bedrock thermal layer, and it is equal by construction to G. The heat flux upward in the ice is also a constant everywhere in the ice, but its value is smaller than G. This imbalance is balanced by the basal melt rate bmelt.

Geometry and dynamics context: The top of the ice is flat so the ice does not flow; the ice thickness has constant value H0. The ice surface has temperature Ts which is below the melting point. The basal melt rate bmelt does not contribute to the vertical velocity in the ice. The ice pressure is hydrostatic: $p = \rho_i g (h-z)$.

The basic equation relates the fluxes in the basal ice, and in the top of the bedrock layer, with the basal melt rate bmelt $= - M_b / \rho_i $. The eqution is from [AschwandenBuelerKhroulevBlatter],

\[ M_b H + (\mathbf{q} - \mathbf{q_{lith}}) \cdot \mathbf{n} = F_b + Q_b. \]

Here $-M_b$ is the basal melt rate in units of mass per area per time. In the above equation the basal friction heating $F_b$ is zero and the subglacial aquifer enthalpy flux $Q_b$ includes no horizontal velocity. (Note that $Q_b$ is the heat delivered by subglacial water to the base of the ice.) We assume the subglacial water is at the ice overburden pressure $p_0=\rho_i g H_0$, and we assume that the temperate layer at the base of the ice has zero thickness, so $\omega = 0$. Thus

\[ H_l(p_b) = H_l(p_0) = H_s(p_0) + L, \]

\[ H = H_s(p_0) + \omega L = H_s(p_0), \]

\[ Q_b = H_l(p_0) M_b. \]

The basic equation therefore reduces to

\[ \mathbf{q} \cdot \mathbf{n} - G = M_b L \]

or

\[ \text{\texttt{bmelt}} = -\frac{M_b}{\rho_i} = \frac{G - \mathbf{q} \cdot \mathbf{n}}{L \rho_i}. \]

On the other hand, the temperature in the ice is the steady-state result wherein the upward flux is constant and the (absolute) temperature is a linear function of the elevation $z$, so

\[ \mathbf{q} \cdot \mathbf{n} = - k_i \frac{T_s - T_m(p)}{H_0}.\]

The temperature in the ice ( $0 \le z \le H_0$) is this linear function,

\[ T(z) = T_m(p) + \frac{T_s - T_m(p)}{H_0} z \]

and in the bedrock ( $z \le 0$) is also linear,

\[ T_b(z) = T_m(p) - \frac{G}{k_b} z. \]

This method implements these formulas. It should be called both when setting-up a verification test by setting temperature at different elevations within the ice and bedrock, and when doing the verification itself by checking against the exact bmelt value.

Definition at line 89 of file exactTestO.c.

References beta_CC, G, grav, H0, k_BEDROCK, k_ICE, L, rho_ICE, T_triple, and Ts.

Referenced by BTU_Verification::bootstrap(), IceCompModel::computeBasalMeltRateErrors(), IceCompModel::computeIceBedrockTemperatureErrors(), IceCompModel::fillBasalMeltRateSolnTestO(), IceCompModel::fillTemperatureSolnTestsKO(), and main().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines