SuperMUC-NG#

Discovering Precompiled SeisSol Modules#

To discover precompiled SeisSol Spack modules on SuperMUC-NG, follow the procedure below. Update your ~/.bashrc file as follows:

# Load Spack
module purge
module unload stack
module load stack/24.5.0
module unload intel-mpi/2019-intel
module load intel/2025.1.0
module load user_spack/24.5.0 python/3.10.12-extended

# Add the custom SeisSol module path
module use /hppfs/work/pn49ha/di73yeq4/user_spack24.5/SNG1/modules
# To access the easi Python module (this points to a symbolic link towards the folder containing the library)
export PYTHONPATH=/hppfs/work/pn49ha/di73yeq4/user_spack24.5/SNG1/spack_installation/python_wrapper:$PYTHONPATH

After sourcing your ~/.bashrc, you should be able to discover the available SeisSol modules, for example:

module avail seissol

Setting up GitHub on SuperMuc-NG#

see Accessing internet behind a firewall.

Installing Python packages with pip#

The module python/3.10.12-extended does not support installing packages using pip install --user. To install additional Python packages, you should instead create a virtual environment with:

python -m venv ~/venv-stack24.5-3.10

The virtual environment is then activated with (can be added you ~/.bashrc:

source ~/venv-stack24.5-3.10/bin/activate

Running SeisSol#

This is an example job submission script for SeisSol on SuperMUC-NG. For your applications, change #SBATCH --nodes= to the number of nodes you want to run on. A rule of thumb for optimal performance is to distribute your jobs to 1 node per 100k elements. This rule of thumb does not account for potentially shorter queue times, for example when using the test queue or when asking for a large amount of nodes.

#!/bin/bash
# Job Name and Files (also --job-name)
#SBATCH -J <job name>

#Output and error (also --output, --error):
#SBATCH -o ./%j.%x.out
#SBATCH -e ./%j.%x.err

#Initial working directory:
#SBATCH --chdir=<work directory>

#Notification and type
#SBATCH --mail-type=END
#SBATCH --mail-user=<your email address>

#Setup of execution environment
# note that if you report an issue to LRZ, they will prefer --export=NONE
#SBATCH --export=ALL
#SBATCH --account=<project id>
#SBATCH --no-requeue

#Number of nodes and MPI tasks per node:
#SBATCH --partition=general
#SBATCH --nodes=40
#SBATCH --time=03:00:00

#SBATCH --ntasks-per-node=1
#EAR may impact code performance
#SBATCH --ear=off

module load slurm_setup

#Run the program:
export MP_SINGLE_THREAD=no
export OMP_NUM_THREADS=94
export OMP_PLACES="cores(47)"
#Prevents errors such as experience in Issue #691
export I_MPI_SHM_HEAP_VSIZE=32768

export XDMFWRITER_ALIGNMENT=8388608
export XDMFWRITER_BLOCK_SIZE=8388608
export SC_CHECKPOINT_ALIGNMENT=8388608

export SEISSOL_CHECKPOINT_ALIGNMENT=8388608
export SEISSOL_CHECKPOINT_DIRECT=1
export ASYNC_MODE=THREAD
export ASYNC_BUFFER_ALIGNMENT=8388608

echo 'num_nodes:' $SLURM_JOB_NUM_NODES 'ntasks:' $SLURM_NTASKS
ulimit -Ss 2097152
# NOTE: If you load a SeisSol module, `unset KMP_AFFINITY` must come
# after loading the module
unset KMP_AFFINITY

srun SeisSol_Release_sskx_4_elastic parameters.par

Accessing PyPI#

Many post-processing scripts of SeisSol require Python dependencies. We describe how to use pip on SuperMUC at see Accessing internet behind a firewall.

Compiling the seissol Spack package#

To compile the seissol spack package on SuperMUC-NG, follow the procedure below.

Update your ~/.bashrc to:

# load spack
module purge
module unload stack
module load stack/24.5.0
module unload intel-mpi/2019-intel
module load intel/2025.1.0
module load user_spack/24.5.0 python/3.10.12-extended

# Replace by the port defined in your ~/.ssh/config on your local computer
if [ "$HOSTNAME" = "login22" ]; then
  export https_proxy=http://localhost:<your_port_for_NG_phase2>
  export http_proxy=http://localhost:<your_port_for_NG_phase2>
else
  export https_proxy=http://localhost:<your_port_for_NG_phase1>
  export http_proxy=http://localhost:<your_port_for_NG_phase1>
fi

Clone seissol-spack-aid and add the repository (as spack is not fully up to date on supermuc NG).

git clone --branch NG_stack24.5 https://github.com/SeisSol/seissol-spack-aid.git
cd seissol-spack-aid
spack repo add ./spack

Adding Python and a few Python modules to the Spack packages.yaml configuration file significantly reduces the number of dependencies that need to be compiled. The packages.yaml is discovered with spack config edit packages.

packages:
  python:
    buildable: false
    externals:
      - spec: python@3.10.12
        prefix: /lrz/sys/spack/release/sles15.3/24.5.0/views/python/3.10.12-extended/
        modules:
          - python/3.10.12-extended

  py-matplotlib:
    externals:
    - spec: py-matplotlib@3.9.2
      prefix: /lrz/sys/spack/release/sles15.3/24.5.0/views/python/3.10.12-extended/
      buildable: False

  py-scipy:
    externals:
    - spec: py-scipy@1.14.1
      prefix: /lrz/sys/spack/release/sles15.3/24.5.0/views/python/3.10.12-extended/
      buildable: False

  py-numpy:
    externals:
    - spec: py-numpy@2.1.2
      prefix: /lrz/sys/spack/release/sles15.3/24.5.0/views/python/3.10.12-extended/
      buildable: False

tcl modules can be personalized by updating the spack modules.yaml config file. The modules.yaml is discovered with spack config edit modules.

modules:
  default:
    roots:
     tcl: /hppfs/work/pn49ha/di73yeq4/user_spack24.5/SNG1/modules
     exclude_implicits: false
     auto_load: direct
    tcl:
      hash_length: 0   # <<< This removes the hash suffix
      all:
        suffixes:
          domain_dimension=2: d2
          domain_dimension=3: d3
          polynomial_degree=1: p1
          polynomial_degree=2: p2
          polynomial_degree=3: p3
          polynomial_degree=4: p4
          polynomial_degree=5: p5
          polynomial_degree=6: p6
          convergence_order=3: o3
          convergence_order=4: o4
          convergence_order=5: o5
          convergence_order=6: o6
          equations=elastic: elas
          equations=viscoelastic2: visco
          dr_quad_rule=stroud: stroud
          dr_quad_rule=dunavant: dunav
          precision=single: single
          precision=double: double
          cuda: cuda
          debug: debug
      projections:
        '%oneapi@2021.0:2021.9': '{name}/{version}-oneapi21'
        '%oneapi@2023.0:2023.9': '{name}/{version}-oneapi23'
        '%oneapi@2024.0:2024.9': '{name}/{version}-oneapi24'
        '%oneapi@2025.0:2025.9': '{name}/{version}-oneapi25'
        all: '{name}/{version}'
    enable:
    - tcl

Install a specific version of seissol, and enable python binding enabled for easi:

spack install -j 40 seissol@master convergence_order=4 dr_quad_rule=dunavant equations=elastic precision=single %oneapi ^easi +python ^unzip %gcc

Modules can be generated with:

spack module tcl refresh $(spack find -d --format "{name}{/hash:5}" seissol)

These modules can be accessed at start up by running module use.

# change this path to your_custom_path_2_modules if you update ~/.spack/modules.yaml
module use /hppfs/work/pn49ha/di73yeq4/user_spack24.5/SNG1/modules

Custom install directory for packages and modules can be set by changing the config.yaml config file. The config.yaml is discovered with spack config edit config.

config:
  install_tree:
    root: /hppfs/work/pn49ha/di73yeq4/user_spack24.5/SNG1/spack_installation

This can be useful to share packages with other users of a SuperMUC project.