Skip to content

Commit 310a720

Browse files
authored
Support GNU+ParaStationMPI toolchain (#99)
* Created env file for GNU+ParStationMPI toolchain * Made `--parflow` and `--parflowgpu` mutually exclusive
1 parent c7782e8 commit 310a720

File tree

2 files changed

+85
-6
lines changed

2 files changed

+85
-6
lines changed

build_tsmp2.sh

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ function help_tsmp2() {
1717
echo " --version Print $0 scipt version"
1818
echo " --ICON Compile with ICON"
1919
echo " --eCLM Compile with eCLM"
20-
echo " --ParFlow Compile with ParFlow"
21-
echo " --ParFlowGPU Compile with ParFlow-GPU"
20+
echo " --ParFlow Compile with ParFlow (CPU mode)"
21+
echo " --ParFlowGPU Compile with ParFlow (GPU mode)"
2222
echo " --PDAF Compile with PDAF"
2323
echo " --COSMO Compile with COSMO"
2424
echo " --CLM35 Compile with CLM3.5"
@@ -106,8 +106,8 @@ while [[ "$#" -gt 0 ]]; do
106106
--version) echo "$0 version 0.1.0"; exit 0;;
107107
--icon) icon=y;;
108108
--eclm) eclm=y;;
109-
--parflow) parflow=y parflowGPU=n;;
110-
--parflowgpu) parflow=y parflowGPU=y;;
109+
--parflow) parflow=y; parflowCPU=y; parflowCMakeModelID="ParFlow" ;;
110+
--parflowgpu) parflow=y; parflowGPU=y; parflowCMakeModelID="ParFlowGPU" ;;
111111
--pdaf) pdaf=y;;
112112
--cosmo) cosmo=y;;
113113
--clm35) clm35=y;;
@@ -141,8 +141,7 @@ message "Setting model-id and component string..."
141141
# fun set_component shell_name cmake_name
142142
set_component icon "ICON"
143143
set_component eclm "eCLM"
144-
set_component parflow "ParFlow"
145-
set_component parflowGPU "ParFlowGPU" #TODO: check if only one ParFlow option is enabled (either --parflow or --parflowgpu)
144+
set_component parflow $parflowCMakeModelID
146145
set_component cosmo "COSMO"
147146
set_component clm35 "CLM3.5"
148147
set_component pdaf "PDAF"
@@ -154,6 +153,11 @@ elif [ $model_count -ge 2 ];then
154153
oasis=y
155154
fi
156155

156+
if [[ "${parflowCPU}" == "y" && "${parflowGPU}" == "y" ]];then
157+
echo "ABORT: Building --parflow and --parflowgpu at the same time is not supported."
158+
exit 1
159+
fi
160+
157161
## CONCATENATE SOURCE CODE STRING
158162
message "Setting component source dir..."
159163
cmake_compsrc_str=""

env/jsc.2025.gnu.psmpi

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# --------------------------------------------------------------------------
2+
# Loads GNU+ParaStationMPI build environment for TSMP2.
3+
# This environment is tailored for JURECA [1] and JUWELS [2] supercomputers.
4+
#
5+
# [1] https://apps.fz-juelich.de/jsc/software/jureca/index.xhtml
6+
# [2] https://apps.fz-juelich.de/jsc/software/juwels/index.xhtml
7+
#
8+
# Usage: source jsc.2025.gnu.psmpi
9+
# --------------------------------------------------------------------------
10+
11+
# Load Stages/2025
12+
module --force purge
13+
module use $OTHERSTAGES
14+
module load Stages/2025
15+
16+
# Primary compiler toolchain
17+
module load GCC
18+
module load ParaStationMPI
19+
20+
# Basic scripting and build tools
21+
module load Python
22+
module load CMake
23+
module load git
24+
25+
# Storage libraries
26+
module load HDF5
27+
module load netCDF
28+
module load netCDF-Fortran
29+
module load PnetCDF
30+
31+
# ParFlow additional libraries
32+
if [[ "$1" == "--parflowgpu" ]]; then
33+
module load CUDA
34+
module load UCX-settings/RC-CUDA
35+
module load Hypre/2.31.0
36+
37+
# TODO: Verify these values
38+
if [[ $SYSTEMNAME == "jedi" || $SYSTEMNAME == "jupiter" ]]; then
39+
export CUDAARCHS="90"
40+
else
41+
export CUDAARCHS="80"
42+
fi
43+
export CMAKE_CUDA_RUNTIME_LIBRARY="Shared"
44+
else
45+
module load Hypre/2.31.0-cpu
46+
fi
47+
module load Tcl
48+
49+
# ICON additional libraries
50+
module load ecCodes
51+
52+
# Set default MPI compilers
53+
export OMPI_CC=gcc
54+
export OMPI_CXX=g++
55+
export OMPI_FC=gfortran
56+
export CC=mpicc
57+
export FC=mpif90
58+
export CXX=mpicxx
59+
export MPI_HOME=$EBROOTPSMPI
60+
61+
# Display compiler settings
62+
module list
63+
echo "=============== COMPILER SETTINGS ==============="
64+
echo " Machine: ${SYSTEMNAME} on Stages/$STAGE"
65+
echo " MPI lib: $(mpichversion | head -n 1 | tr -d =)"
66+
echo " C: $($CC --version | head -n 1)"
67+
echo " C++: $($CXX --version | head -n 1)"
68+
echo " Fortran: $($FC --version | head -n 1)"
69+
if [[ "$1" == "--parflowgpu" ]]; then
70+
echo " nvcc: $(nvcc --version | tail -n 1 | cut -d" " -f2)"
71+
echo " CUDAARCHS: $CUDAARCHS"
72+
fi
73+
echo "=================================================="
74+
echo ""
75+

0 commit comments

Comments
 (0)