Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,11 @@ RUN git clone --recursive --depth 1 --single-branch --branch v1.3.0 https://gith
&& cd SeisSol \
&& mkdir build_hsw && cd build_hsw \
&& export PATH=$PATH:/home/tools/bin \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_PREFIX_PATH=/home/tools -DGEMM_TOOLS_LIST=LIBXSMM -DHOST_ARCH=hsw -DASAGI=on -DNETCDF=on -DORDER=4 -DDR_QUAD_RULE_OPTIONS=dunavant \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_PREFIX_PATH=/home/tools -DGEMM_TOOLS_LIST=LIBXSMM -DHOST_ARCH=hsw -DNEW_BINARY_NAMING=ON -DASAGI=on -DNETCDF=on -DORDER=4 -DDR_QUAD_RULE_OPTIONS=dunavant \
&& make -j$(nproc) \
&& cmake .. -DEQUATIONS=viscoelastic2 -DNUMBER_OF_MECHANISMS=3 \
&& make -j$(nproc) \
&& cp SeisSol_* /home/tools/bin
&& cp seissol-* /home/tools/bin

RUN cd SeisSol/preprocessing/science/rconv \
&& mkdir build && cd build \
Expand Down
210 changes: 131 additions & 79 deletions Dockerfile_jupyterlab
Original file line number Diff line number Diff line change
@@ -1,158 +1,208 @@
FROM ghcr.io/seisscoped/container-base:ubuntu22.04_jupyterlab
# ==========================================
# STAGE 0: Build Environment (Ubuntu 26.04 LTS)
# ==========================================
FROM ubuntu:26.04 AS builder

RUN apt-get update \
&& apt-get install -y \
ENV DEBIAN_FRONTEND=noninteractive

