sundials: add version 5.0.0 and new variant (#13375)

* sundials: add version 5.0.0 and new variant

plus some cleanup

* sundiaks: fix formatting

* sundials: fix dependencies
This commit is contained in:
Cody Balos 2019-10-23 21:06:20 -07:00 committed by Adam J. Stewart
parent d0d0456fa7
commit 177f661bb3

View File

@ -14,11 +14,14 @@ class Sundials(CMakePackage):
homepage = "https://computing.llnl.gov/projects/sundials"
url = "https://computing.llnl.gov/projects/sundials/download/sundials-2.7.0.tar.gz"
git = "https://github.com/llnl/sundials.git"
maintainers = ['cswoodward', 'gardner48', 'balos1']
# ==========================================================================
# Versions
# ==========================================================================
version('develop', branch='develop')
version('5.0.0', sha256='345141ec01c641d0bdfb3476c478b7e74fd6a7192a478a27cafe75d9da2d7dd3')
version('4.1.0', sha256='280de1c27b2360170a6f46cb3799b2aee9dff3bddbafc8b08c291a47ab258aa5')
version('4.0.1', sha256='29e409c8620e803990edbda1ebf49e03a38c08b9187b90658d86bddae913aed4')
version('3.2.1', sha256='47d94d977ab2382cdcdd02f72a25ebd4ba8ca2634bbb2f191fe1636e71c86808')
@ -67,16 +70,18 @@ class Sundials(CMakePackage):
description='Enable RAJA parallel vector')
# External libraries
variant('hypre', default=False,
description='Enable Hypre MPI parallel vector')
variant('lapack', default=False,
description='Enable LAPACK direct solvers')
variant('klu', default=False,
description='Enable KLU sparse, direct solver')
variant('superlu-mt', default=False,
description='Enable SuperLU_MT sparse, direct solver')
variant('hypre', default=False,
description='Enable Hypre MPI parallel vector')
variant('petsc', default=False,
description='Enable PETSc MPI parallel vector')
variant('superlu-mt', default=False,
description='Enable SuperLU_MT sparse, direct solver')
variant('superlu-dist', default=False,
description='Enable SuperLU_DIST sparse, direct solver')
# Library type
variant('shared', default=True,
@ -84,9 +89,11 @@ class Sundials(CMakePackage):
variant('static', default=True,
description='Build static libraries')
# Fortran interface
# Fortran interfaces
variant('fcmix', default=False,
description='Enable Fortran interface')
description='Enable Fortran 77 interface')
variant('f2003', default=False,
description='Enable Fortran 2003 interface')
# Examples
variant('examples-c', default=True,
@ -97,10 +104,10 @@ class Sundials(CMakePackage):
description='Enable Fortran 77 examples')
variant('examples-f90', default=False,
description='Enable Fortran 90 examples')
variant('examples-f2003', default=False,
description='Enable Fortran 2003 examples')
variant('examples-cuda', default=False,
description='Enable CUDA examples')
variant('examples-raja', default=False,
description='Enable RAJA examples')
variant('examples-install', default=True,
description='Install examples')
@ -121,7 +128,8 @@ class Sundials(CMakePackage):
conflicts('+raja', when='@:2.7.0')
conflicts('~int64', when='@:2.7.0')
conflicts('+examples-cuda', when='@:2.7.0')
conflicts('+examples-raja', when='@:2.7.0')
conflicts('+superlu-dist', when='@:4.1.0')
conflicts('+f2003', when='@:4.1.0')
# External libraries incompatible with 64-bit indices
conflicts('+lapack', when='@3.0.0: +int64')
@ -130,17 +138,15 @@ class Sundials(CMakePackage):
# External libraries incompatible with single precision
conflicts('+klu', when='precision=single')
conflicts('+hypre', when='+hypre@:2.12.0 precision=single')
conflicts('+superlu-dist', when='precision=single')
# External libraries incompatible with extended (quad) precision
conflicts('+lapack', when='precision=extended')
conflicts('+superlu-mt', when='precision=extended')
conflicts('+superlu-dist', when='precision=extended')
conflicts('+klu', when='precision=extended')
conflicts('+hypre', when='+hypre@:2.12.0 precision=extended')
# External libraries that need to be built with MPI
conflicts('+hypre', when='~mpi')
conflicts('+petsc', when='~mpi')
# SuperLU_MT interface requires lapack for external blas (before v3.0.0)
conflicts('+superlu-mt', when='@:2.7.0 ~lapack')
@ -149,39 +155,35 @@ class Sundials(CMakePackage):
# ==========================================================================
# Build dependencies
depends_on('cmake@2.8.1:', type='build')
depends_on('cmake@2.8.12:', type='build', when='@3.1.2')
depends_on('cmake@3.0.2:', type='build', when='@4.0.0-dev.1')
depends_on('cmake@3.1.3:', type='build', when='@3.2.0,4.0.0-dev.2')
depends_on('cmake@3.5:', type='build')
# MPI related dependencies
depends_on('mpi', when='+mpi')
depends_on('mpi', when='+hypre')
depends_on('mpi', when='+petsc')
depends_on('mpi', when='+superlu-dist')
# Other parallelism dependencies
depends_on('cuda', when='+cuda')
depends_on('raja', when='+raja')
depends_on('raja +cuda ~openmp', when='+raja')
# External libraries
depends_on('blas', when='+lapack')
depends_on('lapack', when='+lapack')
depends_on('suite-sparse', when='+klu')
depends_on('petsc +mpi', when='+petsc')
depends_on('hypre +mpi', when='+hypre')
depends_on('superlu-dist@6.1.1:', when='+superlu-dist')
# Require that external libraries built with the same precision
depends_on('petsc~double~complex', when='+petsc precision=single')
depends_on('petsc+double~complex', when='+petsc precision=double')
# Require that external libraries built with the same index type
depends_on('hypre', when='+hypre')
depends_on('hypre~int64', when='+hypre ~int64')
depends_on('hypre+int64', when='+hypre +int64')
depends_on('petsc', when='+petsc')
depends_on('petsc~int64', when='+petsc ~int64')
depends_on('petsc+int64', when='+petsc +int64')
# Require that PETSc is built with MPI
depends_on('petsc+mpi', when='+petsc')
depends_on('superlu-dist+int64', when='+superlu-dist +int64')
# Require that SuperLU_MT built with external blas
depends_on('superlu-mt+blas', when='+superlu-mt')
@ -231,7 +233,8 @@ def on_off(varstr):
args.extend(['-DSUNDIALS_INDEX_TYPE=int32_t'])
# Fortran interface
args.extend(['-DFCMIX_ENABLE=%s' % on_off('+fcmix')])
args.extend(['-DF77_INTERFACE_ENABLE=%s' % on_off('+fcmix')])
args.extend(['-DF2003_INTERFACE_ENABLE=%s' % on_off('+f2003')])
# library type
args.extend([
@ -263,12 +266,12 @@ def on_off(varstr):
if ('+fcmix' in spec) and ('+examples-f90' in spec):
args.extend(['-DMPI_MPIF90=%s' % spec['mpi'].mpifc])
# Building with LAPACK and BLAS
if '+lapack' in spec:
# Building with Hypre
if '+hypre' in spec:
args.extend([
'-DLAPACK_ENABLE=ON',
'-DLAPACK_LIBRARIES=%s'
% (spec['lapack'].libs + spec['blas'].libs).joined(';')
'-DHYPRE_ENABLE=ON',
'-DHYPRE_INCLUDE_DIR=%s' % spec['hypre'].prefix.include,
'-DHYPRE_LIBRARY_DIR=%s' % spec['hypre'].prefix.lib
])
# Building with KLU
@ -279,6 +282,32 @@ def on_off(varstr):
'-DKLU_LIBRARY_DIR=%s' % spec['suite-sparse'].prefix.lib
])
# Building with LAPACK
if '+lapack' in spec:
args.extend([
'-DLAPACK_ENABLE=ON',
'-DLAPACK_LIBRARIES=%s'
% (spec['lapack'].libs + spec['blas'].libs).joined(';')
])
# Building with PETSc
if '+petsc' in spec:
args.extend([
'-DPETSC_ENABLE=ON',
# PETSC_DIR was added in 5.0.0
'-DPETSC_DIR=%s' % spec['petsc'].prefix,
# The following options were removed 5.0.0, but we keep
# them here for versions < 5.0.0.
'-DPETSC_INCLUDE_DIR=%s' % spec['petsc'].prefix.include,
'-DPETSC_LIBRARY_DIR=%s' % spec['petsc'].prefix.lib
])
# Building with RAJA
if '+raja' in spec:
args.extend([
'-DRAJA_DIR=%s' % spec['raja'].prefix.share.raja.cmake
])
# Building with SuperLU_MT
if '+superlu-mt' in spec:
if spec.satisfies('@3.0.0:'):
@ -298,26 +327,18 @@ def on_off(varstr):
else:
args.append('-DSUPERLUMT_THREAD_TYPE=Pthread')
# Building with Hypre
if '+hypre' in spec:
# Building with SuperLU_DIST
if '+superlu-dist' in spec:
args.extend([
'-DHYPRE_ENABLE=ON',
'-DHYPRE_INCLUDE_DIR=%s' % spec['hypre'].prefix.include,
'-DHYPRE_LIBRARY_DIR=%s' % spec['hypre'].prefix.lib
])
# Building with PETSc
if '+petsc' in spec:
args.extend([
'-DPETSC_ENABLE=ON',
'-DPETSC_INCLUDE_DIR=%s' % spec['petsc'].prefix.include,
'-DPETSC_LIBRARY_DIR=%s' % spec['petsc'].prefix.lib
])
# Building with RAJA
if '+raja' in spec:
args.extend([
'-DRAJA_DIR=%s' % spec['raja'].prefix.share.raja.cmake
'-DSUPERLUDIST_ENABLE=ON',
'-DSUPERLUDIST_INCLUDE_DIR=%s'
% spec['superlu-dist'].prefix.include,
'-DSUPERLUDIST_LIBRARY_DIR=%s'
% spec['superlu-dist'].prefix.lib,
'-DSUPERLUDIST_LIBRARIES=%s'
% spec['blas'].libs,
'-DSUPERLUDIST_OpenMP=%s'
% on_off('^superlu-dist+openmp')
])
# Examples
@ -327,8 +348,10 @@ def on_off(varstr):
'-DEXAMPLES_ENABLE_CXX=%s' % on_off('+examples-cxx'),
'-DEXAMPLES_ENABLE_F77=%s' % on_off('+examples-f77'),
'-DEXAMPLES_ENABLE_F90=%s' % on_off('+examples-f90'),
'-DEXAMPLES_ENABLE_F2003=%s' % on_off('+examples-f2003'),
'-DEXAMPLES_ENABLE_CUDA=%s' % on_off('+examples-cuda'),
'-DEXAMPLES_ENABLE_RAJA=%s' % on_off('+examples-raja')
# option removed in 5.0.0
'-DEXAMPLES_ENABLE_RAJA=%s' % on_off('+raja')
])
else:
args.extend([
@ -378,10 +401,12 @@ def filter_compilers(self):
'arkode/C_openmp/Makefile',
'arkode/C_parallel/Makefile',
'arkode/C_parhyp/Makefile',
'arkode/C_petsc/Makefile',
'arkode/C_serial/Makefile',
'cvode/C_openmp/Makefile',
'cvode/parallel/Makefile',
'cvode/parhyp/Makefile',
'cvode/petsc/Makefile',
'cvode/serial/Makefile',
'cvodes/C_openmp/Makefile',
'cvodes/parallel/Makefile',
@ -418,6 +443,7 @@ def filter_compilers(self):
'sunlinsol/sptfqmr/parallel/Makefile',
'sunlinsol/sptfqmr/serial/Makefile',
'sunlinsol/superlumt/Makefile',
'sunlinsol/superludist/Makefile',
'sunmatrix/band/Makefile',
'sunmatrix/dense/Makefile',
'sunmatrix/sparse/Makefile'
@ -450,6 +476,15 @@ def filter_compilers(self):
'arkode/F90_serial/Makefile'
]
f2003_files = [
'arkode/F2003_serial/Makefile',
'cvode/F2003_serial/Makefile',
'cvodes/F2003_serial/Makefike',
'ida/F2003_serial/Makefile',
'idas/F2003_serial/Makefile',
'kinsol/F2003_serial/Makefile'
]
for filename in cc_files:
filter_file(os.environ['CC'], self.compiler.cc,
os.path.join(dirname, filename), **kwargs)
@ -476,6 +511,11 @@ def filter_compilers(self):
filter_file(os.environ['FC'], self.compiler.fc,
os.path.join(dirname, filename), **kwargs)
if ('+f2003' in spec) and ('+examples-f2003' in spec):
for filename in f2003_files:
filter_file(os.environ['FC'], self.compiler.fc,
os.path.join(dirname, filename), **kwargs)
@property
def headers(self):
"""Export the headers and defines of SUNDIALS.