diff --git a/.gitignore b/.gitignore index cb8bb3a5e7c..50e5a2f7cae 100644 --- a/.gitignore +++ b/.gitignore @@ -235,3 +235,7 @@ installed # Allow developers to use .clang-format without dirtying git .clang-format + +# VSCode related things +.cache +.vscode diff --git a/clang-format b/clang-format index 7e5426a8a01..b3955982852 100644 --- a/clang-format +++ b/clang-format @@ -24,7 +24,7 @@ AllowShortLoopsOnASingleLine: false SortIncludes: false IndentCaseLabels: true ConstructorInitializerIndentWidth: 2 -AlwaysBreakAfterDefinitionReturnType: TopLevel +AlwaysBreakAfterDefinitionReturnType: false AlwaysBreakTemplateDeclarations: true FixNamespaceComments: false diff --git a/configure b/configure index fbb52667b14..1cc297f0085 100755 --- a/configure +++ b/configure @@ -60504,7 +60504,7 @@ printf "%s\n" "#define BUILD_DATE __DATE__ \" \" __TIME__" >>confdefs.h if test "x$enableexamples" = "xyes" then : - ac_config_files="$ac_config_files examples/introduction/introduction_ex1/Makefile examples/introduction/introduction_ex2/Makefile examples/introduction/introduction_ex3/Makefile examples/introduction/introduction_ex4/Makefile examples/introduction/introduction_ex5/Makefile examples/adaptivity/adaptivity_ex1/Makefile examples/adaptivity/adaptivity_ex2/Makefile examples/adaptivity/adaptivity_ex3/Makefile examples/adaptivity/adaptivity_ex4/Makefile examples/adaptivity/adaptivity_ex5/Makefile examples/adjoints/adjoints_ex1/Makefile examples/adjoints/adjoints_ex2/Makefile examples/adjoints/adjoints_ex3/Makefile examples/adjoints/adjoints_ex4/Makefile examples/adjoints/adjoints_ex5/Makefile examples/adjoints/adjoints_ex6/Makefile examples/adjoints/adjoints_ex7/Makefile examples/eigenproblems/eigenproblems_ex1/Makefile examples/eigenproblems/eigenproblems_ex2/Makefile examples/eigenproblems/eigenproblems_ex3/Makefile examples/eigenproblems/eigenproblems_ex4/Makefile examples/fem_system/fem_system_ex1/Makefile examples/fem_system/fem_system_ex2/Makefile examples/fem_system/fem_system_ex3/Makefile examples/fem_system/fem_system_ex4/Makefile examples/fem_system/fem_system_ex5/Makefile examples/solution_transfer/solution_transfer_ex1/Makefile examples/miscellaneous/miscellaneous_ex1/Makefile examples/miscellaneous/miscellaneous_ex2/Makefile examples/miscellaneous/miscellaneous_ex3/Makefile examples/miscellaneous/miscellaneous_ex4/Makefile examples/miscellaneous/miscellaneous_ex5/Makefile examples/miscellaneous/miscellaneous_ex6/Makefile examples/miscellaneous/miscellaneous_ex7/Makefile examples/miscellaneous/miscellaneous_ex8/Makefile examples/miscellaneous/miscellaneous_ex9/Makefile examples/miscellaneous/miscellaneous_ex10/Makefile examples/miscellaneous/miscellaneous_ex11/Makefile examples/miscellaneous/miscellaneous_ex12/Makefile examples/miscellaneous/miscellaneous_ex13/Makefile examples/miscellaneous/miscellaneous_ex14/Makefile examples/miscellaneous/miscellaneous_ex15/Makefile examples/miscellaneous/miscellaneous_ex16/Makefile examples/optimization/optimization_ex1/Makefile examples/optimization/optimization_ex2/Makefile examples/subdomains/subdomains_ex1/Makefile examples/subdomains/subdomains_ex2/Makefile examples/subdomains/subdomains_ex3/Makefile examples/systems_of_equations/systems_of_equations_ex1/Makefile examples/systems_of_equations/systems_of_equations_ex2/Makefile examples/systems_of_equations/systems_of_equations_ex3/Makefile examples/systems_of_equations/systems_of_equations_ex4/Makefile examples/systems_of_equations/systems_of_equations_ex5/Makefile examples/systems_of_equations/systems_of_equations_ex6/Makefile examples/systems_of_equations/systems_of_equations_ex7/Makefile examples/systems_of_equations/systems_of_equations_ex8/Makefile examples/systems_of_equations/systems_of_equations_ex9/Makefile examples/reduced_basis/reduced_basis_ex1/Makefile examples/reduced_basis/reduced_basis_ex2/Makefile examples/reduced_basis/reduced_basis_ex3/Makefile examples/reduced_basis/reduced_basis_ex4/Makefile examples/reduced_basis/reduced_basis_ex5/Makefile examples/reduced_basis/reduced_basis_ex6/Makefile examples/reduced_basis/reduced_basis_ex7/Makefile examples/transient/transient_ex1/Makefile examples/transient/transient_ex2/Makefile examples/vector_fe/vector_fe_ex1/Makefile examples/vector_fe/vector_fe_ex2/Makefile examples/vector_fe/vector_fe_ex3/Makefile examples/vector_fe/vector_fe_ex4/Makefile examples/vector_fe/vector_fe_ex5/Makefile examples/vector_fe/vector_fe_ex6/Makefile examples/vector_fe/vector_fe_ex7/Makefile examples/vector_fe/vector_fe_ex8/Makefile examples/vector_fe/vector_fe_ex9/Makefile examples/Makefile" + ac_config_files="$ac_config_files examples/introduction/introduction_ex1/Makefile examples/introduction/introduction_ex2/Makefile examples/introduction/introduction_ex3/Makefile examples/introduction/introduction_ex4/Makefile examples/introduction/introduction_ex5/Makefile examples/adaptivity/adaptivity_ex1/Makefile examples/adaptivity/adaptivity_ex2/Makefile examples/adaptivity/adaptivity_ex3/Makefile examples/adaptivity/adaptivity_ex4/Makefile examples/adaptivity/adaptivity_ex5/Makefile examples/adjoints/adjoints_ex1/Makefile examples/adjoints/adjoints_ex2/Makefile examples/adjoints/adjoints_ex3/Makefile examples/adjoints/adjoints_ex4/Makefile examples/adjoints/adjoints_ex5/Makefile examples/adjoints/adjoints_ex6/Makefile examples/adjoints/adjoints_ex7/Makefile examples/eigenproblems/eigenproblems_ex1/Makefile examples/eigenproblems/eigenproblems_ex2/Makefile examples/eigenproblems/eigenproblems_ex3/Makefile examples/eigenproblems/eigenproblems_ex4/Makefile examples/fem_system/fem_system_ex1/Makefile examples/fem_system/fem_system_ex2/Makefile examples/fem_system/fem_system_ex3/Makefile examples/fem_system/fem_system_ex4/Makefile examples/fem_system/fem_system_ex5/Makefile examples/solution_transfer/solution_transfer_ex1/Makefile examples/miscellaneous/miscellaneous_ex1/Makefile examples/miscellaneous/miscellaneous_ex2/Makefile examples/miscellaneous/miscellaneous_ex3/Makefile examples/miscellaneous/miscellaneous_ex4/Makefile examples/miscellaneous/miscellaneous_ex5/Makefile examples/miscellaneous/miscellaneous_ex6/Makefile examples/miscellaneous/miscellaneous_ex7/Makefile examples/miscellaneous/miscellaneous_ex8/Makefile examples/miscellaneous/miscellaneous_ex9/Makefile examples/miscellaneous/miscellaneous_ex10/Makefile examples/miscellaneous/miscellaneous_ex11/Makefile examples/miscellaneous/miscellaneous_ex12/Makefile examples/miscellaneous/miscellaneous_ex13/Makefile examples/miscellaneous/miscellaneous_ex14/Makefile examples/miscellaneous/miscellaneous_ex15/Makefile examples/miscellaneous/miscellaneous_ex16/Makefile examples/miscellaneous/miscellaneous_ex17/Makefile examples/optimization/optimization_ex1/Makefile examples/optimization/optimization_ex2/Makefile examples/subdomains/subdomains_ex1/Makefile examples/subdomains/subdomains_ex2/Makefile examples/subdomains/subdomains_ex3/Makefile examples/systems_of_equations/systems_of_equations_ex1/Makefile examples/systems_of_equations/systems_of_equations_ex2/Makefile examples/systems_of_equations/systems_of_equations_ex3/Makefile examples/systems_of_equations/systems_of_equations_ex4/Makefile examples/systems_of_equations/systems_of_equations_ex5/Makefile examples/systems_of_equations/systems_of_equations_ex6/Makefile examples/systems_of_equations/systems_of_equations_ex7/Makefile examples/systems_of_equations/systems_of_equations_ex8/Makefile examples/systems_of_equations/systems_of_equations_ex9/Makefile examples/reduced_basis/reduced_basis_ex1/Makefile examples/reduced_basis/reduced_basis_ex2/Makefile examples/reduced_basis/reduced_basis_ex3/Makefile examples/reduced_basis/reduced_basis_ex4/Makefile examples/reduced_basis/reduced_basis_ex5/Makefile examples/reduced_basis/reduced_basis_ex6/Makefile examples/reduced_basis/reduced_basis_ex7/Makefile examples/transient/transient_ex1/Makefile examples/transient/transient_ex2/Makefile examples/vector_fe/vector_fe_ex1/Makefile examples/vector_fe/vector_fe_ex2/Makefile examples/vector_fe/vector_fe_ex3/Makefile examples/vector_fe/vector_fe_ex4/Makefile examples/vector_fe/vector_fe_ex5/Makefile examples/vector_fe/vector_fe_ex6/Makefile examples/vector_fe/vector_fe_ex7/Makefile examples/vector_fe/vector_fe_ex8/Makefile examples/vector_fe/vector_fe_ex9/Makefile examples/Makefile" fi @@ -62808,6 +62808,7 @@ do "examples/miscellaneous/miscellaneous_ex14/Makefile") CONFIG_FILES="$CONFIG_FILES examples/miscellaneous/miscellaneous_ex14/Makefile" ;; "examples/miscellaneous/miscellaneous_ex15/Makefile") CONFIG_FILES="$CONFIG_FILES examples/miscellaneous/miscellaneous_ex15/Makefile" ;; "examples/miscellaneous/miscellaneous_ex16/Makefile") CONFIG_FILES="$CONFIG_FILES examples/miscellaneous/miscellaneous_ex16/Makefile" ;; + "examples/miscellaneous/miscellaneous_ex17/Makefile") CONFIG_FILES="$CONFIG_FILES examples/miscellaneous/miscellaneous_ex17/Makefile" ;; "examples/optimization/optimization_ex1/Makefile") CONFIG_FILES="$CONFIG_FILES examples/optimization/optimization_ex1/Makefile" ;; "examples/optimization/optimization_ex2/Makefile") CONFIG_FILES="$CONFIG_FILES examples/optimization/optimization_ex2/Makefile" ;; "examples/subdomains/subdomains_ex1/Makefile") CONFIG_FILES="$CONFIG_FILES examples/subdomains/subdomains_ex1/Makefile" ;; diff --git a/configure.ac b/configure.ac index 01d8e0e9894..fb360f56a42 100644 --- a/configure.ac +++ b/configure.ac @@ -447,6 +447,7 @@ AS_IF([test "x$enableexamples" = "xyes"], examples/miscellaneous/miscellaneous_ex14/Makefile examples/miscellaneous/miscellaneous_ex15/Makefile examples/miscellaneous/miscellaneous_ex16/Makefile + examples/miscellaneous/miscellaneous_ex17/Makefile examples/optimization/optimization_ex1/Makefile examples/optimization/optimization_ex2/Makefile examples/subdomains/subdomains_ex1/Makefile diff --git a/doc/html/examples/miscellaneous_ex17.html b/doc/html/examples/miscellaneous_ex17.html new file mode 100644 index 00000000000..f8b6756c0e8 --- /dev/null +++ b/doc/html/examples/miscellaneous_ex17.html @@ -0,0 +1,147 @@ + + + + + libMesh - A C++ Finite Element Library + + + + + + + + +
+ + + + +
+ +