# Installs compilation tools (heavyweight workspace)
RUN apt-get update && apt-get install -y --no-install-recommends \
bzip2 \
ca-certificates \
cmake \
g++ \
gcc \
gfortran \
libgomp1 \
git \
make \
libnuma-dev \
libnuma1 \
libocct-data-exchange-7.5 \
libocct-data-exchange-dev \
libocct-foundation-7.5 \
libocct-foundation-dev \
libocct-modeling-algorithms-7.5 \
libocct-modeling-algorithms-dev \
libocct-modeling-data-7.5 \
libocct-modeling-data-dev \
libopenblas-base \
libopenblas-dev \
libopenmpi-dev \
libreadline-dev \
libtbb2 \
libtbb-dev \
libyaml-cpp-dev \
libmpich-dev \
mpich \
m4 \
openmpi-bin \
pkg-config \
zlib1g \
python3 \
python3-pip \
python3-setuptools \
wget \
zlib1g-dev \
&& docker-clean
&& rm -rf /var/lib/apt/lists/*

RUN mkdir -p /home/tools
RUN mkdir -p /home/tools/bin /home/tools/lib /home/tools/include

WORKDIR /tmp

ENV PATH="/home/tools/bin:${PATH}"

ARG TARGETARCH

RUN wget --progress=bar:force:noscroll https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.2/src/hdf5-1.12.2.tar.bz2 \
&& tar -xvf hdf5-1.12.2.tar.bz2 \
&& cd hdf5-1.12.2 \
&& CFLAGS="-fPIC" CC=mpicc FC="mpif90 --std=f95" ./configure --enable-parallel --with-zlib --disable-shared --prefix /home/tools \
ENV PATH="/home/tools/bin:${PATH:-}"
ENV LD_LIBRARY_PATH="/home/tools/lib:${LD_LIBRARY_PATH:-}"

Check warning on line 38 in Dockerfile_jupyterlab

View workflow job for this annotation

GitHub Actions / build

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/
ENV PKG_CONFIG_PATH="/home/tools/lib/pkgconfig:${PKG_CONFIG_PATH:-}"

Check warning on line 39 in Dockerfile_jupyterlab

View workflow job for this annotation

GitHub Actions / build

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$PKG_CONFIG_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/
ENV CMAKE_PREFIX_PATH="/home/tools:${CMAKE_PREFIX_PATH:-}"

Check warning on line 40 in Dockerfile_jupyterlab

View workflow job for this annotation

GitHub Actions / build

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$CMAKE_PREFIX_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/
ENV CPATH="/home/tools/include:${CPATH:-}"

Check warning on line 41 in Dockerfile_jupyterlab

View workflow job for this annotation

GitHub Actions / build

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$CPATH' (did you mean $PATH?) More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/

# 1. Compile HDF5
RUN wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.3/src/hdf5-1.12.3.tar.bz2 \
&& tar -xvf hdf5-1.12.3.tar.bz2 \
&& cd hdf5-1.12.3 \
&& CFLAGS="-fPIC -Wno-error=format-security" CPPFLAGS="-fPIC" CC=mpicc CXX=mpicxx ./configure \
--enable-parallel \
--prefix=/home/tools \
--with-zlib \
--disable-shared \
--disable-dependency-tracking \
&& make -j$(nproc) && make install

# 2. Build libxsmm (Compiled ONLY on amd64 hosts, cleanly skipped on ARM)
ARG TARGETARCH
RUN if [ "$TARGETARCH" = "amd64" ]; then \
git clone --depth=1 --single-branch --branch 1.17 https://github.com/libxsmm/libxsmm \
&& cd libxsmm \
&& make -j$(nproc) generator \
&& cp bin/libxsmm_gemm_generator /home/tools/bin/; \
else \
echo "Skipping libxsmm compilation: target architecture is ARM64 (Apple Silicon). Matrix acceleration will fall back cleanly to PSPaMM."; \
fi

# 3. Build NetCDF
RUN wget --progress=bar:force:noscroll https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz \
&& tar -xvf netcdf-c-4.9.2.tar.gz \
&& cd netcdf-c-4.9.2 \
&& CFLAGS="-fPIC" CC=h5pcc ./configure --enable-shared=no --prefix=/home/tools --disable-dap --disable-byterange \
&& CFLAGS="-fPIC" CC=h5pcc ./configure \
--enable-shared=no \
--prefix=/home/tools \
--disable-dap \
--disable-byterange \
--disable-libxml2 \
&& make -j$(nproc) && make install

# 4. Build ParMETIS
RUN wget --progress=bar:force:noscroll https://deb.debian.org/debian/pool/non-free/p/parmetis/parmetis_4.0.3.orig.tar.gz \
&& tar -xvf parmetis_4.0.3.orig.tar.gz \
&& cd parmetis-4.0.3 \
&& sed -i 's/IDXTYPEWIDTH 32/IDXTYPEWIDTH 64/g' ./metis/include/metis.h \
&& CC=mpicc CXX=mpicxx make config prefix=/home/tools \
# Modernize the obsolete CMake version requirement across all internal trees
&& sed -i 's/cmake_minimum_required(VERSION 2.8)/cmake_minimum_required(VERSION 3.5)/g' CMakeLists.txt \
&& sed -i 's/cmake_minimum_required(VERSION 2.8)/cmake_minimum_required(VERSION 3.5)/g' metis/CMakeLists.txt \
# Force the policy bypass engine into the configuration line
&& CC=mpicc CXX=mpicxx make config prefix=/home/tools flags="-DCMAKE_POLICY_VERSION_MINIMUM=3.5" \
&& make -j$(nproc) && make install \
&& if [ "$TARGETARCH" == "arm64" ]; \
then cp build/Linux-aarch64/libmetis/libmetis.a /home/tools/lib; \
else cp build/Linux-x86_64/libmetis/libmetis.a /home/tools/lib; fi \
# Use architecture-independent wildcards to handle both x86_64 and aarch64 output trees cleanly
&& cp build/Linux-*/libmetis/libmetis.a /home/tools/lib \
&& cp metis/include/metis.h /home/tools/include

