PISM, A Parallel Ice Sheet Model stable 0.4.1779
Public Member Functions | Protected Member Functions | Protected Attributes

PDDMassBalance Class Reference

A PDD implementation which computes the local mass balance based on an expectation integral. More...

#include <localMassBalance.hh>

Inheritance diagram for PDDMassBalance:
Inheritance graph
[legend]

List of all members.

Public Member Functions

 PDDMassBalance (const NCConfigVariable &myconfig)
virtual ~PDDMassBalance ()
virtual PetscErrorCode getNForTemperatureSeries (PetscScalar t, PetscScalar dt, PetscInt &N)
virtual PetscScalar getPDDSumFromTemperatureTimeSeries (PetscScalar pddStdDev, PetscScalar pddThresholdTemp, PetscScalar t, PetscScalar dt_series, PetscScalar *T, PetscInt N)
 Compute the expected number of positive degree days from the input temperature time-series.
virtual PetscScalar getSnowFromPrecipAndTemperatureTimeSeries (PetscScalar precip_rate, PetscScalar t, PetscScalar dt_series, PetscScalar *T, PetscInt N)
virtual PetscErrorCode getMassFluxesFromPDDs (const DegreeDayFactors &ddf, PetscScalar dt, PetscScalar pddsum, PetscScalar snow, PetscScalar &accumulation_rate, PetscScalar &melt_rate, PetscScalar &runoff_rate, PetscScalar &smb_rate)
 Compute the surface mass balance at a location from the number of positive degree days and the accumulation amount in a time interval.

Protected Member Functions

PetscScalar CalovGreveIntegrand (PetscScalar sigma, PetscScalar TacC)
 Compute the integrand in integral (6) in [CalovGreve05].

Protected Attributes

bool precip_as_snow
 interpret all the precipitation as snow (no rain)
PetscScalar Tmin
 the temperature below which all precipitation is snow
PetscScalar Tmax
 the temperature above which all precipitation is rain

Detailed Description

A PDD implementation which computes the local mass balance based on an expectation integral.

The expected number of positive degree days is computed by an integral in CalovGreve05.

Uses degree day factors which are location-independent.

Definition at line 116 of file localMassBalance.hh.


Constructor & Destructor Documentation

PDDMassBalance ( const NCConfigVariable &  myconfig)

Definition at line 28 of file localMassBalance.cc.

References LocalMassBalance::config, precip_as_snow, Tmax, and Tmin.

virtual ~PDDMassBalance ( ) [inline, virtual]

Definition at line 120 of file localMassBalance.hh.


Member Function Documentation

PetscScalar CalovGreveIntegrand ( PetscScalar  sigma,
PetscScalar  TacC 
) [protected]

Compute the integrand in integral (6) in [CalovGreve05].

The integral is

\[\mathrm{PDD} = \int_{t_0}^{t_0+\mathtt{dt}} dt\, \bigg[\frac{\sigma}{\sqrt{2\pi}}\,\exp\left(-\frac{T_{ac}(t)^2}{2\sigma^2}\right) + \frac{T_{ac}(t)}{2}\,\mathrm{erfc} \left(-\frac{T_{ac}(t)}{\sqrt{2}\,\sigma}\right)\bigg] \]

This procedure computes the quantity in square brackets. The value $T_{ac}(t)$ in the above integral is in degrees C. Here we think of the argument TacC as temperature in Celsius, but really it is the temperature above a threshold at which it is "positive".

This integral is used for the expected number of positive degree days, unless the user selects a random PDD implementation with -pdd_rand or -pdd_rand_repeatable. The user can choose $\sigma$ by option -pdd_std_dev. Note that the integral is over a time interval of length dt instead of a whole year as stated in CalovGreve05 .

Definition at line 69 of file localMassBalance.cc.

References pi.

Referenced by getPDDSumFromTemperatureTimeSeries().

PetscErrorCode getMassFluxesFromPDDs ( const DegreeDayFactors ddf,
PetscScalar  dt,
PetscScalar  pddsum,
PetscScalar  accumulation,
PetscScalar &  accumulation_rate,
PetscScalar &  melt_rate,
PetscScalar &  runoff_rate,
PetscScalar &  smb_rate 
) [virtual]

Compute the surface mass balance at a location from the number of positive degree days and the accumulation amount in a time interval.

