summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/mptensor/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/mptensor/package.py')
-rw-r--r--var/spack/repos/builtin/packages/mptensor/package.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/mptensor/package.py b/var/spack/repos/builtin/packages/mptensor/package.py
new file mode 100644
index 0000000000..6106682279
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mptensor/package.py
@@ -0,0 +1,96 @@
+# Copyright 2013-2021 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 import *
+
+
+class Mptensor(CMakePackage):
+ """mptensor is parallel C++ libarary for tensor calculations.
+ It provides similar interfaces as Numpy and Scipy in Python."""
+
+ homepage = "https://github.com/smorita/mptensor"
+ url = "https://github.com/smorita/mptensor/archive/v0.3.0.tar.gz"
+
+ version('0.3.0', sha256='819395a91551bddb77958615042fcb935a4b67ee37f912b9a2ca5b49c71befae')
+
+ variant('mpi', default=False, description='Build with MPI library')
+ variant("doc", default=False, description="build documentation with Doxygen")
+
+ depends_on('cmake@3.6:', type='build')
+ depends_on('mpi', when="+mpi")
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('scalapack', when="+mpi")
+ depends_on('doxygen@:1.8.11', type="build", when="+doc")
+
+ test_requires_compiler = True
+
+ def cmake_args(self):
+ spec = self.spec
+ options = []
+
+ if "+mpi" in spec:
+ options.extend([
+ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
+ '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
+ '-DSCALAPACK_LIBRARIES=%s' % spec['scalapack'].libs,
+ ])
+ else:
+ options.extend([
+ '-DCMAKE_C_COMPILER=%s' % spack_cc,
+ '-DCMAKE_CXX_COMPILER=%s' % spack_cxx,
+ '-DCMAKE_Fortran_COMPILER=%s' % spack_fc,
+ ])
+
+ blas = spec['blas'].libs
+ lapack = spec['lapack'].libs
+ options.extend([
+ '-DLAPACK_LIBRARIES=%s' % ';'.join(lapack),
+ '-DBLAS_LIBRARIES=%s' % ';'.join(blas),
+ self.define_from_variant('ENABLE_MPI', 'mpi'),
+ self.define_from_variant('BUILD_DOC', 'doc')
+ ])
+
+ return options
+
+ @run_after("install")
+ def setup_build_tests(self):
+ """Copy the build test files after the package is installed to an
+ install test subdirectory for use during `spack test run`."""
+ self.cache_extra_test_sources('.')
+
+ def test(self):
+ if "+mpi" not in self.spec:
+ print("Test of mptensor only runs with +mpi option.")
+ else:
+ with working_dir(join_path(self.install_test_root, "tests"), create=False):
+ make("clean")
+ makefile = FileFilter("Makefile")
+ makefile.filter("g++", "{0}".format(spack_cxx), string=True)
+
+ with working_dir(join_path(self.install_test_root), create=False):
+ makefile = FileFilter("Makefile.option")
+ makefile.filter("CXX =.*", "CXX ={0}".format(self.spec["mpi"].mpicxx))
+ makefile.filter(
+ "CXXFLAGS =.*", "CXXFLAGS ={0}".format(self.compiler.cxx11_flag)
+ )
+
+ math_libs = (
+ self.spec["scalapack"].libs
+ + self.spec["lapack"].libs
+ + self.spec["blas"].libs
+ )
+
+ with working_dir(join_path(self.install_test_root, "tests"), create=False):
+ make("LDFLAGS={0}".format(math_libs.ld_flags))
+
+ mpirun = self.spec["mpi"].prefix.bin.mpirun
+ mpiexec = Executable(mpirun)
+ mpiexec("-n", "1", "tensor_test.out")
+
+ # Test of mptensor has checker
+ # and checker is abort when check detect any errors.
+ print("Test of mptensor PASSED !")