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 .. code-block:: console $ 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. .. admonition:: E.g. On Levante for intel: .. code-block:: console $ 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: .. code-block:: console $ 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 .. admonition:: 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: .. code-block:: console $ 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 :doc:`our page about Kokkos<../../intro/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: `_. .. _pybind11: .. admonition:: 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``