summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorAlex Richert <alexander.richert@noaa.gov>2024-05-22 13:33:17 -0400
committerGitHub <noreply@github.com>2024-05-22 11:33:17 -0600
commitf7b9c30456f7cfe7dd7ef9570489c8a6e5661166 (patch)
tree8dc1f44a238e34667eb74ba2a670cf9aa29d0e29 /var
parent884620a38a451e59b4cc79de67d95ad4be8fef75 (diff)
downloadspack-f7b9c30456f7cfe7dd7ef9570489c8a6e5661166.tar.gz
spack-f7b9c30456f7cfe7dd7ef9570489c8a6e5661166.tar.bz2
spack-f7b9c30456f7cfe7dd7ef9570489c8a6e5661166.tar.xz
spack-f7b9c30456f7cfe7dd7ef9570489c8a6e5661166.zip
Add develop version to ufs-weather-model (major updates) (#39265)
* Add develop version to ufs-weather-model (major updates) * Update ufs-weather-model maintainers * Update package.py * Update package.py * Update package.py * Update package.py * Update ufs-weather-model defaults and fms dep * Update package.py * Update package.py * Update package.py
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/ufs-weather-model/package.py173
1 files changed, 146 insertions, 27 deletions
diff --git a/var/spack/repos/builtin/packages/ufs-weather-model/package.py b/var/spack/repos/builtin/packages/ufs-weather-model/package.py
index ff30c425f0..1c1ed41ba6 100644
--- a/var/spack/repos/builtin/packages/ufs-weather-model/package.py
+++ b/var/spack/repos/builtin/packages/ufs-weather-model/package.py
@@ -17,8 +17,9 @@ class UfsWeatherModel(CMakePackage):
url = "https://github.com/ufs-community/ufs-weather-model/archive/refs/tags/ufs-v1.1.0.tar.gz"
git = "https://github.com/ufs-community/ufs-weather-model.git"
- maintainers("t-brown")
+ maintainers("AlexanderRichert-NOAA")
+ version("develop", branch="develop", submodules=True)
version(
"2.0.0",
tag="ufs-v2.0.0",
@@ -32,12 +33,45 @@ class UfsWeatherModel(CMakePackage):
submodules=True,
)
+ variant("mpi", default=True, description="Enable MPI")
variant(
"32bit", default=True, description="Enable 32-bit single precision arithmetic in dycore"
)
- variant("avx2", default=False, description="Enable AVX2 instructions")
variant(
- "ccpp", default=True, description="Enable the Common Community Physics Package (CCPP))"
+ "ccpp_32bit",
+ default=False,
+ description="Enable CCPP_32BIT (single precision arithmetic in slow physics)",
+ )
+ variant("debug", default=False, description="Enable DEBUG mode", when="@develop")
+ variant(
+ "debug_linkmpi",
+ default=True,
+ description="Enable linkmpi option when DEBUG mode is on",
+ when="@develop",
+ )
+ variant("inline_post", default=False, description="Enable inline post")
+ variant("multi_gases", default=False, description="Enable multi gases in physics routines")
+ variant("moving_nest", default=False, description="Enable moving nest code", when="@develop")
+ variant("openmp", default=True, description="Enable OpenMP")
+ variant("pdlib", default=False, description="Enable PDLIB (WW3)", when="@develop")
+ variant("parallel_netcdf", default=True, description="Enable parallel NetCDF")
+ variant(
+ "jedi_driver",
+ default=False,
+ description="Enable JEDI as top level driver",
+ when="@develop",
+ )
+ variant(
+ "cmeps_aoflux",
+ default=False,
+ description="Enable atmosphere-ocean flux calculation in mediator",
+ when="@develop",
+ )
+ variant(
+ "ccpp",
+ default=True,
+ description="Enable the Common Community Physics Package (CCPP)",
+ when="@:2.0.0",
)
variant(
"ccpp_suites",
@@ -45,37 +79,96 @@ class UfsWeatherModel(CMakePackage):
description="CCPP suites to compile",
values=("FV3_GFS_v15p2", "FV3_RRFS_v1alpha", "FV3_GFS_v15p2,FV3_RRFS_v1alpha"),
multi=True,
+ when="@:2.0.0",
+ )
+ dev_ccpp_default = [
+ "FV3_GFS_v16",
+ "FV3_GFS_v16_flake",
+ "FV3_GFS_v17_p8",
+ "FV3_GFS_v17_p8_rrtmgp",
+ "FV3_GFS_v15_thompson_mynn_lam3km",
+ "FV3_WoFS_v0",
+ "FV3_GFS_v17_p8_mynn",
+ "FV3_GFS_v17_p8_ugwpv1",
+ ]
+ variant(
+ "ccpp_suites",
+ default=",".join(dev_ccpp_default),
+ description="CCPP suites to compile",
+ multi=True,
+ when="@develop",
)
- variant("inline_post", default=False, description="Compile post processing inline")
- variant("multi_gases", default=False, description="Enable multi gases in physics routines")
- variant("openmp", default=True, description="Enable OpenMP")
- variant("parallel_netcdf", default=True, description="Enable parallel I/O in netCDF")
variant(
"quad_precision",
default=False,
description="Enable quad precision for certain grid metric terms in dycore",
+ when="@:2.0.0",
)
- variant(
- "simdmultiarch", default=False, description="Enable multi-target SIMD instruction sets"
- )
+ variant("mom6solo", default=False, description="Build MOM6 solo executable", when="@develop")
+
+ variant("app", default="ATM", description="UFS application", when="@develop")
depends_on("bacio")
- depends_on("esmf@:8.0.0")
- depends_on("mpi")
- depends_on("nemsio")
+ depends_on("mpi", when="+mpi")
depends_on("netcdf-c")
depends_on("netcdf-fortran")
depends_on("sp")
depends_on("w3emc")
- depends_on("w3nco")
- depends_on("python", type="build")
+ depends_on("esmf@:8.0.0", when="@:2.0.0")
+ depends_on("nemsio", when="@:2.0.0")
+ depends_on("w3nco", when="@:2.0.0")
+ depends_on("bacio@2.4.0:", when="@develop")
+ depends_on("crtm", when="@develop")
+ depends_on("esmf@8.3.0:", when="@develop")
+ depends_on("fms@2022.04: +deprecated_io precision=32,64 constants=GFS", when="@develop")
+ depends_on("g2", when="@develop")
+ depends_on("g2tmpl", when="@develop")
+ depends_on("hdf5+hl+mpi", when="@develop")
+ depends_on("ip@:4", when="@develop")
+ depends_on("netcdf-c~parallel-netcdf+mpi", when="@develop")
+ for app in [
+ "ATMW",
+ "ATML",
+ "NG-GODAS",
+ "S2S",
+ "S2SA",
+ "S2SW",
+ "S2SWA",
+ "S2SWAL",
+ "HAFS",
+ "HAFSW",
+ "HAFS-ALL",
+ "LND",
+ ]:
+ depends_on("parallelio@2.5.3: +fortran~pnetcdf~shared", when="@develop app=%s" % app)
+ depends_on("python@3.6:", type="build", when="@develop")
+ depends_on("sp@2.3.3:", when="@develop")
+ depends_on("w3emc@2.9.2:", when="@develop")
+
+ with when("@develop app=S2SA"):
+ depends_on("mapl")
+ depends_on("gftl-shared")
+ with when("@develop app=S2SWA"):
+ depends_on("mapl")
+ depends_on("gftl-shared")
+ with when("@develop app=ATMAERO"):
+ depends_on("mapl")
+ depends_on("gftl-shared")
+ depends_on("scotch", when="+pdlib")
+
+ depends_on("w3nco", when="@:2.0.0")
+ depends_on("python", type="build", when="@:2.0.0")
+
+ conflicts("%gcc@:8", when="@develop")
def setup_build_environment(self, env):
spec = self.spec
+ env.set("CC", spec["mpi"].mpicc)
+ env.set("CXX", spec["mpi"].mpicxx)
+ env.set("FC", spec["mpi"].mpifc)
env.set("CMAKE_C_COMPILER", spec["mpi"].mpicc)
env.set("CMAKE_CXX_COMPILER", spec["mpi"].mpicxx)
env.set("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc)
- env.set("ESMFMKFILE", join_path(spec["esmf"].prefix.lib, "esmf.mk"))
env.set("CCPP_SUITES", ",".join([x for x in spec.variants["ccpp_suites"].value if x]))
@@ -91,25 +184,51 @@ class UfsWeatherModel(CMakePackage):
raise InstallError(msg.format(spec.platform, self.compiler.name))
def cmake_args(self):
- from_variant = self.define_from_variant
args = [
- from_variant("32BIT", "32bit"),
- from_variant("AVX2", "avx2"),
- from_variant("CCPP", "ccpp"),
- from_variant("INLINE_POST", "inline_post"),
- from_variant("MULTI_GASES", "multi_gases"),
- from_variant("OPENMP", "openmp"),
- from_variant("PARALLEL_NETCDF", "parallel_netcdf"),
- from_variant("QUAD_PRECISION", "quad_precision"),
- from_variant("SIMDMULTIARCH", "simdmultiarch"),
+ self.define("AVX2", False), # use target settings from Spack
+ self.define("SIMDMULTIARCH", False), # use target settings from Spack
+ self.define_from_variant("CCPP_SUITES", "ccpp_suites").replace(";", ","),
+ ]
+ variants = [
+ "32bit",
+ "app",
+ "ccpp_32bit",
+ "ccpp_suites",
+ "cmeps_aoflux",
+ "debug",
+ "debug_linkmpi",
+ "inline_post",
+ "jedi_driver",
+ "moving_nest",
+ "mpi",
+ "multi_gases",
+ "openmp",
+ "parallel_netcdf",
+ "pdlib",
]
+ for variant in variants:
+ args.append(self.define_from_variant(variant.upper(), variant))
+
+ if self.spec.satisfies("@:2.0.0"):
+ args.append(self.define_from_variant("CCPP", "ccpp"))
+ args.append(self.define_from_variant("QUAD_PRECISION", "quad_precision"))
return args
+ # This patch can be removed once https://github.com/NOAA-EMC/WW3/issues/1021
+ # is resolved.
+ @when("+pdlib ^scotch+shared")
+ def patch(self):
+ filter_file(r"(lib[^ ]+)\.a", r"\1.so", "WW3/cmake/FindSCOTCH.cmake")
+ filter_file("STATIC", "SHARED", "WW3/cmake/FindSCOTCH.cmake")
+
@run_after("install")
def install_additional_files(self):
mkdirp(prefix.bin)
- ufs_src = join_path(self.build_directory, "NEMS.exe")
+ if self.spec.satisfies("@develop"):
+ ufs_src = join_path(self.build_directory, "ufs_model")
+ else:
+ ufs_src = join_path(self.build_directory, "NEMS.exe")
ufs_dst = join_path(prefix.bin, "ufs_weather_model")
install(ufs_src, ufs_dst)
set_executable(ufs_dst)