Building WarpX with support for openPMD output

WarpX can dump data in the openPMD format. This feature currently requires to have a parallel version of HDF5 installed ; therefore we recommend to use spack in order to facilitate the installation.

More specifically, we recommend that you try installing the openPMD-api library 0.9.0a or newer using spack (first section below). If this fails, a back-up solution is to install parallel HDF5 with spack, and then install the openPMD-api library from source.

In order to install spack, you can simply do:

git clone https://github.com/spack/spack.git
export SPACK_ROOT=/path/to/spack
. $SPACK_ROOT/share/spack/setup-env.sh

(You may want to add the last 2 lines to your .bashrc file.)

Building openPMD support, by installing openPMD-api directly from spack

First, install the openPMD-api library:

spack install openpmd-api -python +adios1

Then, cd into the WarpX folder, and type:

spack load mpi
spack load openpmd-api
make -j 4 USE_OPENPMD=TRUE

You will also need to load the same spack environment when running WarpX, for instance:

spack load mpi
spack load openpmd-api

mpirun -np 4 ./warpx.exe inputs

Building openPMD support, by installing openPMD-api from source

First, install the openPMD-api library, and load it in your environment:

spack install hdf5
spack install adios
spack load -r hdf5
spack load -r adios

Then, in the warpx_directory, download and build the openPMD API:

git clone https://github.com/openPMD/openPMD-api.git
mkdir openPMD-api-build
cd openPMD-api-build
cmake ../openPMD-api -DopenPMD_USE_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=../openPMD-install/ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON -DCMAKE_INSTALL_RPATH='$ORIGIN'
cmake --build . --target install

Finally, compile WarpX:

cd ../WarpX
export PKG_CONFIG_PATH=$PWD/../openPMD-install/lib/pkgconfig:$PKG_CONFIG_PATH
make -j 4 USE_OPENPMD=TRUE

You will also need to load the same spack environment when running WarpX, for instance:

spack load openmpi
spack load hdf5
spack load adios

mpirun -np 4 ./warpx.exe inputs