|
PISM, A Parallel Ice Sheet Model stable 0.4.1779
|
00001 /* 00002 Copyright (C) 2011 Ed Bueler 00003 00004 This file is part of PISM. 00005 00006 PISM is free software; you can redistribute it and/or modify it under the 00007 terms of the GNU General Public License as published by the Free Software 00008 Foundation; either version 2 of the License, or (at your option) any later 00009 version. 00010 00011 PISM is distributed in the hope that it will be useful, but WITHOUT ANY 00012 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00013 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 00014 details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with PISM; if not, write to the Free Software 00018 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00019 */ 00020 00021 #include "exactTestO.h" 00022 00023 #define beta_CC 7.9e-8 /* K Pa-1; Clausius-Clapeyron constant [\\ref Luethi2002] */ 00024 #define T_triple 273.15 /* K; triple point of pure water */ 00025 #define L 3.34e5 /* J kg-1; latent heat of fusion for water [\\ref AschwandenBlatter] */ 00026 #define grav 9.81 /* m/s^2; accel of gravity */ 00027 00028 #define rho_ICE 910.0 /* kg/(m^3) density of ice */ 00029 #define k_ICE 2.10 /* J/(m K s) = W/(m K) thermal conductivity of ice */ 00030 00031 #define k_BEDROCK 3.0 /* J/(m K s) = W/(m K) thermal conductivity of bedrock */ 00032 00033 #define H0 3000.0 /* m */ 00034 #define B0 1000.0 /* m */ 00035 #define Ts 223.15 /* K */ 00036 #define G 0.042 /* W/(m^2) = J m-2 s-1 */ 00037 00038 00089 int exactO(const double z, double *TT, double *Tm, double *qice, double *qbed, double *bmelt) { 00090 00091 double P_base; 00092 00093 P_base = rho_ICE * grav * H0; /* Pa; hydrostatic approximation to pressure 00094 at base */ 00095 00096 *Tm = T_triple - beta_CC * P_base;/* K; pressure-melting point at base */ 00097 00098 *qice = - k_ICE * (Ts - *Tm) / H0;/* J m-1 K-1 s-1 K m-1 = J m-2 s-1 = W m-2; 00099 equilibrium heat flux everywhere in ice */ 00100 00101 *qbed = G; /* J m-2 s-1 = W m-2; equilibrium heat flux 00102 everywhere in bedrock */ 00103 00104 *bmelt = (G - *qice) / (L * rho_ICE);/* J m-2 s-1 / (J kg-1 kg m-3) = m s-1; 00105 ice-equivalent basal melt rate */ 00106 00107 if (z > H0) { 00108 *TT = Ts; /* K; in air above ice */ 00109 } else if (z >= 0.0) { 00110 *TT = *Tm + (Ts - *Tm) * (z / H0); /* in ice */ 00111 } else { 00112 *TT = *Tm - (G / k_BEDROCK) * z; /* in bedrock */ 00113 } 00114 return 0; 00115 } 00116 00117
1.7.3