summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/palace/package.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/palace/package.py b/var/spack/repos/builtin/packages/palace/package.py
new file mode 100644
index 0000000000..90eeab6cfc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/palace/package.py
@@ -0,0 +1,120 @@
+# Copyright 2013-2022 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 Palace(CMakePackage):
+ """3D finite element solver for computational electromagnetics"""
+
+ tags = ["cem", "fem", "finite-elements", "hpc", "solver"]
+
+ homepage = "https://github.com/awslabs/palace"
+ git = "https://github.com/awslabs/palace.git"
+
+ root_cmakelists_dir = "palace"
+
+ maintainers = ["sebastiangrimberg"]
+
+ version("develop", branch="main")
+ version("0.11.0", tag="v0.11.0")
+
+ variant("int64", default=False, description="Use 64 bit integers")
+ variant("openmp", default=False, description="Use OpenMP")
+ variant(
+ "gslib",
+ default=True,
+ description="Build with GSLIB library for high-order field interpolation",
+ )
+ variant(
+ "superlu-dist", default=True, description="Build with SuperLU_DIST sparse direct solver"
+ )
+ variant("strumpack", default=False, description="Build with STRUMPACK sparse direct solver")
+ variant("mumps", default=False, description="Build with MUMPS sparse direct solver")
+ variant("slepc", default=True, description="Build with SLEPc eigenvalue solver")
+ variant("arpack", default=False, description="Build with ARPACK eigenvalue solver")
+
+ # Dependencies
+ depends_on("cmake@3.13:", type="build")
+ depends_on("pkg-config", type="build")
+ depends_on("mpi")
+ depends_on("zlib")
+ depends_on("nlohmann-json")
+ depends_on("fmt")
+
+ depends_on("metis@5:+int64", when="+int64")
+ depends_on("metis@5:~int64", when="~int64")
+
+ depends_on("hypre+shared")
+ depends_on("hypre+mixedint", when="+int64")
+ depends_on("hypre~mixedint", when="~int64")
+ depends_on("hypre+openmp", when="+openmp")
+ depends_on("hypre~openmp", when="~openmp")
+
+ depends_on("petsc+double+complex")
+ depends_on("petsc+int64", when="+int64")
+ depends_on("petsc~int64", when="~int64")
+ depends_on("petsc+openmp", when="+openmp")
+ depends_on("petsc~openmp", when="~openmp")
+
+ depends_on("slepc", when="+slepc")
+ depends_on("arpack-ng+icb@develop", when="+arpack")
+ depends_on("gslib", when="+gslib")
+
+ with when("+superlu-dist"):
+ depends_on("superlu-dist+int64", when="+int64")
+ depends_on("superlu-dist~int64", when="~int64")
+ depends_on("superlu-dist+openmp", when="+openmp")
+ depends_on("superlu-dist~openmp", when="~openmp")
+
+ with when("+strumpack"):
+ depends_on("strumpack+butterflypack+zfp+parmetis")
+ depends_on("strumpack+openmp", when="+openmp")
+ depends_on("strumpack~openmp", when="~openmp")
+
+ with when("+mumps"):
+ depends_on("mumps+metis+parmetis")
+ depends_on("mumps+openmp", when="+openmp")
+ depends_on("mumps~openmp", when="~openmp")
+
+ # Conflicts: Palace always builds its own internal MFEM
+ conflicts("^mfem", msg="Palace builds its own internal MFEM")
+
+ # More dependency variant conflicts
+ conflicts("^hypre+int64", msg="Palace uses HYPRE's mixedint option for 64 bit integers")
+ conflicts("^petsc~double", msg="Palace requires PETSc with double precision")
+ conflicts("^petsc~complex", msg="Palace requires PETSc with complex numbers")
+ conflicts("^petsc+metis", msg="Palace requires PETSc without METIS")
+ conflicts("^petsc+hypre", msg="Palace requires PETSc without HYPRE")
+ conflicts("^petsc+superlu-dist", msg="Palace requires PETSc without SuperLU_DIST")
+ conflicts("^slepc+arpack", msg="Palace requires SLEPc without ARPACK")
+ conflicts("^mumps+int64", msg="Palace requires MUMPS without 64 bit integers")
+
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("PALACE_WITH_OPENMP", "openmp"),
+ self.define_from_variant("PALACE_WITH_GSLIB", "gslib"),
+ self.define_from_variant("PALACE_WITH_SUPERLU", "superlu-dist"),
+ self.define_from_variant("PALACE_WITH_STRUMPACK", "strumpack"),
+ self.define_from_variant("PALACE_WITH_MUMPS", "mumps"),
+ self.define_from_variant("PALACE_WITH_SLEPC", "slepc"),
+ self.define_from_variant("PALACE_WITH_ARPACK", "arpack"),
+ "-DPALACE_WITH_INTERNAL_JSON=OFF",
+ "-DPALACE_WITH_INTERNAL_FMT=OFF",
+ ]
+
+ # MPI compiler wrappers are not required, but MFEM test builds need to know to link
+ # against MPI libraries
+ if "+superlu-dist" in self.spec:
+ args += ["-DSuperLUDist_REQUIRED_PACKAGES=MPI"]
+ if "+strumpack" in self.spec:
+ args += ["-DSTRUMPACK_REQUIRED_PACKAGES=MPI;MPI_Fortran"]
+ if "+mumps" in self.spec:
+ args += ["-DMUMPS_REQUIRED_PACKAGES=MPI;MPI_Fortran"]
+
+ # HYPRE is always built with external BLAS/LAPACK
+ args += ["-DHYPRE_REQUIRED_PACKAGES=LAPACK;BLAS"]
+
+ return args