CEED v3.0 release (#15500)

* [mfem] A few updates: add 'strumpack' variant; add 'zlib'
       variant (same as 'gzstream'); fix optmization flag
       for v4.0.

* [mfem] flake8 fix

* [mfem] Add version 4.1

* [mfem] Add/tweak some 'conflicts' directives.

* [gslib] Add new release versions + 'develop' version.

* [petsc] Restrict hdf5 version to <= 1.10.99 since 1.12.0 fails

* [metis] Use the original metis url for v4.0.3.

* [conduit] Remove restrictions to the used hdf5 variant to allow
          building with other packages that use hdf5, e.g. petsc.

* [mfem] Few updates:
* Replace the 'gzstream' variant with 'zlib' variant.
* Do not add system library paths with -L flags.
* Allow '+pumi+shared' variant.
* Update the 'test_builds.sh' script.

* [occa] Add version 1.0.9.

* [mfem] Some OCCA and RAJA updates.

* [gslib] Fix the build for new versions of the library.

* [mfem] Add 'gslib' variant for GSLIB.

* [mfem] Add 'cuda' variant.

* [mfem] Add 'libceed' variant + a few more tweaks.

* [mfem] Add 'umpire' variant.

* [ceed] Add a draft for v3.0. Not tested. Just made sure that
       concretization works for 'ceed' and 'ceed+cuda'.

* [nek] Fix Nek5000/NekCEM

* [nek] Add Nek5000-v19 & polishing Nek packages

* [flake8] Fix flake8 failure

* petsc: use of HDF5 does not care about +hl+fortran

* [petsc] Temporarily allow any hypre version with petsc@develop.

[ceed] Remove the requirement for hypre@develop.

* [libceed] Do not explicitly set NVCCFLAGS for v0.5 and later.

* [laghos] Add version 3.0, pointing to dev branch for now.
         Do not set CXX at the make command line.
         Simplify the dependecy directives a little.

[ceed] Use laghos v3.0 for ceed v3.0.0.

* [laghos] Keep the injection of CXX in the makefile for laghos
         versions <= 2.0.

* [nekcem] Recovert hash-versions used by older versions of the
         'ceed' package.

* [occa] Disable hip autodetection because it fails on some machines.

* [laghos] Update v3.0 with the actual release source.

* [suite-sparse] Explicitly add the c11 flag to CFLAGS.

* Update package.py (#15749)

* [magma] Add forgotten specification of the 'cuda_arch' variant.

* [ceed] Use magma v2.5.3 for ceed v3.0.

* libceed-0.6

* mfem: depend on libceed 0.6:, not 0.6.0:

* [libceed] Add 'magma' variant -- enable MAGMA backend.

* [ceed] In v3.0, use '+magma' variant of libceed when cuda is enabled.

* Initial package for Remhos (needs to be updated with actual sha256

* Adding Remhos to CEED-3.0, for now @develop

* petsc: add 3.13.0 (using petsc-lite) and 3.12.5

* ceed: update to petsc@3.13.0:3.13.99

* Temporary fix

* [nekcem] Add hash-version for ceed v3.0.

* [nek5000] Simplify source urls.

* [nektools] Use the same sources and versions as in nek5000.

* [ceed] Update Nek-related package versions.

* libceed: add v0.6 portabilty fix

* libceed: better v0.6 portabilty fix

* Adding Remhos 1.0 release in CEED-3.0

* Updating hash for Remhos-1.0

* [petsc] Add cuda variant.

* [libceed] Flake8 fix.

* [petsc] Add cuda variant.

* [ceed] Fix the OCCA version to 1.0.9. Enable petsc+cuda when
       compiling ceed@3.0.0+cuda.

* nek5000: fix python 2.7+ syntax

* [laghos] Fix testing.

* [remhos] Fix testing.

* [remhos] For testing use the 'tests' target instead of 'test'.

* Add/update the maintainers for ceed, libceed, mfem, laghos, and remhos.

* [ceed] Remove unnecessary dependencies.

* libceed: activate AVX when supported

Co-authored-by: Thilina Rathnayake <thilinarmtb@gmail.com>
Co-authored-by: Jed Brown <jed@jedbrown.org>
Co-authored-by: Stan Tomov <tomov@eecs.utk.edu>
Co-authored-by: Tzanio <tzanio@llnl.gov>
This commit is contained in:
Veselin Dobrev 2020-04-18 16:57:57 -07:00 committed by GitHub
parent d640bf899a
commit d9992a778f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 470 additions and 162 deletions

View File

@ -16,15 +16,19 @@ class Ceed(BundlePackage):
homepage = "https://ceed.exascaleproject.org"
version('2.0')
maintainers = ['jedbrown', 'v-dobrev', 'tzanio']
version('3.0.0')
version('2.0.0')
version('1.0.0')
variant('cuda', default=False,
description='Build MAGMA; enable CUDA support in libCEED and OCCA')
variant('mfem', default=True, description='Build MFEM and Laghos')
description='Enable CUDA support')
variant('mfem', default=True, description='Build MFEM, Laghos and Remhos')
variant('nek', default=True,
description='Build Nek5000, GSLIB, Nekbone, and NekCEM')
variant('occa', default=True,
description='Build OCCA; enable OCCA support in libCEED')
description='Enable OCCA support')
variant('petsc', default=True,
description='Build PETSc and HPGMG')
variant('pumi', default=True,
@ -34,6 +38,11 @@ class Ceed(BundlePackage):
# TODO: Add 'int64' variant?
# LibCEED
# ceed-3.0
depends_on('libceed@0.6~cuda', when='@3.0.0~cuda')
depends_on('libceed@0.6+cuda+magma', when='@3.0.0+cuda')
depends_on('libceed@0.6+occa', when='@3.0.0+occa')
depends_on('libceed@0.6~occa', when='@3.0.0~occa')
# ceed-2.0
depends_on('libceed@0.4~cuda', when='@2.0.0~cuda')
depends_on('libceed@0.4+cuda', when='@2.0.0+cuda')
@ -46,6 +55,9 @@ class Ceed(BundlePackage):
depends_on('libceed@0.2~occa', when='@1.0.0~occa')
# OCCA
# ceed-3.0
depends_on('occa@1.0.9~cuda', when='@3.0.0+occa~cuda')
depends_on('occa@1.0.9+cuda', when='@3.0.0+occa+cuda')
# ceed-2.0
depends_on('occa@1.0.8~cuda', when='@2.0.0+occa~cuda')
depends_on('occa@1.0.8+cuda', when='@2.0.0+occa+cuda')
@ -54,6 +66,12 @@ class Ceed(BundlePackage):
depends_on('occa@1.0.0-alpha.5+cuda', when='@1.0.0+occa+cuda')
# Nek5000, GSLIB, Nekbone, and NekCEM
# ceed-3.0
depends_on('nek5000@19.0', when='@3.0.0+nek')
depends_on('nektools@19.0%gcc', when='@3.0.0+nek')
depends_on('gslib@1.0.6', when='@3.0.0+nek')
depends_on('nekbone@17.0', when='@3.0.0+nek')
depends_on('nekcem@c8db04b', when='@3.0.0+nek')
# ceed-2.0
depends_on('nek5000@17.0', when='@2.0.0+nek')
depends_on('nektools@17.0%gcc', when='@2.0.0+nek')
@ -67,7 +85,17 @@ class Ceed(BundlePackage):
depends_on('nekbone@17.0', when='@1.0.0+nek')
depends_on('nekcem@0b8bedd', when='@1.0.0+nek')
# PETSc, HPGMG
# PETSc
# ceed-3.0
depends_on('petsc+cuda', when='@3.0.0+petsc+cuda')
# For a +quickbuild we disable hdf5, and superlu-dist in PETSc.
depends_on('petsc@3.13.0:3.13.99~hdf5~superlu-dist',
when='@3.0.0+petsc+quickbuild')
depends_on('petsc@3.13.0:3.13.99+mpi+double~int64', when='@3.0.0+petsc~mfem')
# The mfem petsc examples need the petsc variants +hypre, +suite-sparse,
# and +mumps:
depends_on('petsc@3.13.0:3.13.99+mpi+hypre+suite-sparse+mumps+double~int64',
when='@3.0.0+petsc+mfem')
# ceed-2.0
# For a +quickbuild we disable hdf5, and superlu-dist in PETSc.
# Ideally, these can be turned into recommendations to Spack for
@ -94,18 +122,37 @@ class Ceed(BundlePackage):
depends_on('hpgmg@a0a5510df23b+fe', when='@1.0.0+petsc')
# MAGMA
# ceed-3.0
depends_on('magma@2.5.3', when='@3.0.0+cuda')
# ceed-2.0
depends_on('magma@2.5.0', when='@2.0.0+cuda')
# ceed-1.0
depends_on('magma@2.3.0', when='@1.0.0+cuda')
# PUMI
# ceed-3.0
depends_on('pumi@2.2.2', when='@3.0.0+pumi')
# ceed-2.0
depends_on('pumi@2.2.0', when='@2.0.0+pumi')
# ceed-1.0
depends_on('pumi@2.1.0', when='@1.0.0+pumi')
# MFEM, Laghos
# MFEM, Laghos, Remhos
# ceed-3.0
depends_on('mfem@4.1.0+mpi+examples+miniapps', when='@3.0.0+mfem~petsc')
depends_on('mfem@4.1.0+mpi+petsc+examples+miniapps',
when='@3.0.0+mfem+petsc')
depends_on('mfem@4.1.0+pumi', when='@3.0.0+mfem+pumi')
depends_on('mfem@4.1.0+gslib', when='@3.0.0+mfem+nek')
depends_on('mfem@4.1.0+libceed', when='@3.0.0+mfem')
depends_on('mfem@4.1.0+cuda', when='@3.0.0+mfem+cuda')
depends_on('mfem@4.1.0+occa', when='@3.0.0+mfem+occa')
depends_on('laghos@3.0', when='@3.0.0+mfem')
depends_on('remhos@1.0', when='@3.0.0+mfem')
# If using gcc version <= 4.8 build suite-sparse version <= 5.1.0
depends_on('suite-sparse@:5.1.0', when='@3.0.0%gcc@:4.8+mfem+petsc')
# ceed-2.0
depends_on('mfem@3.4.0+mpi+examples+miniapps', when='@2.0.0+mfem~petsc')
depends_on('mfem@3.4.0+mpi+petsc+examples+miniapps',

View File

@ -107,10 +107,10 @@ class Conduit(Package):
#
# Use HDF5 1.8, for wider output compatibly
# variants reflect we are not using hdf5's mpi or fortran features.
depends_on("hdf5@1.8.19:1.8.999~cxx~mpi~fortran", when="+hdf5+hdf5_compat+shared")
depends_on("hdf5@1.8.19:1.8.999~shared~cxx~mpi~fortran", when="+hdf5+hdf5_compat~shared")
depends_on("hdf5~cxx~mpi~fortran", when="+hdf5~hdf5_compat+shared")
depends_on("hdf5~shared~cxx~mpi~fortran", when="+hdf5~hdf5_compat~shared")
depends_on("hdf5@1.8.19:1.8.999~cxx", when="+hdf5+hdf5_compat+shared")
depends_on("hdf5@1.8.19:1.8.999~shared~cxx", when="+hdf5+hdf5_compat~shared")
depends_on("hdf5~cxx", when="+hdf5~hdf5_compat+shared")
depends_on("hdf5~shared~cxx", when="+hdf5~hdf5_compat~shared")
###############
# Silo

View File

@ -12,6 +12,10 @@ class Gslib(Package):
homepage = "https://github.com/gslib/gslib"
git = "https://github.com/gslib/gslib.git"
version('develop', branch='master')
version('1.0.6', tag='v1.0.6')
version('1.0.5', tag='v1.0.5')
version('1.0.4', tag='v1.0.4')
version('1.0.3', tag='v1.0.3')
version('1.0.2', tag='v1.0.2')
version('1.0.1', tag='v1.0.1')
@ -32,7 +36,7 @@ def install(self, spec, prefix):
lib_dir = 'lib'
libname = 'libgs.a'
if self.version == Version('1.0.1'):
if self.spec.satisfies('@1.0.1:'):
makefile = 'Makefile'
else:
makefile = 'src/Makefile'
@ -56,16 +60,19 @@ def install(self, spec, prefix):
ld_flags = blas.ld_flags
filter_file(r'\$\(LDFLAGS\)', ld_flags, makefile)
if self.version == Version('1.0.1'):
if self.spec.satisfies('@1.0.3:'):
make(make_cmd)
make('install')
install_tree(lib_dir, prefix.lib)
elif self.version == Version('1.0.0'):
with working_dir(src_dir):
make('install', 'INSTALL_ROOT=%s' % self.prefix)
else:
if self.spec.satisfies('@1.0.1:'):
make(make_cmd)
mkdir(prefix.lib)
install(libname, prefix.lib)
# Should only install the headers (this will be fixed in gslib on
# future releases).
install_tree(src_dir, prefix.include)
make('install')
install_tree(lib_dir, prefix.lib)
elif self.version == Version('1.0.0'):
with working_dir(src_dir):
make(make_cmd)
mkdir(prefix.lib)
install(libname, prefix.lib)
# Should only install the headers (this will be fixed in gslib on
# future releases).
install_tree(src_dir, prefix.include)

View File

@ -18,7 +18,9 @@ class Laghos(MakefilePackage):
url = "https://github.com/CEED/Laghos/archive/v1.0.tar.gz"
git = "https://github.com/CEED/Laghos.git"
version('master', branch='master')
maintainers = ['v-dobrev', 'tzanio', 'vladotomov']
version('develop', branch='master')
version('3.0', sha256='4db56286e15b42ecdc8d540c4888a7dec698b019df9c7ccb8319b7ea1f92d8b4')
version('2.0', sha256='dd3632d5558889beec2cd3c49eb60f633f99e6d886ac868731610dd006c44c14')
version('1.1', sha256='53b9bfe2af263c63eb4544ca1731dd26f40b73a0d2775a9883db51821bf23b7f')
@ -26,20 +28,15 @@ class Laghos(MakefilePackage):
variant('metis', default=True, description='Enable/disable METIS support')
depends_on('metis@4.0.3:', when='+metis')
depends_on('mfem+mpi+metis', when='+metis')
depends_on('mfem+mpi~metis', when='~metis')
depends_on('mfem@develop', when='@develop')
depends_on('mfem@4.1.0:', when='@3.0')
# Recommended mfem version for laghos v2.0 is: ^mfem@3.4.1-laghos-v2.0
depends_on('mfem@3.4.0:+mpi+metis', when='@2.0+metis')
depends_on('mfem@3.4.0:+mpi~metis', when='@2.0~metis')
depends_on('mfem@3.4.0:', when='@2.0')
# Recommended mfem version for laghos v1.x is: ^mfem@3.3.1-laghos-v1.0
depends_on('mfem@3.3.1-laghos-v1.0:+mpi+metis', when='@1.0,1.1+metis')
depends_on('mfem@3.3.1-laghos-v1.0:+mpi~metis', when='@1.0,1.1~metis')
# 3.0 requirements
depends_on('hypre@2.11.2', when='@3.0:')
depends_on('mfem@develop+mpi+metis', when='@3.0:+metis')
depends_on('mfem@develop+mpi~metis', when='@3.0:~metis')
depends_on('mfem@3.3.1-laghos-v1.0:', when='@1.0,1.1')
@property
def build_targets(self):
@ -49,27 +46,18 @@ def build_targets(self):
targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
targets.append('CONFIG_MK=%s' % spec['mfem'].package.config_mk)
targets.append('TEST_MK=%s' % spec['mfem'].package.test_mk)
targets.append('CXX=%s' % spec['mpi'].mpicxx)
if self.version >= ver('3.0'):
targets.append('HYPRE_DIR=%s' % spec['hypre'].prefix)
if '+metis' in self.spec:
targets.append('METIS_DIR=%s' % spec['metis'].prefix)
if spec.satisfies('@:2.0'):
targets.append('CXX=%s' % spec['mpi'].mpicxx)
return targets
# See lib/spack/spack/build_systems/makefile.py
def check(self):
targets = []
spec = self.spec
targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
targets.append('CONFIG_MK=%s' % spec['mfem'].package.config_mk)
targets.append('TEST_MK=%s' % spec['mfem'].package.test_mk)
with working_dir(self.build_directory):
make('test', *targets)
make('test', *self.build_targets)
def install(self, spec, prefix):
mkdirp(prefix.bin)
install('laghos', prefix.bin)
install_time_test_callbacks = []

View File

@ -12,7 +12,10 @@ class Libceed(Package):
homepage = "https://github.com/CEED/libCEED"
git = "https://github.com/CEED/libCEED.git"
maintainers = ['jedbrown', 'v-dobrev', 'tzanio']
version('develop', branch='master')
version('0.6', commit='c7f533e01e2f3f6720fbf37aac2af2ffed225f60') # tag v0.6 + small portability fixes
version('0.5', tag='v0.5')
version('0.4', tag='v0.4')
version('0.2', tag='v0.2')
@ -22,8 +25,10 @@ class Libceed(Package):
variant('cuda', default=False, description='Enable CUDA support')
variant('debug', default=False, description='Enable debug build')
variant('libxsmm', default=False, description='Enable LIBXSMM backend')
variant('magma', default=False, description='Enable MAGMA backend')
conflicts('+libxsmm', when='@:0.2')
conflicts('+magma', when='@:0.5')
depends_on('cuda', when='+cuda')
@ -35,6 +40,8 @@ class Libceed(Package):
depends_on('libxsmm', when='+libxsmm')
depends_on('magma', when='+magma')
patch('pkgconfig-version-0.4.diff', when='@0.4')
# occa: do not occaFree kernels
@ -78,12 +85,16 @@ def common_make_opts(self):
opt = '-O -g'
makeopts += ['OPT=%s' % opt]
if 'avx' in self.spec.target:
makeopts.append('AVX=1')
if '+cuda' in spec:
makeopts += ['CUDA_DIR=%s' % spec['cuda'].prefix]
nvccflags = ['-ccbin %s -Xcompiler "%s" -Xcompiler %s' %
(compiler.cxx, opt, compiler.cc_pic_flag)]
nvccflags = ' '.join(nvccflags)
makeopts += ['NVCCFLAGS=%s' % nvccflags]
if spec.satisfies('@:0.4'):
nvccflags = ['-ccbin %s -Xcompiler "%s" -Xcompiler %s' %
(compiler.cxx, opt, compiler.cc_pic_flag)]
nvccflags = ' '.join(nvccflags)
makeopts += ['NVCCFLAGS=%s' % nvccflags]
else:
# Disable CUDA auto-detection:
makeopts += ['CUDA_DIR=/disable-cuda']
@ -91,6 +102,9 @@ def common_make_opts(self):
if '+libxsmm' in spec:
makeopts += ['XSMM_DIR=%s' % spec['libxsmm'].prefix]
if '+magma' in spec:
makeopts += ['MAGMA_DIR=%s' % spec['magma'].prefix]
return makeopts
def build(self, spec, prefix):

View File

@ -30,6 +30,8 @@ class Magma(CMakePackage, CudaPackage):
variant('shared', default=True,
description='Enable shared library')
variant('cuda', default=True, description='Build with CUDA')
variant('cuda_arch', default='none', multi=True,
description='Specify CUDA architecture(s)')
depends_on('blas')
depends_on('lapack')

View File

@ -18,14 +18,18 @@ class Metis(Package):
partitioning schemes."""
#
# the previous metis website http://glaros.dtc.umn.edu/gkhome/metis/metis
# no longer exists. This is a github mirror that provides metis 5.1.0
# The original metis website: http://glaros.dtc.umn.edu/gkhome/metis/metis/overview
# is down sometimes. This is a github mirror that provides metis 5.1.0
#
homepage = "https://github.com/scivision/METIS/"
url = "https://github.com/scivision/METIS/raw/master/metis-5.1.0.tar.gz"
version('5.1.0', sha256='76faebe03f6c963127dbb73c13eab58c9a3faeae48779f049066a21c087c5db2')
# For v4.0.3, use the original metis website since this version is not
# mirrored at the above github location.
version('4.0.3', url='http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-4.0.3.tar.gz',
sha256='5efa35de80703c1b2c4d0de080fafbcf4e0d363a21149a1ad2f96e0144841a55')
variant('shared', default=True, description='Enables the build of shared libraries.')
variant('gdb', default=False, description='Enables gdb support (version 5+).')

View File

@ -16,8 +16,8 @@ class Mfem(Package):
homepage = 'http://www.mfem.org'
git = 'https://github.com/mfem/mfem.git'
maintainers = ['goxberry', 'tzanio', 'markcmiller86', 'acfisher',
'v-dobrev']
maintainers = ['v-dobrev', 'tzanio', 'acfisher',
'goxberry', 'markcmiller86']
# Recommended mfem builds to test when updating this file: see the shell
# script 'test_builds.sh' in the same directory as this file.
@ -45,13 +45,17 @@ class Mfem(Package):
# other version.
version('develop', branch='master')
version('4.1.0',
'4c83fdcf083f8e2f5b37200a755db843cdb858811e25a8486ad36b2cbec0e11d',
url='https://bit.ly/mfem-4-1', extension='.tar.gz',
preferred=True)
# Tagged development version used by xSDK
version('4.0.1-xsdk', commit='c55c80d17b82d80de04b849dd526e17044f8c99a')
version('4.0.0',
'df5bdac798ea84a263979f6fbf79de9013e1c55562f95f98644c3edcacfbc727',
url='https://bit.ly/mfem-4-0', extension='.tar.gz',
preferred=True)
url='https://bit.ly/mfem-4-0', extension='.tar.gz')
# Tagged development version used by the laghos package:
version('3.4.1-laghos-v2.0', tag='laghos-v2.0')
@ -96,8 +100,13 @@ class Mfem(Package):
description='Required for MPI parallelism')
variant('openmp', default=False,
description='Enable OpenMP parallelism')
variant('cuda', default=False, description='Enable CUDA support')
variant('cuda_arch', default='sm_60',
description='CUDA architecture to compile for')
variant('occa', default=False, description='Enable OCCA backend')
variant('raja', default=False, description='Enable RAJA backend')
variant('libceed', default=False, description='Enable libCEED backend')
variant('umpire', default=False, description='Enable Umpire support')
variant('threadsafe', default=False,
description=('Enable thread safe features.'
@ -105,9 +114,8 @@ class Mfem(Package):
' May cause minor performance issues.'))
variant('superlu-dist', default=False,
description='Enable MPI parallel, sparse direct solvers')
# Placeholder for STRUMPACK, support added in mfem v3.3.2:
# variant('strumpack', default=False,
# description='Enable support for STRUMPACK')
variant('strumpack', default=False,
description='Enable support for STRUMPACK')
variant('suite-sparse', default=False,
description='Enable serial, sparse direct solvers')
variant('petsc', default=False,
@ -116,6 +124,8 @@ class Mfem(Package):
description='Enable Sundials time integrators')
variant('pumi', default=False,
description='Enable functionality based on PUMI')
variant('gslib', default=False,
description='Enable functionality based on GSLIB')
variant('mpfr', default=False,
description='Enable precise, 1D quadrature rules')
variant('lapack', default=False,
@ -126,7 +136,7 @@ class Mfem(Package):
description='Enable Cubit/Genesis reader')
variant('conduit', default=False,
description='Enable binary data I/O using Conduit')
variant('gzstream', default=True,
variant('zlib', default=True,
description='Support zip\'d streams for I/O')
variant('gnutls', default=False,
description='Enable secure sockets using GnuTLS')
@ -144,43 +154,58 @@ class Mfem(Package):
conflicts('~static~shared')
conflicts('~threadsafe', when='+openmp')
conflicts('+cuda', when='@:3.99.99')
conflicts('+netcdf', when='@:3.1')
conflicts('+superlu-dist', when='@:3.1')
# STRUMPACK support was added in mfem v3.3.2, however, here we allow only
# strumpack v3 support which is available starting with mfem v4.0:
conflicts('+strumpack', when='@:3.99.99')
conflicts('+gnutls', when='@:3.1')
conflicts('+gzstream', when='@:3.2')
conflicts('+zlib', when='@:3.2')
conflicts('+mpfr', when='@:3.2')
conflicts('+petsc', when='@:3.2')
conflicts('+sundials', when='@:3.2')
conflicts('+pumi', when='@:3.3.2')
conflicts('+gslib', when='@:4.0.99')
conflicts('timer=mac', when='@:3.3.0')
conflicts('timer=mpi', when='@:3.3.0')
conflicts('~metis+mpi', when='@:3.3.0')
conflicts('+metis~mpi', when='@:3.3.0')
conflicts('+conduit', when='@:3.3.2')
conflicts('+occa', when='mfem@:3.99.99')
conflicts('+raja', when='mfem@:3.99.99')
conflicts('+libceed', when='mfem@:4.0.99')
conflicts('+umpire', when='mfem@:4.0.99')
conflicts('+superlu-dist', when='~mpi')
conflicts('+strumpack', when='~mpi')
conflicts('+petsc', when='~mpi')
conflicts('+pumi', when='~mpi')
conflicts('timer=mpi', when='~mpi')
conflicts('+pumi', when='+shared')
depends_on('mpi', when='+mpi')
depends_on('hypre@2.10.0:2.13.999', when='@:3.3.999+mpi')
depends_on('hypre@2.10.0:2.13.99', when='@:3.3.99+mpi')
depends_on('hypre', when='@3.4:+mpi')
depends_on('metis', when='+metis')
depends_on('blas', when='+lapack')
depends_on('lapack@3.0:', when='+lapack')
depends_on('cuda', when='+cuda')
depends_on('sundials@2.7.0', when='@:3.3.0+sundials~mpi')
depends_on('sundials@2.7.0+mpi+hypre', when='@:3.3.0+sundials+mpi')
depends_on('sundials@2.7.0:', when='@3.3.2:+sundials~mpi')
depends_on('sundials@2.7.0:+mpi+hypre', when='@3.3.2:+sundials+mpi')
depends_on('sundials@5.0.0', when='@4.0.1-xsdk:+sundials~mpi')
depends_on('pumi', when='+pumi')
depends_on('sundials@5.0.0:', when='@4.0.1-xsdk:+sundials~mpi')
depends_on('sundials@5.0.0:+mpi+hypre', when='@4.0.1-xsdk:+sundials+mpi')
depends_on('pumi', when='+pumi~shared')
depends_on('pumi+shared', when='+pumi+shared')
depends_on('gslib@1.0.5:+mpi', when='+gslib+mpi')
depends_on('gslib@1.0.5:~mpi~mpiio', when='+gslib~mpi')
depends_on('suite-sparse', when='+suite-sparse')
depends_on('superlu-dist', when='+superlu-dist')
depends_on('strumpack@3.0.0:', when='+strumpack')
# The PETSc tests in MFEM will fail if PETSc is not configured with
# SuiteSparse and MUMPS. On the other hand, if we require the variants
# '+suite-sparse+mumps' of PETSc, the xsdk package concretization fails.
@ -191,23 +216,32 @@ class Mfem(Package):
depends_on('mpfr', when='+mpfr')
depends_on('netcdf-c@4.1.3:', when='+netcdf')
depends_on('unwind', when='+libunwind')
depends_on('zlib', when='+gzstream')
depends_on('zlib', when='+zlib')
depends_on('gnutls', when='+gnutls')
depends_on('conduit@0.3.1:,master:', when='+conduit')
depends_on('conduit+mpi', when='+conduit+mpi')
# The MFEM 4.0.0 SuperLU interface fails when using hypre@2.16.0 and
# superlu-dist@6.1.1. See https://github.com/mfem/mfem/issues/983.
conflicts('+hypre+superlu-dist',
when='mfem@4.0.0 ^hypre@2.16.0 ^superlu-dist@6.1.1')
# This issue was resolved in v4.1.
conflicts('+superlu-dist',
when='mfem@:4.0.99 ^hypre@2.16.0: ^superlu-dist@6:')
# The STRUMPACK v3 interface in MFEM seems to be broken as of MFEM v4.1
# when using hypre version >= 2.16.0:
conflicts('+strumpack', when='mfem@4.0.0: ^hypre@2.16.0:')
# The OCCA backend is first available in MFEM 4.0.0
depends_on('occa', when='mfem@4.0.0:+occa')
conflicts('+occa', when='mfem@:3.99.999')
depends_on('occa@1.0.8:', when='+occa')
depends_on('occa+cuda', when='+occa+cuda')
# The RAJA backend is first available in MFEM 4.0.0
depends_on('raja', when='mfem@4.0.0:+raja')
conflicts('+raja', when='mfem@:3.99.999')
depends_on('raja@0.10.0:', when='@4.0.1:+raja')
depends_on('raja@0.7.0:0.9.0', when='@4.0.0+raja')
depends_on('raja+cuda', when='+raja+cuda')
depends_on('libceed@0.6:', when='+libceed')
depends_on('libceed+cuda', when='+libceed+cuda')
depends_on('umpire@2.0.0:', when='+umpire')
depends_on('umpire+cuda', when='+umpire+cuda')
patch('mfem_ppc_build.patch', when='@3.2:3.3.0 arch=ppc64le')
patch('mfem-3.4.patch', when='@3.4.0')
@ -237,18 +271,47 @@ def configure(self, spec, prefix):
def yes_no(varstr):
return 'YES' if varstr in self.spec else 'NO'
# See also find_system_libraries in lib/spack/llnl/util/filesystem.py
# where the same list of paths is used.
sys_lib_paths = [
'/lib64',
'/lib',
'/usr/lib64',
'/usr/lib',
'/usr/local/lib64',
'/usr/local/lib']
def is_sys_lib_path(dir):
return dir in sys_lib_paths
xcompiler = ''
xlinker = '-Wl,'
if '+cuda' in spec:
xcompiler = '-Xcompiler='
xlinker = '-Xlinker='
cuda_arch = spec.variants['cuda_arch'].value
# We need to add rpaths explicitly to allow proper export of link flags
# from within MFEM.
# Similar to spec[pkg].libs.ld_flags but prepends rpath flags too.
# Also does not add system library paths as defined by 'sys_lib_paths'
# above -- this is done to avoid issues like this:
# https://github.com/mfem/mfem/issues/1088.
def ld_flags_from_library_list(libs_list):
flags = ['-Wl,-rpath,%s' % dir for dir in libs_list.directories]
flags += [libs_list.ld_flags]
flags = ['%s-rpath,%s' % (xlinker, dir)
for dir in libs_list.directories
if not is_sys_lib_path(dir)]
flags += ['-L%s' % dir for dir in libs_list.directories
if not is_sys_lib_path(dir)]
flags += [libs_list.link_flags]
return ' '.join(flags)
def ld_flags_from_dirs(pkg_dirs_list, pkg_libs_list):
flags = ['-Wl,-rpath,%s' % dir for dir in pkg_dirs_list]
flags += ['-L%s' % dir for dir in pkg_dirs_list]
flags = ['%s-rpath,%s' % (xlinker, dir) for dir in pkg_dirs_list
if not is_sys_lib_path(dir)]
flags += ['-L%s' % dir for dir in pkg_dirs_list
if not is_sys_lib_path(dir)]
flags += ['-l%s' % lib for lib in pkg_libs_list]
return ' '.join(flags)
@ -265,6 +328,9 @@ def find_optional_library(name, prefix):
if ('+metis' in spec) and spec['metis'].satisfies('@5:'):
metis5_str = 'YES'
zlib_var = 'MFEM_USE_ZLIB' if (spec.satisfies('@4.1.0:')) else \
'MFEM_USE_GZSTREAM'
options = [
'PREFIX=%s' % prefix,
'MFEM_USE_MEMALLOC=YES',
@ -273,32 +339,41 @@ def find_optional_library(name, prefix):
# compiler is defined by env['SPACK_CXX'].
'CXX=%s' % env['CXX'],
'MFEM_USE_LIBUNWIND=%s' % yes_no('+libunwind'),
'MFEM_USE_GZSTREAM=%s' % yes_no('+gzstream'),
'%s=%s' % (zlib_var, yes_no('+zlib')),
'MFEM_USE_METIS=%s' % yes_no('+metis'),
'MFEM_USE_METIS_5=%s' % metis5_str,
'MFEM_THREAD_SAFE=%s' % yes_no('+threadsafe'),
'MFEM_USE_MPI=%s' % yes_no('+mpi'),
'MFEM_USE_LAPACK=%s' % yes_no('+lapack'),
'MFEM_USE_SUPERLU=%s' % yes_no('+superlu-dist'),
'MFEM_USE_STRUMPACK=%s' % yes_no('+strumpack'),
'MFEM_USE_SUITESPARSE=%s' % yes_no('+suite-sparse'),
'MFEM_USE_SUNDIALS=%s' % yes_no('+sundials'),
'MFEM_USE_PETSC=%s' % yes_no('+petsc'),
'MFEM_USE_PUMI=%s' % yes_no('+pumi'),
'MFEM_USE_GSLIB=%s' % yes_no('+gslib'),
'MFEM_USE_NETCDF=%s' % yes_no('+netcdf'),
'MFEM_USE_MPFR=%s' % yes_no('+mpfr'),
'MFEM_USE_GNUTLS=%s' % yes_no('+gnutls'),
'MFEM_USE_OPENMP=%s' % yes_no('+openmp'),
'MFEM_USE_CONDUIT=%s' % yes_no('+conduit')]
if spec.satisfies('@4.0.0:'):
options += ['MFEM_USE_OCCA=%s' % yes_no('+occa'),
'MFEM_USE_RAJA=%s' % yes_no('+raja')]
'MFEM_USE_CONDUIT=%s' % yes_no('+conduit'),
'MFEM_USE_CUDA=%s' % yes_no('+cuda'),
'MFEM_USE_OCCA=%s' % yes_no('+occa'),
'MFEM_USE_RAJA=%s' % yes_no('+raja'),
'MFEM_USE_CEED=%s' % yes_no('+libceed'),
'MFEM_USE_UMPIRE=%s' % yes_no('+umpire')]
cxxflags = spec.compiler_flags['cxxflags']
if self.spec.satisfies('@4.0:'):
cxxflags.append(self.compiler.cxx11_flag)
if cxxflags:
cxxflags = [(xcompiler + flag) for flag in cxxflags]
if '+cuda' in spec:
cxxflags += [
'-x=cu --expt-extended-lambda -arch=%s' % cuda_arch,
'-ccbin %s' % (spec['mpi'].mpicxx if '+mpi' in spec
else env['CXX'])]
if self.spec.satisfies('@4.0.0:'):
cxxflags.append(self.compiler.cxx11_flag)
# The cxxflags are set by the spack c++ compiler wrapper. We also
# set CXXFLAGS explicitly, for clarity, and to properly export the
# cxxflags in the variable MFEM_CXXFLAGS in config.mk.
@ -325,7 +400,7 @@ def find_optional_library(name, prefix):
options += [
'METIS_OPT=-I%s' % spec['metis'].prefix.include,
'METIS_LIB=%s' %
ld_flags_from_dirs([spec['metis'].prefix.lib], ['metis'])]
ld_flags_from_library_list(spec['metis'].libs)]
if '+lapack' in spec:
lapack_blas = spec['lapack'].libs + spec['blas'].libs
@ -339,11 +414,42 @@ def find_optional_library(name, prefix):
'SUPERLU_OPT=-I%s -I%s' %
(spec['superlu-dist'].prefix.include,
spec['parmetis'].prefix.include),
'SUPERLU_LIB=-L%s -L%s -lsuperlu_dist -lparmetis %s' %
(spec['superlu-dist'].prefix.lib,
spec['parmetis'].prefix.lib,
'SUPERLU_LIB=%s %s' %
(ld_flags_from_dirs([spec['superlu-dist'].prefix.lib,
spec['parmetis'].prefix.lib],
['superlu_dist', 'parmetis']),
ld_flags_from_library_list(lapack_blas))]
if '+strumpack' in spec:
strumpack = spec['strumpack']
sp_opt = ['-I%s' % strumpack.prefix.include]
sp_lib = [ld_flags_from_library_list(strumpack.libs)]
# Parts of STRUMPACK use fortran, so we need to link with the
# fortran library and also the MPI fortran library:
if '~shared' in strumpack:
if os.path.basename(env['FC']) == 'gfortran':
sp_lib += ['-lgfortran']
if '^mpich' in strumpack:
sp_lib += ['-lmpifort']
elif '^openmpi' in strumpack:
sp_lib += ['-lmpi_mpifh']
if '+openmp' in strumpack:
sp_opt += [self.compiler.openmp_flag]
if '^scalapack' in strumpack:
scalapack = strumpack['scalapack']
sp_opt += ['-I%s' % scalapack.prefix.include]
sp_lib += [ld_flags_from_dirs([scalapack.prefix.lib],
['scalapack'])]
if '+butterflypack' in strumpack:
bp = strumpack['butterflypack']
sp_opt += ['-I%s' % bp.prefix.include]
sp_lib += [ld_flags_from_dirs([bp.prefix.lib],
['dbutterflypack',
'zbutterflypack'])]
options += [
'STRUMPACK_OPT=%s' % ' '.join(sp_opt),
'STRUMPACK_LIB=%s' % ' '.join(sp_lib)]
if '+suite-sparse' in spec:
ss_spec = 'suite-sparse:' + self.suitesparse_components
options += [
@ -359,14 +465,24 @@ def find_optional_library(name, prefix):
ld_flags_from_library_list(spec[sun_spec].libs)]
if '+petsc' in spec:
# options += ['PETSC_DIR=%s' % spec['petsc'].prefix]
options += [
'PETSC_OPT=%s' % spec['petsc'].headers.cpp_flags,
'PETSC_LIB=%s' %
ld_flags_from_library_list(spec['petsc'].libs)]
if '+pumi' in spec:
options += ['PUMI_DIR=%s' % spec['pumi'].prefix]
pumi_libs = ['pumi', 'crv', 'ma', 'mds', 'apf', 'pcu', 'gmi',
'parma', 'lion', 'mth', 'apf_zoltan', 'spr']
options += [
'PUMI_OPT=-I%s' % spec['pumi'].prefix.include,
'PUMI_LIB=%s' %
ld_flags_from_dirs([spec['pumi'].prefix.lib], pumi_libs)]
if '+gslib' in spec:
options += [
'GSLIB_OPT=-I%s' % spec['gslib'].prefix.include,
'GSLIB_LIB=%s' %
ld_flags_from_dirs([spec['gslib'].prefix.lib], ['gs'])]
if '+netcdf' in spec:
options += [
@ -374,7 +490,7 @@ def find_optional_library(name, prefix):
'NETCDF_LIB=%s' %
ld_flags_from_dirs([spec['netcdf-c'].prefix.lib], ['netcdf'])]
if '+gzstream' in spec:
if '+zlib' in spec:
if "@:3.3.2" in spec:
options += ['ZLIB_DIR=%s' % spec['zlib'].prefix]
else:
@ -409,20 +525,34 @@ def find_optional_library(name, prefix):
if '+openmp' in spec:
options += ['OPENMP_OPT=%s' % self.compiler.openmp_flag]
if '+cuda' in spec:
options += [
'CUDA_CXX=%s' % join_path(spec['cuda'].prefix, 'bin', 'nvcc'),
'CUDA_ARCH=%s' % cuda_arch]
if '+occa' in spec:
options += ['OCCA_DIR=%s' % spec['occa'].prefix,
'OCCA_OPT=-I%s' % spec['occa'].prefix.include,
options += ['OCCA_OPT=-I%s' % spec['occa'].prefix.include,
'OCCA_LIB=%s' %
ld_flags_from_dirs([spec['occa'].prefix.lib],
['occa'])]
if '+raja' in spec:
options += ['RAJA_DIR=%s' % spec['raja'].prefix,
'RAJA_OPT=-I%s' % spec['raja'].prefix.include,
options += ['RAJA_OPT=-I%s' % spec['raja'].prefix.include,
'RAJA_LIB=%s' %
ld_flags_from_dirs([spec['raja'].prefix.lib],
['RAJA'])]
if '+libceed' in spec:
options += ['CEED_OPT=-I%s' % spec['libceed'].prefix.include,
'CEED_LIB=%s' %
ld_flags_from_dirs([spec['libceed'].prefix.lib],
['ceed'])]
if '+umpire' in spec:
options += ['UMPIRE_OPT=-I%s' % spec['umpire'].prefix.include,
'UMPIRE_LIB=%s' %
ld_flags_from_library_list(spec['umpire'].libs)]
timer_ids = {'std': '0', 'posix': '2', 'mac': '4', 'mpi': '6'}
timer = spec.variants['timer'].value
if timer != 'auto':

View File

@ -1,59 +1,82 @@
#!/bin/bash
# Set a compiler to test with, e.g. '%gcc', '%clang', etc.
compiler=''
mfem='mfem'${compiler}
mfem_dev='mfem@develop'${compiler}
backends='+occa+raja+libceed'
# Using occa@develop to help the spack concretization
backends_specs='^occa@develop~cuda ^raja~openmp'
# As of 03/20/20 +mpfr breaks one of the unit tests in both @4.1.0 and @develop,
# so it is disabled here for now.
# mpfr='+mpfr'
mpfr=''
builds=(
# preferred version:
'mfem'
'mfem~mpi~metis~gzstream'
'mfem+mpi+superlu-dist+suite-sparse+petsc \
+sundials+pumi+mpfr+netcdf+gzstream+gnutls+libunwind \
^hypre~internal-superlu ^petsc+suite-sparse+mumps'
'mfem~mpi+suite-sparse+sundials+mpfr+netcdf \
+gzstream+gnutls+libunwind'
${mfem}
${mfem}'~mpi~metis~zlib'
# NOTE: Skip +strumpack since mfem needs hypre < 2.16.0 in that case
${mfem}"$backends"'+superlu-dist+suite-sparse+petsc \
+sundials+pumi+gslib'${mpfr}'+netcdf+zlib+gnutls+libunwind+conduit \
^petsc+suite-sparse+mumps'" $backends_specs"
${mfem}'~mpi \
'"$backends"'+suite-sparse+sundials+gslib'${mpfr}'+netcdf \
+zlib+gnutls+libunwind+conduit'" $backends_specs"
# develop version:
'mfem@develop+shared~static'
'mfem@develop+shared~static~mpi~metis~gzstream'
# TODO: Replace '^conduit~python~hdf5' with '^conduit~python' when conduit
# is fixed to accept '^hdf5+mpi'.
# NOTE: Skip PUMI since it conflicts with '+shared'.
'mfem@develop+shared~static+mpi \
+superlu-dist+suite-sparse+petsc+sundials+mpfr+netcdf+gzstream \
+gnutls+libunwind+conduit ^hypre~internal-superlu \
^petsc+suite-sparse+mumps ^conduit~python~hdf5'
# TODO: The options '^netcdf~mpi ^hdf5@1.8.19~mpi' are added just to make
# conduit happy.
'mfem@develop+shared~static~mpi \
+suite-sparse+sundials+mpfr+netcdf+gzstream+gnutls+libunwind \
+conduit ^conduit~python ^netcdf~mpi ^hdf5@1.8.19~mpi'
${mfem_dev}'+shared~static'
${mfem_dev}'+shared~static~mpi~metis~zlib'
# NOTE: Skip +strumpack since mfem needs hypre < 2.16.0 in that case
# NOTE: Shared build with +gslib works on mac but not on linux
${mfem_dev}'+shared~static \
'"$backends"'+superlu-dist+suite-sparse+petsc \
+sundials+pumi'${mpfr}'+netcdf+zlib+gnutls+libunwind+conduit \
^petsc+suite-sparse+mumps'" $backends_specs"
${mfem_dev}'+shared~static~mpi \
'"$backends"'+suite-sparse+sundials'${mpfr}'+netcdf \
+zlib+gnutls+libunwind+conduit'" $backends_specs"
)
builds2=(
# preferred version
'mfem+superlu-dist'
'mfem+suite-sparse~mpi'
'mfem+suite-sparse'
'mfem+sundials~mpi'
'mfem+sundials'
'mfem+pumi'
'mfem+netcdf~mpi'
'mfem+netcdf'
'mfem+mpfr'
'mfem+gnutls'
'mfem+petsc+mpi ^hypre~internal-superlu ^petsc+suite-sparse+mumps'
${mfem}"$backends $backends_specs"
${mfem}'+superlu-dist'
# NOTE: On mac +strumpack works only with gcc, as of 03/20/20.
${mfem}'+strumpack ^hypre@2.15.1'
${mfem}'+suite-sparse~mpi'
${mfem}'+suite-sparse'
${mfem}'+sundials~mpi'
${mfem}'+sundials'
${mfem}'+pumi'
${mfem}'+gslib'
${mfem}'+netcdf~mpi'
${mfem}'+netcdf'
${mfem}${mpfr}
${mfem}'+gnutls'
${mfem}'+conduit~mpi'
${mfem}'+conduit'
${mfem}'+petsc ^petsc+suite-sparse+mumps'
# develop version
'mfem@develop+superlu-dist'
'mfem@develop+suite-sparse~mpi'
'mfem@develop+suite-sparse'
'mfem@develop+sundials~mpi'
'mfem@develop+sundials'
'mfem@develop+pumi'
'mfem@develop+netcdf~mpi'
'mfem@develop+netcdf'
'mfem@develop+mpfr'
'mfem@develop+gnutls'
'mfem@develop+conduit~mpi ^conduit~python'
'mfem@develop+conduit ^conduit~python'
'mfem@develop+petsc+mpi ^hypre~internal-superlu \
^petsc+suite-sparse+mumps'
${mfem_dev}"$backends $backends_specs"
${mfem_dev}'+superlu-dist'
# NOTE: On mac +strumpack works only with gcc, as of 03/20/20.
${mfem_dev}'+strumpack ^hypre@2.15.1'
${mfem_dev}'+suite-sparse~mpi'
${mfem_dev}'+suite-sparse'
${mfem_dev}'+sundials~mpi'
${mfem_dev}'+sundials'
${mfem_dev}'+pumi'
${mfem_dev}'+gslib'
${mfem_dev}'+netcdf~mpi'
${mfem_dev}'+netcdf'
${mfem_dev}${mpfr}
${mfem_dev}'+gnutls'
${mfem_dev}'+conduit~mpi'
${mfem_dev}'+conduit'
${mfem_dev}'+petsc ^petsc+suite-sparse+mumps'
)
trap 'printf "\nScript interrupted.\n"; exit 33' INT

View File

@ -4,7 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
from shutil import copyfile
import os
@ -13,14 +13,17 @@ class Nek5000(Package):
dynamics"""
homepage = "https://nek5000.mcs.anl.gov/"
url = "https://github.com/Nek5000/Nek5000/releases/download/v17.0/Nek5000-v17.0.tar.gz"
url = 'https://github.com/Nek5000/Nek5000/archive/v17.0.tar.gz'
git = "https://github.com/Nek5000/Nek5000.git"
tags = ['cfd', 'flow', 'hpc', 'solver', 'navier-stokes',
'spectral-elements', 'fluid', 'ecp', 'ecp-apps']
version('develop', branch='master')
version('17.0', sha256='298d83ffd9f695ee7cf565cb445be33b02775eb9c2e9f0f74d91d89fe722e114')
version('17.0',
'4d8d4793ce3c926c54e09a5a5968fa959fe0ba46bd2e6b8043e099528ee35a60')
version('19.0',
'db129877a10ff568d49edc77cf65f9e732eecb1fce10edbd91ffc5ac10c41ad6')
# MPI, Profiling and Visit variants
variant('mpi', default=True, description='Build with MPI.')
@ -42,6 +45,14 @@ def fortran_check(self):
@run_after('install')
def test_install(self):
with working_dir('short_tests/eddy'):
f_size = join_path(os.getcwd(), 'SIZE')
f_size_legacy = join_path(os.getcwd(), 'SIZE.legacy')
if not os.access(f_size, os.F_OK):
if os.access(f_size_legacy, os.F_OK):
copyfile(f_size_legacy, f_size)
else:
raise RuntimeError('Can not find {0}'.format(f_size))
os.system(join_path(self.prefix.bin, 'makenek') + ' eddy_uv')
if not os.path.isfile(join_path(os.getcwd(), 'nek5000')):
msg = 'Cannot build example: short_tests/eddy.'
@ -93,8 +104,14 @@ def install(self, spec, prefix):
# Nek5000 source.
filter_file(r'^#FC\s*=.*', 'FC="{0}"'.format(fc), 'makenek')
filter_file(r'^#CC\s*=.*', 'CC="{0}"'.format(cc), 'makenek')
filter_file(r'^#SOURCE_ROOT\s*=\"\$H.*', 'SOURCE_ROOT=\"' +
prefix.bin.Nek5000 + '\"', 'makenek')
if self.spec.version == Version('17.0'):
filter_file(r'^#SOURCE_ROOT\s*=\"\$H.*', 'SOURCE_ROOT=\"' +
prefix.bin.Nek5000 + '\"', 'makenek')
else:
filter_file(r'^#NEK_SOURCE_ROOT\s*=\"\$H.*',
'NEK_SOURCE_ROOT=\"' + prefix.bin.Nek5000 + '\"',
'makenek')
if fflags:
filter_file(r'^#FFLAGS=.*', 'FFLAGS+=" {0}"'.format(fflags),
'makenek')
@ -116,4 +133,4 @@ def install(self, spec, prefix):
install_tree(bin_dir, prefix.bin)
# Copy Nek5000 source to prefix/bin
install_tree('../Nek5000', prefix.bin.Nek5000)
install_tree(self.stage.source_path, prefix.bin.Nek5000)

View File

@ -13,13 +13,15 @@ class Nekbone(Package):
the spectral element method."""
homepage = "https://github.com/Nek5000/Nekbone"
url = "https://github.com/Nek5000/Nekbone/archive/v17.0.tar.gz"
git = "https://github.com/Nek5000/Nekbone.git"
tags = ['proxy-app', 'ecp-proxy-app']
version('develop', branch='master')
version('17.0', sha256='ae361cc61368a924398a28a296f675b7f0c4a9516788a7f8fa3c09d787cdf69b')
version('17.0',
'ae361cc61368a924398a28a296f675b7f0c4a9516788a7f8fa3c09d787cdf69b',
url='https://github.com/Nek5000/Nekbone/archive/v17.0.tar.gz',
extension='.tar.gz')
# Variants
variant('mpi', default=True, description='Build with MPI')

View File

@ -20,7 +20,9 @@ class Nekcem(Package):
variant('mpi', default=True, description='Build with MPI')
# We only have a development version
version('develop')
version('develop', branch='development')
# The following hash-versions are used by the 'ceed' package
version('c8db04b', commit='c8db04b96f9b9cb0434ee75da711502fe95891b5')
version('0b8bedd', commit='0b8beddfdcca646bfcc866dfda1c5f893338399b')
version('7332619', commit='7332619b73d03868a256614b61794dce2d95b360')
@ -28,7 +30,6 @@ class Nekcem(Package):
depends_on('mpi', when='+mpi')
depends_on('blas')
depends_on('lapack')
depends_on('python@2.7:', type='build')
@run_before('install')
def fortran_check(self):
@ -112,7 +113,7 @@ def install(self, spec, prefix):
'makenek')
# Install NekCEM in prefix/bin
install_tree('../NekCEM', prefix.bin.NekCEM)
install_tree(self.stage.source_path, prefix.bin.NekCEM)
# Create symlinks to makenek, nek and configurenek scripts
with working_dir(prefix.bin):
os.symlink(os.path.join('NekCEM', bin_dir, makenek), makenek)

View File

@ -22,14 +22,17 @@ class Nektools(Package):
"""Tools reuqired by Nek5000"""
homepage = "https://nek5000.mcs.anl.gov/"
url = "https://github.com/Nek5000/Nek5000/releases/download/v17.0/Nek5000-v17.0.tar.gz"
url = 'https://github.com/Nek5000/Nek5000/archive/v17.0.tar.gz'
git = "https://github.com/Nek5000/Nek5000.git"
tags = ['cfd', 'flow', 'hpc', 'solver', 'navier-stokes',
'spectral-elements', 'fluid', 'ecp', 'ecp-apps']
version('develop', branch='master')
version('17.0', sha256='298d83ffd9f695ee7cf565cb445be33b02775eb9c2e9f0f74d91d89fe722e114')
version('19.0',
'db129877a10ff568d49edc77cf65f9e732eecb1fce10edbd91ffc5ac10c41ad6')
version('17.0',
'4d8d4793ce3c926c54e09a5a5968fa959fe0ba46bd2e6b8043e099528ee35a60')
# Variant for MAXNEL, we need to read this from user
variant(

View File

@ -19,7 +19,10 @@ class Occa(Package):
homepage = "http://libocca.org"
git = 'https://github.com/libocca/occa.git'
maintainers = ['v-dobrev', 'dmed256']
version('develop')
version('1.0.9', tag='v1.0.9')
version('1.0.8', tag='v1.0.8')
version('1.0.0-alpha.5', tag='v1.0.0-alpha.5')
version('0.2.0', tag='v0.2.0')
@ -97,6 +100,9 @@ def setup_build_environment(self, env):
else:
env.set('OCCA_CUDA_ENABLED', '0')
# Disable hip autodetection for now since it fails on some machines.
env.set('OCCA_HIP_ENABLED', '0')
if '~opencl' in spec:
env.set('OCCA_OPENCL_ENABLED', '0')

View File

@ -66,6 +66,7 @@ class Petsc(Package):
variant('shared', default=True,
description='Enables the build of shared libraries')
variant('mpi', default=True, description='Activates MPI support')
variant('cuda', default=False, description='Activates CUDA support')
variant('double', default=True,
description='Switches between single and double precision')
variant('complex', default=False, description='Build with complex numbers')
@ -133,6 +134,7 @@ class Petsc(Package):
depends_on('blas')
depends_on('lapack')
depends_on('mpi', when='+mpi')
depends_on('cuda', when='+cuda')
# Build dependencies
depends_on('python@2.6:2.8', type='build', when='@:3.10.99')
@ -147,8 +149,8 @@ class Petsc(Package):
depends_on('metis@5:~int64', when='@3.8:+metis~int64')
depends_on('metis@5:+int64', when='@3.8:+metis+int64')
depends_on('hdf5@:1.10.99+mpi+hl+fortran', when='@:3.12.99+hdf5+mpi')
depends_on('hdf5+mpi+hl+fortran', when='@3.13:+hdf5+mpi')
depends_on('hdf5@:1.10.99+mpi', when='@:3.12.99+hdf5+mpi')
depends_on('hdf5+mpi', when='@3.13:+hdf5+mpi')
depends_on('zlib', when='+hdf5')
depends_on('parmetis', when='+metis+mpi')
depends_on('valgrind', when='+valgrind')
@ -294,7 +296,7 @@ def install(self, spec, prefix):
])
# Activates library support if needed
for library in ('metis', 'hdf5', 'hypre', 'parmetis',
for library in ('cuda', 'metis', 'hdf5', 'hypre', 'parmetis',
'mumps', 'trilinos', 'fftw', 'valgrind'):
options.append(
'--with-{library}={value}'.format(

View File

@ -0,0 +1,54 @@
# Copyright 2013-2020 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 Remhos(MakefilePackage):
"""Remhos (REMap High-Order Solver) is a CEED miniapp that performs monotonic
and conservative high-order discontinuous field interpolation (remap)
using DG advection-based spatial discretization and explicit high-order
time-stepping.
"""
tags = ['proxy-app']
homepage = "https://github.com/CEED/Remhos"
url = "https://github.com/CEED/Remhos/archive/v1.0.tar.gz"
git = "https://github.com/CEED/Remhos.git"
maintainers = ['v-dobrev', 'tzanio', 'vladotomov']
version('develop', branch='master')
version('1.0', sha256='e60464a867fe5b1fd694fbb37bb51773723427f071c0ae26852a2804c08bbb32')
variant('metis', default=True, description='Enable/disable METIS support')
depends_on('mfem+mpi+metis', when='+metis')
depends_on('mfem+mpi~metis', when='~metis')
depends_on('mfem@develop', when='@develop')
depends_on('mfem@4.1.0:', when='@1.0')
@property
def build_targets(self):
targets = []
spec = self.spec
targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
targets.append('CONFIG_MK=%s' % spec['mfem'].package.config_mk)
targets.append('TEST_MK=%s' % spec['mfem'].package.test_mk)
return targets
# See lib/spack/spack/build_systems/makefile.py
def check(self):
with working_dir(self.build_directory):
make('tests', *self.build_targets)
def install(self, spec, prefix):
mkdirp(prefix.bin)
install('remhos', prefix.bin)
install_time_test_callbacks = []

View File

@ -97,6 +97,14 @@ def install(self, spec, prefix):
'LAPACK=%s' % spec['lapack'].libs.ld_flags,
]
# Recent versions require c11 but some demos do not get the c11 from
# GraphBLAS/CMakeLists.txt, for example the file
# GraphBLAS/Demo/Program/wildtype_demo.c. For many compilers this is
# not an issue because c11 or newer is their default. However, for some
# compilers (e.g. xlc) the c11 flag is necessary.
if spec.satisfies('@5.4:'):
make_args += ['CFLAGS+=%s' % self.compiler.c11_flag]
# 64bit blas in UMFPACK:
if (spec.satisfies('^openblas+ilp64') or
spec.satisfies('^intel-mkl+ilp64') or