RGI version 7 in OGGM#
As of v1.6.3, OGGM supports a complete modelling workflow with RGI version 7. The outlines can be used to create glacier directories, and we have prepared pre-processed directories for both the “glacier” and “glacier-complex” products. To do so, we had to make a few simplifications and assumptions because RGI7 currently lacks two necessary external products: reference ice thickness and geodetic mass balance estimates.
Therefore, the following methodology was used to overcome these limitations:
we calibrated OGGM using the regional mass-balance estimates from Hugonnet et al., (2021), assuming the regional average is constant for all glaciers in a region (as done in Zekollari et al., 2024). This is a relatively strong assumption.
For the ice volume, we applied regional GlenA values obtained by calibrating OGGM with RGI6 to the Farinotti et al., (2017) estimates. As a result, any volume differences between RGI6 and RGI7 arise solely from updated glacier outlines, not data or methods changes.
Finally (less critical, but useful), we aggregated the RGI7G results to the glacier-complex level and re-ran the inversion on RGI7C, tuning it to match the RGI7G totals. This allows us to produce ice-thickness maps at the glacier complex scale without artefacts.
The resulting glacier directories can be accessed as shown below.
# Libs
import matplotlib.pyplot as plt
import xarray as xr
# Locals
import oggm.cfg as cfg
from oggm import utils, workflow, graphics
RGI7G: “Glacier” product#
# Initialize OGGM and set up the default run parameters
cfg.initialize(logging_level='WARNING') # print less log messages than the default
# Local working directory (where OGGM will write its output)
cfg.PATHS['working_dir'] = utils.gettempdir('OGGM_rgi7_run', reset=True)
# Aletsch
rgi_ids = ['RGI2000-v7.0-G-11-02596']
# Go - get the pre-processed glacier directories
# You have to explicitly indicate the url from where you want to start from
base_url = 'https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/L3-L5_files/2025.6/elev_bands/W5E5/regional_spinup/'
gdirs = workflow.init_glacier_directories(rgi_ids, from_prepro_level=3, prepro_base_url=base_url,
prepro_rgi_version='70G', prepro_border=10)
gdir = gdirs[0]
2026-11-06 12:38:29: oggm.cfg: Reading default parameters from the OGGM `params.cfg` configuration file.
2026-11-06 12:38:29: oggm.cfg: Multiprocessing switched OFF according to the parameter file.
2026-11-06 12:38:29: oggm.cfg: Multiprocessing: using all available processors (N=4)
2026-11-06 12:38:30: oggm.workflow: init_glacier_directories from prepro level 3 on 1 glaciers.
2026-11-06 12:38:30: oggm.workflow: Execute entity tasks [gdir_from_prepro] on 1 glaciers
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[2], line 13
9
10 # Go - get the pre-processed glacier directories
11 # You have to explicitly indicate the url from where you want to start from
12 base_url = 'https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/L3-L5_files/2025.6/elev_bands/W5E5/regional_spinup/'
---> 13 gdirs = workflow.init_glacier_directories(rgi_ids, from_prepro_level=3, prepro_base_url=base_url,
14 prepro_rgi_version='70G', prepro_border=10)
15 gdir = gdirs[0]
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:428, in init_glacier_directories(rgidf, reset, force, from_prepro_level, prepro_border, prepro_rgi_version, prepro_base_url, from_tar, delete_tar)
424 if from_prepro_level is not None:
425 log.workflow('init_glacier_directories from prepro level {} on '
426 '{} glaciers.'.format(from_prepro_level,
427 len(entities)))
--> 428 gdirs = execute_entity_task(gdir_from_prepro, entities,
429 from_prepro_level=from_prepro_level,
430 prepro_border=prepro_border,
431 prepro_rgi_version=prepro_rgi_version,
432 base_url=prepro_base_url)
433 else:
434 # We can set the intersects file automatically here
435 if (cfg.PARAMS['use_intersects'] and
436 len(cfg.PARAMS['intersects_gdf']) == 0 and
437 not from_tar):
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:192, in execute_entity_task(task, gdirs, **kwargs)
188 if ng > 3:
189 log.workflow('WARNING: you are trying to run an entity task on '
190 '%d glaciers with multiprocessing turned off. OGGM '
191 'will run faster with multiprocessing turned on.', ng)
--> 192 out = [pc(gdir) for gdir in gdirs]
194 return out
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:109, in _pickle_copier.__call__(self, arg)
107 for func in self.call_func:
108 func, kwargs = func
--> 109 res = self._call_internal(func, arg, kwargs)
110 return res
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:103, in _pickle_copier._call_internal(self, call_func, gdir, kwargs)
100 gdir, gdir_kwargs = gdir
101 kwargs.update(gdir_kwargs)
--> 103 return call_func(gdir, **kwargs)
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:253, in gdir_from_prepro(entity, from_prepro_level, prepro_border, prepro_rgi_version, base_url)
250 else:
251 rid = entity
--> 253 tar_base = utils.get_prepro_gdir(prepro_rgi_version, rid, prepro_border,
254 from_prepro_level, base_url=base_url)
255 from_tar = os.path.join(tar_base.replace('.tar', ''), rid + '.tar.gz')
256 return oggm.GlacierDirectory(entity, from_tar=from_tar)
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/utils/_downloads.py:1122, in get_prepro_gdir(rgi_version, rgi_id, border, prepro_level, base_url)
1120 def get_prepro_gdir(rgi_version, rgi_id, border, prepro_level, base_url=None):
1121 with get_lock():
-> 1122 return _get_prepro_gdir_unlocked(rgi_version, rgi_id, border,
1123 prepro_level, base_url=base_url)
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/utils/_downloads.py:1163, in _get_prepro_gdir_unlocked(rgi_version, rgi_id, border, prepro_level, base_url)
1161 tar_base = file_downloader(url)
1162 if tar_base is None:
-> 1163 raise RuntimeError('Could not find file at ' + url)
1165 return tar_base
RuntimeError: Could not find file at https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/L3-L5_files/2025.6/elev_bands/W5E5/regional_spinup/RGI70G/b_010/L3/RGI2000-v7.0-G-11/RGI2000-v7.0-G-11-02.tar
graphics.plot_domain(gdir)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[3], line 1
----> 1 graphics.plot_domain(gdir)
NameError: name 'gdir' is not defined
RGI7C: “Glacier complex” product#
# Aletsch complex
rgi_ids = ['RGI2000-v7.0-C-11-01323']
# Go - get the pre-processed glacier directories
# You have to explicitly indicate the url from where you want to start from
base_url = 'https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/L3-L5_files/2025.6/elev_bands/W5E5/regional_spinup/'
gdirs = workflow.init_glacier_directories(rgi_ids, from_prepro_level=3, prepro_base_url=base_url,
prepro_rgi_version='70C', prepro_border=10)
gdir = gdirs[0]
2026-11-06 12:38:31: oggm.workflow: init_glacier_directories from prepro level 3 on 1 glaciers.
2026-11-06 12:38:31: oggm.workflow: Execute entity tasks [gdir_from_prepro] on 1 glaciers
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[4], line 7
3
4 # Go - get the pre-processed glacier directories
5 # You have to explicitly indicate the url from where you want to start from
6 base_url = 'https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/L3-L5_files/2025.6/elev_bands/W5E5/regional_spinup/'
----> 7 gdirs = workflow.init_glacier_directories(rgi_ids, from_prepro_level=3, prepro_base_url=base_url,
8 prepro_rgi_version='70C', prepro_border=10)
9 gdir = gdirs[0]
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:428, in init_glacier_directories(rgidf, reset, force, from_prepro_level, prepro_border, prepro_rgi_version, prepro_base_url, from_tar, delete_tar)
424 if from_prepro_level is not None:
425 log.workflow('init_glacier_directories from prepro level {} on '
426 '{} glaciers.'.format(from_prepro_level,
427 len(entities)))
--> 428 gdirs = execute_entity_task(gdir_from_prepro, entities,
429 from_prepro_level=from_prepro_level,
430 prepro_border=prepro_border,
431 prepro_rgi_version=prepro_rgi_version,
432 base_url=prepro_base_url)
433 else:
434 # We can set the intersects file automatically here
435 if (cfg.PARAMS['use_intersects'] and
436 len(cfg.PARAMS['intersects_gdf']) == 0 and
437 not from_tar):
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:192, in execute_entity_task(task, gdirs, **kwargs)
188 if ng > 3:
189 log.workflow('WARNING: you are trying to run an entity task on '
190 '%d glaciers with multiprocessing turned off. OGGM '
191 'will run faster with multiprocessing turned on.', ng)
--> 192 out = [pc(gdir) for gdir in gdirs]
194 return out
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:109, in _pickle_copier.__call__(self, arg)
107 for func in self.call_func:
108 func, kwargs = func
--> 109 res = self._call_internal(func, arg, kwargs)
110 return res
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:103, in _pickle_copier._call_internal(self, call_func, gdir, kwargs)
100 gdir, gdir_kwargs = gdir
101 kwargs.update(gdir_kwargs)
--> 103 return call_func(gdir, **kwargs)
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/workflow.py:253, in gdir_from_prepro(entity, from_prepro_level, prepro_border, prepro_rgi_version, base_url)
250 else:
251 rid = entity
--> 253 tar_base = utils.get_prepro_gdir(prepro_rgi_version, rid, prepro_border,
254 from_prepro_level, base_url=base_url)
255 from_tar = os.path.join(tar_base.replace('.tar', ''), rid + '.tar.gz')
256 return oggm.GlacierDirectory(entity, from_tar=from_tar)
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/utils/_downloads.py:1122, in get_prepro_gdir(rgi_version, rgi_id, border, prepro_level, base_url)
1120 def get_prepro_gdir(rgi_version, rgi_id, border, prepro_level, base_url=None):
1121 with get_lock():
-> 1122 return _get_prepro_gdir_unlocked(rgi_version, rgi_id, border,
1123 prepro_level, base_url=base_url)
File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/oggm/utils/_downloads.py:1163, in _get_prepro_gdir_unlocked(rgi_version, rgi_id, border, prepro_level, base_url)
1161 tar_base = file_downloader(url)
1162 if tar_base is None:
-> 1163 raise RuntimeError('Could not find file at ' + url)
1165 return tar_base
RuntimeError: Could not find file at https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/L3-L5_files/2025.6/elev_bands/W5E5/regional_spinup/RGI70C/b_010/L3/RGI2000-v7.0-C-11/RGI2000-v7.0-C-11-01.tar
graphics.plot_domain(gdir)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 1
----> 1 graphics.plot_domain(gdir)
NameError: name 'gdir' is not defined