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