_images/logo.png

An open source glacier model in Python

The model builds upon Marzeion et al., (2012) and intends to become a global scale, modular, and open source model for glacier dynamics. The model accounts for glacier geometry (including contributory branches) and includes a simple (yet explicit) ice dynamics module. It can simulate past and future mass-balance, volume and geometry of any glacier in a fully automated workflow. We rely exclusively on publicly available data for calibration and validation.

The project is currently in intense development. Get in touch with us if you want to contribute.

Documentation

What’s New

v0.1 (29 March 2016)

Initial release, used to prepare the data submitted to ITMIX (see ITMIX Experiment 2016).

This release is the result of several months of development (outside of GitHub for a large part). Several people have contributed to this release:

  • Michael Adamer (intern, UIBK), participated to the development of the centerline determination algorithm (2014)
  • Kévin Fourteau (intern, UIBK, ENS Cachan), participated to the development of the inversion and the flowline modelling algorithms (2014-2015)
  • Alexander H. Jarosch (Associate Professor, University of Iceland), developed the MUSCL-SuperBee model (PR23)
  • Johannes Landmann (intern, UIBK), participated to the links between databases project (2015)
  • Ben Marzeion (project leader, University of Bremen), scientific advisor
  • Fabien Maussion (project leader, UIBK), core developer
  • Felix Oesterle (Post-Doc, UIBK), develops OGGR and provided the AWS deployment script (PR25)
  • Timo Rothenpieler (programmer, University of Bremen), participated to the OGGM deployment script (e.g. PR34, PR48), and developed OGGM installation tools
  • Christian Wild (master student, UIBK), participated to the development of the centerline determination algorithm (2014)

Installing OGGM

OGGM itself is a pure python package, but it has several dependencies wich are not always trivial to install. The instructions below are self-explanatory and should work on any platform. However, complete beginners should get familiar with Python and its packaging ecosystem before trying to install and run OGGM.

OGGM is tested with the Python versions 2.7, 3.4 and 3.5.

For most users we recommend to use the conda package manager to install the dependencies With conda (all platforms). Linux users and people with experience with pip can follow the specific instructions With virtualenv (linux/debian).

Dependencies

Standard SciPy track:
  • numpy
  • scipy
  • scikit-image
  • pillow
  • matplotlib
  • pandas
  • xarray
  • joblib
Python 2 support:
  • six
Configuration file parsing tool:
  • configobj
I/O:
  • netcdf4
GIS tools:
  • gdal
  • shapely
  • pyproj
  • rasterio
  • geopandas
Testing:
  • nose
Other libraries:

With conda (all platforms)

Prerequisites

You should have a recent version of git and of conda (either by installing miniconda or anaconda).

Linux users should install a couple of packages (not all of them are required but just to be sure):

$ sudo apt-get install build-essential liblapack-dev gfortran libproj-dev gdal-bin libgdal-dev netcdf-bin ncview python-netcdf ttf-bitstream-vera

Conda environment

We recommend to create a specific environment for OGGM. In a terminal window, type:

conda create --name oggm python=3.4

You can of course use any other name for your environment. Don’t forget to activate it:

source activate oggm

(on windows: activate oggm)

Packages

Install the packages from the ioos channel:

conda install -c ioos geopandas matplotlib Pillow joblib netCDF4 scikit-image configobj nose pyproj numpy krb5 rasterio xarray

After success, install the following packages from Fabien’s github:

pip install git+https://github.com/fmaussion/motionless.git
pip install git+https://github.com/fmaussion/salem.git
pip install git+https://github.com/fmaussion/cleo.git

OGGM

We recommend to clone the git repository (or a fork if you want to participate to the development):

git clone git@github.com:OGGM/oggm.git

Then go to the project root directory:

cd oggm

And install OGGM in development mode:

pip install -e .

Testing

From the oggm root directory, type:

nosetests .

With virtualenv (linux/debian)

For Debian / Ubuntu / Mint users only!

Linux packages

For building stuffs:

$ sudo apt-get install build-essential python-pip liblapack-dev gfortran libproj-dev

