First push
This commit is contained in:
357
skyply.def
Normal file
357
skyply.def
Normal file
@@ -0,0 +1,357 @@
|
||||
###########################################################################
|
||||
###########################################################################
|
||||
##
|
||||
## Apptainer Build File: Skyply
|
||||
## Function: Fully-integrated Simulation stack for WRF, CMAQ, & SCICHEM
|
||||
##
|
||||
## Documentation:
|
||||
##
|
||||
###########################################################################
|
||||
###########################################################################
|
||||
|
||||
Bootstrap: docker
|
||||
From: rockylinux:9
|
||||
|
||||
%labels
|
||||
Author HPCStack
|
||||
Version 1.0
|
||||
Description "Rocky 9 base with development tools for WRF/CMAQ"
|
||||
|
||||
%environment
|
||||
############################################################
|
||||
## Compiler Settings
|
||||
############################################################
|
||||
|
||||
# Intel Compiler
|
||||
#export CC=icc
|
||||
#export CXX=icpc
|
||||
#export FC=ifort
|
||||
#export F77=ifort
|
||||
|
||||
# GNU Compiler
|
||||
export CC=gcc
|
||||
export CXX=g++
|
||||
export FC=gfortran
|
||||
export F77=gfortran
|
||||
|
||||
############################################################
|
||||
## General
|
||||
############################################################
|
||||
export HPC_PATH=/opt/hpc
|
||||
export MODEL_PATH=/opt/models
|
||||
|
||||
|
||||
############################################################
|
||||
## OpenMPI Settings
|
||||
############################################################
|
||||
export MPI=/opt/hpc/mpi
|
||||
|
||||
|
||||
############################################################
|
||||
## OpenMP Settings
|
||||
############################################################
|
||||
export OMP_NUM_THREADS=1
|
||||
export OMP_PROC_BIND=spread
|
||||
export OMP_PLACES=cores
|
||||
|
||||
|
||||
############################################################
|
||||
## HDF5 Settings
|
||||
############################################################
|
||||
export HDF5=$HPC_PATH/hdf5
|
||||
export PHDF5=$HDF5
|
||||
|
||||
|
||||
############################################################
|
||||
## NetCDF Settings
|
||||
############################################################
|
||||
export NETCDF_INCDIR
|
||||
export NETCDF_LIBDIR
|
||||
export NETCDF=$HPC_PATH/netcdf
|
||||
export NETCDF=$NETCDF
|
||||
|
||||
|
||||
############################################################
|
||||
## IO/API Settings
|
||||
############################################################
|
||||
export MPI_HOME=$HPC_PATH/mpi
|
||||
export IOAPI=$HPC_PATH/ioapi
|
||||
|
||||
|
||||
############################################################
|
||||
## WRF Settings
|
||||
############################################################
|
||||
export WRF_DIR=$MODEL_PATH/wrf
|
||||
export PATH=$MPI_HOME/bin:$NETCDF/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$MPI_HOME/lib:$HDF5/lib:$NETCDF/lib:$IOAPI/lib:$LD_LIBRARY_PATH
|
||||
|
||||
############################################################
|
||||
## WPS Settings
|
||||
############################################################
|
||||
export WPS_DIR=$MODEL_PATH/wps
|
||||
|
||||
############################################################
|
||||
## CMAQ Settings
|
||||
############################################################
|
||||
export CMAQ_DIR=$MODEL_PATH/cmaq
|
||||
|
||||
|
||||
export JASPERLIB=/usr/lib64
|
||||
export JASPERINC=/usr/include
|
||||
|
||||
|
||||
|
||||
|
||||
%post
|
||||
# Update system and enable CRB repository
|
||||
dnf -y install epel-release
|
||||
dnf config-manager --set-enabled crb
|
||||
dnf -y update
|
||||
|
||||
# Install development packages
|
||||
dnf -y install \
|
||||
gcc gcc-gfortran gcc-c++ \
|
||||
python3 python3-pip \
|
||||
R R-devel \
|
||||
git wget which file time \
|
||||
make cmake automake autoconf libtool \
|
||||
libcurl-devel \
|
||||
tar bzip2 bzip2-devel \
|
||||
perl tcsh csh m4 \
|
||||
jasper jasper-devel \
|
||||
libpng libpng-devel \
|
||||
zlib zlib-devel \
|
||||
libxml2 libxml2-devel \
|
||||
xz xz-devel \
|
||||
zstd \
|
||||
sudo \
|
||||
unzip \
|
||||
diffutils \
|
||||
patch \
|
||||
--allowerasing \
|
||||
&& dnf clean all
|
||||
|
||||
mkdir -p /opt/src /opt/hpc /opt/models
|
||||
|
||||
# -------------------------------------------------
|
||||
# Create non-root user
|
||||
# -------------------------------------------------
|
||||
|
||||
USERNAME="hpcuser"
|
||||
USER_UID=1000
|
||||
USER_GID=1000
|
||||
|
||||
# Create group and user
|
||||
groupadd -g ${USER_GID} ${USERNAME}
|
||||
useradd -m -u ${USER_UID} -g ${USER_GID} -s /bin/bash ${USERNAME}
|
||||
|
||||
# Set password (optional; often not needed for batch jobs)
|
||||
echo "${USERNAME}:password" | chpasswd
|
||||
|
||||
# Give ownership of relevant directories
|
||||
chown -R ${USERNAME}:${USERNAME} /opt/src
|
||||
|
||||
|
||||
%post
|
||||
# -------------------------------------------------
|
||||
# Define package URLs
|
||||
# -------------------------------------------------
|
||||
|
||||
OPENMPI_URL="https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.gz"
|
||||
HDF5_URL="https://support.hdfgroup.org/releases/hdf5/v1_14/v1_14_6/downloads/hdf5-1.14.6.tar.gz"
|
||||
NETCDF_C_URL="https://downloads.unidata.ucar.edu/netcdf-c/4.10.0/netcdf-c-4.10.0.tar.gz"
|
||||
NETCDF_FORTRAN_URL="https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.6.2.tar.gz"
|
||||
IOAPI_URL="https://www.cmascenter.org/ioapi/download/ioapi-3.2.tar.gz"
|
||||
WRF_URL="https://github.com/wrf-model/WRF/releases/download/v4.6.0/v4.6.0.tar.gz"
|
||||
WPS_URL="https://github.com/wrf-model/WPS/archive/refs/tags/v4.6.0.tar.gz"
|
||||
|
||||
SRC_DIR="/opt/src"
|
||||
mkdir -p ${SRC_DIR}
|
||||
|
||||
# -------------------------------------------------
|
||||
# Package list (name + URL)
|
||||
# -------------------------------------------------
|
||||
|
||||
packages=(
|
||||
"openmpi:${OPENMPI_URL}"
|
||||
"hdf5:${HDF5_URL}"
|
||||
"netcdf-c:${NETCDF_C_URL}"
|
||||
"netcdf-fortran:${NETCDF_FORTRAN_URL}"
|
||||
"ioapi:${IOAPI_URL}"
|
||||
"wrf:${WRF_URL}"
|
||||
"wps:${WPS_URL}"
|
||||
)
|
||||
|
||||
# -------------------------------------------------
|
||||
# Download loop
|
||||
# -------------------------------------------------
|
||||
|
||||
for pkg in "${packages[@]}"; do
|
||||
NAME="${pkg%%:*}"
|
||||
URL="${pkg#*:}"
|
||||
|
||||
echo "Downloading ${NAME}..."
|
||||
|
||||
mkdir -p ${SRC_DIR}/${NAME}
|
||||
cd ${SRC_DIR}/${NAME}
|
||||
|
||||
wget ${URL}
|
||||
done
|
||||
|
||||
%post
|
||||
|
||||
export HPC_PATH=/opt/hpc
|
||||
export MODEL_PATH=/opt/models
|
||||
|
||||
export MPI_HOME=$HPC_PATH/mpi
|
||||
export HDF5=$HPC_PATH/hdf5
|
||||
export NETCDF=$HPC_PATH/netcdf
|
||||
export IOAPI=$HPC_PATH/ioapi
|
||||
|
||||
export PATH=$MPI_HOME/bin:$NETCDF/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$MPI_HOME/lib:$HDF5/lib:$NETCDF/lib:$LD_LIBRARY_PATH
|
||||
|
||||
# -------------------------------------------------
|
||||
# Build HDF5 (parallel)
|
||||
# -------------------------------------------------
|
||||
cd /opt/src
|
||||
tar -xzf hdf5-1.14.6.tar.gz
|
||||
cd hdf5-1.14.6
|
||||
|
||||
CC=mpicc FC=mpif90 ./configure --prefix=$HDF5 --enable-parallel --enable-fortran
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
# -------------------------------------------------
|
||||
# Build NetCDF-C
|
||||
# -------------------------------------------------
|
||||
|
||||
cd /opt/src
|
||||
export CC=/opt/hpc/mpi/bin/mpicc
|
||||
export CXX=/opt/hpc/mpi/bin/mpicxx
|
||||
export CPPFLAGS="-I/opt/hpc/hdf5/include"
|
||||
export LDFLAGS="-L/opt/hpc/hdf5/lib"
|
||||
export LD_LIBRARY_PATH=/opt/hpc/hdf5/lib:$LD_LIBRARY_PATH
|
||||
tar -xzf netcdf-c-4.10.0.tar.gz
|
||||
cd netcdf-c-4.10.0
|
||||
|
||||
./configure --prefix=/opt/hpc/netcdf --enable-parallel-tests
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
# -------------------------------------------------
|
||||
# Build NetCDF-Fortran
|
||||
# -------------------------------------------------
|
||||
cd /opt/src
|
||||
tar -xzf v4.6.2.tar.gz
|
||||
cd netcdf-fortran-4.6.2
|
||||
|
||||
CPPFLAGS="-I$NETCDF/include" \
|
||||
LDFLAGS="-L$NETCDF/lib" \
|
||||
./configure --prefix=$NETCDF --enable-large-files
|
||||
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
# -------------------------------------------------
|
||||
# Build OpenMPI
|
||||
# -------------------------------------------------
|
||||
cd /opt/src
|
||||
tar -xzf openmpi-4.1.6.tar.gz
|
||||
cd openmpi-4.1.6
|
||||
|
||||
./configure --prefix=$MPI_HOME
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
# -------------------------------------------------
|
||||
# Install WRF
|
||||
# -------------------------------------------------
|
||||
|
||||
cd /opt/src
|
||||
tar -xzf v4.6.0.tar.gz
|
||||
mv WRFV4.6.0 /opt/models/wrf
|
||||
|
||||
cd /opt/models/wrf
|
||||
|
||||
printf "34\n1\n" | ./configure
|
||||
|
||||
ulimit -s unlimited
|
||||
|
||||
./compile em_real -j $(nproc) 2>&1 | tee compile.log || true
|
||||
|
||||
ls -lh main || true
|
||||
ls -lh run || true
|
||||
|
||||
# -------------------------------------------------
|
||||
# Install WPS
|
||||
# -------------------------------------------------
|
||||
|
||||
cd /opt/src
|
||||
wget https://github.com/wrf-model/WPS/archive/refs/tags/v4.6.0.tar.gz
|
||||
|
||||
# Extract WPS source
|
||||
tar -xzf v4.6.0.tar.gz
|
||||
mv WPS-4.6.0 /opt/models/wps
|
||||
|
||||
cd /opt/models/wps
|
||||
|
||||
# Tell WPS where WRF is installed
|
||||
export WRF_DIR=/opt/models/wrf
|
||||
|
||||
# Configure automatically (choose Linux + gfortran)
|
||||
printf "1\n" | ./configure
|
||||
|
||||
# Compile WPS
|
||||
./compile 2>&1 | tee compile.log || true
|
||||
|
||||
# Verify binaries
|
||||
ls -lh geogrid/src/geogrid.exe || true
|
||||
ls -lh ungrib/src/ungrib.exe || true
|
||||
ls -lh metgrid/src/metgrid.exe || true
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Install I/O API
|
||||
# -------------------------
|
||||
git clone https://github.com/cjcoats/ioapi-3.2.git
|
||||
cd ioapi-3.2
|
||||
|
||||
export FC=gfortran
|
||||
export CC=gcc
|
||||
export NETCDF=/usr
|
||||
|
||||
# Configure (Linux2_x86_64gfort is typical)
|
||||
make config
|
||||
# Choose: Linux2_x86_64gfort
|
||||
|
||||
make -j$(nproc)
|
||||
|
||||
echo "export IOAPI=/opt/ioapi-3.2" >> /environment
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Install CMAQ
|
||||
# -------------------------
|
||||
cd /opt
|
||||
git clone https://github.com/USEPA/CMAQ.git
|
||||
cd CMAQ
|
||||
|
||||
# Checkout stable release (optional)
|
||||
# git checkout 5.3.3
|
||||
|
||||
echo "export CMAQ_HOME=/opt/CMAQ" >> /environment
|
||||
|
||||
# CMAQ build scripts expect tcsh
|
||||
echo "CMAQ installed. Build manually via bldit scripts." > /opt/README
|
||||
|
||||
|
||||
Reference in New Issue
Block a user