[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:
Veselin Dobrev 2018-06-13 13:42:21 -07:00 committed by Todd Gamblin
parent 674feb45f1
commit a0c2a25a72
4 changed files with 142 additions and 9 deletions

View File

@ -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)

View 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)

View File

@ -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 += [

View File

@ -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'