For matplolib to work on Python 2:

$ sudo apt-get install python-gtk2-dev

And on Python 3:

$ sudo apt-get install tk-dev python3-tk python3-dev

For GDAL:

$ sudo apt-get install gdal-bin libgdal-dev python-gdal

For NETCDF:

$ sudo apt-get install netcdf-bin ncview python-netcdf

Virtual environment

Install:

$ sudo pip install virtualenvwrapper

Create the directory where the virtual environments will be created:

$ mkdir ~/.pyvirtualenvs

Add these three lines to the files: ~/.profile and ~/.bashrc:

# Virtual environment options
export WORKON_HOME=$HOME/.pyvirtualenvs
source /usr/local/bin/virtualenvwrapper_lazy.sh

Reset your profile:

$ . ~/.profile

Make a new environment with Python 2:

$ mkvirtualenv oggm_env -p /usr/bin/python

Or Python 3:

$ mkvirtualenv oggm_env -p /usr/bin/python3

(Details: http://simononsoftware.com/virtualenv-tutorial-part-2/ )

Python Packages

Be sure to be on the working environment:

$ workon oggm_env

Install one by one the easy stuff:

$ pip install numpy scipy pandas shapely

For Matplotlib and Python 2 we need to link the libs in the virtual env:

$ ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} $VIRTUAL_ENV/lib/python2.7/site-packages
$ pip install matplotlib

(Details: http://www.stevenmaude.co.uk/2013/09/installing-matplotlib-in-virtualenv.html )

For Matplotlib and Python 3 it doesn’t seem to be necessary:

$ pip install matplotlib

Check if plotting works by running these three lines in python:

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3])
>>> plt.show()

If nothing shows-up, something got wrong.

For GDAL, it’s also not straight forward. First, check which version of GDAL is installed:

$ dpkg -s libgdal-dev

The version (10, 11, ...) should match that of the python package. Install using the system binaries:

$ pip install gdal==1.10.0 --install-option="build_ext" --install-option="--include-dirs=/usr/include/gdal"
$ pip install fiona --install-option="build_ext" --install-option="--include-dirs=/usr/include/gdal"

