Skip to content
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ script.
- [JSON for C++](https://github.com/nlohmann/json/)
- [JSON Schema Validator for C++](https://github.com/pboettch/json-schema-validator)
- [pybind11](https://github.com/pybind/pybind11)
- [MADIS](https://madis-data.ncep.noaa.gov)

* UFS Dependencies
- [ESMF](https://www.earthsystemcog.org/projects/esmf/)
Expand Down
3 changes: 3 additions & 0 deletions build_stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ build_lib eckit
build_lib fckit
build_lib atlas

# Other
build_lib madis

# ==============================================================================
# optionally clean up
[[ $MAKE_CLEAN =~ [yYtT] ]] && \
Expand Down
4 changes: 4 additions & 0 deletions config/stack_custom.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -270,3 +270,7 @@ atlas:
build: YES
version: release-stable
repo: jcsda

madis:
build: YES
version: 4.3
4 changes: 4 additions & 0 deletions config/stack_mac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -271,3 +271,7 @@ atlas:
build: YES
version: release-stable
repo: jcsda

madis:
build: YES
version: 4.3
4 changes: 4 additions & 0 deletions config/stack_noaa.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -267,3 +267,7 @@ atlas:
build: YES
version: release-stable
repo: jcsda

madis:
build: YES
version: 4.3
118 changes: 118 additions & 0 deletions libs/build_madis.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
#!/bin/bash

set -eux

name="madis"
version=${1:-${STACK_madis_version}}

# Hyphenated version used for install prefix
compiler=$(echo $HPC_COMPILER | sed 's/\//-/g')
mpi=$(echo $HPC_MPI | sed 's/\//-/g')

if $MODULES; then
set +x
source $MODULESHOME/init/bash
module load hpc-$HPC_COMPILER
[[ -z $mpi ]] || module load hpc-$HPC_MPI
module try-load szip
module load hdf5
module load netcdf
module list
set -x
enable_pnetcdf=$(nc-config --has-pnetcdf)
set +x
[[ $enable_pnetcdf =~ [yYtT] ]] && module load pnetcdf
set -x
prefix="${PREFIX:-"/opt/modules"}/$compiler/$mpi/$name/$version"
if [[ -d $prefix ]]; then
[[ $OVERWRITE =~ [yYtT] ]] && ( echo "WARNING: $prefix EXISTS: OVERWRITING!";$SUDO rm -rf $prefix ) \
|| ( echo "WARNING: $prefix EXISTS, SKIPPING"; exit 1 )
fi
else
prefix=${MADIS_ROOT:-"/usr/local"}
enable_pnetcdf=$(nc-config --has-pnetcdf)
fi

if [[ ! -z $mpi ]]; then
export FC=$MPI_FC
export CC=$MPI_CC
export CXX=$MPI_CXX
else
export FC=$SERIAL_FC
export CC=$SERIAL_CC
export CXX=$SERIAL_CXX
fi

export F77=$FC
export FFLAGS="${STACK_FFLAGS:-} ${STACK_madis_FFLAGS:-} -fPIC"
export CFLAGS="${STACK_CFLAGS:-} ${STACK_madis_CFLAGS:-} -fPIC"

HDF5_LDFLAGS="-L$HDF5_ROOT/lib"
HDF5_LIBS="-lhdf5_hl -lhdf5"

AM_LDFLAGS=$(cat $HDF5_ROOT/lib/libhdf5.settings | grep AM_LDFLAGS | cut -d: -f2)
EXTRA_LIBS=$(cat $HDF5_ROOT/lib/libhdf5.settings | grep "Extra libraries" | cut -d: -f2)

if [[ ! -z $mpi ]]; then
if [[ $enable_pnetcdf =~ [yYtT] ]]; then
PNETCDF_LDFLAGS="-L$PNETCDF_ROOT/lib"
PNETCDF_LIBS="-lpnetcdf"
fi
fi

NETCDF_LDFLAGS="-L$NETCDF_ROOT/lib"
NETCDF_LIBS="-lnetcdf -lnetcdff"

export LDFLAGS="${PNETCDF_LDFLAGS:-} ${NETCDF_LDFLAGS:-} ${HDF5_LDFLAGS} ${AM_LDFLAGS:-}"
export LIBS="${PNETCDF_LIBS:-} ${NETCDF_LIBS} ${HDF5_LIBS} ${EXTRA_LIBS:-}"
export CPPFLAGS="-I${NETCDF_ROOT}/include"

cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}

software=$name-$version
URL="https://madis-data.ncep.noaa.gov/source/$software.tar.gz"
[[ -f $software.tar.gz ]] || ( $WGET $URL )
[[ ${DOWNLOAD_ONLY} =~ [yYtT] ]] && exit 0
rm -rf $software && mkdir -p $software && cd $software
tar -xf ../$software.tar.gz

# cd into src/ directory where the makefile is
cd src

# Use sed to comment out the following hard-wired assignments in makefile
# NETCDF_LIB, NETCDF_INC
# FC, FFLAGS, LDFLAGS

sed -i -e 's/NETCDF_LIB=/#NETCDF_LIB/g' makefile
sed -i -e 's/NETCDF_INC=/#NETCDF_INC/g' makefile
sed -i -e 's/FC=/#FC/g' makefile
sed -i -e 's/FFLAGS=/#FFLAGS/g' makefile
sed -i -e 's/LDFLAGS=/#LDFLAGS/g' makefile

export NETCDF_LIB=$LIBS
export NETCDF_INC="${NETCDF_ROOT}/include"

# make in MADIS does not support parallel build
VERBOSE=$MAKE_VERBOSE make #-j${NTHREADS:-4}

# `make` builds and installs in predefined paths hard-wired in makefile
# ../bin/ ../include/ ../lib/
# ../doc/ and ../static/ are already populated prior to build
# move them to $prefix
cd ..
$SUDO mkdir -p $prefix/bin
$SUDO mkdir -p $prefix/include
$SUDO mkdir -p $prefix/lib
$SUDO mkdir -p $prefix/doc
$SUDO mkdir -p $prefix/static

$SUDO mv bin/* $prefix/bin/
$SUDO mv include/* $prefix/include/
$SUDO mv lib/* $prefix/lib/
$SUDO mv doc/* $prefix/doc/
$SUDO mv static/* $prefix/static/

# generate modulefile from template
[[ -z $mpi ]] && modpath=compiler || modpath=mpi
$MODULES && update_modules $modpath $name $version
echo $name $version $URL >> ${HPC_STACK_ROOT}/hpc-stack-contents.log
8 changes: 4 additions & 4 deletions libs/build_nccmp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ AM_LDFLAGS=$(cat $HDF5_ROOT/lib/libhdf5.settings | grep AM_LDFLAGS | cut -d: -f2
EXTRA_LIBS=$(cat $HDF5_ROOT/lib/libhdf5.settings | grep "Extra libraries" | cut -d: -f2)

if [[ ! -z $mpi ]]; then
if [[ $enable_pnetcdf =~ [yYtT] ]]; then
PNETCDF_LDFLAGS="-L$PNETCDF_ROOT/lib"
PNETCDF_LIBS="-lpnetcdf"
fi
if [[ $enable_pnetcdf =~ [yYtT] ]]; then
PNETCDF_LDFLAGS="-L$PNETCDF_ROOT/lib"
PNETCDF_LIBS="-lpnetcdf"
fi
fi

NETCDF_LDFLAGS="-L$NETCDF_ROOT/lib"
Expand Down
31 changes: 31 additions & 0 deletions modulefiles/compiler/compilerName/compilerVersion/madis/madis.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
help([[
]])

local pkgName = myModuleName()
local pkgVersion = myModuleVersion()
local pkgNameVer = myModuleFullName()

local hierA = hierarchyA(pkgNameVer,1)
local compNameVer = hierA[1]
local compNameVerD = compNameVer:gsub("/","-")

conflict(pkgName)

always_load("netcdf")
prereq("netcdf")

local opt = os.getenv("HPC_OPT") or os.getenv("OPT") or "/opt/modules"

local base = pathJoin(opt,compNameVerD,pkgName,pkgVersion)

prepend_path("PATH", pathJoin(base,"bin"))
prepend_path("LD_LIBRARY_PATH", pathJoin(base,"lib"))
prepend_path("MANPATH", pathJoin(base,"share","man"))

setenv("MADIS_ROOT", base)
setenv("MADIS_VERSION", pkgVersion)

whatis("Name: ".. pkgName)
whatis("Version: " .. pkgVersion)
whatis("Category: library")
whatis("Description: MADIS Library and Utilities")
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
help([[
]])

local pkgName = myModuleName()
local pkgVersion = myModuleVersion()
local pkgNameVer = myModuleFullName()

local hierA = hierarchyA(pkgNameVer,2)
local mpiNameVer = hierA[1]
local compNameVer = hierA[2]
local mpiNameVerD = mpiNameVer:gsub("/","-")
local compNameVerD = compNameVer:gsub("/","-")

conflict(pkgName)

always_load("netcdf")
prereq("netcdf")

local opt = os.getenv("HPC_OPT") or os.getenv("OPT") or "/opt/modules"

local base = pathJoin(opt,compNameVerD,mpiNameVerD,pkgName,pkgVersion)

prepend_path("PATH", pathJoin(base,"bin"))
prepend_path("LD_LIBRARY_PATH", pathJoin(base,"lib"))
prepend_path("MANPATH", pathJoin(base,"share","man"))

setenv("MADIS_ROOT", base)
setenv("MADIS_VERSION", pkgVersion)

whatis("Name: ".. pkgName)
whatis("Version: " .. pkgVersion)
whatis("Category: library")
whatis("Description: MADIS library and utilities")