Short documentation on the Vortex toolbox

Introduction

NB “vortex” refers to the vortex-nwp Python library (often refered to as “vortex-2”)

The full vortex documentation is available here : https://vortex-nwp.readthedocs.io/en/latest/index.html. A Meteo-France/CNRM-specific documentation is also available here : https://cnrm-gmap.gitlab.meteo.fr/vortex-cnrm-docs/. Vortex relies heavily on the “footprints” package : http://intra.cnrm.meteo.fr/algopy/sphinx/vortex/current/technical/footprints_fr.html

Note

The source code is available on git.meteo.fr : https://git.meteo.fr/cnrm-gmap/vortex

The main benefit of the use of vortex in the snowtools package is to standardise data management for snowpack simulation workflows.

Vortex offers features that allow users to store and share simulation I/Os transparently and optimally by uniformly fetching and writing data to and from an archive. It also provides high-level tools for executing sequential and parallel programs with minimal user implementation.

Installing and configuring Vortex

Installing snowtools automatically installs Vortex. Please follow the snowtools installation documentation to ensure a valid installation of Vortex and associated tools. For an independent installation, follow the Vortex documentation.

The vortex data tree

Introduction

The vortex data tree refers to the tree structure used by vortex to store data. Vortex data tree documentation : https://vortex-nwp.readthedocs.io/en/latest/user-guide/data-layout.html The following sections provides a sumary of this more comprehensive documentation and focuses on the main differences between the standard vortex data tree and the CEN-specific data tree.

The application (vapp) and configuration (vconf) levels

The complementary notions of application and configuration are central in vortex. An application, identified by the vapp footprint (type string), is an arbitrary name describing the first level of the vortex data tree. It encompasses all data produced for a specific purpose. A configuration, identified by the vconf footprint (type string) is an arbitrary name describing the second level of the vortex data tree. It corresponds to a specific declination (set of scientific and technical choices) of an application.

The experiment identifier (xpid) level

The experiment footprint (type string), commonly refered to as xpid, is an arbitrary user-defined tag for identifying all simulations associated to a given experiment. The xpid is the third level of the vortex data tree.

Warning

4-digit xpid are saved for operational and OLIVE experiments, so never use 4-digits xpid values.

Note

If you inadvertently used a 4-digit xpid, you will get get an error, with this kind of mysterious log message:

# [2026/04/30-21:34:10][footprints.collectors][find_best:0383][INFO]: no.1 in.5 is <class ‘vortex_olive.data.providers.Olive’> no.1 in.5 is <class ‘vortex_olive.data.providers.Olive’> # [2026/04/30-21:34:10][footprints.collectors][find_best:0383][INFO]: no.2 in.5 is <class ‘vortex.data.providers.Vortex’> no.2 in.5 is <class ‘vortex.data.providers.Vortex’> … … ftplib.error_perm: 553 Directory does not exist

# [2026/04/30-19:37:03][vortex.layout.dataflow][_fatal_wrap:0248][ERROR]: Resource ??? Resource ??? # [2026/04/30-19:37:03][vortex.layout.dataflow][_fatal_wrap:0250][CRITICAL]: Fatal error with action get on ??? Fatal error with action get on ???

Notions of datebegin / dateend vs date / term

Snowpack simulations generally cover long time periods (typically entire years) in a single “run”, and input / output files also cover the entire time period. These periods are identified by the datebegin and dateend footprints (type “Date” or “YYYYMMDDHH” string or list of the previous types [1]). This is a major difference with the NWP-driven vortex data tree, which rather uses the notions of date (a model run time) and term (a model lead time).

Consequently, the date footprint, which is central in vortex and constitutes the fourth level of the vortex data tree, is optional for all objects defined in the vortex-cen plugin.

The namebuild footprint (type string, see section The namebuild footprint) allows to switch from a date / term data tree to a datebegin / dateend data tree. In the later case, the datebegin and dateend information appears at the file level (see The file level)

Note

At CEN, the date footprint is only used for data deriving from a real-time / operational usage (when the simulation period depends on the date of the run).

