From 2c3ce356fd1a0e7e99232692751c55d9c8fffc36 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Wed, 25 Feb 2026 13:44:59 -0700 Subject: [PATCH 1/5] add module for derecho --- build.sh | 14 ++-- modulefiles/GDAS/derecho.intel.lua | 107 +++++++++++++++++++++++++++++ ush/detect_machine.sh | 6 ++ ush/module-setup.sh | 7 ++ 4 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 modulefiles/GDAS/derecho.intel.lua diff --git a/build.sh b/build.sh index bf21b51dd..fa52dda48 100755 --- a/build.sh +++ b/build.sh @@ -78,7 +78,7 @@ while getopts "w:t:c:hvdfai" opt; do done case ${BUILD_TARGET} in - hera | orion | hercules | wcoss2 | noaacloud | gaeac6 | ursa | container ) + hera | orion | hercules | wcoss2 | noaacloud | gaeac6 | ursa | derecho | container ) echo "Building GDASApp on $BUILD_TARGET" source $dir_root/ush/module-setup.sh module use $dir_root/modulefiles @@ -138,12 +138,12 @@ CMAKE_OPTS+=" -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}" CMAKE_OPTS+=" -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}" # JCSDA changed test data things, need to make a dummy CRTM directory -if [ -d "$dir_root/bundle/fix/test-data-release/" ]; then rm -rf $dir_root/bundle/fix/test-data-release/; fi -if [ -d "$dir_root/bundle/test-data-release/" ]; then rm -rf $dir_root/bundle/test-data-release/; fi -mkdir -p $dir_root/bundle/fix/test-data-release/ -mkdir -p $dir_root/bundle/test-data-release/ -ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/fix/test-data-release/crtm -ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/test-data-release/crtm +# if [ -d "$dir_root/bundle/fix/test-data-release/" ]; then rm -rf $dir_root/bundle/fix/test-data-release/; fi +# if [ -d "$dir_root/bundle/test-data-release/" ]; then rm -rf $dir_root/bundle/test-data-release/; fi +# mkdir -p $dir_root/bundle/fix/test-data-release/ +# mkdir -p $dir_root/bundle/test-data-release/ +# ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/fix/test-data-release/crtm +# ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/test-data-release/crtm # Configure echo "Configuring ... `date`" diff --git a/modulefiles/GDAS/derecho.intel.lua b/modulefiles/GDAS/derecho.intel.lua new file mode 100644 index 000000000..3a1d01bea --- /dev/null +++ b/modulefiles/GDAS/derecho.intel.lua @@ -0,0 +1,107 @@ +help([[ +Load environment for running the GDAS application with Intel compilers and MPI. +]]) + +local pkgName = myModuleName() +local pkgVersion = myModuleVersion() +local pkgNameVer = myModuleFullName() + +setenv("LMOD_TMOD_FIND_FIRST","yes") +prepend_path("MODULEPATH", "/lustre/desc1/scratch/epicufsrt/contrib/modulefiles_extra") +prepend_path("MODULEPATH", "/lustre/desc1/scratch/epicufsrt/contrib/modulefiles_extra") +prepend_path("MODULEPATH", "/glade/work/epicufsrt/contrib/spack-stack/derecho/spack-stack-1.9.2/envs/ue-oneapi-2024.2.1/install/modulefiles/Core") + +local stack_oneapi_ver=os.getenv("stack_oneapi_ver") or "2024.2.1" +load(pathJoin("stack-oneapi", stack_oneapi_ver)) + +-- local stack_oneapi_mkl_ver=os.getenv("stack_oneapi_mkl_ver") or "2024.2.2" +-- load(pathJoin("stack-oneapi-mkl", stack_oneapi_mkl_ver)) + +stack_impi_ver=os.getenv("stack_cray_mpich_ver") or "8.1.29" +load(pathJoin("stack-cray-mpich", stack_cray_mpich_ver)) + +local python_ver=os.getenv("python_ver") or "3.11.7" +local cmake_ver=os.getenv("cmake_ver") or "3.27.9" + +load(pathJoin("python", python_ver)) +load(pathJoin("cmake", cmake_ver)) + +load("gettext/0.22.5") +load("curl/8.10.1") +load("zlib/1.2.11") +load("git/2.47.0") +load("hdf5/1.14.3") +load("parallel-netcdf/1.12.3") +load("netcdf-c/4.9.2") +load("nccmp/1.9.1.0") +load("netcdf-fortran/4.6.1") +load("nco/5.2.4") +load("parallelio/2.6.2") +load("wget/1.20.3") +load("boost/1.84.0") +load("bufr/12.1.0") +load("git-lfs/3.5.1") +load("ecbuild/3.7.2") +load("openjpeg/2.3.1") +load("eccodes/2.33.0") +load("eigen/3.4.0") +-- load("openblas/0.3.28") +load("eckit/1.28.3") +load("fckit/0.13.2") +load("fiat/1.4.1") +load("fms/2024.02") +load("esmf/8.8.0") +load("atlas/0.40.0") +load("sp/2.5.0") +load("gsl-lite/0.37.0") +load("libjpeg/2.1.0") +load("krb5/1.19.2") +load("libtirpc/1.3.3") +load("hdf/4.2.15") +load("jedi-cmake/1.4.0") +load("libpng/1.6.37") +load("libxt/1.3.0") +load("libxmu/1.2.1") +load("libxpm/3.5.17") +load("libxaw/1.0.16") +load("udunits/2.2.28") +load("ncview/2.1.9") +load("netcdf-cxx4/4.3.1") +load("json/3.11.3") +--load("crtm/v2.4_jedi") +-- load("rocoto/1.3.7") +load("prod_util/2.1.1") +load("grib-util/1.4.0") + +load("py-jinja2/3.1.4") +load("py-netcdf4/1.7.1.post2") +load("py-pybind11/2.13.5") +load("py-pycodestyle/2.11.0") +load("py-pyyaml/6.0.2") +load("py-scipy/1.14.1") +load("py-xarray/2024.7.0") +load("py-f90nml/1.4.3") +load("py-pip/23.1.2") +load("py-click/8.1.7") +load("py-wheel/0.41.2") + +setenv("CC","mpicc") +setenv("CXX","mpicxx") +setenv("FC","mpifort") +setenv("I_MPI_CC", "cc") +setenv("I_MPI_CXX", "cxx") +setenv("I_MPI_F90", "fort") + +local mpiexec = 'mpiexec' +local mpinproc = '-n' +setenv('MPIEXEC_EXEC', mpiexec) +setenv('MPIEXEC_NPROC', mpinproc) + +-- setenv("CRTM_FIX","/scratch3/NCEPDEV/da/role.jedipara/GDASApp/fix/crtm/2.4.0") +-- setenv("GDASAPP_TESTDATA","/scratch3/NCEPDEV/da/role.jedipara/GDASApp/testdata") +-- setenv("GDASAPP_UNIT_TEST_DATA_PATH", "/scratch3/NCEPDEV/da/role.jedipara/GDASApp/unittestdata") + +whatis("Name: ".. pkgName) +whatis("Version: ".. tostring(pkgVersion)) +whatis("Category: GDASApp") +whatis("Description: Load all libraries needed for GDASApp") diff --git a/ush/detect_machine.sh b/ush/detect_machine.sh index e2ef251a8..a1ec263f7 100755 --- a/ush/detect_machine.sh +++ b/ush/detect_machine.sh @@ -38,6 +38,9 @@ case $(hostname -f) in ufe1[0-2]) MACHINE_ID=ursa ;; ### ursa10-12 uecflow01) MACHINE_ID=ursa ;; ### ursaecflow01 + der*) MACHINE_ID=derecho ;; ### derecho[1-8] + dec*) MACHINE_ID=derecho ;; ### decxxx computing node + s4-submit.ssec.wisc.edu) MACHINE_ID=s4 ;; ### s4 fe[1-8]) MACHINE_ID=jet ;; ### jet01-8 @@ -99,6 +102,9 @@ elif [[ -d /work ]]; then elif [[ -d /gpfs/f6 ]]; then # We are on GAEAC6. MACHINE_ID=gaeac6 +elif [[ -d /gpfs/csfs1 ]]; then + # We are on NCAR DERECHO. + MACHINE_ID=derecho elif [[ -d /data/prod ]]; then # We are on SSEC's S4 MACHINE_ID=s4 diff --git a/ush/module-setup.sh b/ush/module-setup.sh index df92c6a14..85a24891a 100755 --- a/ush/module-setup.sh +++ b/ush/module-setup.sh @@ -75,6 +75,13 @@ elif [[ $MACHINE_ID = gaea* ]] ; then fi module reset +elif [[ $MACHINE_ID = derecho ]] ; then + # We are on NCAR derecho + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /glade/u/apps/derecho/24.12/spack/opt/spack/lmod/8.7.37/gcc/12.4.0/nr3e/lmod/lmod/init/bash + fi + module --force purge + elif [[ $MACHINE_ID = expanse* ]]; then # We are on SDSC Expanse if ( ! eval module help > /dev/null 2>&1 ) ; then From ad518330df4fbf81f6c3a640e12bd525a4f862bc Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Wed, 25 Feb 2026 20:00:49 -0700 Subject: [PATCH 2/5] make it start compile --- modulefiles/GDAS/derecho.intel.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modulefiles/GDAS/derecho.intel.lua b/modulefiles/GDAS/derecho.intel.lua index 3a1d01bea..deeaf1514 100644 --- a/modulefiles/GDAS/derecho.intel.lua +++ b/modulefiles/GDAS/derecho.intel.lua @@ -85,12 +85,12 @@ load("py-pip/23.1.2") load("py-click/8.1.7") load("py-wheel/0.41.2") -setenv("CC","mpicc") -setenv("CXX","mpicxx") -setenv("FC","mpifort") -setenv("I_MPI_CC", "cc") -setenv("I_MPI_CXX", "cxx") -setenv("I_MPI_F90", "fort") +-- setenv("CC","mpicc") +-- setenv("CXX","mpicxx") +-- setenv("FC","mpifort") +-- setenv("I_MPI_CC", "cc") +-- setenv("I_MPI_CXX", "cxx") +-- setenv("I_MPI_F90", "fort") local mpiexec = 'mpiexec' local mpinproc = '-n' From d7f227e43cb30313b122d8ebcfd918860d3b5bf8 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Mon, 2 Mar 2026 09:08:32 -0700 Subject: [PATCH 3/5] compiled on derecho --- build.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/build.sh b/build.sh index fa52dda48..5f3bc2b03 100755 --- a/build.sh +++ b/build.sh @@ -137,14 +137,6 @@ CMAKE_OPTS+=" -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}" # Set CMAKE_INSTALL_LIBDIR as CMake option CMAKE_OPTS+=" -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}" -# JCSDA changed test data things, need to make a dummy CRTM directory -# if [ -d "$dir_root/bundle/fix/test-data-release/" ]; then rm -rf $dir_root/bundle/fix/test-data-release/; fi -# if [ -d "$dir_root/bundle/test-data-release/" ]; then rm -rf $dir_root/bundle/test-data-release/; fi -# mkdir -p $dir_root/bundle/fix/test-data-release/ -# mkdir -p $dir_root/bundle/test-data-release/ -# ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/fix/test-data-release/crtm -# ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/test-data-release/crtm - # Configure echo "Configuring ... `date`" set -x From b3038a56bed95df8d8199c6a7fac532208fab4a8 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Mon, 2 Mar 2026 09:36:53 -0700 Subject: [PATCH 4/5] remove CRTM env, and 2 others --- modulefiles/GDAS/derecho.intel.lua | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/modulefiles/GDAS/derecho.intel.lua b/modulefiles/GDAS/derecho.intel.lua index deeaf1514..771dff6d7 100644 --- a/modulefiles/GDAS/derecho.intel.lua +++ b/modulefiles/GDAS/derecho.intel.lua @@ -85,22 +85,18 @@ load("py-pip/23.1.2") load("py-click/8.1.7") load("py-wheel/0.41.2") --- setenv("CC","mpicc") --- setenv("CXX","mpicxx") --- setenv("FC","mpifort") --- setenv("I_MPI_CC", "cc") --- setenv("I_MPI_CXX", "cxx") --- setenv("I_MPI_F90", "fort") +setenv("CC","cc") +setenv("CXX","CC") +setenv("FC","ftn") +setenv("I_MPI_CC", "icx") +setenv("I_MPI_CXX", "icpx") +setenv("I_MPI_F90", "ifort") local mpiexec = 'mpiexec' local mpinproc = '-n' setenv('MPIEXEC_EXEC', mpiexec) setenv('MPIEXEC_NPROC', mpinproc) --- setenv("CRTM_FIX","/scratch3/NCEPDEV/da/role.jedipara/GDASApp/fix/crtm/2.4.0") --- setenv("GDASAPP_TESTDATA","/scratch3/NCEPDEV/da/role.jedipara/GDASApp/testdata") --- setenv("GDASAPP_UNIT_TEST_DATA_PATH", "/scratch3/NCEPDEV/da/role.jedipara/GDASApp/unittestdata") - whatis("Name: ".. pkgName) whatis("Version: ".. tostring(pkgVersion)) whatis("Category: GDASApp") From a308444f64186e1d212694c6108786f184737160 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Mon, 2 Mar 2026 10:43:12 -0700 Subject: [PATCH 5/5] add a todo, not remove the crtm testpath --- build.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/build.sh b/build.sh index 5f3bc2b03..50226151d 100755 --- a/build.sh +++ b/build.sh @@ -137,6 +137,17 @@ CMAKE_OPTS+=" -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}" # Set CMAKE_INSTALL_LIBDIR as CMake option CMAKE_OPTS+=" -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}" +# TODO: allow CRTM paths to come from the modules on machines other than derecho, and container +if [[ "${BUILD_TARGET}" != "derecho" && "${BUILD_TARGET}" != "container" ]]; then +# JCSDA changed test data things, need to make a dummy CRTM directory +if [ -d "$dir_root/bundle/fix/test-data-release/" ]; then rm -rf $dir_root/bundle/fix/test-data-release/; fi +if [ -d "$dir_root/bundle/test-data-release/" ]; then rm -rf $dir_root/bundle/test-data-release/; fi +mkdir -p $dir_root/bundle/fix/test-data-release/ +mkdir -p $dir_root/bundle/test-data-release/ +ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/fix/test-data-release/crtm +ln -sf $GDASAPP_TESTDATA/crtm $dir_root/bundle/test-data-release/crtm +fi + # Configure echo "Configuring ... `date`" set -x