Installation#
Horizontal regridding needs xESMF (conda)#
Horizontal regridding (regrid_horizontal and the full regrid wrapper) needs
xESMF, whose ESMF/esmpy backend has no PyPI wheels
and must come from conda-forge. ci/environment-regrid.yml creates the environment
and installs xhycom into it in one step:
git clone https://github.com/nansencenter/xhycom.git
cd xhycom
conda env create -f ci/environment-regrid.yml
conda activate hycom-analysis-env
From GitHub#
If you don’t need horizontal regridding:
pip install git+https://github.com/nansencenter/xhycom.git
This includes lazy / Dask-backed loading and vertical regridding (regrid_vertical
and depth interpolation), both dask and xgcm are core, pip-installable
dependencies.
On Olivia / Betzy (NRIS)#
We can use a dedicated conda environment for HYCOM analysis with xhycom. The repo
ships the recipe in ci/environment-regrid.yml (xESMF/ESMF, xgcm, Dask, JupyterLab,
and xhycom), named hycom-analysis-env. Olivia and Betzy build and activate this
environment differently: Betzy uses conda directly; Olivia uses
HPC-container-wrapper,
which builds the environment inside a container instead.
Build the environment (once)#
Betzy
Betzy only provides Miniforge3. First redirect the package cache and environments to
project space, since ${HOME} quota is limited, this is one-time setup, saved to
~/.condarc:
module load Miniforge3/24.1.2-0
source ${EBROOTMINIFORGE3}/bin/activate
conda config --append pkgs_dirs /cluster/projects/nn2993k/conda/${USER}/package-cache
conda config --append envs_dirs /cluster/projects/nn2993k/conda/${USER}
Then create the environment from the clone, this also pip installs xhycom itself
(in editable mode, from the clone) as part of ci/environment-regrid.yml:
cd ${HOME}/xhycom # your xhycom clone (holds ci/environment-regrid.yml)
conda env create -f ci/environment-regrid.yml
conda activate hycom-analysis-env
The envs_dirs redirect means the named environment lands in project space
automatically, no -p prefix needed.
Olivia
Load the container wrapper (session-only, no need to add these to ~/.bashrc):
export http_proxy=http://10.63.2.48:3128/
export https_proxy=http://10.63.2.48:3128/
module load NRIS/CPU
module load hpc-container-wrapper
Build the environment as a container in project space, from the clone, this also
pip installs xhycom itself (in editable mode, from the clone) as part of
ci/environment-regrid.yml:
cd ${HOME}/xhycom # your xhycom clone (holds ci/environment-regrid.yml)
conda-containerize new --mamba \
--prefix /cluster/projects/nn2993k/conda/${USER}/hycom-analysis-env \
ci/environment-regrid.yml
Keep --prefix’s directory around permanently, it holds the container and
executables. Since the containerised environment can’t be modified in place, rebuild
with the same command (after removing the old prefix) if ci/environment-regrid.yml
changes.
Start JupyterLab via Open OnDemand#
For interactive work, including running the example notebooks, start a JupyterLab session through Open OnDemand:
Click JupyterLab, and paste the appropriate snippet below into the app’s
Environment setup field before launching, this runs before the Jupyter server
starts and makes the hycom-analysis-env environment (python, jupyter, xhycom)
the one the session runs against, reusing the same cached regrid weights across
sessions.
Betzy
Load the module system first, then activate the environment by name:
module load Miniforge3/24.1.2-0
source ${EBROOTMINIFORGE3}/bin/activate
conda activate hycom-analysis-env
export XHYCOM_CACHE_DIR="/cluster/projects/nn2993k/${USER}/.xhycom-cache-dir"
Olivia
The containerised environment is activated by prepending its bin/ to PATH (no
conda activate needed):
export PATH="/cluster/projects/nn2993k/conda/${USER}/hycom-analysis-env/bin:${PATH}"
export XHYCOM_CACHE_DIR="/cluster/projects/nn2993k/${USER}/.xhycom-cache-dir"
For an editable / development install and how to run the test suite, see the Contributor Guide.
Cache directory for regrid weights#
Horizontal regridding builds an xESMF weight matrix that maps the source grid onto the target grid. Generating it is the slow part of a regrid, and it depends only on the grids, not on the field values, so xhycom caches it to disk and reuses it on later calls (see Regridding).
By default the cache lives under $XDG_CACHE_HOME/xhycom/regrid_weights
(i.e. ~/.cache/xhycom/regrid_weights). Set the XHYCOM_CACHE_DIR environment
variable to put it somewhere else; weight files and the manifest are then written
directly into that directory. Point it at shared project or scratch space so
the same weights are reused across jobs and by collaborators:
export XHYCOM_CACHE_DIR="/cluster/projects/nn2993k/${USER}/.xhycom-cache-dir"
A leading . keeps it out of the way of a plain ls alongside your other project-space
directories, same as ~/.cache.
Always add that export to your ~/.bashrc, even if you also put it in the Open
OnDemand Environment setup field (see
On Olivia / Betzy (NRIS)) or a batch job script.
Dependencies#
Required#
Package |
Purpose |
|---|---|
|
Array operations and binary I/O |
|
Dataset construction |
|
Calendar-aware datetime objects |
|
Lazy / out-of-core loading via the |
|
Vertical regridding ( |
xhycom bundles its own HYCOM binary reader, pip installs everything needed for reading, lazy loading, and vertical regridding.
Optional#
Package |
Purpose |
|---|---|
|
Horizontal regridding ( |