Installing Dependencies
In order to run SeisSol, you need to first install:
Python (>= 3.5)
Numpy (>= 1.12.0)
hdf5 (>= 1.8, for instructions see below)
netcdf (C-Release) (>= 4.4, for instructions see below)
Intel compiler (>= 2021, icc, icpc, ifort) or GCC (>= 9.0, gcc, g++, gfortran)
Some MPI implementation (e.g. OpenMPI)
libxsmm (libxsmm_gemm_generator) for small matrix multiplications
PSpaMM (pspamm.py) for small sparse matrix multiplications (required only on Knights Landing or Skylake)
CMake (>= 3.20) for the compilation of SeisSol
For run-time partitioning you need to choose one of the following libraries:
ParMETIS (with IDXTYPEWIDTH=64)
SCOTCH
ParHIP
The partitioning of SeisSol meshes with ParMETIS was tested in large simulations and is generally recommended for academic users. SCOTCH and ParHIP are free and open-source alternatives to ParMETIS and should be used by users from industry or for-profit institutions (cf. ParMETIS license). A study comparing partition quality for SeisSol meshes can be found here.
In addition, the following packages need to be installed for the GPU version of SeisSol:
CUDA (>= 11.0) for Nvidia GPUs, or HIP (ROCm>= 5.2.0) for AMD GPUs
SYCL: either hipSYCL >= 0.9.3 or DPC++
gemmforge (>= 0.0.207)
chainforge (>= 0.0.3, for Nvidia and AMD GPUs)
These dependencies can be installed automatically with spack or can be installed manually one by one.
Spack installation
Spack is a HPC software package manager. It automates the process of installing, upgrading, configuring, and removing computer programs. In particular, our spack package seissol-env allows automatically installing all dependencies of SeisSol (e.g. mpi, hdf5, netcdf, easi, asagi, etc). See https://github.com/SeisSol/seissol-spack-aid/tree/main/spack for details on the installation with spack. See also for reference our documentation on how to compile seissol-env on SuperMUC-NG, Shaheen (Cray system) and Frontera.
Manual installation
Initial Adjustments to .bashrc
Add the following lines to your .bashrc (vi ~/.bashrc).
# For intel compiler
# source /opt/intel/compiler/VERSION/bin/compilervars.sh intel64
export PATH=$HOME/bin:$PATH
export LIBRARY_PATH=$HOME/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$HOME/lib/pkgconfig:$PKG_CONFIG_PATH
export CMAKE_PREFIX_PATH=$HOME
export EDITOR=vi
export CPATH=$HOME/include:$CPATH
# run "exec bash" or "source ~/.bashrc" to apply environment to the current shell
Installing CMake
# you will need at least version 3.20.0 for GNU Compiler Collection
(cd $(mktemp -d) && wget -qO- https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-Linux-x86_64.tar.gz | tar -xvz -C "." && mv "./cmake-3.20.0-linux-x86_64" "${HOME}/bin/cmake")
# use version 3.16.2 for Intel Compiler Collection
(cd $(mktemp -d) && wget -qO- https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2-Linux-x86_64.tar.gz | tar -xvz -C "." && mv "./cmake-3.16.2-Linux-x86_64" "${HOME}/bin/cmake")
ln -s ${HOME}/bin/cmake/bin/cmake ${HOME}/bin
Note that this extracts CMake to the directory ${HOME}/bin/cmake, if you wish you can adjust that path.
Installing HDF5
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.8/src/hdf5-1.10.8.tar.bz2
tar -xaf hdf5-1.10.8.tar.bz2
cd hdf5-1.10.8
CPPFLAGS="-fPIC ${CPPFLAGS}" CC=mpicc FC=mpif90 ./configure --enable-parallel --prefix=$HOME --with-zlib --disable-shared --enable-fortran
make -j8
make install
cd ..
Installing netCDF
wget https://syncandshare.lrz.de/dl/fiJNAokgbe2vNU66Ru17DAjT/netcdf-4.6.1.tar.gz
tar -xaf netcdf-4.6.1.tar.gz
cd netcdf-4.6.1
CFLAGS="-fPIC ${CFLAGS}" CC=h5pcc ./configure --enable-shared=no --prefix=$HOME --disable-dap
#NOTE: Check for this line to make sure netCDF is built with parallel I/O:
#"checking whether parallel I/O features are to be included... yes" This line comes at the very end (last 50 lines of configure run)!
make -j8
make install
cd ..
Installing Eigen3
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz
tar -xf eigen-3.4.0.tar.gz
cd eigen-3.4.0
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=~
make install
cd ../..
Installing Libxsmm
git clone --branch 1.17 https://github.com/hfp/libxsmm
cd libxsmm
make generator
cp bin/libxsmm_gemm_generator $HOME/bin
cd ..
Installing PSpaMM
You may install PSpaMM as a Python package.
pip3 install --user git+https://github.com/SeisSol/PSpaMM.git
Installing ParMetis
wget https://ftp.mcs.anl.gov/pub/pdetools/spack-pkgs/parmetis-4.0.3.tar.gz
tar -xvf parmetis-4.0.3.tar.gz
cd parmetis-4.0.3
#edit ./metis/include/metis.h IDXTYPEWIDTH to be 64 (default is 32).
make config cc=mpicc cxx=mpiCC prefix=$HOME
make install
cp build/Linux-x86_64/libmetis/libmetis.a $HOME/lib
cp metis/include/metis.h $HOME/include
cd ..
(Make sure $HOME/include contains metis.h and $HOME/lib contains libmetis.a. Otherwise, compile error: cannot find parmetis.)
Installing ASAGI (Optional)
See section Installing ASAGI.
Installing easi
Follow the installation instructions.
Installing GemmForge, ChainForge (for GPUs)
pip3 install --user git+https://github.com/SeisSol/gemmforge.git
pip3 install --user git+https://github.com/SeisSol/chainforge.git
Installing SYCL (for GPUs)
See section Installing SYCL.