External Libraries

Cleo depends upon Kokkos and YAC and may depend upon some additional external libraries such as yaml-cpp or CVODE depending on your setup.

YAC

YAC is required if Cleo couples to dynamics using YAC and/or uses MPI domain decompoisiton. You can find more information about it from its documentation.

To build Cleo with dependency on YAC, you will first need to install YAXT and YAC manually. (YAXT is a dependency of YAC.)

How to Install YAC (and YAXT)

To help install YAXT and YAC, we have created bash scripts for installation on DKRZ’s Levante HPC or on a generic/arbitrary, so-called “vanilla”, computer in scripts/levante/bash/ and scripts/vanilla/bash/ respectively. First you need to ensure your python version has pip installed first, e.g. with uv via

$ uv run python -m ensurepip --upgrade

Then to use install_yac.sh you will need to provide the path to the directory where you want to put the installations, as well as the compiler type (e.g. intel or gcc), and the python interpreter you want to use for YAC’s python bindings.

E.g. On Levante

for intel:

$ mkdir -p /work/mh0731/m300950/yacyaxt/intel/
$ scripts/levante/bash/install_yac.sh /work/mh0731/m300950/yacyaxt/intel/ intel /home/m/m300950/CLEO/.venv/bin/python3

for gcc:

$ mkdir -p /work/mh0731/m300950/yacyaxt/gcc/
$ scripts/levante/bash/install_yac.sh /work/mh0731/m300950/yacyaxt/gcc/ gcc /home/m/m300950/CLEO/.venv/bin/python3

E.g. On “vanilla” computer

(With a gcc compiler:) First you may need to edit the paths to certain packages in scripts/vanilla/bash/vanilla_packages.sh to match your system setup. You may also need to install YAC/YAXT’s dependencies, as described in YAC’s documentation Then you should be able to run:

$ scripts/vanilla/bash/install_yac.sh ${CLEO_YACYAXTROOT} gcc ${CLEO_PYTHON}

Alternatively you can download YAXT and YAC as compressed files and then configure and compile them yourself.

Kokkos

All builds of Cleo require Kokkos in order to implement thread parallelism. You can read more about how we use Kokkos on our page about Kokkos.

The Kokkos libaries for Cleo are automatically built using CMAKE and compiled if required.

yaml-cpp

Cleo’s configuration library depends on the `yaml-cpp` package to read and write YAML files. You can find more information about it from the yaml-cpp repository:.

The yaml-cpp library for Cleo is automatically built using CMAKE and compiled if required.

CVODE

Cleo’s coupldyn_cvode library requires the SUNDIALS CVODE package. You can find more information about it from its webpage:.

The CVODE libraries for Cleo are automatically built using CMAKE and compiled if required.

pybind11

Cleo’s cleo_python_bindings library requires pybind11 to create python binding for selected parts of Cleo’s libraries. You can find more information about it from the pybind11 repository:.

Using python bindings with python version >= 3.14

CLEO’s python bindings may not work with python versions higher than 3.13.*. One way to ensure you have a reasonable version of python for the bindings is to change the python requirement to requires-python=">=3.13,<3.14" in the cleopy pyproject.toml and then update your python environment, e.g. with uv sync --extra examples --extra yac

The pybind11 library for Cleo is automatically built using CMAKE and compiled if required. Note: you can avoid making Cleo’s python bindings, and thereby avoid the pybind11 dependency on your build, by passing a non-empty “CLEO_NO_PYBINDINGS” flag to cmake. E.g. cmake [...] -DCLEO_NO_PYBINDINGS=true