(Details: http://tylerickson.blogspot.co.at/2011/09/installing-gdal-in-python-virtual.html )

Install further stuffs:

$ pip install pyproj rasterio Pillow geopandas netcdf4 scikit-image configobj joblib xarray

And the external libraries:

$ pip install git+https://github.com/fmaussion/motionless.git
$ pip install git+https://github.com/fmaussion/salem.git
$ pip install git+https://github.com/fmaussion/cleo.git

OGGM and tests

Refer to OGGM above.

Getting started

The best way to get you started with OGGM is to run the example case study in the Öztal region. You will find a jupyter notebook here or in the oggm/docs/notebooks directory.

Centerlines

Mass-balance

Ice dynamics

The glaciers in OGGM are represented by a depth integrated flowline model. The equations for the isothermal shallow ice are solved along the glacier centerline, computed to represent best the flow of ice along the glacier (see for example antarcticglaciers.org for a general introduction about the various type of glacier models).

Here we present the basic physics and numerics of the two models implemented currently in OGGM, the FluxBasedModel (homegrown model with a rather simple numerical solver) and the MUSCLSuperBeeModel (mass-conserving numerical scheme, see [Jarosch_etal_2013]).

Basics

Let \(S\) be the area of a cross-section perpendicular to the flowline. It has a width \(w\) and a thickness \(h\) and, in this example, a parabolic bed shape.

_images/hef_flowline.jpg

Example of a cross-section along the glacier flowline. Background image from http://www.swisseduc.ch/glaciers/alps/hintereisferner/index-de.html

Volume conservation for this discrete element implies:

\[\frac{\partial S}{\partial t} = w \, \dot{m} - \nabla \cdot q\]

where \(\dot{m}\) is the mass-balance, \(q = u S\) the flux of ice, and \(u\) the depth-integrated ice velocity ([Cuffey_Paterson_2010], p 310). This velocity can be computed from Glen’s flow law as a function of the basal shear stress \(\tau\):

\[u = u_d + u_s = f_d h \tau^n + f_s \frac{\tau^n}{h}\]

The second term is to account for basal sliding, see e.g. [Oerlemans_1997] or [Golledge_Levy_2011]. It introduces an additional free parameter \(f_s\) and will therefore be ignored in a first approach. The deformation parameter \(f_d\) is better constrained and relates to Glen’s temperature‐dependent creep parameter \(A\):

\[f_d = \frac{2 A}{n + 2}\]

The basal shear stress \(\tau\) depends e.g. on the geometry of the bed [Cuffey_Paterson_2010]. Currently it is assumed to be equal to the driving stress \(\tau_d\):

\[\tau_d = \alpha \rho g h\]

where \(\alpha\) is the slope of the flowline and \(\rho\) the density of ice. Both the FluxBasedModel and the MUSCLSuperBeeModel solve for these equations, but with different numerical schemes.

Bed thickness inversion

To compute the initial ice thikness \(h_0\), OGGM follows a methodology largely inspired from [Farinotti_etal_2009] but using a different apparent mass-balance (see also: Mass-balance) and another calibration algorithm.

The principle is simple. Let’s assume for now that we know the ice velocity \(u\) along the flowline of our present-time glacier. Then the above equations can be used to compute the section area \(S\) out of \(u\) and the other ice-flow parameters. Since we know the present-time width \(w\) with accuracy, \(h_0\) can be obtained by assuming a certain geometrical shape for the bed.

In OGGM, a number of climate and glacier related parameters are fixed prior to the inversion, leaving only one free parameter for the calibration of the bed inversion procedure: the inversion factor \(f_{inv}\). It is defined such as:

\[A = f_{inv} \, A_0\]

With \(A_0\) the standard creep parameter (2.4e-24). Currently, \(f_{inv}\) is calibrated to minimize the volume RMSD of all glaciers with a volume estimation in the GlaThiDa database. It is therefore neither glacier nor temperature dependent and does not account for uncertainties in GlaThiDa’s glacier-wide thickness estimations, two approximations which should be better handled in the future.

Flux based model

Most flowline models treat the volume conservation equation as a diffusion problem, taking advantage of the robust numerical solutions available for this type of equations. The problem with this approach is that it develops the \(\partial S / \partial t\) term to solve for ice thikness \(h\) directly, thus implying different diffusion equations for different bed geometries (e.g. [Oerlemans_1997] with a trapezoidal bed).

The OGGM flux based model solves for the \(\nabla \cdot q\) term on a staggered grid (hence the name). It has the advantage that the model numerics are the same for any bed shape, but it makes one important simplification: the stress \(\tau = \alpha \rho g h\) is always the same, regardless of the bed shape. This doesn’t mean that the shape has no influence on the glacier evolution, as explained below.

Glacier bed shapes

OGGM implements a number of possible bed-shapes. Currently the shape has no direct influence on ice dynamics, but it does influence how the width of the glacier changes with ice thickness and thus will influence the mass-balance \(w \, \dot{m}\). It appears that the flowline model is quite sensitive to the bed shape.

VerticalWallFlowline

_images/bed_vertical.png

The simplest shape. The glacier width does not change with ice thickness.

TrapezoidalFlowline

_images/bed_trapezoidal.png

Trapezoidal shape with two degrees of freedom. The width change with thickness depends on \(\lambda\). [Golledge_Levy_2011] uses \(\lambda = 1\) (a 45° wall angle).

ParabolicFlowline

_images/bed_parabolic.png

Parabolic shape with one degree of freedom, which makes it particulary useful for the bed inversion: if \(S\) and \(w\) are known:

\[h = \frac{3}{2} \frac{S}{w}\]

The parabola is defined by the single bed-shape parameter \(P_s = 4 h / w^2\). Very small values of this parameter imply very flat shapes, unrealistically sensitive to changes in \(h\). For this reason, the default in OGGM is to use the mixed flowline model.

MixedFlowline

A combination of trapezoidal and parabolic flowlines. If the bed shape parameter \(P_s\) is below a certain threshold, a trapezoidal shape is used instead.

MUSCLSuperBeeModel

A shallow ice model with improved numerics ensuring mass-conservation in very steep walls [Jarosch_etal_2013]. The model is currently in development to account for various bed shapes and tributaries and will likely become the default in OGGM.

Glacier tributaries

Glaciers in OGGM have a main centerline and, sometimes, one or more tributaries (which can themsleves also have tributaries, see Centerlines). The number of these tributaries depends on many factors, but most of the time the algorithm works well.

The main flowline and its tributaries are all handled the same way and are modelled individually. The difference is that tributaries can transport mass to the branch they are flowing to. Numerically, this mass transport is handled by adding an element at the end of the flowline with the same properties (with, thickness...) as the last grid point, with the difference that the slope \(\alpha\) is computed with respect to the altitude of the point they are flowing to. The ice flux is then computed normally and transferred to the downlying branch.

The computation of the ice flux is always done first from the lowest order branches (without tributaries) to the highest ones, ensuring a correct mass-redistribution. The angle between tributary and main branch ensures that the former is not decoupled from the latter. If the angle is positive or if no ice is present at the end of the tributary, no mass exchange occurs.

References

[Cuffey_Paterson_2010](1, 2) Cuffey, K., and W. S. B. Paterson (2010). The Physics of Glaciers, Butterworth‐Heinemann, Oxford, U.K.
[Farinotti_etal_2009]Farinotti, D., Huss, M., Bauder, A., Funk, M., & Truffer, M. (2009). A method to estimate the ice volume and ice-thickness distribution of alpine glaciers. Journal of Glaciology, 55 (191), 422–430.
[Golledge_Levy_2011](1, 2) Golledge, N. R., and Levy, R. H. (2011). Geometry and dynamics of an East Antarctic Ice Sheet outlet glacier, under past and present climates. Journal of Geophysical Research: Earth Surface, 116(3), 1–13.
[Jarosch_etal_2013](1, 2) Jarosch, a. H., Schoof, C. G., & Anslow, F. S. (2013). Restoring mass conservation to shallow ice flow models over complex terrain. Cryosphere, 7(1), 229–240. http://doi.org/10.5194/tc-7-229-2013
[Oerlemans_1997](1, 2) Oerlemans, J. (1997). A flowline model for Nigardsbreen, Norway: projection of future glacier length based on dynamic calibration with the historic record. Journal of Glaciology, 24, 382–389.

Glacier working directories

See also: GlacierDirectory

The majority of OGGM tasks are so-called “entity tasks”. They are standalone operations to be realized on one single glacier entity. These tasks are executed sequentially: they often need input generated by the previous task(s).

In order to avoid complicated chains of arguments, each task will read the input data from a glacier-specific directory and writes its output into the same directory, making the new data available for further computations.

These data files and their names are standardized and listed in the oggm.cfg module. If you want to implement your own task you’ll have to add an entry to this file too.

Glacier divides

The glacier outlines provided by the RGI are the result of an automated (sometimes manually corrected) delineation procedure. In some cases, the RGI glacier is not the outline of a single glacier (in the dynamical sense) but is the outline of a “glacier complex”. OGGM does not (yet) implement a method to divide these glacier complexes into individual glaciers [1], but it does have a framework to deal with user provided glacier divides.

An RGI entity can have one or more “divides”, stored as polygons in a separate shapefile (oggm.cfg.set_divides_db()). Several OGGM tasks (such as compute_centerlines()) can work properly on single glaciers only, as shown on the example below (left: with divides, right: without).

_images/test_centerlines_1.5+.png _images/test_nodivide_1.5+.png

The divides are handled as sub-directories in the glacier directory: each sub-directory stores the files specific to that divide. All the glaciers have at least one divide (“divide_01”), the divide ID 0 being reserved for the root directory which contains files concerning the entire RGI glacier. The tasks that work on divides only can be recognized by their div_id=None keyword argument (they also implement the divide_task decorator).

[1]Kienholz, C., Hock, R., & Arendt, A. a. (2013). A new semi-automatic approach for dividing glacier complexes into individual glaciers. Journal of Glaciology, 59(217), 925–937.

cfg.BASENAMES

This is a list of the files that can be found in the glacier directory or its divides:

apparent_mb.nc
The apparent mass-balance data needed for the inversion.
catchment_indices.pkl
A list of len n_centerlines, each element conaining a numpy array of the indices in the glacier grid which represent the centerline’s catchment area.
centerlines.pkl
A list of :py:class:oggm.Centerline instances, sorted by flow order.
climate_monthly.nc
The monthly climate timeseries for this glacier, stored in a netCDF file.
dem.tif
A geotiff file containing the DEM (reprojected into the local grid).
dem_source.pkl
A string with the source of the topo file (ASTER, SRTM, ...).
downstream_line.pkl
A shapely.LineString of the coordinates of the downstream line (flowing out of the glacier until the border of the domain) for each divide.

find_initial_glacier_params.pkl

geometries.pkl
A dict containing the shapely.Polygons of a divide. The “polygon_hr” entry contains the geometry transformed to the local grid in (i, j) coordinates, while the “polygon_pix” entry contains the geometries transformed into the coarse grid (the i, j elements are integers). The “polygon_area” entry contains the area of the polygon as computed by Shapely (it is needed because the divides will have their own area which is not obtained from the RGI file).
glacier_grid.pkl
A salem.Grid handling the georeferencing of the local grid.
gridded_data.nc
A netcdf file containing several gridded data variables such as topography, the glacier masks and more (see the netCDF file metadata).
inversion_flowlines.pkl
A “better” version of the Centerlines, now on a regular spacing i.e., not on the gridded (i, j) indices. The tails of the tributaries are cut out to make more realistic junctions. They are now “1.5D” i.e., with a width.
inversion_input.pkl
List of dicts containing the data needed for the inversion.
inversion_output.pkl
List of dicts containing the output data from the inversion.
inversion_params.pkl
Dict of fs and fd as computed by the inversion optimisation.
local_mustar.csv
A csv with three values: the local scalars mu*, t*, bias
major_divide.pkl
A simple integer in the glacier root directory (divide 00) containing the ID of the “major divide”, i.e. the one really flowing out of the glacier (the other downstream lines flowing into the main branch).
model_flowlines.pkl
List of flowlines ready to be run by the model.
mu_candidates.pkl
A pandas.Series with the (year, mu) data.
outlines.shp
The glacier outlines in the local projection.

past_model.pkl

past_models.pkl

ITMIX Experiment 2016

Author: F. Maussion
Last updated: 28.03.2016

OGGM participates to the ITMIX experiment organised by the IACS Working Group on Glacier Ice Thickness Estimation.

The idea is to compare several models able to provide a distributed estimate of glacier ice thickness. The participants can submit their estimations for one (or more) of 18 selected glaciers. The experiment is supposed to be “blind”, i.e. the perticipants are not aware of the actual ice thickness of the glaciers they are modelling.

The deadline for the experiment was February 29th. Definitely too early for OGGM, with which we had performed the inversion for the European Alps only. We still didn’t want to miss this opportunity and started an intense development phase to make OGGM applicable globally. After quite a lot of work we are now able to provide an estimate for all glaciers except Starbuck in Antarctica. While this surely marks an important step in the development of OGGM, this project again raised many questions and digged a few issues out, since (as you will see below), nothing is easy when doing global scale distributed modelling.

ITMIX preprocessing

The glaciers are heterogeneous: valley glaciers, ice-caps, marine-terminating...

Blue: ITMIX outlines, Black: RGI outlines. White means that ITMIX didn’t provide the topography.

The first step that we needed to do is to formalize all this data so that OGGM can deal with it. This turned out to be a bit complicated since the ITMIX data was not standardized:

  • we updated the RGI outlines with the ITMIX ones where possible
  • for ice-caps, we kept the RGI outlines because OGGM currently needs the “pieces of cake” to compute the centerlines - see the important implications below.
  • we decided to to compute the inversion on the OGGM local grids, not on the IMIX maps. This is important because OGGM makes decisions about the grid spacing it uses. Furthermore, the entire workflow is depending on these standardized local maps. We introduced a new routine in the pipeline in order to update the SRTM/ASTER topography with the ITMIX one. This also was not trivial because some ITMIX topographies are stopping directly at the glacier boundary.

OGGM preprocessing

Topography

OGGM uses following DEM data:

The corrected DEMs where necessary because ASTER data has many issues over glaciers. Take for example the DEM for two glaciers in Iceland:

Note that the hypsometry provided in RGI V5 also contains these errors. While the problems with the right plot are obvious, the glacier on the left (Dyngjujoekull) is practically impossible to filter automatically. On the plot below, I show the hypsometry that OGGM computed and the one by Mathias Huss:

Up to a few discrepancies due to projection issues, we both have the problem of non-zero bins below 750 m a.s.l. Fortunately, thanks to the work by Jonathan de Ferranti, these problems are now resolved in OGGM:

There is potential for even better coverage of corrected DEM, but this would require a bit more work (J. de Ferranti’s data is not always logically structured).

Calibration data

Another obstacle to global coverage was that the databases required for calibration (WGMS FoG and GlaThiDa) are not “linked” to RGI, i.e. there is no way to know which RGI entity corresponds to each database entry. Thanks to the work of Johannes Landmann at UIBK we now have comprehensive links with global coverage.

Some of the ITMIX glaciers were in the database, I removed them manually for the sake of the experiment (“blind run”):

  • WGMS: Kesselwandferner, Brewster, Devon, Elbrus, Freya, Hellstugubreen, Urumqi
  • GlaThiDa: Kesselwandferner, Unteraar

These leaves us with 201861 WGMS glaciers with at least 5 years of mass-balance data available for calibration of the mass-balance:

https://dl.dropboxusercontent.com/u/20930277/itmix_public/globmap_wgms.png?raw=1

And 133 GlaThiDa glaciers with glacier-wide average thickness estimates. The coverage of GlaThiDa is not very good, which is probably a problem:

https://dl.dropboxusercontent.com/u/20930277/itmix_public/globmap_glathida.png?raw=1

Inversion procedure

Refer to the general documentation for details about the inversion procedure.

Here we go directly to the calibration results of the ice-thickness inversion. OGGM currently has only one free parameter to tune for the ice thickness inversion: Glen’s creep parameter A. This is very similar to [Farinotti_etal_2009], with the difference that we are not calibrating A for each glacier individually: we tried to do that, but didn’t manage (yet).

Land-terminating glaciers

Currently, A is varied until the glacier-wide thickness computed by OGGM minimizes the RMSD with GlaThiDa. We removed all ice-caps and marine-terminating glaciers from the dataset in order to avoid these specific cases (135 glaciers left). Here are the results of the calibration (left: volume-area scaling, right: OGGM):

https://dl.dropboxusercontent.com/u/20930277/itmix_public/scatter_all_glaciers.png?raw=1

We can see that OGGM has a slightly lower score than volume-area scaling (VAS). This is due to the presence of a couple of outliers. In particular, the thickest glacier in GlaThiDa and VAS is strinkingly thin in OGGM: this is the Black Rapids glacier in Canada, which is quite well mentioned in the literature because it is a surging glacier. Closer inspection in OGGM reveals that this glacier has one of the lowest mass-balance gradient. CRU precipitation is 849 mm yr \(^{1}\) (after application of the 2.5 correction factor!), which I assume is too low.

We recall here that one central difference between our approach and that of [HussFarinotti_2012] is that we use real climate data to compute the apparent mass-balance, and thus have glacier specific mass-balance gradients. This is a strength but can also become a burden. The mass-balance gradient depends mostly on precipitation, but also on temperature and its seasonal cycle. Here I show the apparent mass-balance gradient in the ablation area of all GlaThiDa glaciers:

https://dl.dropboxusercontent.com/u/20930277/itmix_public/mb_grad.png?raw=1

Is the MB gradient related to the error OGGM makes in comparison to GlaThiDa?

https://dl.dropboxusercontent.com/u/20930277/itmix_public/rel_error.png?raw=1

No not really. And this is similar with all other glacier characteristics I could look at until now. The error that OGGM makes is not easily attributable to specific causes... It it would, that would be great! Indeed, this would allow maybe to define a rule for the calibration factor A. If you have ideas at which parameter to look at, let me know!

VAS vs OGGM

I don’t want the calibration to be too altered by the Black Rapids outlier, so I removed it from the calibration set. The plot now looks better, and after this little hack OGGM is even slightly better than VAS:

https://dl.dropboxusercontent.com/u/20930277/itmix_public/scatter_all_glaciers_no_rapids.png?raw=1

What is really interesting however is that OGGM and VAS are incredibly similar in their dissimilarity with GlaThiDa. So similar that if we plot the two approaches together on a scatter, one could argue that the thousands of lines of code of OGGM really aren’t worth the effort ;). I think that I have to talk to David Bahr about this, he will surely be pleased.

