summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/amg2013/package.py
blob: 7d0a26903ad85214149e3dd411de1f69a3f990d3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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 Amg2013(MakefilePackage):
    """AMG is a parallel algebraic multigrid solver for linear systems arising
    from problems on unstructured grids.  The driver provided with AMG
    builds linear systems for various 3-dimensional problems.
    """

    tags = ["proxy-app", "ecp-proxy-app"]

    homepage = "https://computing.llnl.gov/projects/co-design/amg2013"
    git = "https://github.com/LLNL/AMG.git"

    license("LGPL-2.1-or-later")

    version("develop", branch="master")
    version("1.2", tag="1.2", commit="3ada8a128e311543e84d9d66344ece77924127a8")
    version("1.1", tag="1.1", commit="09fe8a78baf6ba5eaef7d2804f7b653885d60fee")
    version("1.0", tag="1.0", commit="f5b864708ca3ef48a86e1e46fcb812cbbfa80c51")

    variant("openmp", default=True, description="Build with OpenMP support")
    variant("optflags", default=False, description="Additional optimizations")
    variant("int64", default=False, description="Use 64-bit integers for global variables")

    depends_on("mpi")

    @property
    def build_targets(self):
        targets = []

        include_cflags = ["-DTIMER_USE_MPI"]
        include_lflags = ["-lm"]

        if "+openmp" in self.spec:
            include_cflags.append("-DHYPRE_USING_OPENMP")
            include_cflags.append(self.compiler.openmp_flag)
            include_lflags.append(self.compiler.openmp_flag)
            if "+optflags" in self.spec:
                include_cflags.append("-DHYPRE_USING_PERSISTENT_COMM")
                include_cflags.append("-DHYPRE_HOPSCOTCH")

        if "+int64" in self.spec:
            include_cflags.append("-DHYPRE_BIGINT")

        targets.append(f"INCLUDE_CFLAGS={' '.join(include_cflags)}")
        targets.append(f"INCLUDE_LFLAGS={' '.join(include_lflags)}")
        targets.append(f"CC={self.spec['mpi'].mpicc}")

        return targets

    def install(self, spec, prefix):
        mkdirp(prefix.bin)
        install("test/amg", prefix.bin)
        install_tree("docs", prefix.docs)