diff options
author | kjrstory <kjrstory@gmail.com> | 2024-02-02 06:01:35 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-01 13:01:35 -0800 |
commit | 5bd5a219a60596616ae2cead213f378dba4953be (patch) | |
tree | 528cd83f5c8376c0b1b9cbfd0d3f0bb4ca6cb295 /var | |
parent | c1450d26ff3cf566b43762aee6e0edff5b1dfd2a (diff) | |
download | spack-5bd5a219a60596616ae2cead213f378dba4953be.tar.gz spack-5bd5a219a60596616ae2cead213f378dba4953be.tar.bz2 spack-5bd5a219a60596616ae2cead213f378dba4953be.tar.xz spack-5bd5a219a60596616ae2cead213f378dba4953be.zip |
Add algorithmic differentiation packages for SU2 (#39975)
* Add algorithmic differentiation packages for SU2
* Simplify checking boolean variants
* spack prefix and spec satisfies methos fix
* spelling fix
* style fix
Diffstat (limited to 'var')
-rw-r--r-- | var/spack/repos/builtin/packages/codipack/package.py | 36 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/medipack/package.py | 31 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/opdilib/package.py | 25 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/su2/package.py | 61 |
4 files changed, 141 insertions, 12 deletions
diff --git a/var/spack/repos/builtin/packages/codipack/package.py b/var/spack/repos/builtin/packages/codipack/package.py new file mode 100644 index 0000000000..dda3465461 --- /dev/null +++ b/var/spack/repos/builtin/packages/codipack/package.py @@ -0,0 +1,36 @@ +# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class Codipack(CMakePackage, Package): + """CoDiPack is a C++-library that enables the computation of gradients in computer programs + using Algorithmic Differentiation. It is based on the Operator Overloading approach and uses + static polymorphism and expression templates, resulting in an extremely fast evaluation of + adjoints or forward derivatives. It is specifically designed with HPC applications in mind.""" + + homepage = "https://www.scicomp.uni-kl.de/software/codi/" + url = "https://github.com/SciCompKL/CoDiPack/archive/refs/tags/v2.1.0.tar.gz" + git = "https://github.com/SciCompKL/CoDiPack.git" + + version("2.1.0", sha256="c8d07eb01eaa056175902d5b153b8606b05d208ff0a541d15284f4d9ff6e87c2") + version("2.0.2", sha256="c6eecfdbf5818daf80871461f23f8a29b5b72e314d2034047d0b0fcd44744339") + version("1.9.3", sha256="27dd92d0b5132de37b431989c0c3d5bd829821a6a2e31e0529137e427421f06e") + version("openmp", branch="experimentalOpenMPSupport") + + depends_on("cmake@3.12:", type="build", when="@2.1.0:") + + build_system( + conditional("cmake", when="@2.1.0:"), + conditional("generic", when="@:2.0.2"), + default="cmake", + ) + + +class GenericBuilder(spack.build_systems.generic.GenericBuilder): + def install(self, pkg, spec, prefix): + mkdirp(join_path(prefix, "include")) + install_tree(join_path(self.stage.source_path, "include"), join_path(prefix, "include")) diff --git a/var/spack/repos/builtin/packages/medipack/package.py b/var/spack/repos/builtin/packages/medipack/package.py new file mode 100644 index 0000000000..7823a22279 --- /dev/null +++ b/var/spack/repos/builtin/packages/medipack/package.py @@ -0,0 +1,31 @@ +# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class Medipack(CMakePackage): + """MeDiPack (Message Differentiation Package) is a tool that handles the MPI communication + of Algorithmic Differentiation (AD) tools like CoDiPack.""" + + homepage = "https://github.com/SciCompKL/MeDiPack" + url = "https://github.com/SciCompKL/MeDiPack/archive/refs/tags/v1.2.2.tar.gz" + + version("1.2.2", sha256="8937fa1025c6fb12f516cacf38a7f776221e7e818b30f17ce334c63f78513aa7") + version("1.2.1", sha256="c746196b98cfe24a212584cdb88bd12ebb14f4a54728070d605e0c6d0e75db8a") + + depends_on("cmake@3.12:", type="build", when="@1.2.2:") + + build_system( + conditional("cmake", when="@1.2.2:"), + conditional("generic", when="@:1.2.1"), + default="cmake", + ) + + def install(self, spec, prefix): + mkdirp(join_path(prefix, "include")) + install_tree(join_path(self.stage.source_path, "include"), join_path(prefix, "include")) + mkdirp(join_path(prefix, "src")) + install_tree(join_path(self.stage.source_path, "src"), join_path(prefix, "src")) diff --git a/var/spack/repos/builtin/packages/opdilib/package.py b/var/spack/repos/builtin/packages/opdilib/package.py new file mode 100644 index 0000000000..baeb63c312 --- /dev/null +++ b/var/spack/repos/builtin/packages/opdilib/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class Opdilib(Package): + """OpDiLib (Open Multiprocessing Differentiation Library) is a universal add-on for + reverse mode operator overloading AD tools that enables the differentiation of + OpenMP parallel code.""" + + homepage = "https://github.com/SciCompKL/OpDiLib" + url = "https://github.com/SciCompKL/OpDiLib/archive/refs/tags/v1.5.tar.gz" + + version("1.5", sha256="47b345954df5e7ee8147e7b29db2ec160ba02ccc93b3b88af0b34bb880170248") + version("1.4", sha256="f1dd2575a8c3b2328df89b732dbeaa23657731d77e4bf7ee201c6571f20d13d5") + version("1.3.2", sha256="5da4a99ab1332e5c3746cb6d55ee4cd96ce578b06987e2b10e33ae6413b7cf7a") + + def install(self, spec, prefix): + mkdirp(join_path(prefix, "include")) + install_tree(join_path(self.stage.source_path, "include"), join_path(prefix, "include")) + mkdirp(join_path(prefix, "syntax")) + install_tree(join_path(self.stage.source_path, "syntax"), join_path(prefix, "syntax")) diff --git a/var/spack/repos/builtin/packages/su2/package.py b/var/spack/repos/builtin/packages/su2/package.py index 8f73b02d8e..0fbd50ad7c 100644 --- a/var/spack/repos/builtin/packages/su2/package.py +++ b/var/spack/repos/builtin/packages/su2/package.py @@ -36,20 +36,20 @@ class Su2(MesonPackage): version("7.0.0", sha256="6207dcca15eaebc11ce12b2866c937b4ad9b93274edf6f23d0487948ac3963b8") version("6.2.0", sha256="ffc953326e8432a1a6534556a5f6cf086046d3149cfcec6b4e7390eebe30ce2e") - variant("mpi", default=False, description="enable MPI support") - variant("openmp", default=False, description="enable OpenMP support") - variant("tecio", default=True, description="enable TECIO support") - variant("cgns", default=True, description="enable CGNS support") - variant("autodiff", default=False, description="enable AD(reverse) support") - variant("directdiff", default=False, description="enable AD(forward) support") - variant("pywrapper", default=False, description="enable Python wrapper support") - variant("mkl", default=False, description="enable Intel MKL support") - variant("openblas", default=False, description="enable OpenBLAS support") - variant("mpp", default=False, description="enable Mutation++ support") + variant("mpi", default=False, description="Enable MPI support") + variant("openmp", default=False, description="Enable OpenMP support") + variant("tecio", default=True, description="Enable TECIO support") + variant("cgns", default=True, description="Enable CGNS support") + variant("autodiff", default=False, description="Enable AD(reverse) support") + variant("directdiff", default=False, description="Enable AD(forward) support") + variant("pywrapper", default=False, description="Enable Python wrapper support") + variant("mkl", default=False, description="Enable Intel MKL support") + variant("openblas", default=False, description="Enable OpenBLAS support") + variant("mpp", default=False, description="Enable Mutation++ support") variant( "mixedprec", default=False, - description="use single precision floating point arithmetic for sparse algebra", + description="Enable the use of single precision on linear solvers and preconditioners", ) depends_on("meson@0.61.1:", type=("build")) @@ -63,17 +63,54 @@ class Su2(MesonPackage): depends_on("openblas", when="+openblas ~mkl") depends_on("cmake", type="build", when="+mpp") + depends_on("codipack@:1.9.3", when="+autodiff") + depends_on("codipack@:1.9.3", when="+directdiff") + depends_on("medipack", when="+autodiff +mpi") + depends_on("medipack", when="+directdiff +mpi") + depends_on("opdilib", when="+autodiff +openmp") + depends_on("opdilib", when="+directdiff +openmp") + depends_on("codipack@openmp", when="+autodiff +openmp") + depends_on("codipack@openmp", when="+directdiff +openmp") + # Remove the part that fixes the meson version to 0.61.1. # This fix is considered meaningless and will be removed in the next version(@7.6:) of SU2. patch("meson_version.patch", when="@7.4.0:7.5.1") + def patch(self): + if self.spec.satisfies("+autodiff") or self.spec.satisfies("+directdiff"): + filter_file( + "externals/codi/include", + join_path(self.spec["codipack"].prefix, "include"), + "meson.build", + ) + + if ( + self.spec.satisfies("+autodiff") or self.spec.satisfies("+directdiff") + ) and self.spec.satisfiles("+mpi"): + filter_file( + "externals/medi/include", self.spec["medipack"].prefix.include, "meson.build" + ) + filter_file("externals/medi/src", self.spec["medipack"].prefix.src, "meson.build") + + if ( + self.spec.satisfies("+autodiff") or self.spec.satisfies("+directdiff") + ) and self.spec.satisfies("+openmp"): + filter_file( + "externals/opdi/include", self.spec["opdilib"].prefix.include, "meson.build" + ) + filter_file( + "externals/opdi/syntax/check.py", + join_path(self.spec["opdilib"].prefix.syntax, "check.py"), + "meson.build", + ) + def meson_args(self): args = [ "-Dwith-omp={}".format("+openmp" in self.spec), "-Denable-tecio={}".format("+tecio" in self.spec), "-Denable-cgns={}".format("+cgns" in self.spec), "-Denable-autodiff={}".format("+autodiff" in self.spec), - "-Denable-directdiff={}".format("+direcdiff" in self.spec), + "-Denable-directdiff={}".format("+directdiff" in self.spec), "-Denable-pywrapper={}".format("+pywrapper" in self.spec), "-Denable-mkl={}".format("+mkl" in self.spec), "-Denable-openblas={}".format("+openblas" in self.spec), |