https://dl.dropboxusercontent.com/u/20930277/itmix_public/vas_vs_oggm.png?raw=1

A problem with large glaciers?

These results for the reference glaciers availble in GlaThiDa were somehow OK, but the issue with the Black Rapids glacier made me wonder a little bit and I decided to have a closer look. In the figure below I compare the OGGM inversion results with VAS for all glaciers I have at hand for the experiment (ITMIX + WGMS + GlaThiDa, land-terminating, no ice-caps).

https://dl.dropboxusercontent.com/u/20930277/itmix_public/vas_vs_oggm_large.png?raw=1

After many hours (days?) of searching for a reasonable explanation for this behavior, I had to renounce. I will have to make a test under controlled conditions to see if this is actually a bug in OGGM or if it is something inherent to the methodology.

The problem with ice-caps

This one is easier: ice caps are cut into smaller pieces of cake, instead of being considered as a large glacier. Like VAS, OGGM will also fail since the volume of glaciers is expected to grow with a power law to its area. The flowline methodology followed by OGGM on ice caps is very likely to underestimate the total ice volume.

Marine-terminating glaciers

Using the apparent mass-balance method for calving glaciers will lead to overestimated thicknesses. In the future, OGGM will intend to parametrize mass-flux at calving fronts. For ITMIX, we will consider mass loss by calving for Columbia glacier only. From [Rasmussen_etal_2011], we assume two possible calving rates for Columbia: 4.3 and 8.0 km \(^{3}\) ice eq. a \(^{-1}\), to which we arbitrarily add a third case with 12 km \(^{3}\) ice eq. a \(^{-1}\). This mass loss at the calving front is distributed over the glacier and added to the apparent mass-balance, resulting in total ice volumes of 250, 273, and 291 km \(^{3}\), respectively.

Putting all this together

We find an optimised factor for A of 3.22 (i.e. our A is three times larger than the standard of 2.4e-24 [Cuffey_Paterson_2010]). This makes sense since we do not consider the sliding velocity in the inversion, which means that we need an ice which is less stiff to compensate.

The inversion procedure in OGGM is not designed to provide a distributed estimate of glacier thickness: in particular, the glacier widths in OGGM are not always geometrical as in Farinotti et al. (2009): they are also corrected so that the altitude-area distribution of the glacier is preserved.

We show a few examples of the normal inversion procedure in OGGM, which is meant to provide the intput to a flowline model:

Distributed ice thickness

In a final step, we had to somehow interpolate the flowline thicknesses to the ITMIX map. Here again we made the choice to keep as much logic as possible within the standard OGGM framework and defined a new task, oggm.tasks.distribute_thickness(). We compute the ice thickness on the OGGM local map and simply interpolate our results on the high resolution ITMIX grid only at the very end.

The distribution works as follows:

  • for each pixel, the closest flowlines thicknesses within a 100m altitude range are interpolated using an inverse distance weight
  • this value is then corrected with a factor depending on the distance to the glacier outlines
  • finally, the thickness is corrected with a factor \(1 / \alpha^{\frac{N}{N+2}}\) as in Farinotti et al. (2009). Since I had no time to check if this correction works better, I submitted two versions of the interpolation (with or without local slope correction).