Several mass fluxes, including the final surface mass balance, are computed as ice-equivalent meters per second from the number of positive degree days and an accumulation amount in the time interval.

This is a PDD scheme. The input parameter ddf.snow is a rate of melting per positive degree day for snow. If the number of PDDs, which describes an energy available for melt, exceeds those needed to melt all of the accumulation (snow, using ddf.snow) then:

  • a fraction of the melted snow refreezes, conceptualized as superimposed ice, and this is controlled by parameter ddf.refreezeFrac, and
  • the excess number of PDDs is used to melt both the ice that came from refreeze and then any ice which is already present.

In either case, ice melts at a constant rate per positive degree day, controlled by parameter ddf.ice.

In the weird case where the accumulation amount is negative, it is interpreted as an (ice-equivalent) direct ablation rate. Accumulation amounts are generally positive everywhere on ice sheets, however.

The scheme here came from EISMINT-Greenland [RitzEISMINT], but is influenced by R. Hock (personal communication).

The input argument dt is in seconds. The input argument pddsum is in K day. These strange units work because the degree day factors in ddf have their usual glaciological units, namely m K-1 day-1, and we only multiply degree day factors times amounts of snow, not rates.

There are four outputs

  • accumulation_rate,
  • melt_rate,
  • runoff_rate,
  • smb_rate.

All are rates and all are in ice-equivalent m s-1. Note "accumulation" is the part of precipitation which is not rain, so, if needed, the modeled rain rate is rain_rate = precip_rate - accum_rate. Again, "runoff" is meltwater runoff and does not include rain.

In normal areas where accumulation > 0, the output quantities satisfy

  • smb_rate = accumulation_rate - runoff_rate

in all cases.

Implements LocalMassBalance.

Definition at line 185 of file localMassBalance.cc.

References DegreeDayFactors::ice, DegreeDayFactors::refreezeFrac, and DegreeDayFactors::snow.

PetscErrorCode getNForTemperatureSeries ( PetscScalar  t,
PetscScalar  dt,
PetscInt &  N 
) [virtual]

Because Calov-Greve method uses Simpson's rule to do integral, we choose the returned number of times N to be odd.

Implements LocalMassBalance.

Reimplemented in PDDrandMassBalance.

Definition at line 39 of file localMassBalance.cc.

References LocalMassBalance::config, and secpera.

PetscScalar getPDDSumFromTemperatureTimeSeries ( PetscScalar  pddStdDev,
PetscScalar  pddThresholdTemp,
PetscScalar  t,
PetscScalar  dt_series,
PetscScalar *  T,
PetscInt  N 
) [virtual]

Compute the expected number of positive degree days from the input temperature time-series.

Implements LocalMassBalance.

Reimplemented in PDDrandMassBalance.

Definition at line 77 of file localMassBalance.cc.

References CalovGreveIntegrand().

PetscScalar getSnowFromPrecipAndTemperatureTimeSeries ( PetscScalar  precip_rate,
PetscScalar  t,
PetscScalar  dt_series,
PetscScalar *  T,
PetscInt  N 
) [virtual]

/brief Report the amount of snow fallen in the given time period, according to the temperature time-series; remove the rain.

Use the temperature time-series to determine whether the precipitation is snow or rain. Rain is removed entirely from the surface mass balance, and will not be included in the computed runoff, which is meltwater runoff. There is an allowed linear transition for Tmin below which all precipitation is interpreted as snow, and Tmax above which all precipitation is rain (see, e.g. Hock2005b).

Implements LocalMassBalance.

Definition at line 110 of file localMassBalance.cc.

References precip_as_snow, Tmax, and Tmin.


Member Data Documentation

bool precip_as_snow [protected]

interpret all the precipitation as snow (no rain)

Definition at line 144 of file localMassBalance.hh.

Referenced by getSnowFromPrecipAndTemperatureTimeSeries(), and PDDMassBalance().

PetscScalar Tmax [protected]

the temperature above which all precipitation is rain

Definition at line 145 of file localMassBalance.hh.

Referenced by getSnowFromPrecipAndTemperatureTimeSeries(), and PDDMassBalance().

PetscScalar Tmin [protected]

the temperature below which all precipitation is snow

Definition at line 145 of file localMassBalance.hh.

Referenced by getSnowFromPrecipAndTemperatureTimeSeries(), and PDDMassBalance().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines