[mfem] new version: 3.4 (#8453)
* Add new version (3.4.0) with new variant (pumi). * Fix an issue: skip the tests in examples/pumi as they require files that are not included in the mfem distribution/repository. * Use patches to fix the testing issues with PUMI and PETSc v3.9. * Use the new bit.ly short link for v3.4.
This commit is contained in:
parent
674feb45f1
commit
a0c2a25a72
@ -0,0 +1,71 @@
|
||||
diff --git a/examples/petsc/rc_ex3p b/examples/petsc/rc_ex3p
|
||||
index 2cbe07ef2..c585d9b52 100644
|
||||
--- a/examples/petsc/rc_ex3p
|
||||
+++ b/examples/petsc/rc_ex3p
|
||||
@@ -6,4 +6,4 @@
|
||||
# it needs PETSc configured with MUMPS
|
||||
|
||||
-solver_pc_type cholesky
|
||||
--solver_pc_factor_mat_solver_package mumps
|
||||
+-solver_pc_factor_mat_solver_type mumps
|
||||
diff --git a/examples/petsc/rc_ex3p_bddc b/examples/petsc/rc_ex3p_bddc
|
||||
index ea887bb29..2e1eba0d5 100644
|
||||
--- a/examples/petsc/rc_ex3p_bddc
|
||||
+++ b/examples/petsc/rc_ex3p_bddc
|
||||
@@ -16,7 +16,7 @@
|
||||
#-pc_bddc_adaptive_threshold 10
|
||||
|
||||
# Customization of the local solvers
|
||||
-#-pc_bddc_neumann_pc_factor_mat_solver_package mumps
|
||||
-#-pc_bddc_dirichlet_pc_factor_mat_solver_package mumps
|
||||
+#-pc_bddc_neumann_pc_factor_mat_solver_type mumps
|
||||
+#-pc_bddc_dirichlet_pc_factor_mat_solver_type mumps
|
||||
#-pc_bddc_coarse_pc_type cholesky
|
||||
-#-pc_bddc_coarse_pc_factor_mat_solver_package mumps
|
||||
+#-pc_bddc_coarse_pc_factor_mat_solver_type mumps
|
||||
diff --git a/examples/petsc/rc_ex4p b/examples/petsc/rc_ex4p
|
||||
index f734f35fe..64fbe9427 100644
|
||||
--- a/examples/petsc/rc_ex4p
|
||||
+++ b/examples/petsc/rc_ex4p
|
||||
@@ -2,4 +2,4 @@
|
||||
# it needs PETSc configured with MUMPS
|
||||
|
||||
-solver_pc_type cholesky
|
||||
--solver_pc_factor_mat_solver_package mumps
|
||||
+-solver_pc_factor_mat_solver_type mumps
|
||||
diff --git a/examples/petsc/rc_ex4p_bddc b/examples/petsc/rc_ex4p_bddc
|
||||
index 9507ad431..e8ef99db7 100644
|
||||
--- a/examples/petsc/rc_ex4p_bddc
|
||||
+++ b/examples/petsc/rc_ex4p_bddc
|
||||
@@ -13,7 +13,7 @@
|
||||
#-pc_bddc_adaptive_threshold 10
|
||||
|
||||
# Customization of the local solvers
|
||||
-#-pc_bddc_neumann_pc_factor_mat_solver_package mumps
|
||||
-#-pc_bddc_dirichlet_pc_factor_mat_solver_package mumps
|
||||
+#-pc_bddc_neumann_pc_factor_mat_solver_type mumps
|
||||
+#-pc_bddc_dirichlet_pc_factor_mat_solver_type mumps
|
||||
#-pc_bddc_coarse_pc_type cholesky
|
||||
-#-pc_bddc_coarse_pc_factor_mat_solver_package mumps
|
||||
+#-pc_bddc_coarse_pc_factor_mat_solver_type mumps
|
||||
diff --git a/examples/petsc/rc_ex5p_bddc b/examples/petsc/rc_ex5p_bddc
|
||||
index b243c53c8..a4bc899c3 100644
|
||||
--- a/examples/petsc/rc_ex5p_bddc
|
||||
+++ b/examples/petsc/rc_ex5p_bddc
|
||||
@@ -28,13 +28,13 @@
|
||||
# local solvers (needs PETSc compiled with support for SuiteSparse)
|
||||
# default solvers will fail
|
||||
-prec_pc_bddc_neumann_pc_type lu
|
||||
--prec_pc_bddc_neumann_pc_factor_mat_solver_package umfpack
|
||||
+-prec_pc_bddc_neumann_pc_factor_mat_solver_type umfpack
|
||||
-prec_pc_bddc_dirichlet_pc_type lu
|
||||
--prec_pc_bddc_dirichlet_pc_factor_mat_solver_package umfpack
|
||||
+-prec_pc_bddc_dirichlet_pc_factor_mat_solver_type umfpack
|
||||
|
||||
# coarse solver (needs PETSc compiled with support for MUMPS)
|
||||
# default solver may fail
|
||||
--prec_pc_bddc_coarse_pc_factor_mat_solver_package mumps
|
||||
+-prec_pc_bddc_coarse_pc_factor_mat_solver_type mumps
|
||||
-prec_pc_bddc_coarse_pc_type cholesky
|
||||
|
||||
# deluxe scaling (needs PETSc compiled with support for MUMPS)
|
36
var/spack/repos/builtin/packages/mfem/mfem-3.4.patch
Normal file
36
var/spack/repos/builtin/packages/mfem/mfem-3.4.patch
Normal file
@ -0,0 +1,36 @@
|
||||
diff --git a/config/test.mk b/config/test.mk
|
||||
index 4821b084d..62479fc63 100644
|
||||
--- a/config/test.mk
|
||||
+++ b/config/test.mk
|
||||
@@ -14,11 +14,13 @@
|
||||
# Colors used below:
|
||||
# green '\033[0;32m'
|
||||
# red '\033[0;31m'
|
||||
+# yellow '\033[0;33m'
|
||||
# no color '\033[0m'
|
||||
COLOR_PRINT = if [ -t 1 ]; then \
|
||||
printf $(1)$(2)'\033[0m'$(3); else printf $(2)$(3); fi
|
||||
PRINT_OK = $(call COLOR_PRINT,'\033[0;32m',OK," ($$1 $$2)\n")
|
||||
PRINT_FAILED = $(call COLOR_PRINT,'\033[0;31m',FAILED," ($$1 $$2)\n")
|
||||
+PRINT_SKIP = $(call COLOR_PRINT,'\033[0;33m',SKIP,"\n")
|
||||
|
||||
# Timing support
|
||||
define TIMECMD_detect
|
||||
diff --git a/examples/pumi/makefile b/examples/pumi/makefile
|
||||
index 2f98eeca7..5ff652aca 100644
|
||||
--- a/examples/pumi/makefile
|
||||
+++ b/examples/pumi/makefile
|
||||
@@ -51,6 +51,13 @@ endif
|
||||
MFEM_TESTS = EXAMPLES
|
||||
include $(MFEM_TEST_MK)
|
||||
|
||||
+ifneq (,$(filter test%,$(MAKECMDGOALS)))
|
||||
+ ifeq (,$(wildcard ../../data/pumi))
|
||||
+ $(info PUMI data directory not found. The PUMI tests will be SKIPPED.)
|
||||
+ mfem-test = printf " $(3) [$(2) $(1) ... ]: "; $(PRINT_SKIP)
|
||||
+ endif
|
||||
+endif
|
||||
+
|
||||
# Testing: Parallel vs. serial runs
|
||||
RUN_MPI_NP = $(MFEM_MPIEXEC) $(MFEM_MPIEXEC_NP)
|
||||
RUN_MPI = $(RUN_MPI_NP) $(MFEM_MPI_NP)
|
@ -65,11 +65,15 @@ class Mfem(Package):
|
||||
version('develop',
|
||||
git='https://github.com/mfem/mfem', branch='master')
|
||||
|
||||
version('3.3.2',
|
||||
'01a762a5d0a2bc59ce4e2f59009045a4',
|
||||
url='https://goo.gl/Kd7Jk8', extension='.tar.gz',
|
||||
version('3.4.0',
|
||||
'4e73e4fe0482636de3c5dc983cd395839a83cb16f6f509bd88b053e8b3858e05',
|
||||
url='https://bit.ly/mfem-3-4', extension='.tar.gz',
|
||||
preferred=True)
|
||||
|
||||
version('3.3.2',
|
||||
'b70fa3c5080b9ec514fc05f4a04ff74322b99ac4ecd6d99c229f0ed5188fc0ce',
|
||||
url='https://goo.gl/Kd7Jk8', extension='.tar.gz')
|
||||
|
||||
version('laghos-v1.0', git='https://github.com/mfem/mfem',
|
||||
tag='laghos-v1.0')
|
||||
|
||||
@ -117,6 +121,8 @@ class Mfem(Package):
|
||||
description='Enable PETSc solvers, preconditioners, etc.')
|
||||
variant('sundials', default=False,
|
||||
description='Enable Sundials time integrators')
|
||||
variant('pumi', default=False,
|
||||
description='Enable functionality based on PUMI')
|
||||
variant('mpfr', default=False,
|
||||
description='Enable precise, 1D quadrature rules')
|
||||
variant('lapack', default=False,
|
||||
@ -152,6 +158,7 @@ class Mfem(Package):
|
||||
conflicts('+mpfr', when='@:3.2')
|
||||
conflicts('+petsc', when='@:3.2')
|
||||
conflicts('+sundials', when='@:3.2')
|
||||
conflicts('+pumi', when='@:3.3.2')
|
||||
conflicts('timer=mac', when='@:3.3.0')
|
||||
conflicts('timer=mpi', when='@:3.3.0')
|
||||
conflicts('~metis+mpi', when='@:3.3.0')
|
||||
@ -160,8 +167,11 @@ class Mfem(Package):
|
||||
|
||||
conflicts('+superlu-dist', 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', when='@3.4:+mpi')
|
||||
@ -174,6 +184,7 @@ class Mfem(Package):
|
||||
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('pumi', when='+pumi')
|
||||
depends_on('suite-sparse', when='+suite-sparse')
|
||||
depends_on('superlu-dist', when='+superlu-dist')
|
||||
# The PETSc tests in MFEM will fail if PETSc is not configured with
|
||||
@ -192,6 +203,9 @@ class Mfem(Package):
|
||||
depends_on('conduit+mpi', when='+conduit+mpi')
|
||||
|
||||
patch('mfem_ppc_build.patch', when='@3.2:3.3.0 arch=ppc64le')
|
||||
patch('mfem-3.4.patch', when='@3.4.0')
|
||||
patch('mfem-3.3-3.4-petsc-3.9.patch',
|
||||
when='@3.3.0:3.4.0,develop +petsc ^petsc@3.9.0:')
|
||||
|
||||
phases = ['configure', 'build', 'install']
|
||||
|
||||
@ -226,6 +240,15 @@ def ld_flags_from_dirs(pkg_dirs_list, pkg_libs_list):
|
||||
flags += ['-l%s' % lib for lib in pkg_libs_list]
|
||||
return ' '.join(flags)
|
||||
|
||||
def find_optional_library(name, prefix):
|
||||
for shared in [True, False]:
|
||||
for path in ['lib64', 'lib']:
|
||||
lib = find_libraries(name, join_path(prefix, path),
|
||||
shared=shared, recursive=False)
|
||||
if lib:
|
||||
return lib
|
||||
return LibraryList([])
|
||||
|
||||
metis5_str = 'NO'
|
||||
if ('+metis' in spec) and spec['metis'].satisfies('@5:'):
|
||||
metis5_str = 'YES'
|
||||
@ -248,6 +271,7 @@ def ld_flags_from_dirs(pkg_dirs_list, pkg_libs_list):
|
||||
'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_NETCDF=%s' % yes_no('+netcdf'),
|
||||
'MFEM_USE_MPFR=%s' % yes_no('+mpfr'),
|
||||
'MFEM_USE_GNUTLS=%s' % yes_no('+gnutls'),
|
||||
@ -318,6 +342,9 @@ def ld_flags_from_dirs(pkg_dirs_list, pkg_libs_list):
|
||||
'PETSC_LIB=%s' %
|
||||
ld_flags_from_LibraryList(spec['petsc'].libs)]
|
||||
|
||||
if '+pumi' in spec:
|
||||
options += ['PUMI_DIR=%s' % spec['pumi'].prefix]
|
||||
|
||||
if '+netcdf' in spec:
|
||||
options += [
|
||||
'NETCDF_OPT=-I%s' % spec['netcdf'].prefix.include,
|
||||
@ -349,11 +376,7 @@ def ld_flags_from_dirs(pkg_dirs_list, pkg_libs_list):
|
||||
libunwind = spec['libunwind']
|
||||
headers = find_headers('libunwind', libunwind.prefix.include)
|
||||
headers.add_macro('-g')
|
||||
libs = find_libraries('libunwind', libunwind.prefix.lib,
|
||||
shared=True, recursive=True)
|
||||
if not libs:
|
||||
libs = find_libraries('libunwind', libunwind.prefix.lib,
|
||||
shared=False, recursive=True)
|
||||
libs = find_optional_library('libunwind', libunwind.prefix)
|
||||
# When mfem uses libunwind, it also needs 'libdl'.
|
||||
libs += LibraryList(find_system_libraries('libdl'))
|
||||
options += [
|
||||
|
@ -5,7 +5,7 @@ builds=(
|
||||
'mfem'
|
||||
'mfem~mpi~metis~gzstream'
|
||||
'mfem+mpi+superlu-dist+suite-sparse+petsc \
|
||||
+sundials+mpfr+netcdf+gzstream+gnutls+libunwind \
|
||||
+sundials+pumi+mpfr+netcdf+gzstream+gnutls+libunwind \
|
||||
^hypre~internal-superlu ^petsc~boost+suite-sparse+mumps'
|
||||
'mfem~mpi+suite-sparse+sundials+mpfr+netcdf \
|
||||
+gzstream+gnutls+libunwind'
|
||||
@ -14,6 +14,7 @@ builds=(
|
||||
'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 \
|
||||
@ -32,6 +33,7 @@ builds2=(
|
||||
'mfem+suite-sparse'
|
||||
'mfem+sundials~mpi'
|
||||
'mfem+sundials'
|
||||
'mfem+pumi'
|
||||
'mfem+netcdf~mpi'
|
||||
'mfem+netcdf'
|
||||
'mfem+mpfr'
|
||||
@ -43,6 +45,7 @@ builds2=(
|
||||
'mfem@develop+suite-sparse'
|
||||
'mfem@develop+sundials~mpi'
|
||||
'mfem@develop+sundials'
|
||||
'mfem@develop+pumi'
|
||||
'mfem@develop+netcdf~mpi'
|
||||
'mfem@develop+netcdf'
|
||||
'mfem@develop+mpfr'
|
||||
|
Loading…
Reference in New Issue
Block a user