====== LISFLOOD-FP ======
> SEAMLESS-WAVE is a developing “SoftwarE infrAstructure for Multi-purpose fLood modElling at variouS scaleS” based on "WAVElets" and their versatile properties. The vision behind SEAMLESS-WAVE is to produce an intelligent and holistic modelling framework, which can drastically reduce iterations in building and testing for an optimal model setting, and in controlling the propagation of model-error due to scaling effects and of uncertainty due statistical inputs.
* For more information about LISFLOOD-FP: https://www.seamlesswave.com/LISFLOOD8.0
===== Running LISFLOOD-FP on Comet =====
The LISFLOOD-FP software is stored within a dedicated container in the ''/nobackup/shared/containers'' directory and is accessible to __all__ users of Comet. You do //not// need to take a copy of the container file; it should be left in its original location.
You can find the container files here:
* ''/nobackup/shared/containers/lisflood.2026.07.sif''
We //normally// recommend using the latest (date) version of the container unless you have a specific need for an earlier version of software.
**Container Image Versions**
We //may// reference a specific container file, such as **lisflood.2026.07.sif**, but you should always check whether this is the most recent version of the container available. Simply ''ls'' the ''/nobackup/shared/containers'' directory and you will be able to see if there are any newer versions listed.
We have provided a convenience script that will automate **all** of steps needed to run applications inside the container, and access your ''$HOME'', ''/scratch'' and ''/nobackup'' directories to just two simple commands.
* ''/nobackup/shared/containers/lisflood.2026.07.sh''
There is a corresponding ''.sh'' script for //each version// of the container image we make available.
Just ''source'' this file and it will take care of loading ''apptainer'', setting up your ''bind'' directories and calling the ''exec'' command for you - and give you a single command called ''container.run'' (instead of the really long //apptainer exec// command) to then //run// anything you want inside the container, for example - to run ''lisflood'':
$ source /nobackup/shared/containers/lisflood.2026.07.sh
$ container.run lisflood
***************************
LISFLOOD-FP version 8.1.0 (double)
Rectangular channels only.
_CALCULATE_Q_MODE 1.
***************************
no parameter file specified
$
You can continue to use the ''container.run'' command //as many times as you need// in the same script or same bash session.
We **strongly** recommend that you use this helper script and the ''container.run'' command to run software from inside the container as it will always ensure that you have correctly set up the ''bind'' directories for you and you are using the correct container version.
----
===== Accessing data =====
As long as you use the ''container.run'' method to launch the applications, you will automatically be able to read and write to files in your ''$HOME'', ''/scratch'' and ''/nobackup'' directories.
If you run any of the applications inside the container manually, without using the ''container.run'' helper you will need to use the ''--bind'' argument to ''apptainer'' to ensure that all relevant directories are exposed within the container.
Do remember that the container filesystem itself cannot be changed - so you won't be able to write or update to ''/usr/local'', ''/opt'', ''/etc'' or any other internal folders - keep output directories restricted to the three areas listed above.
----
===== Sample Slurm script =====
Here is a very simple example of calling LISFLOOD-FP from the container within a Slurm batch job that assumes you are a member of the **comet_abc123** HPC project group, and your LISFLOOD-FP parameter file is stored in your ''/nobackup/proj/comet_abc123'' directory:
#!/bin/bash
#SBATCH --partition=gpu-s_free
#SBATCH --account=comet_abc123
#SBATCH --gres=gpu:L40:1
#SBATCH -c 16
#SBATCH --mem=32G
source /nobackup/shared/containers/lisflood.2026.07.sh
container.run lisflood /nobackup/proj/comet_abc123/intput_data_parameter_file
Submit as normal with ''sbatch lisfloodjob.sh''.
Note that we run on the **GPU-S_free** partition and allocate a single **Nvidia L40S** card alongside **16 CPU** cores and **32GB of RAM**. You //may// need to adjust these values based on the reccomendations of the LISFLOOD-FP documentation.
----
===== Building LISFLOOD-FP for Comet =====
**Important!**
This section is only relevant for RSE HPC staff or those who want to understand how the LISFLOOD-FP container runtime has been built. If you are only interested in running the software, stop reading here!
**Container definition file:**
Bootstrap: docker
From: ubuntu:noble
%post
# Prevent interactive prompts
export DEBIAN_FRONTEND=noninteractive
# Update & install only necessary packages
apt-get update
# Base stuff everything will need
apt-get install -y aptitude wget zip git less vim
apt-get install -y \
build-essential \
cmake \
libnuma-dev \
libnetcdf-dev \
nvidia-cuda-dev \
libcudart12 \
gcc-14 \
g++-14
# Remove any downloaded package files - so they dont remain in the built image
apt-get clean
##############################################
# This flag needs to be set to indicate which CPU architecture we
# are optimising for.
AMD_ARCH=1
if [ "$AMD_ARCH" = "1" ]
then
# Compiling on AMD Epyc
export BASE_CFLAGS="-O3 -march=znver5 -pipe"
export BASE_CFLAGS_ALT="-O3 -march=native -pipe"
export MAKE_JOBS=8
else
# Compiling on generic system
export BASE_CFLAGS="-O"
export BASE_CFLAGS_ALT="-O"
export MAKE_JOBS=8
fi
export CPPFLAGS=""
export CFLAGS="$BASE_CFLAGS"
export CFLAGS_ALT="$BASE_CFLAGS_ALT"
export CXXFLAGS="$CFLAGS"
export CC=gcc-14
export CXX=g++-14
export FC=gfortran-14
mkdir -p /src
# Download lisflood source
cd /src
wget https://zenodo.org/records/13121102/files/LISFLOOD-FP-v8.2.zip?download=1 -O lisflood.zip
unzip lisflood.zip
cd LISFLOOD-FP
# Configure and compile
cmake -S . -B build
cmake --build build
# Copy binary to /usr/local/bin
cp -v build/lisflood /usr/local/bin
# Remove source tree
rm -rf /src
%environment
%runscript
**Container build script:**
#!/bin/bash
IMAGE_DATE=`date +%Y.%m`
echo "Loading modules..."
module load apptainer
echo ""
echo "Building container..."
export APPTAINER_TMPDIR=/scratch
echo ""
echo "Container will have date suffix $IMAGE_DATE"
echo ""
echo "Starting build of container ..."
apptainer build \
--bind $SOURCE_DIR:/mnt \
lisflood.$IMAGE_DATE.sif lisflood.def 2>&1 | tee lisflood.log
**Container runtime helper script:**
#!/bin/bash
module load apptainer
IMAGE_NAME=/nobackup/shared/containers/listflood.sif
container.run() {
# Run a command inside the container...
# automatically bind the /scratch and /nobackup dirs
# pass through any additional parameters given on the command line
apptainer exec --nv --bind /run/user/$UID:/run/user/$UID --bind /scratch:/scratch --bind /nobackup:/nobackup ${IMAGE_NAME} $@
}
----
[[:advanced:software|Back to software]]