An example of the interpolation for Columbia glacier with (left) or without (right) slope correction:

For the ice caps, the interpolation methods lead to similar results. However, it is very likely that the flowline methodology used by OGGM is not working properly.

Conclusions

We were able to provide an estimate of ice thickness for all glaciers except Starbuck in Antarctica. I am less confident about the distributed maps than the total volume estimates. I am also much less confident about the ice-caps (they are probably totally crap) and also less confident about the larger glaciers than the smaller ones.

References

[Cuffey_Paterson_2010]Cuffey, K., and W. S. B. Paterson (2010). The Physics of Glaciers, Butterworth‐Heinemann, Oxford, U.K.
[Farinotti_etal_2009]Farinotti, D., Huss, M., Bauder, A., Funk, M., & Truffer, M. (2009). A method to estimate the ice volume and ice-thickness distribution of alpine glaciers. Journal of Glaciology, 55 (191), 422–430.
[HussFarinotti_2012]Huss, M., & Farinotti, D. (2012). Distributed ice thickness and volume of all glaciers around the globe. Journal of Geophysical Research: Earth Surface, 117(4), F04010.
[Rasmussen_etal_2011]Rasmussen, L. A., Conway, H., Krimmel, R. M., & Hock, R. (2011). Surface mass balance, thinning and iceberg production, Columbia Glacier, Alaska, 1948-2007. Journal of Glaciology, 57(203), 431–440.

