2023-01-19 06:30:17 +08:00
|
|
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
2018-10-08 04:52:23 +08:00
|
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
2017-08-11 09:09:59 +08:00
|
|
|
#
|
2018-10-08 04:52:23 +08:00
|
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
|
2022-05-29 00:55:44 +08:00
|
|
|
from spack.package import *
|
2017-08-11 09:09:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
class Amg2013(MakefilePackage):
|
2023-08-24 07:48:44 +08:00
|
|
|
"""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.
|
2017-08-11 09:09:59 +08:00
|
|
|
"""
|
2022-07-31 06:19:18 +08:00
|
|
|
|
2023-08-24 07:48:44 +08:00
|
|
|
tags = ["proxy-app", "ecp-proxy-app"]
|
|
|
|
|
2019-07-15 22:32:51 +08:00
|
|
|
homepage = "https://computing.llnl.gov/projects/co-design/amg2013"
|
2023-08-24 07:48:44 +08:00
|
|
|
git = "https://github.com/LLNL/AMG.git"
|
2017-08-11 09:09:59 +08:00
|
|
|
|
2023-08-24 07:48:44 +08:00
|
|
|
version("develop", branch="master")
|
2023-08-29 22:33:03 +08:00
|
|
|
version("1.2", tag="1.2", commit="3ada8a128e311543e84d9d66344ece77924127a8")
|
|
|
|
version("1.1", tag="1.1", commit="09fe8a78baf6ba5eaef7d2804f7b653885d60fee")
|
|
|
|
version("1.0", tag="1.0", commit="f5b864708ca3ef48a86e1e46fcb812cbbfa80c51")
|
2017-08-11 09:09:59 +08:00
|
|
|
|
|
|
|
variant("openmp", default=True, description="Build with OpenMP support")
|
2023-08-24 07:48:44 +08:00
|
|
|
variant("optflags", default=False, description="Additional optimizations")
|
2017-10-25 11:06:33 +08:00
|
|
|
variant("int64", default=False, description="Use 64-bit integers for global variables")
|
2017-08-11 09:09:59 +08:00
|
|
|
|
|
|
|
depends_on("mpi")
|
|
|
|
|
|
|
|
@property
|
|
|
|
def build_targets(self):
|
|
|
|
targets = []
|
|
|
|
|
2017-10-25 11:06:33 +08:00
|
|
|
include_cflags = ["-DTIMER_USE_MPI"]
|
|
|
|
include_lflags = ["-lm"]
|
2017-08-11 09:09:59 +08:00
|
|
|
|
|
|
|
if "+openmp" in self.spec:
|
2017-10-25 11:06:33 +08:00
|
|
|
include_cflags.append("-DHYPRE_USING_OPENMP")
|
|
|
|
include_cflags.append(self.compiler.openmp_flag)
|
|
|
|
include_lflags.append(self.compiler.openmp_flag)
|
2023-08-24 07:48:44 +08:00
|
|
|
if "+optflags" in self.spec:
|
|
|
|
include_cflags.append("-DHYPRE_USING_PERSISTENT_COMM")
|
|
|
|
include_cflags.append("-DHYPRE_HOPSCOTCH")
|
2017-10-25 11:06:33 +08:00
|
|
|
|
|
|
|
if "+int64" in self.spec:
|
2023-08-24 07:48:44 +08:00
|
|
|
include_cflags.append("-DHYPRE_BIGINT")
|
2017-08-11 09:09:59 +08:00
|
|
|
|
2023-10-27 03:08:55 +08:00
|
|
|
targets.append(f"INCLUDE_CFLAGS={' '.join(include_cflags)}")
|
|
|
|
targets.append(f"INCLUDE_LFLAGS={' '.join(include_lflags)}")
|
|
|
|
targets.append(f"CC={self.spec['mpi'].mpicc}")
|
2017-08-11 09:09:59 +08:00
|
|
|
|
|
|
|
return targets
|
|
|
|
|
|
|
|
def install(self, spec, prefix):
|
|
|
|
mkdirp(prefix.bin)
|
2023-08-24 07:48:44 +08:00
|
|
|
install("test/amg", prefix.bin)
|
2017-10-25 11:06:33 +08:00
|
|
|
install_tree("docs", prefix.docs)
|