WDMApp on Rhea at OLCF

Setting up Spack

Spack is a generic package manager for HPC. We rely on it in the following to install WDMapp and its components. Setting up Spack is a one-time process on a given machine – if you already have a working Spack install, you should be able to use it. However, in practice there are plenty of ways that things can wrong, so we provide tested Spack setups for a selection of machines. Following our instructions makes sure that WDMapp is built with compatible compilers and machine-specific system packages (e.g., MPI, CUDA, etc.).

Installing Spack

Follow the instructions from the Spack Documentation.

$ git clone -b v0.15.4 https://github.com/spack/spack.git


v0.15.4 is the latest spack stable version on 2020-10-20; newer versions will likely work but have not been tested. Using the default ‘develop’ branch is not recommended, as it does break sometimes and introduces a lot of package version churn if you try to track it.

Enable shell support for Spack.

# For bash/zsh users
$ export SPACK_ROOT=/path/to/spack
$ . $SPACK_ROOT/share/spack/setup-env.sh

# For tcsh or csh users (note you must set SPACK_ROOT)
$ setenv SPACK_ROOT /path/to/spack
$ source $SPACK_ROOT/share/spack/setup-env.csh

Cloning the WDMapp package repo

Just clone the repository from github to the same machine that you just set up Spack on.

$ git clone git@github.com:wdmapp/wdmapp-config.git

Rhea-Specific Setup

Rhea and Summit share a common home directory. If you use Spack on both machines, this leads to issues because both instances will share their config files, which by default go into `~/.spack/linux. If you only want to use just one or the other machine, you can ignore the following note.


One way to deal with keeping separate spack setups on Rhea and Summit is to make separate ~/.spack/linux-rhea and ~/spack/linux-summit directories and symlink one or the other to ~/.spack/linux

$ # make sure ~/.spack/linux does exit yet -- if it does, move it  out of the way
$ mkdir -p ~/.spack/linux-rhea
$ mkdir -p ~/.spack/linux-summit
$ ln -snf ~/.spack/linux-rhea ~/.spack/linux # if on rhea
$ ln -snf ~/.spack/linux-summit ~/.spack/linux # if on summit

An alternative is to have two separate spack installs, and instead of keeping the config files in ~/.spack, they can be put into $SPACK_ROOT/etc/spack, so with two different roots they can be kept separate. You can then do this in your .bashrc:

if [ `uname -m` == "ppc64le" ]; then
  export SPACK_ROOT=$HOME/spack-summit
  export SPACK_ROOT=$HOME/spack-rhea
source $SPACK_ROOT/share/spack/setup-env.sh

Spack commands that edit configuration files such as spack compiler add can be called spack compiler add --scope site to update files living in $SPACK_ROOT/etc/spack.

Employing our provided Spack configuration


The folllowing will overwrite an existing Spack configuration, so be careful if you’ve previously set up Spack. If you have an existing config, consider renaming ~./spack to back it up.

Just copy the provided YAML configuration files to where Spack expects them:

$ mkdir -p ~/.spack/linux
$ cp path/to/wdmapp-config/rhea/spack/*.yaml ~/.spack/linux

On Rhea an olcf repo is also needed to make it possible to use system-installed packages from our Spack. This repo is provided by the wdmapp-config you cloned earlier:

$ spack repo add path/to/wdmapp-config/rhea/spack/olcf
==> Added repo with namespace 'olcf'


Consider also configuring spack to use gpfs scratch space (i.e. $MEMBERWORK) as an alternative when building packages, in addition to the default tmpfs and home filesystem (which can have problems with high workload tasks):

$ mkdir -p /gpfs/alpine/scratch/$USER/<project-id>/spack-stage

and add the following to ~/.spack/config.yaml ($SPACK_ROOT/etc/spack/config.yaml). Spack tries each entry in order for precedence:

    - $tempdir/$user/spack-stage
    - /gpfs/alpine/scratch/$USER/<project-id>/spack-stage
    - ~/.spack/stage

Adding the WDMapp package repo to Spack

This will let Spack search the WDMapp repository for packages that aren’t found in its builtin package repository.

$ spack repo add path/to/wdmapp-config/spack/wdmapp
==> Added repo with namespace 'wdmapp'.


To update the wdmapp package repository to the latest, just run git pull in the directory where you cloned wdmapp-config/.


The E4S project has created a build cache for Rhea. This provides many packages as precompiled binaries, so will reduce the installation time. To use it:

$ wget https://oaciss.uoregon.edu/e4s/e4s.pub
$ spack gpg trust e4s.pub
$ spack mirror add E4S https://cache.e4s.io

Building WDMapp

You should be able to just follow the generic instructions from Building WDMAPP.

Using E4S WDMapp docker container

Alternatively, the E4S project has created a docker image that mirrors the Rhea environment, which can be used for local development and debugging. To run this image, you need to have docker installed and then do the following:

$ docker pull ecpe4s/ubi7.7_x86_64_base_wdm:1.0
$ docker run —rm -it ecpe4s/ubi7.7_x86_64_base_wdm:1.0

In order for the image to get the access controlled components, you need to provide it with your private SSH key that provides access to the respective private github repos. In the image, do the following in the docker image:

# cat > .ssh/id_rsa # Then copy&paste your private key
# chmod 600 .ssh/id_rsa

This provides an development environment with everything but the private codes preinstalled. All that’s needed to complete building and installing them is:

# spack install wdmapp target=x86_64

Running the Cyclone Test Case

Enable shell support for Spack:

# For bash/zsh users
$ export SPACK_ROOT=/path/to/spack
$ . $SPACK_ROOT/share/spack/setup-env.sh

# For tcsh or csh users (note you must set SPACK_ROOT)
$ setenv SPACK_ROOT /path/to/spack
$ source $SPACK_ROOT/share/spack/setup-env.csh

Load the wdmapp modules:

$ spack load wdmapp arch=linux-rhel7-sandybridge
$ spack load effis +compose arch=linux-rhel7-sandybridge

Clone the testcases repo:

$ git clone git@github.com:wdmapp/testcases.git
$ cd testcases/run_1/rhea

See the Workflow Composition in EFFIS page for help editing the workflow composition file. As quick pointers, make sure to edit the path to the run directory (/path/to/testDir below) called rundir, the binaries labeled executable_path, and the project, charge, in run_1.yaml (or run_externalCpl.yaml if wdmapp+passthrough was built in Building WDMAPP).

Since we loaded the wdmapp module via Spack the binaries are in your PATH and their location can be retrieved with the which xgc-es gene cpl command.

Run the effis pre-processor:

$ effis-compose.py run_1.yaml

Submit the job:

$ effis-submit /path/to/testDir

Running the Cyclone Test Case - External Coupler

The cyclone test case can be executed with the external coupler (wdmapp+passthrough built in Building WDMAPP by following the instructions for Running the Cyclone Test Case using run_externalCpl.yaml instead of run_1.yaml.