summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorcorentin-dev <60616120+corentin-dev@users.noreply.github.com>2021-08-24 15:43:35 +0200
committerGitHub <noreply@github.com>2021-08-24 07:43:35 -0600
commit213ec6df5f8d9efb17eb17c69d0a0cfbe52444b7 (patch)
tree6815adffd3cb54b60f3f42037d06677ac9304983 /var
parent5823a9b302b9786d64f918a0b5e5143229ffe96b (diff)
downloadspack-213ec6df5f8d9efb17eb17c69d0a0cfbe52444b7.tar.gz
spack-213ec6df5f8d9efb17eb17c69d0a0cfbe52444b7.tar.bz2
spack-213ec6df5f8d9efb17eb17c69d0a0cfbe52444b7.tar.xz
spack-213ec6df5f8d9efb17eb17c69d0a0cfbe52444b7.zip
petsc: added variants and dips (#24725)
Add HPDDM, MMG, ParMMG and Tetgen to PETSc. Add mmg version 5.5.2 (compatible with PETSc). Add parmmg, depending on mmg. Add pic variant to tetgen for PETSc.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/arpack-ng/package.py3
-rw-r--r--var/spack/repos/builtin/packages/freefem/acmpi.patch11
-rw-r--r--var/spack/repos/builtin/packages/freefem/acmpi4.8.patch11
-rw-r--r--var/spack/repos/builtin/packages/freefem/package.py64
-rw-r--r--var/spack/repos/builtin/packages/hpddm/package.py75
-rw-r--r--var/spack/repos/builtin/packages/mmg/package.py1
-rw-r--r--var/spack/repos/builtin/packages/parmmg/package.py35
-rw-r--r--var/spack/repos/builtin/packages/petsc/package.py21
-rw-r--r--var/spack/repos/builtin/packages/tetgen/package.py4
9 files changed, 225 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/arpack-ng/package.py b/var/spack/repos/builtin/packages/arpack-ng/package.py
index ee3e3c218c..971e9ca31f 100644
--- a/var/spack/repos/builtin/packages/arpack-ng/package.py
+++ b/var/spack/repos/builtin/packages/arpack-ng/package.py
@@ -128,6 +128,9 @@ class ArpackNg(Package):
if '+shared' in spec:
options.append('-DBUILD_SHARED_LIBS=ON')
+ else:
+ options.append('-DBUILD_SHARED_LIBS=OFF')
+ options.append('-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true')
cmake('.', *options)
make()
diff --git a/var/spack/repos/builtin/packages/freefem/acmpi.patch b/var/spack/repos/builtin/packages/freefem/acmpi.patch
new file mode 100644
index 0000000000..f6dfdc1d2b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/freefem/acmpi.patch
@@ -0,0 +1,11 @@
+--- a/etc/config/m4/acmpi.m4 2021-04-19 21:45:30.000000000 +0200
++++ b/etc/config/m4/acmpi.m4 2021-07-06 09:53:06.100076241 +0200
+@@ -296,7 +296,7 @@
+ test -n "$MPICC" && ff_mpicshow=`$MPICC -show` 2>/dev/null
+ test -n "$MPIFC" && ff_mpifcshow=`$MPIFC -show` 2>/dev/null
+ if test "$with_mpilibs" = no -o -z "$with_mpilibs" ; then
+- [ff_MPI_INCLUDE=`echo $ff_mpishow|tr ' ' '\n'| grep -E '^[-/][^WLlOgpf]|^-Wp,'|tr '\n' ' '`]
++ [ff_MPI_INCLUDE=`echo $ff_mpishow|tr ' ' '\n' | sed '1 d'| grep -E '^[-/][^WLlOgpf]|^-Wp,'|tr '\n' ' '`]
+ ff_MPI_LIB_DIRS=""
+ [ff_MPI_LIB=`echo $ff_mpishow|tr ' ' '\n'| grep -E '^-[Llp]|^-Wl,'|tr '\n' ' '`]
+ [ff_MPI_LIBC=`echo $ff_mpicshow|tr ' ' '\n'| grep -E '^-[Llp]|^-Wl,'|tr '\n' ' '`]
diff --git a/var/spack/repos/builtin/packages/freefem/acmpi4.8.patch b/var/spack/repos/builtin/packages/freefem/acmpi4.8.patch
new file mode 100644
index 0000000000..59cbec98c6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/freefem/acmpi4.8.patch
@@ -0,0 +1,11 @@
+--- a/etc/config/m4/acmpi.m4 2021-04-19 21:45:30.000000000 +0200
++++ b/etc/config/m4/acmpi.m4 2021-07-06 09:53:06.100076241 +0200
+@@ -296,7 +296,7 @@
+ test -n "$MPICC" && ff_mpicshow=`$MPICC -show` 2>/dev/null
+ test -n "$MPIFC" && ff_mpifcshow=`$MPIFC -show` 2>/dev/null
+ if test "$with_mpilibs" = no -o -z "$with_mpilibs" ; then
+- [ff_MPI_INCLUDE=`echo $ff_mpishow|tr ' ' '\n'| grep -E '^[-/][^WLlOgp]|^-Wp,'|tr '\n' ' '`]
++ [ff_MPI_INCLUDE=`echo $ff_mpishow|tr ' ' '\n' | sed '1 d'| grep -E '^[-/][^WLlOgpf]|^-Wp,'|tr '\n' ' '`]
+ ff_MPI_LIB_DIRS=""
+ [ff_MPI_LIB=`echo $ff_mpishow|tr ' ' '\n'| grep -E '^-[Llp]|^-Wl,'|tr '\n' ' '`]
+ [ff_MPI_LIBC=`echo $ff_mpicshow|tr ' ' '\n'| grep -E '^-[Llp]|^-Wl,'|tr '\n' ' '`]
diff --git a/var/spack/repos/builtin/packages/freefem/package.py b/var/spack/repos/builtin/packages/freefem/package.py
new file mode 100644
index 0000000000..69d2e017fd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/freefem/package.py
@@ -0,0 +1,64 @@
+# 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 Freefem(AutotoolsPackage):
+ """FreeFEM is a popular 2D and 3D partial differential equations (PDE) solver.
+ It allows you to easily implement your own physics modules using the provided
+ FreeFEM language. FreeFEM offers a large list of finite elements, like the
+ Lagrange, Taylor-Hood, etc., usable in the continuous and discontinuous
+ Galerkin method framework.
+ """
+
+ homepage = "https://freefem.org"
+ url = "https://github.com/FreeFem/FreeFem-sources/archive/refs/tags/v4.9.tar.gz"
+
+ maintainers = ['corentin-dev']
+
+ version('4.9', sha256='299ba2b73dfff578b7890f693c1e835680bf55eba87263cabd60d81909e1e0e4')
+ version('4.8', sha256='499b1ca24d45088226a238412ea1492d9cc3eb6088866904145511469780180d')
+ version('4.7-1', sha256='60d84424d20b5f6abaee638dc423480fc76f9c389bba1a2f23fd984e39a3fb96')
+ version('4.7', sha256='c1797b642e9c3d543eaad4949d26ce1e986f531ee9be14fff606ea525ada9206')
+ version('4.6', sha256='6c09af8e189fc02214b0e664b679b49832c134e29cf1ede3cab29cf754f6078f')
+ version('4.5', sha256='5b2d4125c312da8fbedd49a72e742f18f35e0ae100c82fb493067dfad5d51432')
+
+ variant('mpi', default=False,
+ description='Activate MPI support')
+ variant('petsc', default=False,
+ description='Compile with PETSc/SLEPc')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('slepc', when='+petsc')
+
+ # Patches to help configure find correctly MPI flags
+ # when using full path for compilers.
+ patch('acmpi.patch', when='@4.9', sha256='8157d89fc19227a555b54a4f2eb1c44da8aef3192077a6df2e88093b850f4c50')
+ patch('acmpi4.8.patch', when='@:4.8', sha256='be84f7b1b8182ff0151c258056a09bda70d72a611b0a4da1fa1954df2e0fe84e')
+
+ def autoreconf(self, spec, prefix):
+ autoreconf = which('autoreconf')
+ autoreconf('-i')
+
+ def configure_args(self):
+ spec = self.spec
+ options = ['--disable-mkl',
+ 'CFLAGS=%s' % ' '.join(spec.compiler_flags['cflags']),
+ 'FFLAGS=%s' % ' '.join(spec.compiler_flags['fflags']),
+ 'CXXFLAGS=%s' % ' '.join(spec.compiler_flags['cxxflags'])]
+
+ if '+petsc' in spec:
+ options.append('--with-petsc=%s'
+ % spec['petsc'].prefix.lib.petsc.conf.petscvariables)
+ options.append('--with-slepc-ldflags=%s'
+ % spec['slepc'].libs.ld_flags)
+ options.append('--with-slepc-include=%s'
+ % spec['slepc'].headers.include_flags)
+ else:
+ options.append('--without-petsc')
+ options.append('--without-slepc')
+
+ return options
diff --git a/var/spack/repos/builtin/packages/hpddm/package.py b/var/spack/repos/builtin/packages/hpddm/package.py
new file mode 100644
index 0000000000..f2b6794777
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hpddm/package.py
@@ -0,0 +1,75 @@
+# 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 Hpddm(Package):
+ """High-performance unified framework for domain decomposition methods."""
+
+ homepage = "https://github.com/hpddm/hpddm"
+ url = "https://github.com/hpddm/hpddm"
+ git = "https://github.com/hpddm/hpddm.git"
+
+ maintainers = ['corentin-dev']
+
+ version('main', branch='main')
+ version('2.1.2', commit='e58205623814f59bf2aec2e2bab8eafcfbd22466')
+
+ depends_on('mpi')
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('mumps')
+ depends_on('hypre')
+ depends_on('scalapack')
+ depends_on('arpack-ng')
+ depends_on('python')
+
+ def configure(self):
+ makefile_inc = []
+ # cflags = [
+ makefile_inc.append('SOLVER ?= MUMPS')
+ makefile_inc.append('SUBSOLVER ?= MUMPS')
+ makefile_inc.append('EIGENSOLVER ?= ARPACK')
+ makefile_inc.append('MPICXX ?= mpic++')
+ makefile_inc.append('MPICC ?= mpicc')
+ makefile_inc.append('MPIF90 ?= mpif90')
+ makefile_inc.append('MPIRUN ?= mpirun -np')
+
+ makefile_inc.append('override CXXFLAGS += -std=c++11 -O3 -fPIC')
+ makefile_inc.append('override CFLAGS += -std=c99 -O3')
+ makefile_inc.append('INCS =')
+ makefile_inc.append('LIBS =')
+
+ makefile_inc.append("HPDDMFLAGS ?= -DHPDM_NUMBERING=\'C\'")
+
+ makefile_inc.append('MUMPS_INCS = ')
+ makefile_inc.append('PYTHON_INCS = ')
+ makefile_inc.append('BLAS_LIBS = -lopenblas')
+ makefile_inc.append('ARPACK_LIBS = -larpack')
+ makefile_inc.append('SCALAPACK_LIBS = -lscalapack')
+ makefile_inc.append(' '.join([
+ 'MUMPS_LIBS', '=',
+ '-lcmumps',
+ '-ldmumps',
+ '-lsmumps',
+ '-lzmumps',
+ '-lmumps_common',
+ '-lpord',
+ '-fopenmp']))
+ makefile_inc.append('HYPRE_LIBS = -lHYPRE')
+ makefile_inc.append('PYTHON_LIBS = -lpython3')
+
+ with working_dir('.'):
+ with open('Makefile.inc', 'w') as fh:
+ fh.write('\n'.join(makefile_inc))
+
+ def patch(self):
+ self.configure()
+
+ def install(self, spec, prefix):
+ make()
+ install_tree('include', prefix.include)
+ # make('install')
diff --git a/var/spack/repos/builtin/packages/mmg/package.py b/var/spack/repos/builtin/packages/mmg/package.py
index a420975bb3..caebb025df 100644
--- a/var/spack/repos/builtin/packages/mmg/package.py
+++ b/var/spack/repos/builtin/packages/mmg/package.py
@@ -26,6 +26,7 @@ class Mmg(CMakePackage):
homepage = "http://www.mmgtools.org/"
url = "https://github.com/MmgTools/mmg/archive/v5.3.13.tar.gz"
+ version('5.5.2', sha256='58e3b866101e6f0686758e16bcf9fb5fb06c85184533fc5054ef1c8adfd4be73')
version('5.4.0', sha256='2b5cc505018859856766be901797ff5d4789f89377038a0211176a5571039750')
version('5.3.13', sha256='d9a5925b69b0433f942ab2c8e55659d9ccea758743354b43d54fdf88a6c3c191')
diff --git a/var/spack/repos/builtin/packages/parmmg/package.py b/var/spack/repos/builtin/packages/parmmg/package.py
new file mode 100644
index 0000000000..aa151d9cff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/parmmg/package.py
@@ -0,0 +1,35 @@
+# 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 Parmmg(CMakePackage):
+ """ParMMG is a parallel remesher based on MMG"""
+
+ homepage = "https://www.mmgtools.org"
+ url = "https://github.com/MmgTools/ParMmg/archive/refs/tags/v1.3.0.tar.gz"
+
+ maintainers = ['corentin-dev']
+
+ version('1.3.0', sha256='d43b73a73b62545b5a31bbe25562f69c9e63ad8a6d416bd459781203e37427cf')
+ version('1.2.0', sha256='99729cc292dcb59c87e3f25d4cabf5a64841e83b624d383e1fd3fb7f960df672')
+ version('1.1.0', sha256='a5904f1f56b7809ab9ec2f6118b03a082ec2b5564355a73c74fc55426cc69600')
+ version('1.0.0', sha256='614feb815ff6cdfc9bced30e8105994f0bf3a812243619d3349203ec1851cf6d')
+
+ depends_on('mmg')
+ depends_on('metis')
+ depends_on('vtk')
+ depends_on('mpi')
+
+ variant('pic', default=True,
+ description='Build with position independent code')
+
+ def cmake_args(self):
+ args = [
+ self.define_from_variant('CMAKE_POSITION_INDEPENDENT_CODE', 'pic'),
+ ]
+
+ return args
diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py
index 4028392723..b0c6810d41 100644
--- a/var/spack/repos/builtin/packages/petsc/package.py
+++ b/var/spack/repos/builtin/packages/petsc/package.py
@@ -91,6 +91,14 @@ class Petsc(Package, CudaPackage, ROCmPackage):
description='Activates support for HDF5 (only parallel)')
variant('hypre', default=True,
description='Activates support for Hypre (only parallel)')
+ variant('hpddm', default=False,
+ description='Activates support for HPDDM (only parallel)')
+ variant('mmg', default=False,
+ description='Activates support for MMG')
+ variant('parmmg', default=False,
+ description='Activates support for ParMMG (only parallel)')
+ variant('tetgen', default=False,
+ description='Activates support for Tetgen')
# Mumps is disabled by default, because it depends on Scalapack
# which is not portable to all HPC systems
variant('mumps', default=False,
@@ -161,6 +169,8 @@ class Petsc(Package, CudaPackage, ROCmPackage):
conflicts('+fftw', when='~mpi', msg=mpi_msg)
conflicts('+hdf5', when='~mpi', msg=mpi_msg)
conflicts('+hypre', when='~mpi', msg=mpi_msg)
+ conflicts('+hpddm', when='~mpi', msg=mpi_msg)
+ conflicts('+parmmg', when='~mpi', msg=mpi_msg)
conflicts('+moab', when='~mpi', msg=mpi_msg)
conflicts('+mumps', when='~mpi', msg=mpi_msg)
conflicts('+p4est', when='~mpi', msg=mpi_msg)
@@ -229,6 +239,9 @@ class Petsc(Package, CudaPackage, ROCmPackage):
depends_on('parmetis+int64', when='+metis+mpi+int64')
depends_on('parmetis~int64', when='+metis+mpi~int64')
depends_on('valgrind', when='+valgrind')
+ depends_on('mmg', when='+mmg')
+ depends_on('parmmg', when='+parmmg')
+ depends_on('tetgen+pic', when='+tetgen')
# Hypre does not support complex numbers.
# Also PETSc prefer to build it without internal superlu, likely due to
# conflict in headers see
@@ -417,6 +430,9 @@ class Petsc(Package, CudaPackage, ROCmPackage):
(jpeg_sp, 'libjpeg', True, True),
(scalapack_sp, 'scalapack', False, True),
'strumpack',
+ 'mmg',
+ 'parmmg',
+ ('tetgen', 'tetgen', False, False),
):
# Cannot check `library in spec` because of transitive deps
# Cannot check variants because parmetis keys on +metis
@@ -472,6 +488,11 @@ class Petsc(Package, CudaPackage, ROCmPackage):
'--with-mkl_pardiso-dir=%s' % spec['mkl'].prefix
)
+ # For the moment, HPDDM does not work as a dependency
+ # using download instead
+ if '+hpddm' in spec:
+ options.append('--download-hpddm')
+
python('configure', '--prefix=%s' % prefix, *options)
# PETSc has its own way of doing parallel make.
diff --git a/var/spack/repos/builtin/packages/tetgen/package.py b/var/spack/repos/builtin/packages/tetgen/package.py
index 1efff4ea65..503c6bd297 100644
--- a/var/spack/repos/builtin/packages/tetgen/package.py
+++ b/var/spack/repos/builtin/packages/tetgen/package.py
@@ -21,6 +21,7 @@ class Tetgen(Package):
version('1.5.0', sha256='4d114861d5ef2063afd06ef38885ec46822e90e7b4ea38c864f76493451f9cf3', url='http://www.tetgen.org/1.5/src/tetgen1.5.0.tar.gz')
version('1.4.3', sha256='952711bb06b7f64fd855eb24c33f08e3faf40bdd54764de10bbe5ed5b0dce034', url='http://www.tetgen.org/files/tetgen1.4.3.tar.gz')
+ variant('pic', default=True, description='Builds the library in pic mode.')
variant('debug', default=False, description='Builds the library in debug mode.')
variant('except', default=False, description='Replaces asserts with exceptions for better C++ compatibility.')
@@ -28,9 +29,12 @@ class Tetgen(Package):
def patch(self):
cflags = '-g -O0' if '+debug' in self.spec else '-g0 -O3'
+ cflags = cflags + ' -fPIC' if '+pic' in self.spec else cflags
+ predcflags = '-fPIC' if '+pic' in self.spec else ''
mff = FileFilter('makefile')
mff.filter(r'^(C(XX)?FLAGS\s*=)(.*)$', r'\1 {0}'.format(cflags))
+ mff.filter(r'^(PREDC(XX)?FLAGS\s*=.*)$', r'\1 {0}'.format(predcflags))
if '+except' in self.spec:
hff = FileFilter('tetgen.h')