API reference

Here we will add the documentation for selected modules.

Entity tasks

define_glacier_region Very first task: define the glacier’s grid.
glacier_masks Converts the glacier vector geometries to grids.
compute_centerlines Compute the centerlines following Kienholz et al., (2014).
compute_downstream_lines Compute the lines continuing the glacier (one per divide).
catchment_area Compute the catchment areas of each tributary line.
initialize_flowlines Transforms the geometrical Centerlines in the more “physical” InversionFlowlines.
catchment_width_geom Compute geometrical catchment widths for each point of the flowlines.
catchment_width_correction Corrects for NaNs and inconsistencies in the geometrical widths.
mu_candidates Computes the mu candidates.
prepare_for_inversion Prepares the data needed for the inversion.
volume_inversion Computes the inversion the glacier.
distribute_thickness Compute a thickness map of the glacier using the nearest centerlines.
init_present_time_glacier First task after inversion.
find_inital_glacier Search for the glacier in year y0

Global tasks

distribute_climate_data Reads the climate data and distributes to each glacier.
compute_ref_t_stars Detects the best t* for the reference glaciers.
distribute_t_stars After the computation of the reference tstars, apply the interpolation to each individual glacier.
optimize_inversion_params Optimizes fs and fd based on GlaThiDa thicknesses.

Classes

GlacierDirectory Organizes read and write access to the glacier’s files.

Mass-balance

Mass-balance models in the oggm.core.models.massbalance module

TstarMassBalanceModel Constant mass balance: equilibrium MB at period t*.
BackwardsMassBalanceModel Constant mass balance: MB for [1983, 2003] with temperature bias.
TodayMassBalanceModel Constant mass-balance: MB during the last 30 yrs.
HistalpMassBalanceModel Mass balance during the HISTALP period.

Get in touch

  • To ask questions or discuss OGGM, send us an e-mail.
  • Report bugs, share your ideas or view the source code on GitHub.

License

OGGM is available under the open source GNU GPLv3 license.

About

Status:

Experimental - in development

License:

GNU GPLv3

Authors:

Fabien Maussion, Alexander H. Jarosch, Felix Oesterle, Timo Rothenpieler, Ben Marzeion

See whats-new for a list of all contributors.

Funding:

Austrian Research Foundation FWF, Projects P22443-N21 and P25362-N26

http://acinn.uibk.ac.at/sites/all/themes/imgi/images/acinn_logo.png http://www.uni-bremen.de/fileadmin/images/logo-uni-bremen-EXZELLENT.png