diff --git a/packages/access-cice/package.py b/packages/access-cice/package.py new file mode 100755 index 0000000..2bf3fb8 --- /dev/null +++ b/packages/access-cice/package.py @@ -0,0 +1,53 @@ +# Copyright 2013-2025 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: Apache-2.0 +# ---------------------------------------------------------------------------- + +from spack.package import * + + +class AccessCice(CMakePackage): + """CICE is a computationally efficient model for simulating the growth, melting, + and movement of polar sea ice. CICE is maintained and developed by the CICE-Consortium. + This package builds using the Access3Share common libraries for ACCESS 3 models.""" + + homepage = "https://github.com/CICE-Consortium/CICE" + git = "https://github.com/ACCESS-NRI/CICE" + submodules = True + maintainers = ["anton-seaice", "harshula"] + + # see license file at https://github.com/CICE-Consortium/CICE + license("LicenseRef-CICE", checked_by="anton-seaice") + + variant("openmp", default=False, description="Enable OpenMP") + variant("access3", default=True, description="Install CICE as library for Access3 models") + variant("cesmcoupled", default=False, description="Set CESMCOUPLED CPP Flag") + + variant("io_type", + default="NetCDF", + values=("NetCDF", "PIO", "Binary"), + description="CICE IO Method" + ) + + depends_on("access3-share", when="+access3") + depends_on("access3-share+openmp", when="+openmp+access3") + + depends_on("cmake@3.18:", type="build") + depends_on("mpi") + depends_on("netcdf-fortran@4.6.0:", when="io_type=NetCDF") + depends_on("parallelio@2.5.10: build_type==RelWithDebInfo", when="io_type=PIO") + depends_on("parallelio fflags='-qno-opt-dynamic-align -convert big_endian -assume byterecl -ftz -traceback -assume realloc_lhs -fp-model source' cflags='-qno-opt-dynamic-align -fp-model precise -std=gnu99'", when="%intel io_type=PIO") + depends_on("parallelio fflags='-qno-opt-dynamic-align -convert big_endian -assume byterecl -ftz -traceback -assume realloc_lhs -fp-model source' cflags='-qno-opt-dynamic-align -fp-model precise -std=gnu99'", when="%oneapi io_type=PIO") + + root_cmakelists_dir = "configuration/scripts/cmake" + + def cmake_args(self): + args = [ + self.define_from_variant("OPENMP", "openmp"), + self.define_from_variant("CICE_IO", "io_type"), + self.define_from_variant("ACCESS3_CICE", "access3"), + self.define_from_variant("CESMCOUPLED", "cesmcoupled"), + ] + + return args \ No newline at end of file diff --git a/packages/access-mom6/package.py b/packages/access-mom6/package.py new file mode 100755 index 0000000..3dd9ed3 --- /dev/null +++ b/packages/access-mom6/package.py @@ -0,0 +1,49 @@ +# Copyright 2013-2025 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: Apache-2.0 +# ---------------------------------------------------------------------------- + +from spack.package import CMakePackage, variant, version, depends_on + + +class AccessMom6(CMakePackage): + """The Modular Ocean Model (MOM) describes the numerical ocean models originating from NOAA/GFDL. + They are used to simulate ocean currents at both regional and global scales, + enabling scientists to answer fundamental questions about the role of the ocean in the dynamics of the global climate. + This package builds using the Access3Share common libraries for ACCESS 3 models.""" + + homepage = "https://github.com/ACCESS-NRI/MOM6" + git = "https://github.com/ACCESS-NRI/MOM6.git" + submodules = True + maintainers = ["minghangli-uni", "harshula"] + + # see license file in https://github.com/ACCESS-NRI/MOM6/blob/e92c971084e185cfd3902f18072320b45d583a54/LICENSE.md + license("LGPL-3.0", checked_by="minghangli-uni") + + variant("openmp", default=False, description="Enable OpenMP") + variant("mom_symmetric", default=True, description="Use symmetric memory in MOM6") + variant("access3", default=True, description="Building MOM6 library with Access3share") + variant("cesmcoupled", default=False, description="Enable parameters with cesm coupled") + + depends_on("access3-share", when="+access3") + depends_on("access3-share+openmp", when="+openmp+access3") + + depends_on("cmake@3.18:", type="build") + depends_on("mpi") + depends_on("netcdf-fortran@4.6.0:") + depends_on("fms@2021.03: build_type==RelWithDebInfo precision=64 +large_file ~gfs_phys ~quad_precision") + depends_on("fms +openmp", when="+openmp") + depends_on("fms ~openmp", when="~openmp") + + root_cmakelists_dir = "cmake" + + def cmake_args(self): + args = [ + self.define_from_variant("OPENMP", "openmp"), + self.define_from_variant("ENABLE_MOM_SYMMETRIC", "mom_symmetric"), + self.define_from_variant("ACCESS3_MOM6", "access3"), + self.define_from_variant("CESMCOUPLED", "cesmcoupled"), + ] + + return args diff --git a/packages/access-om3-nuopc/package.py b/packages/access-om3-nuopc/package.py index 4b4aa65..2e0079b 100644 --- a/packages/access-om3-nuopc/package.py +++ b/packages/access-om3-nuopc/package.py @@ -47,7 +47,7 @@ class AccessOm3Nuopc(CMakePackage): "cice_io", default="PIO", description="CICE IO option", - values=("NectCDF", "PIO", "Binary"), + values=("NetCDF", "PIO", "Binary"), multi=False, ) diff --git a/packages/access-om3/package.py b/packages/access-om3/package.py old mode 100644 new mode 100755 index c3dcb23..aa9053f --- a/packages/access-om3/package.py +++ b/packages/access-om3/package.py @@ -25,4 +25,4 @@ class AccessOm3(BundlePackage): version("latest") - depends_on("access-om3-nuopc") + depends_on("access3-exe") diff --git a/packages/access3-exe/package.py b/packages/access3-exe/package.py new file mode 100755 index 0000000..faed4b9 --- /dev/null +++ b/packages/access3-exe/package.py @@ -0,0 +1,79 @@ +# Copyright 2013-2025 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: Apache-2.0 + +from spack.package import * +from spack.variant import disjoint_sets, auto_or_any_combination_of + +# supported model configurations +KNOWN_CONF = ( + "MOM6", + "CICE6", + "WW3", + "MOM6-WW3", + "MOM6-CICE6", + "CICE6-WW3", + "MOM6-CICE6-WW3", +) + +DEFAULT_CONF = ("MOM6", "MOM6-CICE6", "MOM6-CICE6-WW3") + +class Access3Exe(CMakePackage): + """Executable build for ACCESS version 3 climate models. The exectuable is defined in Community Mediator for Earth Prediction + Systems (CMEPS). Currently implemented for ACCESS-OM3, and in the future may support ACCESS-CM3 and ACCESS-ESM3. This is a + companion pacakge to Access3Share which builds the shared libraries.""" + + homepage = "https://github.com/ACCESS-NRI/access3-share" + git = "https://github.com/ACCESS-NRI/access3-share" + submodules = True + maintainers = ["anton-seaice", "harshula", "micaeljtoliveira"] + + license("Apache-2.0", checked_by="anton-seaice") + + variant( + "configurations", + values=any_combination_of(*KNOWN_CONF), + description="ACCESS-OM3 configurations to build", + sticky=True #force concretizer to not pick alternative variants + ) + + variant("openmp", default=False, description="Enable OpenMP") + + depends_on("cmake@3.18:", type="build") + depends_on("mpi") + depends_on("esmf@8.3.0:") + depends_on("esmf cflags='-fp-model precise' fflags='-fp-model precise'", when="%intel") + depends_on("esmf cflags='-fp-model precise' fflags='-fp-model precise'", when="%oneapi") + + depends_on("access-cice+access3+cesmcoupled", when="configurations=CICE6") + depends_on("access-cice+access3+cesmcoupled", when="configurations=CICE6-WW3") + depends_on("access-cice+access3+cesmcoupled", when="configurations=MOM6-CICE6") + depends_on("access-cice+access3+cesmcoupled", when="configurations=MOM6-CICE6-WW3") + depends_on("access-cice+access3+cesmcoupled", when="configurations=none") + + depends_on("access-mom6+access3+cesmcoupled", when="configurations=MOM6") + depends_on("access-mom6+access3+cesmcoupled", when="configurations=MOM6-CICE6") + depends_on("access-mom6+access3+cesmcoupled", when="configurations=MOM6-WW3") + depends_on("access-mom6+access3+cesmcoupled", when="configurations=MOM6-CICE6-WW3") + depends_on("access-mom6+access3+cesmcoupled", when="configurations=none") + + # depends_on("access-ww3+access3+cesmcoupled", when="configurations=WW3") + # depends_on("access-ww3+access3+cesmcoupled", when="configurations=MOM6-WW3") + # depends_on("access-ww3+access3+cesmcoupled", when="configurations=CICE6-WW3") + # depends_on("access-ww3+access3+cesmcoupled", when="configurations=MOM6-CICE6-WW3") + # depends_on("access-ww3+access3+cesmcoupled", when="configurations=none") + + def cmake_args(self): + + # make configurations a cmake argument + if self.spec.satisfies("configurations=none"): + buildConf = ";".join(DEFAULT_CONF) + else: + buildConf = ";".join(self.spec.variants["configurations"].value) + + args = [ + self.define("BuildConfigurations",buildConf) + ] + + return args diff --git a/packages/access3-share/package.py b/packages/access3-share/package.py new file mode 100755 index 0000000..63fdc07 --- /dev/null +++ b/packages/access3-share/package.py @@ -0,0 +1,42 @@ +# Copyright 2013-2025 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: Apache-2.0 + +from spack.package import * + + +class Access3Share(CMakePackage): + """Shared coupler/mediator libraries used by the ACCESS version 3 climate models. This + package includes the Community Mediator for Earth Prediction Systems (CMEPS) and Community + Data models for Earth Prediction Systems (CDEPS) as used in ACCESS-OM3 (and the future + ACCESS-CM3 and ACCESS-ESM3 etc). See Access3Exe package to produce executable programs.""" + + homepage = "https://github.com/ACCESS-NRI/access3-share" + git = "https://github.com/ACCESS-NRI/access3-share" + submodules = True + maintainers = ["anton-seaice", "harshula", "micaeljtoliveira"] + + license("Apache-2.0", checked_by="anton-seaice") + + variant("openmp", default=False, description="Enable OpenMP") + + depends_on("cmake@3.18:", type="build") + depends_on("mpi") + depends_on("netcdf-fortran@4.6.0:") + depends_on("esmf@8.3.0:") + depends_on("esmf cflags='-fp-model precise' fflags='-fp-model precise'", when="%intel") + depends_on("esmf cflags='-fp-model precise' fflags='-fp-model precise'", when="%oneapi") + depends_on("fortranxml@4.1.2:") + + depends_on("parallelio@2.5.10: build_type==RelWithDebInfo") + depends_on("parallelio fflags='-qno-opt-dynamic-align -convert big_endian -assume byterecl -ftz -traceback -assume realloc_lhs -fp-model source' cflags='-qno-opt-dynamic-align -fp-model precise -std=gnu99'", when="%intel") + depends_on("parallelio fflags='-qno-opt-dynamic-align -convert big_endian -assume byterecl -ftz -traceback -assume realloc_lhs -fp-model source' cflags='-qno-opt-dynamic-align -fp-model precise -std=gnu99'", when="%oneapi") + + def cmake_args(self): + args = [ + self.define("ACCESS3_LIB_INSTALL", True), + self.define_from_variant("OPENMP", "openmp"), + ] + + return args \ No newline at end of file