Link to the source code for this example:

+Open miscellaneous_ex17 in new tab. + +


The console output of the program:

+
+  CXX      example_dbg-miscellaneous_ex17.o
+  CXXLD    example-dbg
+  CXX      example_devel-miscellaneous_ex17.o
+  CXXLD    example-devel
+  CXX      example_oprof-miscellaneous_ex17.o
+  CXXLD    example-oprof
+***************************************************************
+* Running Example miscellaneous_ex17:
+*   ./example-opt  
+***************************************************************
+ 
+Running /data/lindad/libmesh-worktrees/libmesh/build/examples/miscellaneous/miscellaneous_ex17/.libs/example-opt
+
+ Mesh Information:
+  elem_dimensions()={2}
+  elem_default_orders()={1}
+  supported_nodal_order()=1
+  spatial_dimension()=2
+  n_nodes()=9
+    n_local_nodes()=9
+  n_elem()=4
+    n_local_elem()=4
+    n_active_elem()=4
+  n_subdomains()=1
+  n_elemsets()=0
+  n_partitions()=1
+  n_processors()=1
+  n_threads()=1
+  processor_id()=0
+  is_prepared()=true
+  is_replicated()=true
+
+ EquationSystems
+  n_systems()=1
+   System #0, "Poisson"
+    Type "LinearImplicit"
+    Variables="u" 
+    Finite Element Types="LAGRANGE" 
+    Approximation Orders="FIRST" 
+    n_dofs()=9
+    n_local_dofs()=9
+    max(n_local_dofs())=9
+    n_constrained_dofs()=0
+    n_local_constrained_dofs()=0
+    max(local unconstrained dofs)=9
+    n_vectors()=1
+    n_matrices()=2
+    DofMap Sparsity
+      Average  On-Processor Bandwidth <= 5.44444
+      Average Off-Processor Bandwidth <= 0
+      Maximum  On-Processor Bandwidth <= 9
+      Maximum Off-Processor Bandwidth <= 0
+    DofMap Constraints
+      Number of DoF Constraints = 0
+
+  0 KSP Residual norm 1.688435532300e+00
+  1 KSP Residual norm 4.775853068521e-03
+  2 KSP Residual norm 8.773680887473e-05
+  3 KSP Residual norm 2.605740036645e-06
+  0 KSP Residual norm 1.688435532300e+00
+  1 KSP Residual norm 4.775853068521e-03
+  2 KSP Residual norm 8.773680887473e-05
+  3 KSP Residual norm 2.605740036645e-06
+ 
+***************************************************************
+* Done Running Example miscellaneous_ex17:
+*   ./example-opt  
+***************************************************************
+
+
+ + + + + + + + + diff --git a/doc/html/src/examples.html b/doc/html/src/examples.html index e4c01d071b1..2a2cf7b5d25 100644 --- a/doc/html/src/examples.html +++ b/doc/html/src/examples.html @@ -203,6 +203,11 @@

