From c16a8930cc1b2d6e33620cf396c7b236193df780 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 12 Nov 2025 14:35:17 -0700 Subject: [PATCH 1/9] Update configs/sites/tier1/nautilus/packages_gcc-13.3.1.yaml --- .../sites/tier1/nautilus/packages_gcc-13.3.1.yaml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/configs/sites/tier1/nautilus/packages_gcc-13.3.1.yaml b/configs/sites/tier1/nautilus/packages_gcc-13.3.1.yaml index 81b45bf60..552589cce 100644 --- a/configs/sites/tier1/nautilus/packages_gcc-13.3.1.yaml +++ b/configs/sites/tier1/nautilus/packages_gcc-13.3.1.yaml @@ -2,7 +2,7 @@ packages: mpi: buildable: False require: - - openmpi@4.1.8 + - openmpi@5.0.8 gcc-runtime: buildable: False externals: @@ -23,8 +23,14 @@ packages: openmpi: buildable: False externals: - - spec: openmpi@4.1.8 - prefix: /p/app/penguin/openmpi/4.1.8/gcc-13.3.1 + - spec: openmpi@5.0.8 + prefix: /p/app/penguin/openmpi/5.0.8/gcc-13.3.1 modules: - - penguin/openmpi/4.1.8/gcc-13.3.1 + - penguin/openmpi/5.0.8/gcc-13.3.1 - slurm + extra_attributes: + environment: + set: + OMPI_MCA_coll: "^hcoll,cuda" + OMPI_MCA_pml: "ucx" + From 5a3027ac113a1ad35af1455bded572583894bbdc Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 12 Nov 2025 14:35:59 -0700 Subject: [PATCH 2/9] Bug fix in spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py: when creating MPI meta module, set environment variables from MPI spec --- spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py b/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py index 2d99c9463..5101656ba 100755 --- a/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py +++ b/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py @@ -654,10 +654,10 @@ def custom_sort_key(entry): substitutes["FC"] = COMPILER_SUBSTITUTES_SAVE["FC"] # Environment variables - if "environment" in compiler.extra_attributes.keys(): - for action in compiler.extra_attributes["environment"].keys(): - for env_name in compiler.extra_attributes["environment"][action]: - env_values = compiler.extra_attributes["environment"][action][env_name] + if "environment" in mpi_provider.extra_attributes.keys(): + for action in mpi_provider.extra_attributes["environment"].keys(): + for env_name in mpi_provider.extra_attributes["environment"][action]: + env_values = mpi_provider.extra_attributes["environment"][action][env_name] substitutes["ENVVARS"] += envmod_command( module_choice, action, From 0b8dddf13f91c15fd388dc9e1a4b0e873dc1c8a9 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 12 Nov 2025 15:34:10 -0700 Subject: [PATCH 3/9] Update .gitmodules and submodule pointer for repos/builtin for code review and testing --- .gitmodules | 6 ++++-- configs/common/modules_lmod.yaml | 2 ++ configs/common/modules_tcl.yaml | 2 ++ configs/common/packages.yaml | 2 +- configs/templates/neptune-dev/spack.yaml | 8 ++++---- configs/templates/neptune-ops/spack.yaml | 2 +- configs/templates/skylab-dev/spack.yaml | 8 ++++---- configs/templates/unified-dev/spack.yaml | 8 ++++---- repos/builtin | 2 +- 9 files changed, 23 insertions(+), 17 deletions(-) diff --git a/.gitmodules b/.gitmodules index 068339c16..812cecf8c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,5 +10,7 @@ branch = v1.3.0 [submodule "repos/builtin"] path = repos/builtin - url = https://github.com/jcsda/spack-packages - branch = spack-stack-dev + #url = https://github.com/jcsda/spack-packages + #branch = spack-stack-dev + url = https://github.com/climbfuji/spack-packages + branch = feature/esmf891_netcdf_cmpi \ No newline at end of file diff --git a/configs/common/modules_lmod.yaml b/configs/common/modules_lmod.yaml index 8bdad785c..cdbe1136a 100644 --- a/configs/common/modules_lmod.yaml +++ b/configs/common/modules_lmod.yaml @@ -142,6 +142,8 @@ modules: ^esmf@8.8.0+debug snapshot=none: 'esmf-8.8.0-debug' ^esmf@8.9.0~debug snapshot=none: 'esmf-8.9.0' ^esmf@8.9.0+debug snapshot=none: 'esmf-8.9.0-debug' + ^esmf@8.9.1~debug snapshot=none: 'esmf-8.9.1' + ^esmf@8.9.1+debug snapshot=none: 'esmf-8.9.1-debug' openmpi: environment: set: diff --git a/configs/common/modules_tcl.yaml b/configs/common/modules_tcl.yaml index cab7b3190..aabc5686a 100644 --- a/configs/common/modules_tcl.yaml +++ b/configs/common/modules_tcl.yaml @@ -161,6 +161,8 @@ modules: ^esmf@8.8.0+debug snapshot=none: 'esmf-8.8.0-debug' ^esmf@8.9.0~debug snapshot=none: 'esmf-8.9.0' ^esmf@8.9.0+debug snapshot=none: 'esmf-8.9.0-debug' + ^esmf@8.9.1~debug snapshot=none: 'esmf-8.9.1' + ^esmf@8.9.1+debug snapshot=none: 'esmf-8.9.1-debug' openmpi: environment: set: diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index 33916b603..dff527d11 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -84,7 +84,7 @@ packages: esmf: require: - ~xerces ~pnetcdf +shared +external-parallelio - - any_of: ['@=8.6.1 snapshot=none', '@=8.8.0 snapshot=none', '@=8.9.0 snapshot=none'] + - any_of: ['@=8.6.1 snapshot=none', '@=8.8.0 snapshot=none', '@=8.9.0 snapshot=none', '@=8.9.1 snapshot=none'] - any_of: ['fflags="-fp-model precise" cxxflags="-fp-model precise"'] when: '%intel' message: Extra ESMF compile options for Intel diff --git a/configs/templates/neptune-dev/spack.yaml b/configs/templates/neptune-dev/spack.yaml index b1dd6b481..b7e419ba5 100644 --- a/configs/templates/neptune-dev/spack.yaml +++ b/configs/templates/neptune-dev/spack.yaml @@ -8,10 +8,10 @@ spack: include: [] specs: - - neptune-env ~debug +espc ^esmf@=8.9.0 - - neptune-env +debug +espc ^esmf@=8.9.0 - - neptune-python-env ^neptune-env ~debug +espc ^esmf@=8.9.0 - - jedi-neptune-env +adp ^neptune-env ~debug +espc ^esmf@=8.9.0 + - neptune-env ~debug +espc ^esmf@=8.9.1 + - neptune-env +debug +espc ^esmf@=8.9.1 + - neptune-python-env ^neptune-env ~debug +espc ^esmf@=8.9.1 + - jedi-neptune-env +adp ^neptune-env ~debug +espc ^esmf@=8.9.1 - crtm@3.1.2 - crtm@v2.4.1-jedi.2 diff --git a/configs/templates/neptune-ops/spack.yaml b/configs/templates/neptune-ops/spack.yaml index 4313ec690..b775abd30 100644 --- a/configs/templates/neptune-ops/spack.yaml +++ b/configs/templates/neptune-ops/spack.yaml @@ -8,7 +8,7 @@ spack: include: [] specs: - - neptune-env ~debug +espc ^esmf@=8.9.0 + - neptune-env ~debug +espc ^esmf@=8.9.1 packages: # Turn off python variant for esmf diff --git a/configs/templates/skylab-dev/spack.yaml b/configs/templates/skylab-dev/spack.yaml index 17f04e95c..9ffda8352 100644 --- a/configs/templates/skylab-dev/spack.yaml +++ b/configs/templates/skylab-dev/spack.yaml @@ -14,12 +14,12 @@ spack: - jedi-fv3-env - jedi-geos-env ^esmf@=8.6.1 - jedi-mpas-env - - jedi-neptune-env ^esmf@=8.9.0 + - jedi-neptune-env ^esmf@=8.9.1 - jedi-tools-env - jedi-ufs-env ^esmf@=8.8.0 #- jedi-um-env - - neptune-env ^esmf@=8.9.0 - - neptune-python-env ^esmf@=8.9.0 + - neptune-env ^esmf@=8.9.1 + - neptune-python-env ^esmf@=8.9.1 - soca-env # Various crtm tags (list all to avoid duplicate packages) @@ -33,7 +33,7 @@ spack: # Various esmf tags (list all to avoid duplicate packages) - esmf@=8.6.1 - esmf@=8.8.0 - - esmf@=8.9.0 + - esmf@=8.9.1 packages: # Turn on python variant for esmf diff --git a/configs/templates/unified-dev/spack.yaml b/configs/templates/unified-dev/spack.yaml index 64597db3f..65ec1cea1 100644 --- a/configs/templates/unified-dev/spack.yaml +++ b/configs/templates/unified-dev/spack.yaml @@ -17,12 +17,12 @@ spack: - jedi-fv3-env - jedi-geos-env ^esmf@=8.6.1 - jedi-mpas-env - - jedi-neptune-env ^esmf@=8.9.0 + - jedi-neptune-env ^esmf@=8.9.1 #- jedi-tools-env - jedi-ufs-env ^esmf@=8.8.0 #- jedi-um-env - - neptune-env ^esmf@=8.9.0 - - neptune-python-env ^esmf@=8.9.0 + - neptune-env ^esmf@=8.9.1 + - neptune-python-env ^esmf@=8.9.1 - soca-env - ufs-srw-app-env ^esmf@=8.8.0 ^crtm@=3.1.2 - ufs-weather-model-env ^esmf@=8.8.0 ^crtm@=3.1.2 @@ -38,7 +38,7 @@ spack: # Various esmf tags (list all to avoid duplicate packages) - esmf@=8.6.1 - esmf@=8.8.0 - - esmf@=8.9.0 + - esmf@=8.9.1 # MADIS for WCOSS2 decoders. - madis@4.5 diff --git a/repos/builtin b/repos/builtin index bfc55569e..a7b0c830a 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit bfc55569ef288de441a42131f58579e8b7fe64a0 +Subproject commit a7b0c830a8a4666818f87f995943c70cf822d085 From 212512b4ea338f6f2e0a55db578f05ee57dc14ea Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 13 Nov 2025 06:55:55 -0700 Subject: [PATCH 4/9] Update submodule pointer for repos/builtin --- repos/builtin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/builtin b/repos/builtin index a7b0c830a..8468567f0 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit a7b0c830a8a4666818f87f995943c70cf822d085 +Subproject commit 8468567f001b01e07ba1222e20952447093fd7f1 From 0fcc58add8b97ee61009ce17697abfe2be24982b Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 14 Nov 2025 12:10:06 -0800 Subject: [PATCH 5/9] Bug fixes in feature/spack_v1_nautilus_esmf891_netcdf_c for newly introduced compiler/mpi aliases --- .../lib/jcsda-emc/spack-stack/stack/meta_modules.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py b/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py index 5101656ba..65af62749 100755 --- a/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py +++ b/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py @@ -520,13 +520,15 @@ def custom_sort_key(entry): # Create mpi modules - currently, only one mpi provider is allowed for mpi_provider in mpi_providers: + if module_choice == "lmod": + mpi_alias = mpi_provider.name + else: + mpi_alias = ALIASES[mpi_provider.name] + # For tcl, append modulepath for external specs and for specs without # compiler dependencies; remove the compiler/mpi prefices from the moduless if module_choice == "tcl": - # Module paths are short names for tcl modules - mpi_alias = ALIASES[mpi_provider.name] - modulepath_save = os.path.join(module_dir, mpi_alias, str(mpi_provider.version), "none", "none") if not os.path.isdir(modulepath_save): os.makedirs(modulepath_save) @@ -548,7 +550,7 @@ def custom_sort_key(entry): # Module paths are short names for tcl modules if module_choice == "lmod": - mpi_alias = compiler.name + compiler_alias = compiler.name else: compiler_alias = ALIASES[compiler.name] From cd1f14f3559a54429bcbdca0dcbd2be6296392c3 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 14 Nov 2025 15:31:28 -0700 Subject: [PATCH 6/9] Catch errors in 'spack stack setup-meta-modules' when no stack-* modules are generated --- .../jcsda-emc/spack-stack/stack/meta_modules.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py b/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py index 65af62749..d0a5dfdfe 100755 --- a/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py +++ b/spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py @@ -373,6 +373,12 @@ def custom_sort_key(entry): raise Exception(f"Expected no or one MPI provider, but got {mpi_providers}") logging.info(f" ... mpi_providers: {mpi_providers}") + # To catch errors (invalid compilers, etc) we check that the number of written + # stack-* meta modules matches what we expect: One module for the preferred + # compiler, and (if applicable) one for each (currently one) MPI provider. + number_of_meta_modules_expected = 1 + len(mpi_providers) + number_of_meta_modules_written = 0 + # Prepare meta module directory logging.info("Preparing meta module directory ...") meta_module_dir = os.path.join(module_dir, "Core") @@ -508,6 +514,7 @@ def custom_sort_key(entry): with open(compiler_module_file, "w") as f: f.write(module_content) logging.info(" ... writing {}".format(compiler_module_file)) + number_of_meta_modules_written += 1 # If this is the last compiler in the list (i.e. the preferred compiler), # then save the substitutes for later when building the MPI meta module @@ -691,5 +698,10 @@ def custom_sort_key(entry): with open(mpi_module_file, "w") as f: f.write(module_content) logging.info(" ... writing {}".format(mpi_module_file)) + number_of_meta_modules_written += 1 + - logging.info("Metamodule generation completed successfully in {}".format(meta_module_dir)) + if number_of_meta_modules_written == number_of_meta_modules_expected: + logging.info("Metamodule generation completed successfully in {}".format(meta_module_dir)) + else: + raise Exception("Metamodule generation NOT successful, check output (invalid compiler?)") From cc16cbf3dd7266287ee186ded8ee2f9ff369e56c Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 14 Nov 2025 16:18:31 -0700 Subject: [PATCH 7/9] Revert .gitmodules and update submodule pointer for repos/builtin --- .gitmodules | 6 ++---- repos/builtin | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 812cecf8c..068339c16 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,7 +10,5 @@ branch = v1.3.0 [submodule "repos/builtin"] path = repos/builtin - #url = https://github.com/jcsda/spack-packages - #branch = spack-stack-dev - url = https://github.com/climbfuji/spack-packages - branch = feature/esmf891_netcdf_cmpi \ No newline at end of file + url = https://github.com/jcsda/spack-packages + branch = spack-stack-dev diff --git a/repos/builtin b/repos/builtin index 8468567f0..971b6d6f6 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit 8468567f001b01e07ba1222e20952447093fd7f1 +Subproject commit 971b6d6f6bbf3dbd44a89a71f29ba7bdc159f0ac From 054b1410d1874f9465cf664e4bd40e1413cdd5a6 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 17 Nov 2025 13:14:17 -0600 Subject: [PATCH 8/9] configs/templates/*: jedi-geos-env and geos-gcm-env use esmf@8.9.1 --- configs/templates/skylab-dev/spack.yaml | 4 ++-- configs/templates/unified-dev/spack.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configs/templates/skylab-dev/spack.yaml b/configs/templates/skylab-dev/spack.yaml index 9ffda8352..7d319f59a 100644 --- a/configs/templates/skylab-dev/spack.yaml +++ b/configs/templates/skylab-dev/spack.yaml @@ -10,9 +10,9 @@ spack: specs: - ewok-env #- ai-env - - geos-gcm-env ^esmf@=8.6.1 + - geos-gcm-env ^esmf@=8.9.1 - jedi-fv3-env - - jedi-geos-env ^esmf@=8.6.1 + - jedi-geos-env ^esmf@=8.9.1 - jedi-mpas-env - jedi-neptune-env ^esmf@=8.9.1 - jedi-tools-env diff --git a/configs/templates/unified-dev/spack.yaml b/configs/templates/unified-dev/spack.yaml index 65ec1cea1..2578b03e0 100644 --- a/configs/templates/unified-dev/spack.yaml +++ b/configs/templates/unified-dev/spack.yaml @@ -10,12 +10,12 @@ spack: specs: - ewok-env #- ai-env - - geos-gcm-env ^esmf@=8.6.1 + - geos-gcm-env ^esmf@=8.9.1 - global-workflow-env ^esmf@=8.6.1 ^crtm@=3.1.2 - gmao-swell-env ^crtm@=v2.4.1-jedi.2 - gsi-env ^crtm@=3.1.2 - jedi-fv3-env - - jedi-geos-env ^esmf@=8.6.1 + - jedi-geos-env ^esmf@=8.9.1 - jedi-mpas-env - jedi-neptune-env ^esmf@=8.9.1 #- jedi-tools-env From 6f18504667a7a458eb023d8cc4198718eddf3cd8 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 17 Nov 2025 13:14:33 -0600 Subject: [PATCH 9/9] Pin py-colorama to avoid duplicate packages --- configs/common/packages.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index dff527d11..73be5c0cd 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -304,6 +304,10 @@ packages: py-cartopy: require: - +plotting + # Pin py-colorama to avoid duplicate packages, hopefully can be removed soon + py-colorama: + require: + - '@0.4.6' # Pin to version 42 to avoid maturin dependency that breaks Intel oneAPI builds py-cryptography: require: