diff options
author | Alex Richert <alexander.richert@noaa.gov> | 2024-05-22 13:33:17 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-22 11:33:17 -0600 |
commit | f7b9c30456f7cfe7dd7ef9570489c8a6e5661166 (patch) | |
tree | 8dc1f44a238e34667eb74ba2a670cf9aa29d0e29 /var | |
parent | 884620a38a451e59b4cc79de67d95ad4be8fef75 (diff) | |
download | spack-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.py | 173 |
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) |