A Series of Example Programs

  • Static Condensation with Second Order Lagrange Elements
  • +
  • + Demonstrating mix of preallocated/hash-table matrix assemblies + +
  • + diff --git a/examples/Makefile.am b/examples/Makefile.am index 72875b74db2..76e265aca15 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -42,6 +42,7 @@ SUBDIRS = \ miscellaneous/miscellaneous_ex14 \ miscellaneous/miscellaneous_ex15 \ miscellaneous/miscellaneous_ex16 \ + miscellaneous/miscellaneous_ex17 \ optimization/optimization_ex1 \ optimization/optimization_ex2 \ subdomains/subdomains_ex1 \ diff --git a/examples/Makefile.in b/examples/Makefile.in index d5925e83f20..aa14c02428f 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -629,6 +629,7 @@ SUBDIRS = \ miscellaneous/miscellaneous_ex14 \ miscellaneous/miscellaneous_ex15 \ miscellaneous/miscellaneous_ex16 \ + miscellaneous/miscellaneous_ex17 \ optimization/optimization_ex1 \ optimization/optimization_ex2 \ subdomains/subdomains_ex1 \ diff --git a/examples/miscellaneous/miscellaneous_ex17/Makefile.am b/examples/miscellaneous/miscellaneous_ex17/Makefile.am new file mode 100644 index 00000000000..a5ea84e95c4 --- /dev/null +++ b/examples/miscellaneous/miscellaneous_ex17/Makefile.am @@ -0,0 +1,14 @@ +example_name = miscellaneous_ex17 +check_SCRIPTS = run.sh +install_dir = $(examples_install_path)/introduction/ex3 +data = miscellaneous_ex17.C exact_solution.C run.sh +sources = $(data) run.sh + +CLEANFILES = out.pvtu + +clean-local: + -rm -rf out_*.vtu + +############################################## +# include common example environment +include $(top_srcdir)/examples/Make.common diff --git a/examples/miscellaneous/miscellaneous_ex17/Makefile.in b/examples/miscellaneous/miscellaneous_ex17/Makefile.in new file mode 100644 index 00000000000..6b125ae4488 --- /dev/null +++ b/examples/miscellaneous/miscellaneous_ex17/Makefile.in @@ -0,0 +1,1388 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ + $(am__EXEEXT_4) $(am__EXEEXT_5) +@LIBMESH_DBG_MODE_TRUE@am__append_1 = example-dbg +@LIBMESH_DEVEL_MODE_TRUE@am__append_2 = example-devel +@LIBMESH_OPT_MODE_TRUE@am__append_3 = example-opt +@LIBMESH_PROF_MODE_TRUE@am__append_4 = example-prof +@LIBMESH_OPROF_MODE_TRUE@am__append_5 = example-oprof +subdir = examples/miscellaneous/miscellaneous_ex17 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = \ + $(top_srcdir)/m4/autoconf-submodule/acsm_code_coverage.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_compiler_control_args.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_compiler_flags.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_cxx_compiler_standard.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_enable_paranoid.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_enable_werror.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_mpi.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_scrape_petsc_configure.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_summarize_env.m4 \ + $(top_srcdir)/m4/autoconf-submodule/acsm_test_sanitize_flags.m4 \ + $(top_srcdir)/m4/autoconf-submodule/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/m4/autoconf-submodule/ax_prefix_config_h.m4 \ + $(top_srcdir)/m4/autoconf-submodule/ax_split_version.m4 \ + $(top_srcdir)/m4/autoconf-submodule/ax_subdirs_configure.m4 \ + $(top_srcdir)/m4/ac_cxx_rtti.m4 \ + $(top_srcdir)/m4/acsm_cxx_tests.m4 \ + $(top_srcdir)/m4/all_static.m4 \ + $(top_srcdir)/m4/ax_boost_base.m4 \ + $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_compiler_vendor.m4 \ + $(top_srcdir)/m4/ax_gcc_archflag.m4 \ + $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ + $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/ax_pthread.m4 \ + $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/backtrace.m4 \ + $(top_srcdir)/m4/boost.m4 $(top_srcdir)/m4/capnproto.m4 \ + $(top_srcdir)/m4/compiler.m4 \ + $(top_srcdir)/m4/config_summary.m4 $(top_srcdir)/m4/cppunit.m4 \ + $(top_srcdir)/m4/curl.m4 $(top_srcdir)/m4/cxx17.m4 \ + $(top_srcdir)/m4/demangle.m4 $(top_srcdir)/m4/dlopen.m4 \ + $(top_srcdir)/m4/eigen.m4 $(top_srcdir)/m4/errno_test.m4 \ + $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ + $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ + $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ + $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/libmesh_compiler_features.m4 \ + $(top_srcdir)/m4/libmesh_core_features.m4 \ + $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ + $(top_srcdir)/m4/libmesh_method.m4 \ + $(top_srcdir)/m4/libmesh_optional_packages.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/libxml2.m4 \ + $(top_srcdir)/m4/locale.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/metis.m4 \ + $(top_srcdir)/m4/namespaces.m4 $(top_srcdir)/m4/nanoflann.m4 \ + $(top_srcdir)/m4/nemesis.m4 $(top_srcdir)/m4/netcdf.m4 \ + $(top_srcdir)/m4/netgen.m4 $(top_srcdir)/m4/nlopt.m4 \ + $(top_srcdir)/m4/parmetis.m4 $(top_srcdir)/m4/petsc.m4 \ + $(top_srcdir)/m4/poly2tri.m4 $(top_srcdir)/m4/precision.m4 \ + $(top_srcdir)/m4/qhull.m4 $(top_srcdir)/m4/sfc.m4 \ + $(top_srcdir)/m4/slepc.m4 $(top_srcdir)/m4/sstream.m4 \ + $(top_srcdir)/m4/strstream.m4 $(top_srcdir)/m4/tbb.m4 \ + $(top_srcdir)/m4/tecio.m4 $(top_srcdir)/m4/tecplot.m4 \ + $(top_srcdir)/m4/tetgen.m4 $(top_srcdir)/m4/threads.m4 \ + $(top_srcdir)/m4/triangle.m4 $(top_srcdir)/m4/trilinos.m4 \ + $(top_srcdir)/m4/unordered.m4 $(top_srcdir)/m4/vtk.m4 \ + $(top_srcdir)/m4/xdr.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/libmesh_config.h.tmp +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@LIBMESH_DBG_MODE_TRUE@am__EXEEXT_1 = example-dbg$(EXEEXT) +@LIBMESH_DEVEL_MODE_TRUE@am__EXEEXT_2 = example-devel$(EXEEXT) +@LIBMESH_OPT_MODE_TRUE@am__EXEEXT_3 = example-opt$(EXEEXT) +@LIBMESH_PROF_MODE_TRUE@am__EXEEXT_4 = example-prof$(EXEEXT) +@LIBMESH_OPROF_MODE_TRUE@am__EXEEXT_5 = example-oprof$(EXEEXT) +am__example_dbg_SOURCES_DIST = miscellaneous_ex17.C exact_solution.C \ + run.sh +am__objects_1 = example_dbg-miscellaneous_ex17.$(OBJEXT) \ + example_dbg-exact_solution.$(OBJEXT) +am__objects_2 = $(am__objects_1) +@LIBMESH_DBG_MODE_TRUE@am_example_dbg_OBJECTS = $(am__objects_2) +example_dbg_OBJECTS = $(am_example_dbg_OBJECTS) +@LIBMESH_DBG_MODE_TRUE@example_dbg_DEPENDENCIES = \ +@LIBMESH_DBG_MODE_TRUE@ $(top_builddir)/libmesh_dbg.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +example_dbg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(example_dbg_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__example_devel_SOURCES_DIST = miscellaneous_ex17.C exact_solution.C \ + run.sh +am__objects_3 = example_devel-miscellaneous_ex17.$(OBJEXT) \ + example_devel-exact_solution.$(OBJEXT) +am__objects_4 = $(am__objects_3) +@LIBMESH_DEVEL_MODE_TRUE@am_example_devel_OBJECTS = $(am__objects_4) +example_devel_OBJECTS = $(am_example_devel_OBJECTS) +@LIBMESH_DEVEL_MODE_TRUE@example_devel_DEPENDENCIES = \ +@LIBMESH_DEVEL_MODE_TRUE@ $(top_builddir)/libmesh_devel.la +example_devel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(example_devel_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +am__example_oprof_SOURCES_DIST = miscellaneous_ex17.C exact_solution.C \ + run.sh +am__objects_5 = example_oprof-miscellaneous_ex17.$(OBJEXT) \ + example_oprof-exact_solution.$(OBJEXT) +am__objects_6 = $(am__objects_5) +@LIBMESH_OPROF_MODE_TRUE@am_example_oprof_OBJECTS = $(am__objects_6) +example_oprof_OBJECTS = $(am_example_oprof_OBJECTS) +@LIBMESH_OPROF_MODE_TRUE@example_oprof_DEPENDENCIES = \ +@LIBMESH_OPROF_MODE_TRUE@ $(top_builddir)/libmesh_oprof.la +example_oprof_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(example_oprof_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +am__example_opt_SOURCES_DIST = miscellaneous_ex17.C exact_solution.C \ + run.sh +am__objects_7 = example_opt-miscellaneous_ex17.$(OBJEXT) \ + example_opt-exact_solution.$(OBJEXT) +am__objects_8 = $(am__objects_7) +@LIBMESH_OPT_MODE_TRUE@am_example_opt_OBJECTS = $(am__objects_8) +example_opt_OBJECTS = $(am_example_opt_OBJECTS) +@LIBMESH_OPT_MODE_TRUE@example_opt_DEPENDENCIES = \ +@LIBMESH_OPT_MODE_TRUE@ $(top_builddir)/libmesh_opt.la +example_opt_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(example_opt_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__example_prof_SOURCES_DIST = miscellaneous_ex17.C exact_solution.C \ + run.sh +am__objects_9 = example_prof-miscellaneous_ex17.$(OBJEXT) \ + example_prof-exact_solution.$(OBJEXT) +am__objects_10 = $(am__objects_9) +@LIBMESH_PROF_MODE_TRUE@am_example_prof_OBJECTS = $(am__objects_10) +example_prof_OBJECTS = $(am_example_prof_OBJECTS) +@LIBMESH_PROF_MODE_TRUE@example_prof_DEPENDENCIES = \ +@LIBMESH_PROF_MODE_TRUE@ $(top_builddir)/libmesh_prof.la +example_prof_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(example_prof_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/example_dbg-exact_solution.Po \ + ./$(DEPDIR)/example_dbg-miscellaneous_ex17.Po \ + ./$(DEPDIR)/example_devel-exact_solution.Po \ + ./$(DEPDIR)/example_devel-miscellaneous_ex17.Po \ + ./$(DEPDIR)/example_oprof-exact_solution.Po \ + ./$(DEPDIR)/example_oprof-miscellaneous_ex17.Po \ + ./$(DEPDIR)/example_opt-exact_solution.Po \ + ./$(DEPDIR)/example_opt-miscellaneous_ex17.Po \ + ./$(DEPDIR)/example_prof-exact_solution.Po \ + ./$(DEPDIR)/example_prof-miscellaneous_ex17.Po +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(example_dbg_SOURCES) $(example_devel_SOURCES) \ + $(example_oprof_SOURCES) $(example_opt_SOURCES) \ + $(example_prof_SOURCES) +DIST_SOURCES = $(am__example_dbg_SOURCES_DIST) \ + $(am__example_devel_SOURCES_DIST) \ + $(am__example_oprof_SOURCES_DIST) \ + $(am__example_opt_SOURCES_DIST) \ + $(am__example_prof_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(datadir)" +DATA = $(data_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp \ + $(top_srcdir)/examples/Make.common +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACSM_ANY_PARANOID_FLAGS = @ACSM_ANY_PARANOID_FLAGS@ +ACSM_ANY_WERROR_FLAG = @ACSM_ANY_WERROR_FLAG@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +AZTECOO_INCLUDES = @AZTECOO_INCLUDES@ +AZTECOO_LIBS = @AZTECOO_LIBS@ +AZTECOO_MAKEFILE_EXPORT = @AZTECOO_MAKEFILE_EXPORT@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BUILD_ARCH = @BUILD_ARCH@ +BUILD_DEVSTATUS = @BUILD_DEVSTATUS@ +BUILD_HOST = @BUILD_HOST@ +BUILD_USER = @BUILD_USER@ +BUILD_VERSION = @BUILD_VERSION@ +BUNZIP2 = @BUNZIP2@ +BZIP2 = @BZIP2@ +CAPNPROTO_INCLUDE = @CAPNPROTO_INCLUDE@ +CAPNPROTO_LIBRARY = @CAPNPROTO_LIBRARY@ +CAPNP_BINARY = @CAPNP_BINARY@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAGS_DBG = @CFLAGS_DBG@ +CFLAGS_DEVEL = @CFLAGS_DEVEL@ +CFLAGS_DVL = @CFLAGS_DVL@ +CFLAGS_OPROF = @CFLAGS_OPROF@ +CFLAGS_OPT = @CFLAGS_OPT@ +CFLAGS_PROF = @CFLAGS_PROF@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAGS_DBG = @CPPFLAGS_DBG@ +CPPFLAGS_DEVEL = @CPPFLAGS_DEVEL@ +CPPFLAGS_OPROF = @CPPFLAGS_OPROF@ +CPPFLAGS_OPT = @CPPFLAGS_OPT@ +CPPFLAGS_PROF = @CPPFLAGS_PROF@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CURL_INCLUDE = @CURL_INCLUDE@ +CURL_LIBRARY = @CURL_LIBRARY@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ + +# We might have turned on -Werror and/or paranoid warnings +CXXFLAGS_DBG = @CXXFLAGS_DBG@ $(ACSM_ANY_WERROR_FLAG) \ + $(ACSM_ANY_PARANOID_FLAGS) +CXXFLAGS_DEVEL = @CXXFLAGS_DEVEL@ $(ACSM_ANY_WERROR_FLAG) \ + $(ACSM_ANY_PARANOID_FLAGS) +CXXFLAGS_DVL = @CXXFLAGS_DVL@ +CXXFLAGS_OPROF = @CXXFLAGS_OPROF@ $(ACSM_ANY_WERROR_FLAG) \ + $(ACSM_ANY_PARANOID_FLAGS) +CXXFLAGS_OPT = @CXXFLAGS_OPT@ $(ACSM_ANY_WERROR_FLAG) \ + $(ACSM_ANY_PARANOID_FLAGS) +CXXFLAGS_PROF = @CXXFLAGS_PROF@ $(ACSM_ANY_WERROR_FLAG) \ + $(ACSM_ANY_PARANOID_FLAGS) +CXXSHAREDFLAG = @CXXSHAREDFLAG@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DTK_MAKEFILE_EXPORT = @DTK_MAKEFILE_EXPORT@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EIGEN_INCLUDE = @EIGEN_INCLUDE@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +EXODUS_INCLUDE = @EXODUS_INCLUDE@ +EXODUS_NOT_NETCDF4_FLAG = @EXODUS_NOT_NETCDF4_FLAG@ +F77 = @F77@ +FC = @FC@ +FCFLAGS = @FCFLAGS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +FILECMD = @FILECMD@ +FLIBS = @FLIBS@ +FPARSER_INCLUDE = @FPARSER_INCLUDE@ +FPARSER_LIBRARY = @FPARSER_LIBRARY@ +GCOV_FLAGS = @GCOV_FLAGS@ +GCOV_LDFLAGS = @GCOV_LDFLAGS@ +GIT_REVISION = @GIT_REVISION@ +GLPK_INCLUDE = @GLPK_INCLUDE@ +GLPK_LIBRARY = @GLPK_LIBRARY@ +GMV_INCLUDE = @GMV_INCLUDE@ +GMV_LIBRARY = @GMV_LIBRARY@ +GREP = @GREP@ +GXX_VERSION = @GXX_VERSION@ +GZSTREAM_INCLUDE = @GZSTREAM_INCLUDE@ +GZSTREAM_LIB = @GZSTREAM_LIB@ +HAVE_CXX11 = @HAVE_CXX11@ +HAVE_CXX14 = @HAVE_CXX14@ +HAVE_CXX17 = @HAVE_CXX17@ +HAVE_DOT = @HAVE_DOT@ +HAVE_GCOV_TOOLS = @HAVE_GCOV_TOOLS@ +HDF5_CFLAGS = @HDF5_CFLAGS@ +HDF5_CPPFLAGS = @HDF5_CPPFLAGS@ +HDF5_DIR = @HDF5_DIR@ +HDF5_LIBS = @HDF5_LIBS@ +HDF5_PREFIX = @HDF5_PREFIX@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LASPACK_INCLUDE = @LASPACK_INCLUDE@ +LASPACK_LIB = @LASPACK_LIB@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBHILBERT_INCLUDE = @LIBHILBERT_INCLUDE@ +LIBHILBERT_LIBRARY = @LIBHILBERT_LIBRARY@ +LIBMESH_LIBRARY_SUFFIX = @LIBMESH_LIBRARY_SUFFIX@ +LIBOBJS = @LIBOBJS@ +LIBS = $(libmesh_optional_LIBS) +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCAL_CC = @LOCAL_CC@ +LOCAL_CXX = @LOCAL_CXX@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +METAPHYSICL_INCLUDE = @METAPHYSICL_INCLUDE@ +METHOD = @METHOD@ +METHODS = @METHODS@ +METIS_INCLUDE = @METIS_INCLUDE@ +METIS_LIB = @METIS_LIB@ +MKDIR_P = @MKDIR_P@ +ML_INCLUDES = @ML_INCLUDES@ +ML_LIBS = @ML_LIBS@ +ML_MAKEFILE_EXPORT = @ML_MAKEFILE_EXPORT@ +MPCXX = @MPCXX@ +MPI_IMPL = @MPI_IMPL@ +MPI_INCLUDES = @MPI_INCLUDES@ +MPI_LDFLAGS = @MPI_LDFLAGS@ +MPI_LIBS = @MPI_LIBS@ +NANOFLANN_INCLUDE = @NANOFLANN_INCLUDE@ +NEMESIS_INCLUDE = @NEMESIS_INCLUDE@ +NETCDF_INCLUDE = @NETCDF_INCLUDE@ +NETGEN_BUILD_LDFLAGS = @NETGEN_BUILD_LDFLAGS@ +NETGEN_INCLUDE = @NETGEN_INCLUDE@ +NETGEN_LIBS = @NETGEN_LIBS@ +NLOPT_INCLUDE = @NLOPT_INCLUDE@ +NLOPT_LIBRARY = @NLOPT_LIBRARY@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ +NOX_INCLUDES = @NOX_INCLUDES@ +NOX_LIBS = @NOX_LIBS@ +NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +OPENMP_CXXFLAGS = @OPENMP_CXXFLAGS@ +OPENMP_FFLAGS = @OPENMP_FFLAGS@ +OPROFILE_FLAGS = @OPROFILE_FLAGS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PARMETIS_INCLUDE = @PARMETIS_INCLUDE@ +PARMETIS_LIB = @PARMETIS_LIB@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PETSCARCH = @PETSCARCH@ +PETSCINCLUDEDIRS = @PETSCINCLUDEDIRS@ +PETSCLINKLIBS = @PETSCLINKLIBS@ +PETSC_ARCH = @PETSC_ARCH@ +PETSC_CC_INCLUDES = @PETSC_CC_INCLUDES@ +PETSC_DIR = @PETSC_DIR@ +PETSC_FC_INCLUDES = @PETSC_FC_INCLUDES@ +PKG_CONFIG = @PKG_CONFIG@ +PROFILING_FLAGS = @PROFILING_FLAGS@ +PRTDIAG = @PRTDIAG@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PWD = @PWD@ +QHULL_LIBS = @QHULL_LIBS@ +RANLIB = @RANLIB@ +RPATHFLAG = @RPATHFLAG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SFC_INCLUDE = @SFC_INCLUDE@ +SFC_LIB = @SFC_LIB@ +SHELL = @SHELL@ +SLEPC_DIR = @SLEPC_DIR@ +SLEPC_INCLUDE = @SLEPC_INCLUDE@ +SLEPC_LIBS = @SLEPC_LIBS@ +STRIP = @STRIP@ +TBB_INCLUDE = @TBB_INCLUDE@ +TBB_LIBRARY = @TBB_LIBRARY@ +TECIO_CPPFLAGS = @TECIO_CPPFLAGS@ +TECIO_INCLUDE = @TECIO_INCLUDE@ +TETGEN_INCLUDE = @TETGEN_INCLUDE@ +TETGEN_LIBRARY = @TETGEN_LIBRARY@ +TPETRA_INCLUDES = @TPETRA_INCLUDES@ +TPETRA_LIBS = @TPETRA_LIBS@ +TPETRA_MAKEFILE_EXPORT = @TPETRA_MAKEFILE_EXPORT@ +TRIANGLE_INCLUDE = @TRIANGLE_INCLUDE@ +TRIANGLE_LIBRARY = @TRIANGLE_LIBRARY@ +TRILINOS_DIR = @TRILINOS_DIR@ +TRILINOS_INCLUDES = @TRILINOS_INCLUDES@ +TRILINOS_LIBS = @TRILINOS_LIBS@ +TRILINOS_MAKEFILE_EXPORT = @TRILINOS_MAKEFILE_EXPORT@ +VERSION = @VERSION@ +VTK_DIR = @VTK_DIR@ +VTK_INCLUDE = @VTK_INCLUDE@ +VTK_LIBRARY = @VTK_LIBRARY@ +XML2_CONFIG = @XML2_CONFIG@ +XML_CPPFLAGS = @XML_CPPFLAGS@ +XML_LIBS = @XML_LIBS@ +XZ = @XZ@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = $(install_dir) +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enabledeprecated = @enabledeprecated@ +enablefwdenums = @enablefwdenums@ +enablelegacyincludepaths = @enablelegacyincludepaths@ +enablepetsc = @enablepetsc@ +enableuniqueptr = @enableuniqueptr@ +enablewarnings = @enablewarnings@ +exec_prefix = @exec_prefix@ +gitquery = @gitquery@ +have_gcov = @have_gcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libmesh_CFLAGS = @libmesh_CFLAGS@ +libmesh_CPPFLAGS = @libmesh_CPPFLAGS@ +libmesh_CXXFLAGS = @libmesh_CXXFLAGS@ +libmesh_LDFLAGS = @libmesh_LDFLAGS@ +libmesh_contrib_INCLUDES = @libmesh_contrib_INCLUDES@ +libmesh_contrib_LDFLAGS = @libmesh_contrib_LDFLAGS@ +libmesh_installed_LIBS = @libmesh_installed_LIBS@ +libmesh_optional_INCLUDES = @libmesh_optional_INCLUDES@ +libmesh_optional_LIBS = @libmesh_optional_LIBS@ +libmesh_pkgconfig_requires = @libmesh_pkgconfig_requires@ +libmesh_precision_LIBS = @libmesh_precision_LIBS@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +petscmajor = @petscmajor@ +petscmajorminor = @petscmajorminor@ +petscminor = @petscminor@ +petscversion = @petscversion@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs_extra = @subdirs_extra@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +vtkbuild = @vtkbuild@ +vtkmajor = @vtkmajor@ +vtkversion = @vtkversion@ +example_name = miscellaneous_ex17 +check_SCRIPTS = run.sh +install_dir = $(examples_install_path)/introduction/ex3 +data = miscellaneous_ex17.C exact_solution.C run.sh +sources = $(data) run.sh + +###################################################################### +# +# how to make documentation +# +CLEANFILES = out.pvtu $(example_name).html stdout.log + +###################################################################### +# +# Common environment for all examples +# +# This file is included by *every* example. If we are careful, common +# rules like 'make doc' or 'make run' can be defined here, once and +# for all. +# +AUTOMAKE_OPTIONS = subdir-objects +AM_CPPFLAGS = $(libmesh_optional_INCLUDES) -I$(top_builddir)/include $(libmesh_contrib_INCLUDES) +AM_CFLAGS = $(libmesh_CFLAGS) +AM_CXXFLAGS = $(libmesh_CXXFLAGS) +AM_LDFLAGS = $(libmesh_LDFLAGS) $(libmesh_contrib_LDFLAGS) +examples_source_path = $(top_srcdir)/examples +examples_install_path = $(prefix)/examples +data_DATA = $(data) $(top_builddir)/contrib/utils/Makefile +@LIBMESH_DBG_MODE_TRUE@example_dbg_SOURCES = $(sources) +@LIBMESH_DBG_MODE_TRUE@example_dbg_CPPFLAGS = $(CPPFLAGS_DBG) $(AM_CPPFLAGS) +@LIBMESH_DBG_MODE_TRUE@example_dbg_CXXFLAGS = $(CXXFLAGS_DBG) +@LIBMESH_DBG_MODE_TRUE@example_dbg_LDADD = $(top_builddir)/libmesh_dbg.la +@LIBMESH_DEVEL_MODE_TRUE@example_devel_SOURCES = $(sources) +@LIBMESH_DEVEL_MODE_TRUE@example_devel_CPPFLAGS = $(CPPFLAGS_DEVEL) $(AM_CPPFLAGS) +@LIBMESH_DEVEL_MODE_TRUE@example_devel_CXXFLAGS = $(CXXFLAGS_DEVEL) +@LIBMESH_DEVEL_MODE_TRUE@example_devel_LDADD = $(top_builddir)/libmesh_devel.la +@LIBMESH_OPT_MODE_TRUE@example_opt_SOURCES = $(sources) +@LIBMESH_OPT_MODE_TRUE@example_opt_CPPFLAGS = $(CPPFLAGS_OPT) $(AM_CPPFLAGS) +@LIBMESH_OPT_MODE_TRUE@example_opt_CXXFLAGS = $(CXXFLAGS_OPT) +@LIBMESH_OPT_MODE_TRUE@example_opt_LDADD = $(top_builddir)/libmesh_opt.la +@LIBMESH_PROF_MODE_TRUE@example_prof_SOURCES = $(sources) +@LIBMESH_PROF_MODE_TRUE@example_prof_CPPFLAGS = $(CPPFLAGS_PROF) $(AM_CPPFLAGS) +@LIBMESH_PROF_MODE_TRUE@example_prof_CXXFLAGS = $(CXXFLAGS_PROF) +@LIBMESH_PROF_MODE_TRUE@example_prof_LDADD = $(top_builddir)/libmesh_prof.la +@LIBMESH_OPROF_MODE_TRUE@example_oprof_SOURCES = $(sources) +@LIBMESH_OPROF_MODE_TRUE@example_oprof_CPPFLAGS = $(CPPFLAGS_OPROF) $(AM_CPPFLAGS) +@LIBMESH_OPROF_MODE_TRUE@example_oprof_CXXFLAGS = $(CXXFLAGS_OPROF) +@LIBMESH_OPROF_MODE_TRUE@example_oprof_LDADD = $(top_builddir)/libmesh_oprof.la +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_DEVEL_MODE_FALSE@@LIBMESH_OPROF_MODE_FALSE@@LIBMESH_OPT_MODE_FALSE@@LIBMESH_PROF_MODE_FALSE@DOC_PROGRAM = example-dbg +@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_OPROF_MODE_FALSE@@LIBMESH_OPT_MODE_FALSE@@LIBMESH_PROF_MODE_FALSE@DOC_PROGRAM = example-devel +@LIBMESH_OPROF_MODE_FALSE@@LIBMESH_OPT_MODE_FALSE@@LIBMESH_PROF_MODE_TRUE@DOC_PROGRAM = example-prof +@LIBMESH_OPROF_MODE_TRUE@@LIBMESH_OPT_MODE_FALSE@DOC_PROGRAM = example-oprof + +###################################################################### +# +# Choose a flavor to run when making documentation +# +@LIBMESH_OPT_MODE_TRUE@DOC_PROGRAM = example-opt +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_DEVEL_MODE_FALSE@@LIBMESH_OPROF_MODE_FALSE@@LIBMESH_OPT_MODE_FALSE@@LIBMESH_PROF_MODE_FALSE@DOC_METHOD = dbg +@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_OPROF_MODE_FALSE@@LIBMESH_OPT_MODE_FALSE@@LIBMESH_PROF_MODE_FALSE@DOC_METHOD = devel +@LIBMESH_OPROF_MODE_FALSE@@LIBMESH_OPT_MODE_FALSE@@LIBMESH_PROF_MODE_TRUE@DOC_METHOD = prof +@LIBMESH_OPROF_MODE_TRUE@@LIBMESH_OPT_MODE_FALSE@DOC_METHOD = oprof +@LIBMESH_OPT_MODE_TRUE@DOC_METHOD = opt + +###################################################################### +# +# Running the tests +# +TESTS_ENVIRONMENT = LIBMESH_DIR=$(abs_top_srcdir); export LIBMESH_DIR; \ + METHODS="$(METHODS)"; export METHODS; petscmajor=@petscmajor@ \ + petscminor=@petscminor@ +TESTS = $(check_SCRIPTS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .C .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/examples/Make.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/miscellaneous/miscellaneous_ex17/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/miscellaneous/miscellaneous_ex17/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; +$(top_srcdir)/examples/Make.common $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +example-dbg$(EXEEXT): $(example_dbg_OBJECTS) $(example_dbg_DEPENDENCIES) $(EXTRA_example_dbg_DEPENDENCIES) + @rm -f example-dbg$(EXEEXT) + $(AM_V_CXXLD)$(example_dbg_LINK) $(example_dbg_OBJECTS) $(example_dbg_LDADD) $(LIBS) + +example-devel$(EXEEXT): $(example_devel_OBJECTS) $(example_devel_DEPENDENCIES) $(EXTRA_example_devel_DEPENDENCIES) + @rm -f example-devel$(EXEEXT) + $(AM_V_CXXLD)$(example_devel_LINK) $(example_devel_OBJECTS) $(example_devel_LDADD) $(LIBS) + +example-oprof$(EXEEXT): $(example_oprof_OBJECTS) $(example_oprof_DEPENDENCIES) $(EXTRA_example_oprof_DEPENDENCIES) + @rm -f example-oprof$(EXEEXT) + $(AM_V_CXXLD)$(example_oprof_LINK) $(example_oprof_OBJECTS) $(example_oprof_LDADD) $(LIBS) + +example-opt$(EXEEXT): $(example_opt_OBJECTS) $(example_opt_DEPENDENCIES) $(EXTRA_example_opt_DEPENDENCIES) + @rm -f example-opt$(EXEEXT) + $(AM_V_CXXLD)$(example_opt_LINK) $(example_opt_OBJECTS) $(example_opt_LDADD) $(LIBS) + +example-prof$(EXEEXT): $(example_prof_OBJECTS) $(example_prof_DEPENDENCIES) $(EXTRA_example_prof_DEPENDENCIES) + @rm -f example-prof$(EXEEXT) + $(AM_V_CXXLD)$(example_prof_LINK) $(example_prof_OBJECTS) $(example_prof_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_dbg-exact_solution.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_dbg-miscellaneous_ex17.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_devel-exact_solution.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_devel-miscellaneous_ex17.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_oprof-exact_solution.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_oprof-miscellaneous_ex17.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_opt-exact_solution.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_opt-miscellaneous_ex17.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_prof-exact_solution.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_prof-miscellaneous_ex17.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.C.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.C.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.C.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +example_dbg-miscellaneous_ex17.o: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -MT example_dbg-miscellaneous_ex17.o -MD -MP -MF $(DEPDIR)/example_dbg-miscellaneous_ex17.Tpo -c -o example_dbg-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_dbg-miscellaneous_ex17.Tpo $(DEPDIR)/example_dbg-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_dbg-miscellaneous_ex17.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -c -o example_dbg-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C + +example_dbg-miscellaneous_ex17.obj: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -MT example_dbg-miscellaneous_ex17.obj -MD -MP -MF $(DEPDIR)/example_dbg-miscellaneous_ex17.Tpo -c -o example_dbg-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_dbg-miscellaneous_ex17.Tpo $(DEPDIR)/example_dbg-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_dbg-miscellaneous_ex17.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -c -o example_dbg-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` + +example_dbg-exact_solution.o: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -MT example_dbg-exact_solution.o -MD -MP -MF $(DEPDIR)/example_dbg-exact_solution.Tpo -c -o example_dbg-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_dbg-exact_solution.Tpo $(DEPDIR)/example_dbg-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_dbg-exact_solution.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -c -o example_dbg-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C + +example_dbg-exact_solution.obj: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -MT example_dbg-exact_solution.obj -MD -MP -MF $(DEPDIR)/example_dbg-exact_solution.Tpo -c -o example_dbg-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_dbg-exact_solution.Tpo $(DEPDIR)/example_dbg-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_dbg-exact_solution.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_dbg_CPPFLAGS) $(CPPFLAGS) $(example_dbg_CXXFLAGS) $(CXXFLAGS) -c -o example_dbg-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` + +example_devel-miscellaneous_ex17.o: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -MT example_devel-miscellaneous_ex17.o -MD -MP -MF $(DEPDIR)/example_devel-miscellaneous_ex17.Tpo -c -o example_devel-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_devel-miscellaneous_ex17.Tpo $(DEPDIR)/example_devel-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_devel-miscellaneous_ex17.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -c -o example_devel-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C + +example_devel-miscellaneous_ex17.obj: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -MT example_devel-miscellaneous_ex17.obj -MD -MP -MF $(DEPDIR)/example_devel-miscellaneous_ex17.Tpo -c -o example_devel-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_devel-miscellaneous_ex17.Tpo $(DEPDIR)/example_devel-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_devel-miscellaneous_ex17.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -c -o example_devel-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` + +example_devel-exact_solution.o: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -MT example_devel-exact_solution.o -MD -MP -MF $(DEPDIR)/example_devel-exact_solution.Tpo -c -o example_devel-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_devel-exact_solution.Tpo $(DEPDIR)/example_devel-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_devel-exact_solution.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -c -o example_devel-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C + +example_devel-exact_solution.obj: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -MT example_devel-exact_solution.obj -MD -MP -MF $(DEPDIR)/example_devel-exact_solution.Tpo -c -o example_devel-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_devel-exact_solution.Tpo $(DEPDIR)/example_devel-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_devel-exact_solution.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_devel_CPPFLAGS) $(CPPFLAGS) $(example_devel_CXXFLAGS) $(CXXFLAGS) -c -o example_devel-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` + +example_oprof-miscellaneous_ex17.o: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -MT example_oprof-miscellaneous_ex17.o -MD -MP -MF $(DEPDIR)/example_oprof-miscellaneous_ex17.Tpo -c -o example_oprof-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_oprof-miscellaneous_ex17.Tpo $(DEPDIR)/example_oprof-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_oprof-miscellaneous_ex17.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -c -o example_oprof-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C + +example_oprof-miscellaneous_ex17.obj: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -MT example_oprof-miscellaneous_ex17.obj -MD -MP -MF $(DEPDIR)/example_oprof-miscellaneous_ex17.Tpo -c -o example_oprof-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_oprof-miscellaneous_ex17.Tpo $(DEPDIR)/example_oprof-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_oprof-miscellaneous_ex17.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -c -o example_oprof-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` + +example_oprof-exact_solution.o: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -MT example_oprof-exact_solution.o -MD -MP -MF $(DEPDIR)/example_oprof-exact_solution.Tpo -c -o example_oprof-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_oprof-exact_solution.Tpo $(DEPDIR)/example_oprof-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_oprof-exact_solution.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -c -o example_oprof-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C + +example_oprof-exact_solution.obj: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -MT example_oprof-exact_solution.obj -MD -MP -MF $(DEPDIR)/example_oprof-exact_solution.Tpo -c -o example_oprof-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_oprof-exact_solution.Tpo $(DEPDIR)/example_oprof-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_oprof-exact_solution.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_oprof_CPPFLAGS) $(CPPFLAGS) $(example_oprof_CXXFLAGS) $(CXXFLAGS) -c -o example_oprof-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` + +example_opt-miscellaneous_ex17.o: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -MT example_opt-miscellaneous_ex17.o -MD -MP -MF $(DEPDIR)/example_opt-miscellaneous_ex17.Tpo -c -o example_opt-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_opt-miscellaneous_ex17.Tpo $(DEPDIR)/example_opt-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_opt-miscellaneous_ex17.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -c -o example_opt-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C + +example_opt-miscellaneous_ex17.obj: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -MT example_opt-miscellaneous_ex17.obj -MD -MP -MF $(DEPDIR)/example_opt-miscellaneous_ex17.Tpo -c -o example_opt-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_opt-miscellaneous_ex17.Tpo $(DEPDIR)/example_opt-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_opt-miscellaneous_ex17.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -c -o example_opt-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` + +example_opt-exact_solution.o: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -MT example_opt-exact_solution.o -MD -MP -MF $(DEPDIR)/example_opt-exact_solution.Tpo -c -o example_opt-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_opt-exact_solution.Tpo $(DEPDIR)/example_opt-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_opt-exact_solution.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -c -o example_opt-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C + +example_opt-exact_solution.obj: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -MT example_opt-exact_solution.obj -MD -MP -MF $(DEPDIR)/example_opt-exact_solution.Tpo -c -o example_opt-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_opt-exact_solution.Tpo $(DEPDIR)/example_opt-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_opt-exact_solution.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_opt_CPPFLAGS) $(CPPFLAGS) $(example_opt_CXXFLAGS) $(CXXFLAGS) -c -o example_opt-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` + +example_prof-miscellaneous_ex17.o: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -MT example_prof-miscellaneous_ex17.o -MD -MP -MF $(DEPDIR)/example_prof-miscellaneous_ex17.Tpo -c -o example_prof-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_prof-miscellaneous_ex17.Tpo $(DEPDIR)/example_prof-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_prof-miscellaneous_ex17.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -c -o example_prof-miscellaneous_ex17.o `test -f 'miscellaneous_ex17.C' || echo '$(srcdir)/'`miscellaneous_ex17.C + +example_prof-miscellaneous_ex17.obj: miscellaneous_ex17.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -MT example_prof-miscellaneous_ex17.obj -MD -MP -MF $(DEPDIR)/example_prof-miscellaneous_ex17.Tpo -c -o example_prof-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_prof-miscellaneous_ex17.Tpo $(DEPDIR)/example_prof-miscellaneous_ex17.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='miscellaneous_ex17.C' object='example_prof-miscellaneous_ex17.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -c -o example_prof-miscellaneous_ex17.obj `if test -f 'miscellaneous_ex17.C'; then $(CYGPATH_W) 'miscellaneous_ex17.C'; else $(CYGPATH_W) '$(srcdir)/miscellaneous_ex17.C'; fi` + +example_prof-exact_solution.o: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -MT example_prof-exact_solution.o -MD -MP -MF $(DEPDIR)/example_prof-exact_solution.Tpo -c -o example_prof-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_prof-exact_solution.Tpo $(DEPDIR)/example_prof-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_prof-exact_solution.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -c -o example_prof-exact_solution.o `test -f 'exact_solution.C' || echo '$(srcdir)/'`exact_solution.C + +example_prof-exact_solution.obj: exact_solution.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -MT example_prof-exact_solution.obj -MD -MP -MF $(DEPDIR)/example_prof-exact_solution.Tpo -c -o example_prof-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/example_prof-exact_solution.Tpo $(DEPDIR)/example_prof-exact_solution.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exact_solution.C' object='example_prof-exact_solution.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_prof_CPPFLAGS) $(CPPFLAGS) $(example_prof_CXXFLAGS) $(CXXFLAGS) -c -o example_prof-exact_solution.obj `if test -f 'exact_solution.C'; then $(CYGPATH_W) 'exact_solution.C'; else $(CYGPATH_W) '$(srcdir)/exact_solution.C'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dataDATA: $(data_DATA) + @$(NORMAL_INSTALL) + @list='$(data_DATA)'; test -n "$(datadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(datadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(datadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(datadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(datadir)" || exit $$?; \ + done + +uninstall-dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(data_DATA)'; test -n "$(datadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(datadir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + fi; \ + echo "$${col}$$dashes$${std}"; \ + echo "$${col}$$banner$${std}"; \ + test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ + test -z "$$report" || echo "$${col}$$report$${std}"; \ + echo "$${col}$$dashes$${std}"; \ + test "$$failed" -eq 0; \ + else :; fi +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(datadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -f ./$(DEPDIR)/example_dbg-exact_solution.Po + -rm -f ./$(DEPDIR)/example_dbg-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_devel-exact_solution.Po + -rm -f ./$(DEPDIR)/example_devel-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_oprof-exact_solution.Po + -rm -f ./$(DEPDIR)/example_oprof-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_opt-exact_solution.Po + -rm -f ./$(DEPDIR)/example_opt-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_prof-exact_solution.Po + -rm -f ./$(DEPDIR)/example_prof-miscellaneous_ex17.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f ./$(DEPDIR)/example_dbg-exact_solution.Po + -rm -f ./$(DEPDIR)/example_dbg-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_devel-exact_solution.Po + -rm -f ./$(DEPDIR)/example_devel-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_oprof-exact_solution.Po + -rm -f ./$(DEPDIR)/example_oprof-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_opt-exact_solution.Po + -rm -f ./$(DEPDIR)/example_opt-miscellaneous_ex17.Po + -rm -f ./$(DEPDIR)/example_prof-exact_solution.Po + -rm -f ./$(DEPDIR)/example_prof-miscellaneous_ex17.Po + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dataDATA + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ + check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ + clean-local cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dataDATA install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-dataDATA + +.PRECIOUS: Makefile + + +clean-local: + -rm -rf out_*.vtu + +# Convenience method: 'make run' +run: $(check_PROGRAMS) + LIBMESH_DIR=$(abs_top_srcdir) METHODS="$(METHODS)" $(srcdir)/$(check_SCRIPTS) +doc: $(example_name).html +html: $(example_name).html +$(example_name).html: $(DOC_PROGRAM) \ + $(top_srcdir)/contrib/bin/ex2html.sh \ + Makefile + $(MAKE) METHODS=$(DOC_METHOD) -s run > stdout.log + $(AM_V_GEN) PATH=$(abs_top_srcdir)/contrib/bin:$(PATH) \ + ex2html.sh $(example_name) $(abs_srcdir) + +# Local Variables: +# mode: makefile +# End: + +############################################## +# include common example environment + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/examples/miscellaneous/miscellaneous_ex17/exact_solution.C b/examples/miscellaneous/miscellaneous_ex17/exact_solution.C new file mode 100644 index 00000000000..7b260698047 --- /dev/null +++ b/examples/miscellaneous/miscellaneous_ex17/exact_solution.C @@ -0,0 +1,50 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2024 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + +// C++ Includes +#include + +// Mesh library includes +#include "libmesh/libmesh_common.h" + +// Bring in everything from the libMesh namespace +using namespace libMesh; + + + + + +/** + * This is the exact solution that + * we are trying to obtain. We will solve + * + * - (u_xx + u_yy) = f + * + * and take a finite difference approximation using this + * function to get f. This is the well-known "method of + * manufactured solutions". + */ +Real exact_solution (const Real x, + const Real y, + const Real z = 0.) +{ + static const Real pi = acos(-1.); + + return cos(.5*pi*x)*sin(.5*pi*y)*cos(.5*pi*z); +} diff --git a/examples/miscellaneous/miscellaneous_ex17/miscellaneous_ex17.C b/examples/miscellaneous/miscellaneous_ex17/miscellaneous_ex17.C new file mode 100644 index 00000000000..e0d3f8996c6 --- /dev/null +++ b/examples/miscellaneous/miscellaneous_ex17/miscellaneous_ex17.C @@ -0,0 +1,482 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2024 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +//

    Miscennaleous Example 17 - Demonstrating mix of preallocated/hash-table matrix +// assemblies

    \author Alexander D. Lindsay \date 2024 + +// Basic include files needed for the mesh functionality. +#include "libmesh/libmesh.h" +#include "libmesh/mesh.h" +#include "libmesh/mesh_generation.h" +#include "libmesh/linear_implicit_system.h" +#include "libmesh/equation_systems.h" + +// Define the Finite Element object. +#include "libmesh/fe.h" + +// Define Gauss quadrature rules. +#include "libmesh/quadrature_gauss.h" + +// Define useful datatypes for finite element +// matrix and vector components. +#include "libmesh/numeric_vector.h" +#include "libmesh/sparse_matrix.h" +#include "libmesh/dense_matrix.h" +#include "libmesh/dense_vector.h" +#include "libmesh/elem.h" +#include "libmesh/enum_solver_package.h" + +// Define the DofMap, which handles degree of freedom +// indexing. +#include "libmesh/dof_map.h" + +#ifdef LIBMESH_HAVE_PETSC +// include PETSc headers +#include "libmesh/petsc_matrix.h" +#include "libmesh/petsc_vector.h" +#include "petscksp.h" +#endif + +#include + +// Bring in everything from the libMesh namespace +using namespace libMesh; + +void assemble_poisson(EquationSystems & es, + const std::string & system_name); + +// Function prototype for the exact solution. +Real exact_solution (const Real x, + const Real y, + const Real z = 0.); + +int main (int argc, char ** argv) +{ + // Initialize libraries, like in example 2. + LibMeshInit init (argc, argv); + + // Brief message to the user regarding the program name + // and command line arguments. + libMesh::out << "Running " << argv[0]; + + for (int i=1; i("Poisson"); + + // Adds the variable "u" to "Poisson". "u" + // will be approximated using second-order approximation. + system.add_variable("u", FIRST); + + // Give the system a pointer to the matrix assembly + // function. This will be called when needed by the + // library. + system.attach_assemble_function(assemble_poisson); + + // Add the preconditioner matrix + system.add_matrix("preconditioner"); +#ifdef LIBMESH_HAVE_PETSC +#if PETSC_RELEASE_GREATER_EQUALS(3, 19, 0) + system.get_matrix("preconditioner").use_hash_table(true); +#endif +#endif + + // Initialize the data structures for the equation system. + equation_systems.init(); + + // Prints information about the system to the screen. + equation_systems.print_info(); + + // assemble the operators and RHS + system.assemble(); + +#ifdef LIBMESH_HAVE_PETSC + auto & sys_matrix = cast_ref &>(system.get_system_matrix()); + auto & pre_matrix = cast_ref &>(system.get_matrix("preconditioner")); + LibmeshPetscCall2(system.comm(), PetscOptionsSetValue(NULL, "-ksp_monitor", NULL)); + + auto solve = [&sys_matrix, &pre_matrix, &system]() { + // Make sure our matrices are closed + sys_matrix.close(); + pre_matrix.close(); + system.rhs->close(); + KSP ksp; + LibmeshPetscCall2(system.comm(), KSPCreate(system.comm().get(), &ksp)); + LibmeshPetscCall2(system.comm(), KSPSetOperators(ksp, sys_matrix.mat(), pre_matrix.mat())); + LibmeshPetscCall2(system.comm(), KSPSetFromOptions(ksp)); + LibmeshPetscCall2(system.comm(), + KSPSolve(ksp, + cast_ptr *>(system.rhs)->vec(), + cast_ptr *>(system.solution.get())->vec())); + }; + + // solve + solve(); + + // MatResetHash added in PETSc version 3.23 +#if !PETSC_VERSION_LESS_THAN(3, 23, 0) + // reset the memory + // sys_matrix.reset_memory(); # See https://gitlab.com/petsc/petsc/-/merge_requests/8063 + pre_matrix.reset_memory(); + // zero + sys_matrix.zero(); + pre_matrix.zero(); + system.rhs->zero(); + system.solution->zero(); + system.update(); + // re-assemble + system.assemble(); + // resolve + solve(); +#endif +#endif + + // All done. + return 0; +} + + + +// We now define the matrix assembly function for the +// Poisson system. We need to first compute element +// matrices and right-hand sides, and then take into +// account the boundary conditions, which will be handled +// via a penalty method. +void assemble_poisson(EquationSystems & es, + const std::string & libmesh_dbg_var(system_name)) +{ + + // It is a good idea to make sure we are assembling + // the proper system. + libmesh_assert_equal_to (system_name, "Poisson"); + + // Get a constant reference to the mesh object. + const MeshBase & mesh = es.get_mesh(); + + // The dimension that we are running + const unsigned int dim = mesh.mesh_dimension(); + + // Get a reference to the LinearImplicitSystem we are solving + LinearImplicitSystem & system = es.get_system ("Poisson"); + + // A reference to the DofMap object for this system. The DofMap + // object handles the index translation from node and element numbers + // to degree of freedom numbers. We will talk more about the DofMap + // in future examples. + const DofMap & dof_map = system.get_dof_map(); + + // Get a constant reference to the Finite Element type + // for the first (and only) variable in the system. + FEType fe_type = dof_map.variable_type(0); + + // Build a Finite Element object of the specified type. Since the + // FEBase::build() member dynamically creates memory we will + // store the object as a std::unique_ptr. This can be thought + // of as a pointer that will clean up after itself. Introduction Example 4 + // describes some advantages of std::unique_ptr's in the context of + // quadrature rules. + std::unique_ptr fe (FEBase::build(dim, fe_type)); + + // A 5th order Gauss quadrature rule for numerical integration. + QGauss qrule (dim, FIFTH); + + // Tell the finite element object to use our quadrature rule. + fe->attach_quadrature_rule (&qrule); + + // Declare a special finite element object for + // boundary integration. + std::unique_ptr fe_face (FEBase::build(dim, fe_type)); + + // Boundary integration requires one quadrature rule, + // with dimensionality one less than the dimensionality + // of the element. + QGauss qface(dim-1, FIFTH); + + // Tell the finite element object to use our + // quadrature rule. + fe_face->attach_quadrature_rule (&qface); + + // Here we define some references to cell-specific data that + // will be used to assemble the linear system. + // + // The element Jacobian * quadrature weight at each integration point. + const std::vector & JxW = fe->get_JxW(); + + // The physical XY locations of the quadrature points on the element. + // These might be useful for evaluating spatially varying material + // properties at the quadrature points. + const std::vector & q_point = fe->get_xyz(); + + // The element shape functions evaluated at the quadrature points. + const std::vector> & phi = fe->get_phi(); + + // The element shape function gradients evaluated at the quadrature + // points. + const std::vector> & dphi = fe->get_dphi(); + + // Define data structures to contain the element matrix + // and right-hand-side vector contribution. Following + // basic finite element terminology we will denote these + // "Ke" and "Fe". These datatypes are templated on + // Number, which allows the same code to work for real + // or complex numbers. + DenseMatrix Ke; + DenseVector Fe; + + // This vector will hold the degree of freedom indices for + // the element. These define where in the global system + // the element degrees of freedom get mapped. + std::vector dof_indices; + + // The global system matrix + SparseMatrix & matrix = system.get_system_matrix(); + // The preconditioning matrix + auto & pre_matrix = system.get_matrix("preconditioner"); + + // Now we will loop over all the elements in the mesh. + // We will compute the element matrix and right-hand-side + // contribution. + // + // Element ranges are a nice way to iterate through all the + // elements, or all the elements that have some property. The + // range will iterate from the first to the last element on + // the local processor. + // It is smart to make this one const so that we don't accidentally + // mess it up! In case users later modify this program to include + // refinement, we will be safe and will only consider the active + // elements; hence we use a variant of the + // active_local_element_ptr_range. + for (const auto & elem : mesh.active_local_element_ptr_range()) + { + // Get the degree of freedom indices for the + // current element. These define where in the global + // matrix and right-hand-side this element will + // contribute to. + dof_map.dof_indices (elem, dof_indices); + + // Cache the number of degrees of freedom on this element, for + // use as a loop bound later. We use cast_int to explicitly + // convert from size() (which may be 64-bit) to unsigned int + // (which may be 32-bit but which is definitely enough to count + // *local* degrees of freedom. + const unsigned int n_dofs = + cast_int(dof_indices.size()); + + // Compute the element-specific data for the current + // element. This involves computing the location of the + // quadrature points (q_point) and the shape functions + // (phi, dphi) for the current element. + fe->reinit (elem); + + // With one variable, we should have the same number of degrees + // of freedom as shape functions. + libmesh_assert_equal_to (n_dofs, phi.size()); + + // Zero the element matrix and right-hand side before + // summing them. We use the resize member here because + // the number of degrees of freedom might have changed from + // the last element. Note that this will be the case if the + // element type is different (i.e. the last element was a + // triangle, now we are on a quadrilateral). + + // The DenseMatrix::resize() and the DenseVector::resize() + // members will automatically zero out the matrix and vector. + Ke.resize (n_dofs, n_dofs); + + Fe.resize (n_dofs); + + // Now loop over the quadrature points. This handles + // the numeric integration. + for (unsigned int qp=0; qpside_index_range()) + if (elem->neighbor_ptr(side) == nullptr) + { + // The value of the shape functions at the quadrature + // points. + const std::vector> & phi_face = fe_face->get_phi(); + + // The Jacobian * Quadrature Weight at the quadrature + // points on the face. + const std::vector & JxW_face = fe_face->get_JxW(); + + // The XYZ locations (in physical space) of the + // quadrature points on the face. This is where + // we will interpolate the boundary value function. + const std::vector & qface_point = fe_face->get_xyz(); + + // Compute the shape function values on the element + // face. + fe_face->reinit(elem, side); + + // Some shape functions will be 0 on the face, but for + // ease of indexing and generality of code we loop over + // them anyway + libmesh_assert_equal_to (n_dofs, phi_face.size()); + + // Loop over the face quadrature points for integration. + for (unsigned int qp=0; qpadd_vector (Fe, dof_indices); + } + + // All done! +} diff --git a/examples/miscellaneous/miscellaneous_ex17/run.sh b/examples/miscellaneous/miscellaneous_ex17/run.sh new file mode 100755 index 00000000000..1af988300cc --- /dev/null +++ b/examples/miscellaneous/miscellaneous_ex17/run.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +#set -x + +. "$LIBMESH_DIR"/examples/run_common.sh + +example_name=miscellaneous_ex17 + +run_example "$example_name" diff --git a/examples/systems_of_equations/systems_of_equations_ex7/systems_of_equations_ex7.C b/examples/systems_of_equations/systems_of_equations_ex7/systems_of_equations_ex7.C index 436b9d92433..19fc37a7fde 100644 --- a/examples/systems_of_equations/systems_of_equations_ex7/systems_of_equations_ex7.C +++ b/examples/systems_of_equations/systems_of_equations_ex7/systems_of_equations_ex7.C @@ -563,6 +563,7 @@ int main (int argc, char ** argv) NonlinearImplicitSystem & system = equation_systems.add_system ("NonlinearElasticity"); + system.prefer_hash_table_matrix_assembly(true); unsigned int u_var = system.add_variable("u", diff --git a/include/numerics/petsc_matrix.h b/include/numerics/petsc_matrix.h index e7688eb5853..7d6f7a4fbee 100644 --- a/include/numerics/petsc_matrix.h +++ b/include/numerics/petsc_matrix.h @@ -36,7 +36,7 @@ #include #endif - +class PetscMatrixTest; namespace libMesh { @@ -76,14 +76,15 @@ class PetscMatrix final : public PetscMatrixBase /** * Constructor. Creates a PetscMatrix assuming you already have a - * valid Mat object. In this case, m is NOT destroyed by the + * valid Mat object. In this case, m may not be destroyed by the * PetscMatrix destructor when this object goes out of scope. This * allows ownership of m to remain with the original creator, and to * simply provide additional functionality with the PetscMatrix. */ explicit PetscMatrix (Mat m, - const Parallel::Communicator & comm_in); + const Parallel::Communicator & comm_in, + bool destroy_on_exit = false); /** * Constructor. Creates and initializes a PetscMatrix with the given @@ -284,7 +285,52 @@ class PetscMatrix final : public PetscMatrixBase virtual void scale(const T scale) override; +#if PETSC_RELEASE_GREATER_EQUALS(3, 23, 0) + /** + * Creates a copy of the current hash table matrix and then performs assembly. This is very useful + * in cases where you are not done filling this matrix but want to be able to read the current + * state of it + */ + std::unique_ptr> copy_from_hash(); +#endif + + virtual bool supports_hash_table() const override; + + virtual void reset_memory() override; + protected: + /** + * Perform matrix initialization steps sans preallocation + * @param m The global number of rows + * @param n The global number of columns + * @param m_l The local number of rows + * @param n_l The local number of columns + * @param blocksize The matrix block size + */ + void init_without_preallocation (numeric_index_type m, + numeric_index_type n, + numeric_index_type m_l, + numeric_index_type n_l, + numeric_index_type blocksize); + + /* + * Performs matrix preallcation + * \param m_l The local number of rows. + * \param n_nz array containing the number of nonzeros in each row of the DIAGONAL portion of the local submatrix. + * \param n_oz Array containing the number of nonzeros in each row of the OFF-DIAGONAL portion of the local submatrix. + * \param blocksize Optional value indicating dense coupled blocks for systems with multiple variables all of the same */ + void preallocate(numeric_index_type m_l, + const std::vector & n_nz, + const std::vector & n_oz, + numeric_index_type blocksize); + + /** + * Finish up the initialization process. This method does a few things which include + * - Setting the option to make new nonzeroes an error (otherwise users will just have a silent + (often huge) performance penalty + * - Marking the matrix as initialized + */ + void finish_initialization(); /** * This function either creates or re-initializes a matrix called \p @@ -313,6 +359,8 @@ class PetscMatrix final : public PetscMatrixBase #else mutable Threads::spin_mutex _petsc_matrix_mutex; #endif + + friend class ::PetscMatrixTest; }; } // namespace libMesh diff --git a/include/numerics/petsc_matrix_base.h b/include/numerics/petsc_matrix_base.h index cda01c875eb..61124433132 100644 --- a/include/numerics/petsc_matrix_base.h +++ b/include/numerics/petsc_matrix_base.h @@ -84,14 +84,15 @@ class PetscMatrixBase : public SparseMatrix /** * Constructor. Creates a PetscMatrixBase assuming you already have a - * valid Mat object. In this case, m is NOT destroyed by the + * valid Mat object. In this case, m may not be destroyed by the * PetscMatrixBase destructor when this object goes out of scope. This * allows ownership of m to remain with the original creator, and to * simply provide additional functionality with the PetscMatrixBase. */ explicit PetscMatrixBase (Mat m, - const Parallel::Communicator & comm_in); + const Parallel::Communicator & comm_in, + bool destroy_on_exit = false); /** * This class manages a C-style struct (Mat) manually, so we diff --git a/include/numerics/sparse_matrix.h b/include/numerics/sparse_matrix.h index 840d1d5e829..1f9a58b07d0 100644 --- a/include/numerics/sparse_matrix.h +++ b/include/numerics/sparse_matrix.h @@ -583,6 +583,33 @@ class SparseMatrix : public ReferenceCountedObject>, */ virtual void scale(const T scale); + /** + * @returns Whether the matrix supports hash table assembly + */ + virtual bool supports_hash_table() const { return false; } + + /** + * Sets whether to use hash table assembly. This will error if the passed-in value is true and the + * matrix type does not support hash tables. Hash table or hash map assembly means storing maps + * from i-j locations in the matrix to values. Because it is a hash map as opposed to a contiguous + * array of data, no preallocation is required to use it + */ + void use_hash_table(bool use_hash); + + /** + * @returns Whether this matrix is using hash table assembly. Hash table or hash map assembly + * means storing maps from i-j locations in the matrix to values. Because it is a hash map as + * opposed to a contiguous array of data, no preallocation is required to use it + */ + bool use_hash_table() const { return _use_hash_table; } + + /** + * Reset the memory storage of the matrix. Unlike \p clear(), this does not destroy the matrix but + * rather will reset the matrix to use the original preallocation or when using hash table matrix + * assembly (see \p use_hash_table()) will reset (clear) the hash table used for assembly + */ + virtual void reset_memory() { libmesh_not_implemented(); } + protected: /** * Protected implementation of the create_submatrix and reinit_submatrix @@ -616,12 +643,25 @@ class SparseMatrix : public ReferenceCountedObject>, * Flag indicating whether or not the matrix has been initialized. */ bool _is_initialized; + + /** + * Flag indicating whether the matrix is assembled using a hash table + */ + bool _use_hash_table; }; //----------------------------------------------------------------------- // SparseMatrix inline members +template +void +SparseMatrix::use_hash_table(const bool use_hash) +{ + libmesh_error_msg_if(use_hash && !this->supports_hash_table(), + "This matrix class does not support hash table assembly"); + this->_use_hash_table = use_hash; +} // For SGI MIPSpro this implementation must occur after // the full specialization of the print() member. diff --git a/include/systems/system.h b/include/systems/system.h index e7fa2442119..26215fdd70e 100644 --- a/include/systems/system.h +++ b/include/systems/system.h @@ -1922,6 +1922,10 @@ class System : public ReferenceCountedObject, */ SparseMatrix & get_matrix (std::string_view mat_name); + /** + * Sets whether to use hash table matrix assembly if the matrix sub-classes support it + */ + void prefer_hash_table_matrix_assembly(bool preference); protected: @@ -2293,6 +2297,16 @@ class System : public ReferenceCountedObject, * Do we want to apply constraints while projecting vectors ? */ bool project_with_constraints; + + /** + * Whether to use hash table matrix assembly if the matrix sub-classes support it + */ + bool _prefer_hash_table_matrix_assembly; + + /** + * Whether any of our matrices require an initial sparsity pattern computation in order to determine preallocation + */ + bool _require_sparsity_pattern; }; @@ -2685,6 +2699,14 @@ System::add_matrix (std::string_view mat_name, return mat; } +inline void +System::prefer_hash_table_matrix_assembly(const bool preference) +{ + libmesh_error_msg_if( + _matrices_initialized, + "System::prefer_hash_table_matrix_assembly() should be called before matrices are initialized"); + _prefer_hash_table_matrix_assembly = preference; +} } // namespace libMesh diff --git a/src/numerics/petsc_matrix.C b/src/numerics/petsc_matrix.C index f38801a5dfd..a5dd9ff6a37 100644 --- a/src/numerics/petsc_matrix.C +++ b/src/numerics/petsc_matrix.C @@ -94,8 +94,9 @@ PetscMatrix::PetscMatrix(const Parallel::Communicator & comm_in) : // for destroying it template PetscMatrix::PetscMatrix(Mat mat_in, - const Parallel::Communicator & comm_in) : - PetscMatrixBase(mat_in, comm_in) + const Parallel::Communicator & comm_in, + const bool destroy_on_exit) : + PetscMatrixBase(mat_in, comm_in, destroy_on_exit) { MatType mat_type; LibmeshPetscCall(MatGetType(mat_in, &mat_type)); @@ -129,16 +130,13 @@ PetscMatrix::PetscMatrix(const Parallel::Communicator & comm_in, template PetscMatrix::~PetscMatrix() = default; - - template -void PetscMatrix::init (const numeric_index_type m_in, - const numeric_index_type n_in, - const numeric_index_type m_l, - const numeric_index_type n_l, - const numeric_index_type nnz, - const numeric_index_type noz, - const numeric_index_type blocksize_in) +void +PetscMatrix::init_without_preallocation (const numeric_index_type m_in, + const numeric_index_type n_in, + const numeric_index_type m_l, + const numeric_index_type n_l, + const numeric_index_type blocksize_in) { // So compilers don't warn when !LIBMESH_ENABLE_BLOCKED_STORAGE libmesh_ignore(blocksize_in); @@ -147,20 +145,16 @@ void PetscMatrix::init (const numeric_index_type m_in, if (this->initialized()) this->clear(); - this->_is_initialized = true; - - PetscInt m_global = static_cast(m_in); PetscInt n_global = static_cast(n_in); PetscInt m_local = static_cast(m_l); PetscInt n_local = static_cast(n_l); - PetscInt n_nz = static_cast(nnz); - PetscInt n_oz = static_cast(noz); LibmeshPetscCall(MatCreate(this->comm().get(), &this->_mat)); LibmeshPetscCall(MatSetSizes(this->_mat, m_local, n_local, m_global, n_global)); PetscInt blocksize = static_cast(blocksize_in); LibmeshPetscCall(MatSetBlockSize(this->_mat,blocksize)); + LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); #ifdef LIBMESH_ENABLE_BLOCKED_STORAGE if (blocksize > 1) @@ -179,12 +173,7 @@ void PetscMatrix::init (const numeric_index_type m_in, // MatSetFromOptions needs to happen before Preallocation routines // since MatSetFromOptions can change matrix type and remove incompatible // preallocation - LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); LibmeshPetscCall(MatSetFromOptions(this->_mat)); - LibmeshPetscCall(MatSeqBAIJSetPreallocation(this->_mat, blocksize, n_nz/blocksize, NULL)); - LibmeshPetscCall(MatMPIBAIJSetPreallocation(this->_mat, blocksize, - n_nz/blocksize, NULL, - n_oz/blocksize, NULL)); } else #endif @@ -196,10 +185,7 @@ void PetscMatrix::init (const numeric_index_type m_in, // MatSetFromOptions needs to happen before Preallocation routines // since MatSetFromOptions can change matrix type and remove incompatible // preallocation - LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); LibmeshPetscCall(MatSetFromOptions(this->_mat)); - LibmeshPetscCall(MatSeqAIJSetPreallocation(this->_mat, n_nz, NULL)); - LibmeshPetscCall(MatMPIAIJSetPreallocation(this->_mat, n_nz, NULL, n_oz, NULL)); break; case HYPRE: @@ -209,9 +195,7 @@ void PetscMatrix::init (const numeric_index_type m_in, // MatSetFromOptions needs to happen before Preallocation routines // since MatSetFromOptions can change matrix type and remove incompatible // preallocation - LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); LibmeshPetscCall(MatSetFromOptions(this->_mat)); - LibmeshPetscCall(MatHYPRESetPreallocation(this->_mat, n_nz, NULL, n_oz, NULL)); #else libmesh_error_msg("PETSc 3.9.4 or higher with hypre is required for MatHypre"); #endif @@ -221,64 +205,74 @@ void PetscMatrix::init (const numeric_index_type m_in, } } - // Make it an error for PETSc to allocate new nonzero entries during assembly - LibmeshPetscCall(MatSetOption(this->_mat, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_TRUE)); - this->set_context (); - this->zero (); } + template void PetscMatrix::init (const numeric_index_type m_in, const numeric_index_type n_in, const numeric_index_type m_l, const numeric_index_type n_l, - const std::vector & n_nz, - const std::vector & n_oz, + const numeric_index_type nnz, + const numeric_index_type noz, const numeric_index_type blocksize_in) { - // So compilers don't warn when !LIBMESH_ENABLE_BLOCKED_STORAGE - libmesh_ignore(blocksize_in); + this->init_without_preallocation(m_in, n_in, m_l, n_l, blocksize_in); - PetscInt blocksize = static_cast(blocksize_in); + PetscInt n_nz = static_cast(nnz); + PetscInt n_oz = static_cast(noz); - // Clear initialized matrices - if (this->initialized()) - this->clear(); +#ifdef LIBMESH_ENABLE_BLOCKED_STORAGE + if (blocksize > 1) + { + LibmeshPetscCall(MatSeqBAIJSetPreallocation(this->_mat, blocksize, n_nz/blocksize, NULL)); + LibmeshPetscCall(MatMPIBAIJSetPreallocation(this->_mat, blocksize, + n_nz/blocksize, NULL, + n_oz/blocksize, NULL)); + } + else +#endif + { + switch (this->_mat_type) { + case AIJ: + LibmeshPetscCall(MatSeqAIJSetPreallocation(this->_mat, n_nz, NULL)); + LibmeshPetscCall(MatMPIAIJSetPreallocation(this->_mat, n_nz, NULL, n_oz, NULL)); + break; - this->_is_initialized = true; + case HYPRE: +#if !PETSC_VERSION_LESS_THAN(3,9,4) && LIBMESH_HAVE_PETSC_HYPRE + LibmeshPetscCall(MatHYPRESetPreallocation(this->_mat, n_nz, NULL, n_oz, NULL)); +#else + libmesh_error_msg("PETSc 3.9.4 or higher with hypre is required for MatHypre"); +#endif + break; + + default: libmesh_error_msg("Unsupported petsc matrix type"); + } + } + this->finish_initialization(); +} + +template +void PetscMatrix::preallocate(const numeric_index_type libmesh_dbg_var(m_l), + const std::vector & n_nz, + const std::vector & n_oz, + const numeric_index_type blocksize_in) +{ // Make sure the sparsity pattern isn't empty unless the matrix is 0x0 libmesh_assert_equal_to (n_nz.size(), m_l); libmesh_assert_equal_to (n_oz.size(), m_l); - - PetscInt m_global = static_cast(m_in); - PetscInt n_global = static_cast(n_in); - PetscInt m_local = static_cast(m_l); - PetscInt n_local = static_cast(n_l); - - LibmeshPetscCall(MatCreate(this->comm().get(), &this->_mat)); - LibmeshPetscCall(MatSetSizes(this->_mat, m_local, n_local, m_global, n_global)); - LibmeshPetscCall(MatSetBlockSize(this->_mat,blocksize)); + // Avoid unused warnings when not configured with block storage + libmesh_ignore(blocksize_in); #ifdef LIBMESH_ENABLE_BLOCKED_STORAGE + PetscInt blocksize = static_cast(blocksize_in); + if (blocksize > 1) { - // specified blocksize, bs>1. - // double check sizes. - libmesh_assert_equal_to (m_local % blocksize, 0); - libmesh_assert_equal_to (n_local % blocksize, 0); - libmesh_assert_equal_to (m_global % blocksize, 0); - libmesh_assert_equal_to (n_global % blocksize, 0); - - LibmeshPetscCall(MatSetType(this->_mat, MATBAIJ)); // Automatically chooses seqbaij or mpibaij - - // MatSetFromOptions needs to happen before Preallocation routines - // since MatSetFromOptions can change matrix type and remove incompatible - // preallocation - LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); - LibmeshPetscCall(MatSetFromOptions(this->_mat)); // transform the per-entry n_nz and n_oz arrays into their block counterparts. std::vector b_n_nz, b_n_oz; @@ -303,13 +297,6 @@ void PetscMatrix::init (const numeric_index_type m_in, { switch (this->_mat_type) { case AIJ: - LibmeshPetscCall(MatSetType(this->_mat, MATAIJ)); // Automatically chooses seqaij or mpiaij - - // MatSetFromOptions needs to happen before Preallocation routines - // since MatSetFromOptions can change matrix type and remove incompatible - // preallocation - LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); - LibmeshPetscCall(MatSetFromOptions(this->_mat)); LibmeshPetscCall(MatSeqAIJSetPreallocation (this->_mat, 0, numeric_petsc_cast(n_nz.empty() ? nullptr : n_nz.data()))); @@ -322,13 +309,6 @@ void PetscMatrix::init (const numeric_index_type m_in, case HYPRE: #if !PETSC_VERSION_LESS_THAN(3,9,4) && LIBMESH_HAVE_PETSC_HYPRE - LibmeshPetscCall(MatSetType(this->_mat, MATHYPRE)); - - // MatSetFromOptions needs to happen before Preallocation routines - // since MatSetFromOptions can change matrix type and remove incompatible - // preallocation - LibmeshPetscCall(MatSetOptionsPrefix(this->_mat, "")); - LibmeshPetscCall(MatSetFromOptions(this->_mat)); LibmeshPetscCall(MatHYPRESetPreallocation (this->_mat, 0, numeric_petsc_cast(n_nz.empty() ? nullptr : n_nz.data()), @@ -343,11 +323,30 @@ void PetscMatrix::init (const numeric_index_type m_in, } } +} - // Make it an error for PETSc to allocate new nonzero entries during assembly +template +void PetscMatrix::finish_initialization() +{ + // Make it an error for PETSc to allocate new nonzero entries during assembly. For old PETSc + // versions this option must be set after preallocation for MPIAIJ matrices LibmeshPetscCall(MatSetOption(this->_mat, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_TRUE)); - this->set_context(); - this->zero(); + this->_is_initialized = true; +} + +template +void PetscMatrix::init (const numeric_index_type m_in, + const numeric_index_type n_in, + const numeric_index_type m_l, + const numeric_index_type n_l, + const std::vector & n_nz, + const std::vector & n_oz, + const numeric_index_type blocksize_in) +{ + this->init_without_preallocation(m_in, n_in, m_l, n_l, blocksize_in); + this->preallocate(m_l, n_nz, n_oz, blocksize_in); + + this->finish_initialization(); } @@ -359,12 +358,18 @@ void PetscMatrix::init (const ParallelType) const numeric_index_type m_in = this->_dof_map->n_dofs(); const numeric_index_type m_l = this->_dof_map->n_local_dofs(); - const std::vector & n_nz = this->_sp->get_n_nz(); - const std::vector & n_oz = this->_sp->get_n_oz(); + const auto blocksize = this->_dof_map->block_size(); - PetscInt blocksize = static_cast(this->_dof_map->block_size()); + this->init_without_preallocation(m_in, m_in, m_l, m_l, blocksize); + if (!this->_use_hash_table) + { + const std::vector & n_nz = this->_sp->get_n_nz(); + const std::vector & n_oz = this->_sp->get_n_oz(); + + this->preallocate(m_l, n_nz, n_oz, blocksize); + } - this->init(m_in, m_in, m_l, m_l, n_nz, n_oz, blocksize); + this->finish_initialization(); } @@ -1267,6 +1272,45 @@ void PetscMatrix::scale(const T scale) LibmeshPetscCall(MatScale(this->_mat, scale)); } +template +bool PetscMatrix::supports_hash_table() const +{ +#if PETSC_RELEASE_LESS_THAN(3,19,0) + return false; +#else + return true; +#endif +} + +#if PETSC_RELEASE_GREATER_EQUALS(3,23,0) +template +std::unique_ptr> +PetscMatrix::copy_from_hash () +{ + Mat xaij; + libmesh_assert(this->initialized()); + libmesh_assert(!this->closed()); + LibmeshPetscCall(MatDuplicate(this->_mat, MAT_DO_NOT_COPY_VALUES, &xaij)); + LibmeshPetscCall(MatCopyHashToXAIJ(this->_mat, xaij)); + return std::make_unique>(xaij, this->comm(), /*destroy_on_exit=*/true); +} +#endif + +template +void +PetscMatrix::reset_memory() +{ + if (this->_use_hash_table) +#if PETSC_RELEASE_GREATER_EQUALS(3, 23, 0) + // This performs MatReset plus re-establishes the hash table + LibmeshPetscCall(MatResetHash(this->_mat)); +#else + libmesh_error_msg("Resetting hash tables not supported until PETSc version 3.23"); +#endif + else + this->reset_preallocation(); +} + //------------------------------------------------------------------ // Explicit instantiations template class LIBMESH_EXPORT PetscMatrix; diff --git a/src/numerics/petsc_matrix_base.C b/src/numerics/petsc_matrix_base.C index 834941c99e6..df4d8acaa08 100644 --- a/src/numerics/petsc_matrix_base.C +++ b/src/numerics/petsc_matrix_base.C @@ -48,9 +48,10 @@ PetscMatrixBase::PetscMatrixBase(const Parallel::Communicator & comm_in) : // for destroying it template PetscMatrixBase::PetscMatrixBase(Mat mat_in, - const Parallel::Communicator & comm_in) : + const Parallel::Communicator & comm_in, + const bool destroy_on_exit) : SparseMatrix(comm_in), - _destroy_mat_on_exit(false) + _destroy_mat_on_exit(destroy_on_exit) { this->_mat = mat_in; this->_is_initialized = true; diff --git a/src/numerics/sparse_matrix.C b/src/numerics/sparse_matrix.C index ef3f649794e..28419956f68 100644 --- a/src/numerics/sparse_matrix.C +++ b/src/numerics/sparse_matrix.C @@ -64,7 +64,8 @@ SparseMatrix::SparseMatrix (const Parallel::Communicator & comm_in) : ParallelObject(comm_in), _dof_map(nullptr), _sp(nullptr), - _is_initialized(false) + _is_initialized(false), + _use_hash_table(false) {} diff --git a/src/systems/system.C b/src/systems/system.C index 5c4fa61021a..52754dbe0b5 100644 --- a/src/systems/system.C +++ b/src/systems/system.C @@ -97,7 +97,9 @@ System::System (EquationSystems & es, _additional_data_written (false), adjoint_already_solved (false), _hide_output (false), - project_with_constraints (true) + project_with_constraints (true), + _prefer_hash_table_matrix_assembly(false), + _require_sparsity_pattern (false) { } @@ -342,18 +344,28 @@ void System::init_matrices () // want to attach the same matrix to the DofMap twice if (!this->get_dof_map().is_attached(m)) this->get_dof_map().attach_matrix(m); + + // If the user has already explicitly requested that this matrix use a hash table, then we + // always honor that + const bool use_hash = + pr.second->use_hash_table() || + (this->_prefer_hash_table_matrix_assembly && pr.second->supports_hash_table()); + pr.second->use_hash_table(use_hash); + if (!use_hash) + this->_require_sparsity_pattern = true; } // Compute the sparsity pattern for the current // mesh and DOF distribution. This also updates // additional matrices, \p DofMap now knows them - this->get_dof_map().compute_sparsity(this->get_mesh()); + if (this->_require_sparsity_pattern) + this->get_dof_map().compute_sparsity(this->get_mesh()); // Initialize matrices and set to zero - for (auto & pr : _matrices) + for (auto & [name, mat] : _matrices) { - pr.second->init(_matrix_types[pr.first]); - pr.second->zero(); + mat->init(_matrix_types[name]); + mat->zero(); } } @@ -443,13 +455,16 @@ void System::reinit () pr.second->attach_dof_map(this->get_dof_map()); } - // Clear the sparsity pattern - this->get_dof_map().clear_sparsity(); + if (this->_require_sparsity_pattern) + { + // Clear the sparsity pattern + this->get_dof_map().clear_sparsity(); - // Compute the sparsity pattern for the current - // mesh and DOF distribution. This also updates - // additional matrices, \p DofMap now knows them - this->get_dof_map().compute_sparsity (this->get_mesh()); + // Compute the sparsity pattern for the current + // mesh and DOF distribution. This also updates + // additional matrices, \p DofMap now knows them + this->get_dof_map().compute_sparsity (this->get_mesh()); + } // Initialize matrices and set to zero for (auto & pr : _matrices) diff --git a/tests/numerics/petsc_matrix_test.C b/tests/numerics/petsc_matrix_test.C index 9835a9b56cc..9e23894ad35 100644 --- a/tests/numerics/petsc_matrix_test.C +++ b/tests/numerics/petsc_matrix_test.C @@ -25,6 +25,9 @@ public: CPPUNIT_TEST(testPetscBinaryRead); CPPUNIT_TEST(testPetscBinaryWrite); +#if PETSC_RELEASE_GREATER_EQUALS(3, 23, 0) + CPPUNIT_TEST(testPetscCopyFromHash); +#endif // CPPUNIT_TEST(testPetscHDF5Read); // CPPUNIT_TEST(testPetscHDF5Write); @@ -99,6 +102,26 @@ public: CPPUNIT_ASSERT_LESS(TOLERANCE, mat_to_read->l1_norm()); } +#if PETSC_RELEASE_GREATER_EQUALS(3, 23, 0) + void testPetscCopyFromHash() + { + PetscMatrix mat(*my_comm); + const numeric_index_type M = my_comm->size(); + const numeric_index_type m = 1; + const numeric_index_type blocksize = 1; + mat.use_hash_table(true); + mat.init_without_preallocation(M, M, m, m, blocksize); + mat.finish_initialization(); + + // We'll just write a dense row + for (const auto j : make_range(my_comm->size())) + mat.add(my_comm->rank(), j, my_comm->rank() * j); + + auto copy = mat.copy_from_hash(); + for (const auto j : make_range(my_comm->size())) + CPPUNIT_ASSERT_EQUAL((*copy)(my_comm->rank(), j), static_cast(my_comm->rank() * j)); + } +#endif }; CPPUNIT_TEST_SUITE_REGISTRATION(PetscMatrixTest);