Footnotes

The (optional) member level

In case of an ensemble simulation, the ensemble members are identifies by the optional member footprint (type int, list or ‘start-end-step’ format string). If provided, this information constitutes the next level of the data tree, with a “mbXXXX” format (“mbXXX” with a standard vortex name builder).

The block level

The block footprint (type string) is an arbitrary name typically used to group data files that are produced by the same unit task.

The block corresponds to the latest level of a vortex data tree.

Note

The block footprint can be used to define several data tree levels if it contains the “/” character.

The file level

The file level (the file name) contains several information coming from the footprints of the resource itself.

The resource’s kind

The prefix of the file name is the resource kind footprint (type string) or any alias deriving from it.

The resource’s geometry

The second level of the file name is derived from the geometry footprint (string or list of str type), which is a tag identifying a geometry object describing a given discretisation of space. Standard NWP geometries are referenced in the vortex_nwp package, and additional “CEN”-specific geometries are references in the vortex-cen plugin.

Any “new” geometry not included in these standard geometries must be provided in a geometries.ini file stored under $HOME/.vortexrc. The geometry footprint is the geometry block/entry name. For example, geometry=’GrandesRousses250m’ identifies the following geometry :

[GrandesRousses250m]
info       = 250 m lat/lon regular grid
kind       = lonlat
area       = GrandesRousses

The minimum information to provide for the description of a geometry is the geometry kind (“ustructured” for massif-like geometries or “lonlat” for 2D simulations).

Note

This geometry information in the file name is a major difference with the naming convention used at CEN before the migration to vortex-2: The geometry used to appear at the vconf level and not in the filename.

The resource’s datebegin and dateend

At CEN, file names contain the period covered by the resource as defined by the datebegin and dateend footprints (see section Notions of datebegin / dateend vs date / term).

The resource’s model

The model footprints is an arbitrary name used to indicate the name of the model who produced the data (the last one in case of a model chain [2]).

Note

The model footprint should not be confused with the (optional) source_app and source_conf footprints

NB The proper use of the model, source_app and source_conf footprints at CEN remains to be clarified.

Footnotes

The resource’s format

Finaly, the suffix of the file name is defined by the format footprint (type string).

Additional footprints

The local or filename footprint

The local (or its alias filename) footprint (type string) is the name of the target file in the user’s working directory.

Note

In case the target resource is stored in a sub-directory of the current workdir, the value to provide to the local footprint should be the relative path to the file : local = ‘subdir/MyFile.txt’

The namebuild footprint

The namebuild footprint (type string) defines the name-builder object to be used. Setting the namebuild footprint to ‘cen’ removes the date level of the data tree.

The namespace footprint

The namespace footprint (type string) defines the server(s) where the resources will be fetched or stored. The most common values of the namespace footprint at CEN are: * ‘vortex.cache.fr’ : local server only * ‘vortex.archive.fr’ : Archive server only (Hendrix) * ‘vortex.multi.fr’ : local server and archive (default value)

The username footprint

To access files from another user, simply set the username footprint (type string) to this user’s login name. If no username is given (or it set to None), then your own username is used.

Note

The username footprint is useless in the case of a toolbox.output(…)

The role footprint

The role footprint (type string) can be used to access a specific loaded Resource Handler from anywhere in the subsequent code (even outside the method / class where the Resource Handler has been defined). In particular, the role value is used to identify alternative resources fulfilling the same function (see The alternate footprint).

Example

You can access the resource handler of FORCING files retrieved by an earlier call to a vortex.input(role=’Forcing,…) with the following command:

avail_forcings = t.context.sequence.effective_inputs(role=’Forcing’)

The source_app / source_conf footprints

The optional source_app / source_conf footprints (type string) can be used to extend the file name in the vortex data tree with additional information on the application and configuration that originally produced the resource.

The genv, gvar, source and domain footprints

