From 177f661bb3bde9c6ca2989214069ef27cdc3e8ec Mon Sep 17 00:00:00 2001 From: Cody Balos Date: Wed, 23 Oct 2019 21:06:20 -0700 Subject: 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 --- .../repos/builtin/packages/sundials/package.py | 172 +++++++++++++-------- 1 file changed, 106 insertions(+), 66 deletions(-) diff --git a/var/spack/repos/builtin/packages/sundials/package.py b/var/spack/repos/builtin/packages/sundials/package.py index e025c912cb..632bde8634 100644 --- a/var/spack/repos/builtin/packages/sundials/package.py +++ b/var/spack/repos/builtin/packages/sundials/package.py @@ -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('lapack', default=False, + variant('hypre', default=False, + description='Enable Hypre MPI parallel vector') + variant('lapack', default=False, description='Enable LAPACK direct solvers') - variant('klu', default=False, + 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, + 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,25 +128,24 @@ 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') conflicts('+hypre', when='+hypre@:2.6.1a +int64') # External libraries incompatible with single precision - conflicts('+klu', when='precision=single') - conflicts('+hypre', when='+hypre@:2.12.0 precision=single') + 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('+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') + 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') # 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('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 @@ class Sundials(CMakePackage): 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 @@ class Sundials(CMakePackage): 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 @@ class Sundials(CMakePackage): '-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,37 +327,31 @@ class Sundials(CMakePackage): else: args.append('-DSUPERLUMT_THREAD_TYPE=Pthread') - # Building with Hypre - if '+hypre' 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: + # Building with SuperLU_DIST + if '+superlu-dist' 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 if spec.satisfies('@3.0.0:'): args.extend([ - '-DEXAMPLES_ENABLE_C=%s' % on_off('+examples-c'), - '-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_CUDA=%s' % on_off('+examples-cuda'), - '-DEXAMPLES_ENABLE_RAJA=%s' % on_off('+examples-raja') + '-DEXAMPLES_ENABLE_C=%s' % on_off('+examples-c'), + '-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'), + # option removed in 5.0.0 + '-DEXAMPLES_ENABLE_RAJA=%s' % on_off('+raja') ]) else: args.extend([ @@ -378,10 +401,12 @@ class Sundials(CMakePackage): '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 @@ class Sundials(CMakePackage): '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 @@ class Sundials(CMakePackage): '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 @@ class Sundials(CMakePackage): 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. -- cgit v1.2.3-70-g09d2