# 5. Build Lua
RUN wget --progress=bar:force:noscroll https://www.lua.org/ftp/lua-5.3.6.tar.gz \
&& tar -xzvf lua-5.3.6.tar.gz \
&& cd lua-5.3.6 && make linux CC=mpicc && make local \
&& cp -r install/* /home/tools && cd ..

# 6. Build Eigen
RUN wget --progress=bar:force:noscroll 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=/home/tools \
&& make -j$(nproc) install

# 7. Build PROJ
RUN git clone --depth 1 --single-branch --branch 4.9.3 https://github.com/OSGeo/PROJ.git \
&& cd PROJ \
# 1. Modernize the root CMake requirements
&& sed -i 's/cmake_minimum_required(VERSION 2.8.11)/cmake_minimum_required(VERSION 3.5)/g' CMakeLists.txt \
# 2. Patch the obsolete link policy to use current standards instead of OLD
&& sed -i 's/cmake_policy(SET CMP0022 OLD)/cmake_policy(SET CMP0022 NEW)/g' cmake/policies.cmake \
&& mkdir build && cd build \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_INSTALL_PREFIX=/home/tools \
&& CC=mpicc CXX=mpicxx cmake .. \
-DCMAKE_INSTALL_PREFIX=/home/tools \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
&& make -j$(nproc) && make install

### Put all dependencies, which point to a specific version, before this comment
### Put all dependencies, which use the latest version, after this comment to reduce build time

# 8. Build ASAGI
RUN git clone --recursive https://github.com/TUM-I5/ASAGI.git \
&& cd ASAGI \
&& mkdir build && cd build \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_INSTALL_PREFIX=/home/tools -DSHARED_LIB=off -DSTATIC_LIB=on -DNONUMA=on \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_INSTALL_PREFIX=/home/tools -DCMAKE_PREFIX_PATH=/home/tools -DSHARED_LIB=off -DSTATIC_LIB=on -DNONUMA=on \
&& make -j$(nproc) && make install

# 9. Build easi
RUN git clone https://github.com/SeisSol/easi \
&& cd easi \
&& mkdir build && cd build \
&& CC=mpicc CXX=mpicxx cmake .. -DEASICUBE=OFF -DLUA=ON -DCMAKE_PREFIX_PATH=/home/tools -DCMAKE_INSTALL_PREFIX=/home/tools -DASAGI=ON -DIMPALAJIT=OFF .. \
&& CC=mpicc CXX=mpicxx cmake .. -DEASICUBE=OFF -DLUA=ON -DCMAKE_PREFIX_PATH=/home/tools -DCMAKE_INSTALL_PREFIX=/home/tools -DASAGI=ON -DIMPALAJIT=OFF \
&& make -j$(nproc) && make install

RUN pip install numpy && pip install git+https://github.com/SeisSol/PSpaMM.git && docker-clean

#RUN git clone --depth 1 --single-branch --branch main https://github.com/libxsmm/libxsmm.git \
# && cd libxsmm \
# && make PLATFORM=1 JIT=1 AR=aarch64-linux-gnu-ar \
# FC=aarch64-linux-gnu-gfortran \
# CXX=aarch64-linux-gnu-g++ \
# CC=aarch64-linux-gnu-gcc \
# -j$(nproc) generator \
# && cp bin/libxsmm_gemm_generator /home/tools/bin
# Install PSpaMM via pip3 securely using system bypass flags
RUN pip3 install --no-cache-dir --break-system-packages numpy \
&& pip3 install --no-cache-dir --break-system-packages git+https://github.com/SeisSol/PSpaMM.git

RUN git clone --recursive --depth 1 --single-branch --branch v1.3.0 https://github.com/SeisSol/SeisSol.git \
# 10. Build SeisSol (Adaptive Multi-Architecture Evaluator)
ARG TARGETARCH
RUN git clone --recursive --depth 1 https://github.com/SeisSol/SeisSol.git \
&& cd SeisSol \
&& mkdir build_hsw && cd build_hsw \
&& export PATH=$PATH:/home/tools/bin \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_PREFIX_PATH=/home/tools -DGEMM_TOOLS_LIST=PSpaMM -DHOST_ARCH=noarch -DASAGI=on -DNETCDF=on -DORDER=4 \
&& mkdir build_workspace && cd build_workspace \
&& if [ "$TARGETARCH" = "arm64" ]; then \
GEMM_TOOLS="PSpaMM"; \
HOST_ARCH="neon"; \
else \
GEMM_TOOLS=auto; \
HOST_ARCH="hsw"; \
fi \
&& PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 CC=mpicc CXX=mpicxx cmake .. \
-DCMAKE_PREFIX_PATH=/home/tools \
-DCMAKE_LIBRARY_PATH=/home/tools/lib \
-DCMAKE_INCLUDE_PATH=/home/tools/include \
-DGEMM_TOOLS_LIST="$GEMM_TOOLS" \
-DHOST_ARCH="$HOST_ARCH" \
-DNEW_BINARY_NAMING=ON \
-DASAGI=on -DNETCDF=on -DORDER=4 -DDR_QUAD_RULE_OPTIONS=dunavant \
&& make -j$(nproc) \
&& cmake .. -DEQUATIONS=viscoelastic2 -DNUMBER_OF_MECHANISMS=3 \
&& make -j$(nproc) \
&& cp SeisSol_* /home/tools/bin
&& cp seissol-* /home/tools/bin

# 11. Build rconv
RUN cd SeisSol/preprocessing/science/rconv \
&& mkdir build && cd build \
&& echo "find_package(HDF5 REQUIRED COMPONENTS C HL)" >> ../CMakeLists.txt \
&& echo "target_link_libraries(SeisSol-rconv PUBLIC \${HDF5_C_HL_LIBRARIES} \${HDF5_C_LIBRARIES})" >> ../CMakeLists.txt \
&& CC=mpicc CXX=mpicxx cmake .. -DCMAKE_INSTALL_PREFIX=/home/tools -DCMAKE_PREFIX_PATH=/home/tools \
&& make -j$(nproc) && cp rconv /home/tools/bin/

# 12. Build PUMGen
RUN git clone --recursive --branch v1.1.0 https://github.com/SeisSol/PUMGen.git \
&& cd PUMGen \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_INSTALL_PREFIX=/home/tools -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Release \
&& cmake .. -DCMAKE_INSTALL_PREFIX=/home/tools -DCMAKE_PREFIX_PATH=/home/tools -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_BUILD_TYPE=Release \
&& make -j$(nproc) && make install

FROM ghcr.io/seisscoped/container-base:ubuntu22.04_jupyterlab

# ==========================================
# STAGE 1: Final Lightweight Runtime Image
# ==========================================
FROM ubuntu:26.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
gmsh \
python3-gmsh \
python-is-python3 \
libgomp1 \
libnuma1 \
libocct-data-exchange-7.5 \
libocct-foundation-7.5 \
libocct-modeling-algorithms-7.5 \
libocct-modeling-data-7.5 \
libopenblas-base \
libtbb2 \
libopenblas-dev \
libopenmpi-dev \
libtbb12 \
libxrender1 \
libyaml-cpp-dev \
libmpich-dev \
mpich \
openmpi-bin \
python3 \
python3-pip \
tini \
xvfb \
zlib1g \
&& docker-clean
&& rm -rf /var/lib/apt/lists/*

WORKDIR /home
COPY --from=0 /home/tools tools
### need to specify --user for gmsh installation, otherwise the tpv13 notebook can't execute !gmsh
RUN conda install \
RUN pip3 install --no-cache-dir --break-system-packages \
panel \
ipyvtklink \
vtk \
Expand All @@ -161,19 +211,21 @@
scipy \
pyproj \
matplotlib \
gmsh \
python-gmsh \
sympy \
pandas \
&& docker-clean
ENV PATH=/home/tools/bin:$PATH
pandas

WORKDIR /home
COPY --from="builder" /home/tools tools

ENV PATH="/home/tools/bin:${PATH:-}"
ENV LD_LIBRARY_PATH="/home/tools/lib:${LD_LIBRARY_PATH:-}"

Check warning on line 221 in Dockerfile_jupyterlab

View workflow job for this annotation

GitHub Actions / build

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/
ENV PYTHONPATH="/home/tools/lib:${PYTHONPATH:-}"

Check warning on line 222 in Dockerfile_jupyterlab

View workflow job for this annotation

GitHub Actions / build

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$PYTHONPATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/

ENV OMP_PLACES="cores"
ENV OMP_PROC_BIND="spread"
ENV PYTHONPATH="${PYTHONPATH}:/home/tools/lib"

COPY entrypoint.sh /entrypoint.sh
RUN cd /home/tools/bin/ \
Copy link
Copy Markdown
Collaborator Author

@davschneller davschneller Jun 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more thing; this line and the two below should be added again—but with dneon instead of dnoarch .

Otherwise, the ARM build will not really run.

(or you switch everything to a better name, e.g. with the new binary naming)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more thing; this line and the two below should be added again—but with dneon instead of dnoarch .

Otherwise, the ARM build will not really run.

(or you switch everything to a better name, e.g. with the new binary naming)

Done. Please let me know if I missed naming somewhere. :)

&& mv SeisSol_Release_dnoarch_4_elastic SeisSol_Release_dhsw_4_elastic \
&& mv SeisSol_Release_dnoarch_4_viscoelastic2 SeisSol_Release_dhsw_4_viscoelastic2
RUN chmod +x /entrypoint.sh

WORKDIR /home/training
COPY tpv13/ tpv13/
Expand Down
13 changes: 5 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,15 @@ The simplest way to access the input files for the Gateway is by running ``git c

Please install [Docker](https://docs.docker.com/engine/install/), launch the Docker Desktop and then run

(i) For Frontera and all Intel/AMD machines:
- use label: latest

(ii) Macs with M1/M2/M3 ARM CPUs:
- use label: hps-2024-remote-arm
```bash
docker pull seissol/training:{label}
docker pull seissol/training
```

## Training

After installation, run
After installation, we recommend assigning at least 8 GB of memory to Docker so all simulations run smoothly. Run
```bash
docker run -p 53155:53155 seissol/training:{label}
docker run --memory=8g -p 53155:53155 seissol/training
```
or run the [start.sh](start.sh) script.

Expand All @@ -56,6 +51,8 @@ The following tools are currently included:
- rconv (tool to describe point and finite source models in SeisSol's NetCDF Rupture Format, https://seissol.readthedocs.io/en/latest/standard-rupture-format.html#how-to-use-rconv)
- SeisSol O4 (pre-compiled SeisSol with 4th order space-time accuracy for elastic and viscoelastic materials, https://seissol.readthedocs.io). We use the SeisSol `v1.0.1`. See the first lines of the SeisSol output to get the exact commit hash.

The SeisSol binaries in the container use new binary naming (e.g., `seissol-cpu-elastic-p4-f64` and `seissol-cpu-viscoelastic-3-p4-f64`).


I.e.
```
Expand Down
4 changes: 2 additions & 2 deletions entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ case "$1" in
exec "$@"
;;
seissol)
set -- SeisSol_Release_dhsw_4_elastic "${@:2}"
set -- seissol-cpu-elastic-p4-f64 "${@:2}"
exec "$@"
;;
seissol_viscoelastic)
set -- SeisSol_Release_dhsw_4_viscoelastic2 "${@:2}"
set -- seissol-cpu-viscoelastic-3-p4-f64 "${@:2}"
exec "$@"
;;
*)
Expand Down
3 changes: 1 addition & 2 deletions frontera.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ mpirun apptainer run ~/my-training.sif pumgen -s msh2 mesh_northridge.msh
apptainer run ~/my-training.sif rconv -i northridge_resampled.srf -o northridge_resampled.nrf -x visualization.xdmf -m "+proj=tmerc +datum=WGS84 +k=0.9996 +lon_0=-118.5150 +lat_0=34.3440 +axis=enu"
OMP_NUM_THREADS=26 mpirun -n 2 apptainer run ~/my-training.sif seissol parameters.par
```
You can change `seissol` to `SeisSol_Release_dhsw_4_viscoelastic2` if you want to account for attenuation (https://seissol.readthedocs.io/en/latest/attenuation.html) instead of assuming a fully elastic rheology.
You can change `seissol` to `seissol-cpu-viscoelastic-3-p4-f64` if you want to account for attenuation (https://seissol.readthedocs.io/en/latest/attenuation.html) instead of assuming a fully elastic rheology.

In Section `Interacting with Frontera from local machine`, we will also show how you may interact with Frontera from your local machine with a Jupyter Lab.

Expand Down Expand Up @@ -94,4 +94,3 @@ You can directly visualize the results on Frontera:
4. In the paraview GUI, open `output/tpv13-fault.xdmf`.



4 changes: 2 additions & 2 deletions kaikoura/Kaikoura.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,9 @@
"metadata": {},
"outputs": [],
"source": [
"!OMP_NUM_THREADS=4 mpirun -n 1 SeisSol_Release_dhsw_4_elastic parametersLSW.par\n",
"!OMP_NUM_THREADS=4 mpirun -n 1 seissol-cpu-elastic-p4-f64 parametersLSW.par\n",
"# on Frontera with apptainer, replace with:\n",
"# !SEISSOL_COMMTHREAD=0 OMP_NUM_THREADS=28 mpirun -n 2 apptainer run {\"~/my-training.sif\"} SeisSol_Release_dhsw_4_elastic parametersLSW.par"
"# !SEISSOL_COMMTHREAD=0 OMP_NUM_THREADS=28 mpirun -n 2 apptainer run {\"~/my-training.sif\"} seissol-cpu-elastic-p4-f64 parametersLSW.par"
]
},
{
Expand Down
Loading
Loading