The genv, gvar, source and domain footprints are used to describe a static (time independent) resource stored in a User Environment (independent from the vortex data tree): * the genv footprint (type string, mandatory) is the name of the UEnv (or GEnv) * the gvar footprint (type string, mandatory) is the key of the target resource in the UEnv / GEnv * the domain footprint (type string, optional) is an optional information on the geographical domain of the target resource. The default value is the area of the associated geometry object.

The fatal footprint

The fatal footprint (type bool) defines the behavior in case of failure of a vortex.input/output request (crash if fatal = True, continue if fatal = False).

The intent footprint

The intent footprint (type string) allows to set the rights to give the target file in the working directory: * intent = ‘in’ for a read-only file * intent = ‘inout’ for a read-write file

The alternate footprint

The alternate footprint (type string) is mostly used in real-time application as an alternative / rescue input when the primary input is missing. The value of the alternate footprint in the description of the alternative / rescue input must match exactly the value of the role footprint in the description of the primary input.

The cutoff footprint

The cutoff footprint (type string) is a (confusing) NWP-derived term to distinguish data coming from an analysis (cutoff = “assimilation”, data from past potentially benefiting from the assimilation of observations) or a forecast (cutoff = “production”). The cutoff footprint is optional for the “cen” namebuilder, but is mandatory for the standard vortex namebuilder (it appears as a letter at the date level, with a format yyyymmddThhmm[AP]).

Get data archived with vortex at CEN

As mentioned in the introduction, Vortex provides simulation IOs manipulation tools. Getting data archived with Vortex requires to provide a valid footprint description of the target file(s). Vortex provides the vtx command line to fetch (and) store data to/from the vortex data tree from a description writen in a YAML configuration file : https://vortex-nwp.readthedocs.io/en/latest/user-guide/cli.html

An example of such a yaml configuration file to extract a specific file from the S2M reanalysis is provided : vortex_cen/conf/S2MReanalysis.yaml

Extracting this data can simply be done with :

vtx get S2MReanalysis.yaml

However, the use of the vtx tool to extract the entire S2M dataset is not straightforward due to the annual data storage convention.

More broadly, using data extractors means that the fetched files are duplicated from the vortex data tree into the user’s working directory and become “wild” files. This results in the loss of the benefits to use vortex in the first place. In addition, the duplication of potentialy large dataset can lead to very sub-optimal data management.

Most snow-related simulation IOs are NetCDF files opened with xarray and its extensions provided by the snowtools package (see Xarray with snowtools for more information). Among those extensions, a open_vortex_data wrapper is provided to fetch files from the vortex data tree and read them with xarray in a single python command.

The typical use of this wrapper would be to write the vortex/footprint description of the target data in a configuration file. For example:

And call the open_vortex_data with the absolute or relative path to this configuration file to the “configfile” keyword argument.

from snowtools.utils.xarray_snowtools import open_vortex_data

with open_vortex_data(configfile='description.ini') as ds:
    print(ds)
    # `ds` is an xarray.Dataset containing the target data
    # Do any data manipulation here :
    # * apply native xarray methods to `ds`
    # * apply xarray_snowtools_accessor methods to `ds`
    # * code block
    # * call external functions with ds as argument
    # ...

This workflow enables all file transfer and opening operations to be completed discreetly in the background, allowing you to focus on the data itself.

Vortex glossary

footprints The manipulation of vortex objects relies heavily on the “footprints” python package. This package is designed to identify objects (python classes) from a keyword description (a python dictionary, the “footprint” of the target object) instead of a direct python import of the target class.

Resources refer to vortex objects encompassing the information related to a given type of file (see The file level). Flow resources refer to all time-dependent resources (for example “FORCING” or “PRO” files). Static resources refer to time-indepent resources (for example Namelists, Executables, Digital Elevation Models,…)

Providers refer to vortex objects encompassing the information on the location of a given resource in the vortex world.

Containers refer to vortex objects encompassing the information on the location of a given file in the user’s working directory.

Resource Handlers consist of an association of a provider, a resource and a container. They establish a bridge between the vortex and the user worlds.

algo components refer to the classes outlying the core algorithm to produce a given set of output files from a given set of input files.