diff --git a/CMakeLists.txt b/CMakeLists.txt index f3b9376..cf22830 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,17 @@ project(NEXUS VERSION 0.2.0 LANGUAGES Fortran) +# FC should be used to set compiler +if(NOT DEFINED ENV{FC}) + message(WARNING "FC is not set. You may want to use it to specify a specific compiler.") +else() + if("$ENV{FC}" STREQUAL "") + message(WARNING "FC is set to empty string. You may want to use it to specify a specific compiler.") + else() + message(STATUS "FC is set: '${FC}'") + endif() +endif() + # Include local macros list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") diff --git a/modulefiles/hera.intel b/modulefiles/hera.intel deleted file mode 100644 index c3dfab4..0000000 --- a/modulefiles/hera.intel +++ /dev/null @@ -1,30 +0,0 @@ -#%Module###################################################################### -## -## NEXUS Prerequisites: Hera/Intel - -proc ModulesHelp {} { - puts stderr "\tcit - loads modules required for building and running NEXUS on Hera/Intel" -} - -module-whatis "loads NEXUS prerequisites for Hera/Intel" - -## clean up environment --------------------------------------------------- -module purge - -## load hpc-stack -module use /scratch2/NCEPDEV/nwprod/hpc-stack/libs/hpc-stack/modulefiles/stack -module load hpc/1.1.0 -module load hpc-intel/18.0.5.274 -module load hpc-impi/2018.0.4 - -## load esmf / netcdf ----------------------------------------------------- -module load hdf5/1.10.6 -module load netcdf/4.7.4 -module load esmf/8_2_0 - -## cmake environment ------------------------------------------------------ -module load cmake/3.20.1 -setenv CMAKE_C_COMPILER mpiicc -setenv CMAKE_CXX_COMPILER mpiicpc -setenv CMAKE_Fortran_COMPILER mpiifort -setenv CMAKE_Platform hera.intel diff --git a/modulefiles/orion.intel b/modulefiles/orion.intel deleted file mode 100644 index 51487c3..0000000 --- a/modulefiles/orion.intel +++ /dev/null @@ -1,32 +0,0 @@ -#%Module###################################################################### -## -## NEXUS Prerequisites: Orion/Intel - -proc ModulesHelp {} { - puts stderr "\tcit - loads modules required for building and running NEXUS on Orion/Intel" -} - -module-whatis "loads NEXUS prerequisites for Orion/Intel" - -## clean up environment --------------------------------------------------- -module purge - -module load contrib noaatools - -## load hpc-stack --------------------------------------------------------- -module use /apps/contrib/NCEP/libs/hpc-stack/modulefiles/stack -module load hpc/1.1.0 -module load hpc-intel/2018.4 -module load hpc-impi/2018.4 - -## load esmf / netcdf ----------------------------------------------------- -module load hdf5/1.10.6 -module load netcdf/4.7.4 -module load esmf/8_2_0 - -## cmake environment ------------------------------------------------------ -module load cmake/3.18.1 -setenv CMAKE_C_COMPILER mpiicc -setenv CMAKE_CXX_COMPILER mpiicpc -setenv CMAKE_Fortran_COMPILER mpiifort -setenv CMAKE_Platform orion.intel diff --git a/modulefiles/ufs_common.lua b/modulefiles/ufs_common.lua new file mode 100644 index 0000000..aa6702f --- /dev/null +++ b/modulefiles/ufs_common.lua @@ -0,0 +1,21 @@ +whatis("Description: UFS build environment common libraries") + +help([[Load UFS Model common libraries]]) + +local ufs_modules = { + {["jasper"] = "2.0.32"}, + {["zlib"] = "1.2.13"}, + {["libpng"] = "1.6.37"}, + {["hdf5"] = "1.14.0"}, + {["netcdf-c"] = "4.9.2"}, + {["netcdf-fortran"] = "4.6.1"}, + {["parallelio"] = "2.5.10"}, + {["esmf"] = "8.6.0"}, +} + +for i = 1, #ufs_modules do + for name, default_version in pairs(ufs_modules[i]) do + local env_version_name = string.gsub(name, "-", "_") .. "_ver" + load(pathJoin(name, os.getenv(env_version_name) or default_version)) + end +end diff --git a/modulefiles/ufs_derecho.intel.lua b/modulefiles/ufs_derecho.intel.lua new file mode 100644 index 0000000..f858670 --- /dev/null +++ b/modulefiles/ufs_derecho.intel.lua @@ -0,0 +1,30 @@ +help([[ +loads UFS Model prerequisites for NOAA Parallelworks/Intel +]]) + +setenv("LMOD_TMOD_FIND_FIRST","yes") +prepend_path("MODULEPATH", "/glade/work/epicufsrt/contrib/spack-stack/derecho/modulefiles") +load("ecflow/5.8.4") +load("mysql/8.0.33") + +setenv("LMOD_TMOD_FIND_FIRST","yes") +prepend_path("MODULEPATH", "/lustre/desc1/scratch/epicufsrt/contrib/modulefiles_extra") +prepend_path("MODULEPATH", "/glade/work/epicufsrt/contrib/spack-stack/derecho/spack-stack-1.6.0/envs/fms-2024.01/install/modulefiles/Core") + +unload("ncarcompilers") +stack_intel_ver=os.getenv("stack_intel_ver") or "2021.10.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_cray_mpich_ver=os.getenv("stack-cray-mpich_ver") or "8.1.25" +load(pathJoin("stack-cray-mpich", stack_cray_mpich_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +stack_python_ver=os.getenv("stack_python_ver") or "3.10.13" +load(pathJoin("stack-python", stack_python_ver)) + +setenv("CMAKE_Platform", "derecho.intel") +load("ufs-weather-model-env") + +whatis("Description: UFS build environment") diff --git a/modulefiles/ufs_gaea.intel.lua b/modulefiles/ufs_gaea.intel.lua new file mode 100644 index 0000000..8c21dfa --- /dev/null +++ b/modulefiles/ufs_gaea.intel.lua @@ -0,0 +1,33 @@ +help([[ + This module loads libraries required for building and running UFS Weather Model + on the NOAA RDHPC machine Gaea C5 using Intel-2023.1.0. +]]) + +whatis([===[Loads libraries needed for building the UFS Weather Model on Gaea ]===]) + +prepend_path("MODULEPATH", "/ncrc/proj/epic/spack-stack/spack-stack-1.6.0/envs/fms-2024.01/install/modulefiles/Core") + +stack_intel_ver=os.getenv("stack_intel_ver") or "2023.1.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_cray_mpich_ver=os.getenv("stack_cray_mpich_ver") or "8.1.25" +load(pathJoin("stack-cray-mpich", stack_cray_mpich_ver)) + +stack_python_ver=os.getenv("stack_python_ver") or "3.10.13" +load(pathJoin("stack-python", stack_python_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +load("ufs_common") + +nccmp_ver=os.getenv("nccmp_ver") or "1.9.0.1" +load(pathJoin("nccmp", nccmp_ver)) + +unload("darshan-runtime") +unload("cray-libsci") + +setenv("CC","cc") +setenv("CXX","CC") +setenv("FC","ftn") +setenv("CMAKE_Platform","gaea.intel") diff --git a/modulefiles/ufs_hera.intel.lua b/modulefiles/ufs_hera.intel.lua new file mode 100644 index 0000000..feaa88e --- /dev/null +++ b/modulefiles/ufs_hera.intel.lua @@ -0,0 +1,26 @@ +help([[ +loads UFS Model prerequisites for Hera/Intel +]]) + +prepend_path("MODULEPATH", "/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-1.6.0/envs/fms-2024.01/install/modulefiles/Core") + +stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_impi_ver=os.getenv("stack_impi_ver") or "2021.5.1" +load(pathJoin("stack-intel-oneapi-mpi", stack_impi_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +load("ufs_common") + +nccmp_ver=os.getenv("nccmp_ver") or "1.9.0.1" +load(pathJoin("nccmp", nccmp_ver)) + +setenv("CC", "mpiicc") +setenv("CXX", "mpiicpc") +setenv("FC", "mpiifort") +setenv("CMAKE_Platform", "hera.intel") + +whatis("Description: UFS build environment") diff --git a/modulefiles/ufs_hera.intelllvm.lua b/modulefiles/ufs_hera.intelllvm.lua new file mode 100644 index 0000000..49e9f2b --- /dev/null +++ b/modulefiles/ufs_hera.intelllvm.lua @@ -0,0 +1,33 @@ +help([[ +loads UFS Model prerequisites for Hera/IntelLLVM +]]) + +prepend_path("MODULEPATH", "/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-1.6.0/envs/upp-addon-env/install/modulefiles/Core") + +stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_impi_ver=os.getenv("stack_impi_ver") or "2021.5.1" +load(pathJoin("stack-intel-oneapi-mpi", stack_impi_ver)) + +load("gnu") +load("intel/2023.2.0") + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +load("ufs_common") + +nccmp_ver=os.getenv("nccmp_ver") or "1.9.0.1" +load(pathJoin("nccmp", nccmp_ver)) + +setenv("I_MPI_CC", "icx") +setenv("I_MPI_CXX", "icpx") +setenv("I_MPI_FC", "ifx") + +setenv("CC", "mpicc") +setenv("CXX", "mpiicpc") +setenv("FC", "mpifc") +setenv("CMAKE_Platform", "hera.intel") + +whatis("Description: UFS build environment") diff --git a/modulefiles/ufs_hercules.intel.lua b/modulefiles/ufs_hercules.intel.lua new file mode 100644 index 0000000..455ea4d --- /dev/null +++ b/modulefiles/ufs_hercules.intel.lua @@ -0,0 +1,26 @@ +help([[ +loads UFS Model prerequisites for Hercules/Intel +]]) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-1.6.0/envs/fms-2024.01/install/modulefiles/Core") + +stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_impi_ver=os.getenv("stack_impi_ver") or "2021.9.0" +load(pathJoin("stack-intel-oneapi-mpi", stack_impi_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +load("ufs_common") + +nccmp_ver=os.getenv("nccmp_ver") or "1.9.0.1" +load(pathJoin("nccmp", nccmp_ver)) + +setenv("CC", "mpiicc") +setenv("CXX", "mpiicpc") +setenv("FC", "mpiifort") +setenv("CMAKE_Platform", "hercules.intel") + +whatis("Description: UFS build environment") diff --git a/modulefiles/ufs_hercules.intelllvm.lua b/modulefiles/ufs_hercules.intelllvm.lua new file mode 100644 index 0000000..5fb97a5 --- /dev/null +++ b/modulefiles/ufs_hercules.intelllvm.lua @@ -0,0 +1,30 @@ +help([[ +loads UFS Model prerequisites for Hercules/IntelLLVM +]]) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-1.6.0/envs/upp-addon-env/install/modulefiles/Core") + +stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_impi_ver=os.getenv("stack_impi_ver") or "2021.9.0" +load(pathJoin("stack-intel-oneapi-mpi", stack_impi_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +load("ufs_common") + +nccmp_ver=os.getenv("nccmp_ver") or "1.9.0.1" +load(pathJoin("nccmp", nccmp_ver)) + +setenv("I_MPI_CC", "icx") +setenv("I_MPI_CXX", "icpx") +setenv("I_MPI_F90", "ifx") + +setenv("CC", "mpiicc") +setenv("CXX", "mpiicpc") +setenv("FC", "mpiifort") +setenv("CMAKE_Platform", "hercules.intel") + +whatis("Description: UFS build environment") diff --git a/modulefiles/ufs_linux.gnu b/modulefiles/ufs_linux.gnu new file mode 100644 index 0000000..fd1f49e --- /dev/null +++ b/modulefiles/ufs_linux.gnu @@ -0,0 +1,37 @@ +#!/bin/bash + +#%Module###################################################################### +## +## UFS prerequisites: Linux (tested: Ubuntu) with gcc/gfortran compilers + +echo "Setting environment variables for UFS Model on Linux with gcc/gfortran" + +## +## load programming environment: compiler, flags, paths +## +export CC=${CC:-mpicc} +export CXX=${CXX:-mpicxx} +export F77=${F77:-mpif77} +export F90=${F90:-mpif90} +export FC=${FC:-mpif90} + +## +## set up variables for ../cmake/configure_linux.gnu.cmake +## +export CMAKE_Platform=linux.gnu + +## +## use own NetCDF library +## +export NETCDF=${NETCDF:-/home/builder/opt} + +## +## use pre-compiled EMSF library for above compiler / MPI combination +## +export ESMFMKFILE=${ESMFMKFILE:-/home/builder/opt/lib/esmf.mk} + +## +## NCEP libraries (need to download and build manually, see doc/README_{UBUNTU,CENTOS,...}.txt and https://github.com/NCAR/NCEPlibs) +## +export NCEPLIBS_DIR=${NCEPLIBS_DIR:-/home/builder/opt} +export CMAKE_PREFIX_PATH=${NCEPLIBS_DIR} diff --git a/modulefiles/ufs_linux.intel b/modulefiles/ufs_linux.intel new file mode 100644 index 0000000..6e47862 --- /dev/null +++ b/modulefiles/ufs_linux.intel @@ -0,0 +1,37 @@ +#!/bin/bash + +#%Module###################################################################### +## +## UFS prerequisites: Linux (tested: Ubuntu) with gcc/gfortran compilers + +echo "Setting environment variables for UFS Model on Linux with gcc/gfortran" + +## +## load programming environment: compiler, flags, paths +## +export CC=${CC:-mpicc} +export CXX=${CXX:-mpicxx} +export F77=${F77:-mpif77} +export F90=${F90:-mpif90} +export FC=${FC:-mpif90} + +## +## set up variables for ../cmake/configure_linux.intel.cmake +## +export CMAKE_Platform=linux.intel + +## +## use own NetCDF library +## +export NETCDF=${NETCDF:-/home/builder/opt} + +## +## use pre-compiled EMSF library for above compiler / MPI combination +## +export ESMFMKFILE=${ESMFMKFILE:-/home/builder/opt/lib/esmf.mk} + +## +## NCEP libraries (need to download and build manually, see doc/README_{UBUNTU,CENTOS,...}.txt and https://github.com/NCAR/NCEPlibs) +## +export NCEPLIBS_DIR=${NCEPLIBS_DIR:-/home/builder/opt} +export CMAKE_PREFIX_PATH=${NCEPLIBS_DIR} diff --git a/modulefiles/ufs_orion.intel.lua b/modulefiles/ufs_orion.intel.lua new file mode 100644 index 0000000..d6e25ef --- /dev/null +++ b/modulefiles/ufs_orion.intel.lua @@ -0,0 +1,29 @@ +help([[ +loads UFS Model prerequisites for Orion/Intel +]]) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-1.6.0/envs/fms-2024.01/install/modulefiles/Core") + +stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" +load(pathJoin("stack-intel", stack_intel_ver)) + +stack_impi_ver=os.getenv("stack_impi_ver") or "2021.9.0" +load(pathJoin("stack-intel-oneapi-mpi", stack_impi_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.23.1" +load(pathJoin("cmake", cmake_ver)) + +load("ufs_common") + +-- HDF5 needed for LM4 +hdf5_ver=os.getenv("hdf5_ver") or "1.14.0" +load(pathJoin("hdf5", hdf5_ver)) +nccmp_ver=os.getenv("nccmp_ver") or "1.9.0.1" +load(pathJoin("nccmp", nccmp_ver)) + +setenv("CC", "mpiicc") +setenv("CXX", "mpiicpc") +setenv("FC", "mpiifort") +setenv("CMAKE_Platform", "orion.intel") + +whatis("Description: UFS build environment") diff --git a/modulefiles/ufs_wcoss2.intel.lua b/modulefiles/ufs_wcoss2.intel.lua new file mode 100644 index 0000000..983365d --- /dev/null +++ b/modulefiles/ufs_wcoss2.intel.lua @@ -0,0 +1,55 @@ +help([[ +loads UFS Model prerequisites on Cactus and Dogwood +]]) + +-- First, look for libraries in "prod" space +PrgEnv_intel_ver=os.getenv("PrgEnv_intel_ver") or "8.1.0" +load(pathJoin("PrgEnv-intel", PrgEnv_intel_ver)) + +intel_ver=os.getenv("intel_ver") or "19.1.3.304" +load(pathJoin("intel", intel_ver)) + +craype_ver=os.getenv("craype_ver") or "2.7.13" +load(pathJoin("craype", craype_ver)) + +cray_mpich_ver=os.getenv("cray_mpich_ver") or "8.1.12" +load(pathJoin("cray-mpich", cray_mpich_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.20.2" +load(pathJoin("cmake", cmake_ver)) + +local ufs_modules = { + {["jasper"] = "2.0.25"}, + {["zlib"] = "1.2.11"}, + {["libpng"] = "1.6.37"}, + {["hdf5-C"] = "1.14.0"}, + {["netcdf-C"] = "4.9.2"}, + {["pio-C"] = "2.5.10"}, + {["esmf-C"] = "8.6.0"}, + {["fms"] = "2024.01"}, + {["bacio"] = "2.4.1"}, + {["crtm"] = "2.4.0"}, + {["g2"] = "3.5.1"}, + {["g2tmpl"] = "1.13.0"}, + {["ip"] = "4.0.0"}, + {["sp"] = "2.3.3"}, + {["w3emc"] = "2.12.0"}, + {["gftl-shared"] = "1.6.1"}, + {["mapl-C"] = "2.40.3"}, + {["pnetcdf-C"] = "1.12.2"}, + {["scotch"] = "7.0.4"}, +} + +for i = 1, #ufs_modules do + for name, default_version in pairs(ufs_modules[i]) do + local env_version_name = string.gsub(name, "-", "_") .. "_ver" + load(pathJoin(name, os.getenv(env_version_name) or default_version)) + end +end + +setenv("CC", "cc") +setenv("CXX", "CC") +setenv("FC", "ftn") +setenv("CMAKE_Platform", "wcoss2") + +whatis("Description: UFS build environment") diff --git a/modulefiles/wcoss_dell_p3 b/modulefiles/wcoss_dell_p3 deleted file mode 100644 index 8ca322d..0000000 --- a/modulefiles/wcoss_dell_p3 +++ /dev/null @@ -1,34 +0,0 @@ -#%Module###################################################################### -## -## NEXUS Prerequisites: Venus and Mars (WCOSS Dell) - -proc ModulesHelp {} { - puts stderr "\tcit - loads modules required for building and running NEXUS on the Dell side of WCOSS" -} - -module-whatis "loads NEXUS prerequisites on Venus and Mars" - -## clean up environment --------------------------------------------------- -module purge - -module load ips/18.0.5.274 -module load impi/18.0.1 -module load lsf/10.1 - -## load hpc-stack --------------------------------------------------------- -module use /usrx/local/nceplibs/dev/hpc-stack/libs/hpc-stack/modulefiles/stack -module load hpc/1.1.0 -module load hpc-ips/18.0.5.274 -module load hpc-impi/18.0.1 - -## load esmf / netcdf ----------------------------------------------------- -module load hdf5/1.10.6 -module load netcdf/4.7.4 -module load esmf/8_2_0 - -## cmake environment ------------------------------------------------------ -module load cmake/3.20.0 -setenv CMAKE_C_COMPILER mpiicc -setenv CMAKE_CXX_COMPILER mpiicpc -setenv CMAKE_Fortran_COMPILER mpiifort -setenv CMAKE_Platform wcoss_dell_p3