diff options
author | corentin-dev <60616120+corentin-dev@users.noreply.github.com> | 2021-08-24 15:43:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-24 07:43:35 -0600 |
commit | 213ec6df5f8d9efb17eb17c69d0a0cfbe52444b7 (patch) | |
tree | 6815adffd3cb54b60f3f42037d06677ac9304983 /var | |
parent | 5823a9b302b9786d64f918a0b5e5143229ffe96b (diff) | |
download | spack-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')
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') |