diff --git a/Makefile.in b/Makefile.in index 01210e48751..c65eb587588 100644 --- a/Makefile.in +++ b/Makefile.in @@ -309,9 +309,13 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dof_map.C \ src/numerics/dense_matrix_blas_lapack.C \ src/numerics/dense_submatrix.C src/numerics/dense_subvector.C \ src/numerics/dense_vector.C src/numerics/dense_vector_base.C \ - src/numerics/distributed_vector.C src/numerics/function_base.C \ - src/numerics/laspack_matrix.C src/numerics/laspack_vector.C \ - src/numerics/numeric_vector.C src/numerics/petsc_matrix.C \ + src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ + src/numerics/function_base.C src/numerics/laspack_matrix.C \ + src/numerics/laspack_vector.C src/numerics/numeric_vector.C \ + src/numerics/petsc_matrix.C \ src/numerics/petsc_preconditioner.C \ src/numerics/petsc_vector.C src/numerics/preconditioner.C \ src/numerics/sparse_matrix.C \ @@ -397,9 +401,10 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dof_map.C \ src/solution_transfer/meshfunction_solution_transfer.C \ src/solution_transfer/solution_transfer.C \ src/solvers/adaptive_time_solver.C src/solvers/diff_solver.C \ - src/solvers/eigen_solver.C src/solvers/eigen_time_solver.C \ - src/solvers/euler2_solver.C src/solvers/euler_solver.C \ - src/solvers/laspack_linear_solver.C \ + src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ + src/solvers/eigen_time_solver.C src/solvers/euler2_solver.C \ + src/solvers/euler_solver.C src/solvers/laspack_linear_solver.C \ src/solvers/linear_solver.C \ src/solvers/memory_solution_history.C \ src/solvers/newton_solver.C src/solvers/no_solution_history.C \ @@ -667,6 +672,9 @@ am__objects_1 = src/base/libmesh_dbg_la-dof_map.lo \ src/numerics/libmesh_dbg_la-dense_vector.lo \ src/numerics/libmesh_dbg_la-dense_vector_base.lo \ src/numerics/libmesh_dbg_la-distributed_vector.lo \ + src/numerics/libmesh_dbg_la-eigen_preconditioner.lo \ + src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo \ + src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo \ src/numerics/libmesh_dbg_la-function_base.lo \ src/numerics/libmesh_dbg_la-laspack_matrix.lo \ src/numerics/libmesh_dbg_la-laspack_vector.lo \ @@ -767,6 +775,7 @@ am__objects_1 = src/base/libmesh_dbg_la-dof_map.lo \ src/solvers/libmesh_dbg_la-adaptive_time_solver.lo \ src/solvers/libmesh_dbg_la-diff_solver.lo \ src/solvers/libmesh_dbg_la-eigen_solver.lo \ + src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo \ src/solvers/libmesh_dbg_la-eigen_time_solver.lo \ src/solvers/libmesh_dbg_la-euler2_solver.lo \ src/solvers/libmesh_dbg_la-euler_solver.lo \ @@ -973,9 +982,13 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dof_map.C \ src/numerics/dense_matrix_blas_lapack.C \ src/numerics/dense_submatrix.C src/numerics/dense_subvector.C \ src/numerics/dense_vector.C src/numerics/dense_vector_base.C \ - src/numerics/distributed_vector.C src/numerics/function_base.C \ - src/numerics/laspack_matrix.C src/numerics/laspack_vector.C \ - src/numerics/numeric_vector.C src/numerics/petsc_matrix.C \ + src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ + src/numerics/function_base.C src/numerics/laspack_matrix.C \ + src/numerics/laspack_vector.C src/numerics/numeric_vector.C \ + src/numerics/petsc_matrix.C \ src/numerics/petsc_preconditioner.C \ src/numerics/petsc_vector.C src/numerics/preconditioner.C \ src/numerics/sparse_matrix.C \ @@ -1061,9 +1074,10 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dof_map.C \ src/solution_transfer/meshfunction_solution_transfer.C \ src/solution_transfer/solution_transfer.C \ src/solvers/adaptive_time_solver.C src/solvers/diff_solver.C \ - src/solvers/eigen_solver.C src/solvers/eigen_time_solver.C \ - src/solvers/euler2_solver.C src/solvers/euler_solver.C \ - src/solvers/laspack_linear_solver.C \ + src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ + src/solvers/eigen_time_solver.C src/solvers/euler2_solver.C \ + src/solvers/euler_solver.C src/solvers/laspack_linear_solver.C \ src/solvers/linear_solver.C \ src/solvers/memory_solution_history.C \ src/solvers/newton_solver.C src/solvers/no_solution_history.C \ @@ -1330,6 +1344,9 @@ am__objects_2 = src/base/libmesh_devel_la-dof_map.lo \ src/numerics/libmesh_devel_la-dense_vector.lo \ src/numerics/libmesh_devel_la-dense_vector_base.lo \ src/numerics/libmesh_devel_la-distributed_vector.lo \ + src/numerics/libmesh_devel_la-eigen_preconditioner.lo \ + src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo \ + src/numerics/libmesh_devel_la-eigen_sparse_vector.lo \ src/numerics/libmesh_devel_la-function_base.lo \ src/numerics/libmesh_devel_la-laspack_matrix.lo \ src/numerics/libmesh_devel_la-laspack_vector.lo \ @@ -1430,6 +1447,7 @@ am__objects_2 = src/base/libmesh_devel_la-dof_map.lo \ src/solvers/libmesh_devel_la-adaptive_time_solver.lo \ src/solvers/libmesh_devel_la-diff_solver.lo \ src/solvers/libmesh_devel_la-eigen_solver.lo \ + src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo \ src/solvers/libmesh_devel_la-eigen_time_solver.lo \ src/solvers/libmesh_devel_la-euler2_solver.lo \ src/solvers/libmesh_devel_la-euler_solver.lo \ @@ -1633,9 +1651,13 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dof_map.C \ src/numerics/dense_matrix_blas_lapack.C \ src/numerics/dense_submatrix.C src/numerics/dense_subvector.C \ src/numerics/dense_vector.C src/numerics/dense_vector_base.C \ - src/numerics/distributed_vector.C src/numerics/function_base.C \ - src/numerics/laspack_matrix.C src/numerics/laspack_vector.C \ - src/numerics/numeric_vector.C src/numerics/petsc_matrix.C \ + src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ + src/numerics/function_base.C src/numerics/laspack_matrix.C \ + src/numerics/laspack_vector.C src/numerics/numeric_vector.C \ + src/numerics/petsc_matrix.C \ src/numerics/petsc_preconditioner.C \ src/numerics/petsc_vector.C src/numerics/preconditioner.C \ src/numerics/sparse_matrix.C \ @@ -1721,9 +1743,10 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dof_map.C \ src/solution_transfer/meshfunction_solution_transfer.C \ src/solution_transfer/solution_transfer.C \ src/solvers/adaptive_time_solver.C src/solvers/diff_solver.C \ - src/solvers/eigen_solver.C src/solvers/eigen_time_solver.C \ - src/solvers/euler2_solver.C src/solvers/euler_solver.C \ - src/solvers/laspack_linear_solver.C \ + src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ + src/solvers/eigen_time_solver.C src/solvers/euler2_solver.C \ + src/solvers/euler_solver.C src/solvers/laspack_linear_solver.C \ src/solvers/linear_solver.C \ src/solvers/memory_solution_history.C \ src/solvers/newton_solver.C src/solvers/no_solution_history.C \ @@ -1990,6 +2013,9 @@ am__objects_3 = src/base/libmesh_oprof_la-dof_map.lo \ src/numerics/libmesh_oprof_la-dense_vector.lo \ src/numerics/libmesh_oprof_la-dense_vector_base.lo \ src/numerics/libmesh_oprof_la-distributed_vector.lo \ + src/numerics/libmesh_oprof_la-eigen_preconditioner.lo \ + src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo \ + src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo \ src/numerics/libmesh_oprof_la-function_base.lo \ src/numerics/libmesh_oprof_la-laspack_matrix.lo \ src/numerics/libmesh_oprof_la-laspack_vector.lo \ @@ -2090,6 +2116,7 @@ am__objects_3 = src/base/libmesh_oprof_la-dof_map.lo \ src/solvers/libmesh_oprof_la-adaptive_time_solver.lo \ src/solvers/libmesh_oprof_la-diff_solver.lo \ src/solvers/libmesh_oprof_la-eigen_solver.lo \ + src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo \ src/solvers/libmesh_oprof_la-eigen_time_solver.lo \ src/solvers/libmesh_oprof_la-euler2_solver.lo \ src/solvers/libmesh_oprof_la-euler_solver.lo \ @@ -2293,9 +2320,13 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dof_map.C \ src/numerics/dense_matrix_blas_lapack.C \ src/numerics/dense_submatrix.C src/numerics/dense_subvector.C \ src/numerics/dense_vector.C src/numerics/dense_vector_base.C \ - src/numerics/distributed_vector.C src/numerics/function_base.C \ - src/numerics/laspack_matrix.C src/numerics/laspack_vector.C \ - src/numerics/numeric_vector.C src/numerics/petsc_matrix.C \ + src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ + src/numerics/function_base.C src/numerics/laspack_matrix.C \ + src/numerics/laspack_vector.C src/numerics/numeric_vector.C \ + src/numerics/petsc_matrix.C \ src/numerics/petsc_preconditioner.C \ src/numerics/petsc_vector.C src/numerics/preconditioner.C \ src/numerics/sparse_matrix.C \ @@ -2381,9 +2412,10 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dof_map.C \ src/solution_transfer/meshfunction_solution_transfer.C \ src/solution_transfer/solution_transfer.C \ src/solvers/adaptive_time_solver.C src/solvers/diff_solver.C \ - src/solvers/eigen_solver.C src/solvers/eigen_time_solver.C \ - src/solvers/euler2_solver.C src/solvers/euler_solver.C \ - src/solvers/laspack_linear_solver.C \ + src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ + src/solvers/eigen_time_solver.C src/solvers/euler2_solver.C \ + src/solvers/euler_solver.C src/solvers/laspack_linear_solver.C \ src/solvers/linear_solver.C \ src/solvers/memory_solution_history.C \ src/solvers/newton_solver.C src/solvers/no_solution_history.C \ @@ -2650,6 +2682,9 @@ am__objects_4 = src/base/libmesh_opt_la-dof_map.lo \ src/numerics/libmesh_opt_la-dense_vector.lo \ src/numerics/libmesh_opt_la-dense_vector_base.lo \ src/numerics/libmesh_opt_la-distributed_vector.lo \ + src/numerics/libmesh_opt_la-eigen_preconditioner.lo \ + src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo \ + src/numerics/libmesh_opt_la-eigen_sparse_vector.lo \ src/numerics/libmesh_opt_la-function_base.lo \ src/numerics/libmesh_opt_la-laspack_matrix.lo \ src/numerics/libmesh_opt_la-laspack_vector.lo \ @@ -2750,6 +2785,7 @@ am__objects_4 = src/base/libmesh_opt_la-dof_map.lo \ src/solvers/libmesh_opt_la-adaptive_time_solver.lo \ src/solvers/libmesh_opt_la-diff_solver.lo \ src/solvers/libmesh_opt_la-eigen_solver.lo \ + src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo \ src/solvers/libmesh_opt_la-eigen_time_solver.lo \ src/solvers/libmesh_opt_la-euler2_solver.lo \ src/solvers/libmesh_opt_la-euler_solver.lo \ @@ -2952,9 +2988,13 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dof_map.C \ src/numerics/dense_matrix_blas_lapack.C \ src/numerics/dense_submatrix.C src/numerics/dense_subvector.C \ src/numerics/dense_vector.C src/numerics/dense_vector_base.C \ - src/numerics/distributed_vector.C src/numerics/function_base.C \ - src/numerics/laspack_matrix.C src/numerics/laspack_vector.C \ - src/numerics/numeric_vector.C src/numerics/petsc_matrix.C \ + src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ + src/numerics/function_base.C src/numerics/laspack_matrix.C \ + src/numerics/laspack_vector.C src/numerics/numeric_vector.C \ + src/numerics/petsc_matrix.C \ src/numerics/petsc_preconditioner.C \ src/numerics/petsc_vector.C src/numerics/preconditioner.C \ src/numerics/sparse_matrix.C \ @@ -3040,9 +3080,10 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dof_map.C \ src/solution_transfer/meshfunction_solution_transfer.C \ src/solution_transfer/solution_transfer.C \ src/solvers/adaptive_time_solver.C src/solvers/diff_solver.C \ - src/solvers/eigen_solver.C src/solvers/eigen_time_solver.C \ - src/solvers/euler2_solver.C src/solvers/euler_solver.C \ - src/solvers/laspack_linear_solver.C \ + src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ + src/solvers/eigen_time_solver.C src/solvers/euler2_solver.C \ + src/solvers/euler_solver.C src/solvers/laspack_linear_solver.C \ src/solvers/linear_solver.C \ src/solvers/memory_solution_history.C \ src/solvers/newton_solver.C src/solvers/no_solution_history.C \ @@ -3309,6 +3350,9 @@ am__objects_5 = src/base/libmesh_prof_la-dof_map.lo \ src/numerics/libmesh_prof_la-dense_vector.lo \ src/numerics/libmesh_prof_la-dense_vector_base.lo \ src/numerics/libmesh_prof_la-distributed_vector.lo \ + src/numerics/libmesh_prof_la-eigen_preconditioner.lo \ + src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo \ + src/numerics/libmesh_prof_la-eigen_sparse_vector.lo \ src/numerics/libmesh_prof_la-function_base.lo \ src/numerics/libmesh_prof_la-laspack_matrix.lo \ src/numerics/libmesh_prof_la-laspack_vector.lo \ @@ -3409,6 +3453,7 @@ am__objects_5 = src/base/libmesh_prof_la-dof_map.lo \ src/solvers/libmesh_prof_la-adaptive_time_solver.lo \ src/solvers/libmesh_prof_la-diff_solver.lo \ src/solvers/libmesh_prof_la-eigen_solver.lo \ + src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo \ src/solvers/libmesh_prof_la-eigen_time_solver.lo \ src/solvers/libmesh_prof_la-euler2_solver.lo \ src/solvers/libmesh_prof_la-euler_solver.lo \ @@ -4479,6 +4524,9 @@ libmesh_SOURCES = \ src/numerics/dense_vector.C \ src/numerics/dense_vector_base.C \ src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ src/numerics/function_base.C \ src/numerics/laspack_matrix.C \ src/numerics/laspack_vector.C \ @@ -4579,6 +4627,7 @@ libmesh_SOURCES = \ src/solvers/adaptive_time_solver.C \ src/solvers/diff_solver.C \ src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ src/solvers/eigen_time_solver.C \ src/solvers/euler2_solver.C \ src/solvers/euler_solver.C \ @@ -5454,6 +5503,15 @@ src/numerics/libmesh_dbg_la-dense_vector_base.lo: \ src/numerics/libmesh_dbg_la-distributed_vector.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_dbg_la-eigen_preconditioner.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) src/numerics/libmesh_dbg_la-function_base.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) @@ -5794,6 +5852,9 @@ src/solvers/libmesh_dbg_la-diff_solver.lo: \ src/solvers/libmesh_dbg_la-eigen_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) +src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo: \ + src/solvers/$(am__dirstamp) \ + src/solvers/$(DEPDIR)/$(am__dirstamp) src/solvers/libmesh_dbg_la-eigen_time_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) @@ -6456,6 +6517,15 @@ src/numerics/libmesh_devel_la-dense_vector_base.lo: \ src/numerics/libmesh_devel_la-distributed_vector.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_devel_la-eigen_preconditioner.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_devel_la-eigen_sparse_vector.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) src/numerics/libmesh_devel_la-function_base.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) @@ -6755,6 +6825,9 @@ src/solvers/libmesh_devel_la-diff_solver.lo: \ src/solvers/libmesh_devel_la-eigen_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) +src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo: \ + src/solvers/$(am__dirstamp) \ + src/solvers/$(DEPDIR)/$(am__dirstamp) src/solvers/libmesh_devel_la-eigen_time_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) @@ -7407,6 +7480,15 @@ src/numerics/libmesh_oprof_la-dense_vector_base.lo: \ src/numerics/libmesh_oprof_la-distributed_vector.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_oprof_la-eigen_preconditioner.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) src/numerics/libmesh_oprof_la-function_base.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) @@ -7706,6 +7788,9 @@ src/solvers/libmesh_oprof_la-diff_solver.lo: \ src/solvers/libmesh_oprof_la-eigen_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) +src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo: \ + src/solvers/$(am__dirstamp) \ + src/solvers/$(DEPDIR)/$(am__dirstamp) src/solvers/libmesh_oprof_la-eigen_time_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) @@ -8358,6 +8443,15 @@ src/numerics/libmesh_opt_la-dense_vector_base.lo: \ src/numerics/libmesh_opt_la-distributed_vector.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_opt_la-eigen_preconditioner.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_opt_la-eigen_sparse_vector.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) src/numerics/libmesh_opt_la-function_base.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) @@ -8656,6 +8750,9 @@ src/solvers/libmesh_opt_la-diff_solver.lo: \ src/solvers/libmesh_opt_la-eigen_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) +src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo: \ + src/solvers/$(am__dirstamp) \ + src/solvers/$(DEPDIR)/$(am__dirstamp) src/solvers/libmesh_opt_la-eigen_time_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) @@ -9306,6 +9403,15 @@ src/numerics/libmesh_prof_la-dense_vector_base.lo: \ src/numerics/libmesh_prof_la-distributed_vector.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_prof_la-eigen_preconditioner.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) +src/numerics/libmesh_prof_la-eigen_sparse_vector.lo: \ + src/numerics/$(am__dirstamp) \ + src/numerics/$(DEPDIR)/$(am__dirstamp) src/numerics/libmesh_prof_la-function_base.lo: \ src/numerics/$(am__dirstamp) \ src/numerics/$(DEPDIR)/$(am__dirstamp) @@ -9604,6 +9710,9 @@ src/solvers/libmesh_prof_la-diff_solver.lo: \ src/solvers/libmesh_prof_la-eigen_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) +src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo: \ + src/solvers/$(am__dirstamp) \ + src/solvers/$(DEPDIR)/$(am__dirstamp) src/solvers/libmesh_prof_la-eigen_time_solver.lo: \ src/solvers/$(am__dirstamp) \ src/solvers/$(DEPDIR)/$(am__dirstamp) @@ -11246,6 +11355,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-dense_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-dense_vector_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-distributed_vector.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_preconditioner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_matrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-function_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-laspack_matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_dbg_la-laspack_vector.Plo@am__quote@ @@ -11274,6 +11386,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-dense_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-dense_vector_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-distributed_vector.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_preconditioner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_matrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-function_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-laspack_matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_devel_la-laspack_vector.Plo@am__quote@ @@ -11302,6 +11417,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-dense_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-dense_vector_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-distributed_vector.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_preconditioner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_matrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-function_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-laspack_matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_oprof_la-laspack_vector.Plo@am__quote@ @@ -11330,6 +11448,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-dense_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-dense_vector_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-distributed_vector.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_preconditioner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_matrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-function_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-laspack_matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_opt_la-laspack_vector.Plo@am__quote@ @@ -11358,6 +11479,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-dense_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-dense_vector_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-distributed_vector.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_preconditioner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_matrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-function_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-laspack_matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/numerics/$(DEPDIR)/libmesh_prof_la-laspack_vector.Plo@am__quote@ @@ -11774,6 +11898,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-adaptive_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-diff_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_solver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_linear_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-euler2_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_dbg_la-euler_solver.Plo@am__quote@ @@ -11798,6 +11923,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-adaptive_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-diff_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_solver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_sparse_linear_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-euler2_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_devel_la-euler_solver.Plo@am__quote@ @@ -11822,6 +11948,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-adaptive_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-diff_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_solver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_linear_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-euler2_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_oprof_la-euler_solver.Plo@am__quote@ @@ -11846,6 +11973,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-adaptive_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-diff_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_solver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_sparse_linear_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-euler2_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_opt_la-euler_solver.Plo@am__quote@ @@ -11870,6 +11998,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-adaptive_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-diff_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_solver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_sparse_linear_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_time_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-euler2_solver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/solvers/$(DEPDIR)/libmesh_prof_la-euler_solver.Plo@am__quote@ @@ -13713,6 +13842,27 @@ src/numerics/libmesh_dbg_la-distributed_vector.lo: src/numerics/distributed_vect @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_dbg_la-distributed_vector.lo `test -f 'src/numerics/distributed_vector.C' || echo '$(srcdir)/'`src/numerics/distributed_vector.C +src/numerics/libmesh_dbg_la-eigen_preconditioner.lo: src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_dbg_la-eigen_preconditioner.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_preconditioner.Tpo -c -o src/numerics/libmesh_dbg_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_preconditioner.Tpo src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_preconditioner.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_preconditioner.C' object='src/numerics/libmesh_dbg_la-eigen_preconditioner.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_dbg_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C + +src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo: src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_matrix.Tpo -c -o src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_matrix.Tpo src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_matrix.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_matrix.C' object='src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_dbg_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C + +src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo: src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_vector.Tpo -c -o src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_vector.Tpo src/numerics/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_vector.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_vector.C' object='src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_dbg_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C + src/numerics/libmesh_dbg_la-function_base.lo: src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_dbg_la-function_base.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_dbg_la-function_base.Tpo -c -o src/numerics/libmesh_dbg_la-function_base.lo `test -f 'src/numerics/function_base.C' || echo '$(srcdir)/'`src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_dbg_la-function_base.Tpo src/numerics/$(DEPDIR)/libmesh_dbg_la-function_base.Plo @@ -14413,6 +14563,13 @@ src/solvers/libmesh_dbg_la-eigen_solver.lo: src/solvers/eigen_solver.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_dbg_la-eigen_solver.lo `test -f 'src/solvers/eigen_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_solver.C +src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo: src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_linear_solver.Tpo -c -o src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_linear_solver.Tpo src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_sparse_linear_solver.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/solvers/eigen_sparse_linear_solver.C' object='src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_dbg_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C + src/solvers/libmesh_dbg_la-eigen_time_solver.lo: src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_dbg_la-eigen_time_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_time_solver.Tpo -c -o src/solvers/libmesh_dbg_la-eigen_time_solver.lo `test -f 'src/solvers/eigen_time_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_time_solver.Tpo src/solvers/$(DEPDIR)/libmesh_dbg_la-eigen_time_solver.Plo @@ -16443,6 +16600,27 @@ src/numerics/libmesh_devel_la-distributed_vector.lo: src/numerics/distributed_ve @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_devel_la-distributed_vector.lo `test -f 'src/numerics/distributed_vector.C' || echo '$(srcdir)/'`src/numerics/distributed_vector.C +src/numerics/libmesh_devel_la-eigen_preconditioner.lo: src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_devel_la-eigen_preconditioner.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_preconditioner.Tpo -c -o src/numerics/libmesh_devel_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_preconditioner.Tpo src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_preconditioner.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_preconditioner.C' object='src/numerics/libmesh_devel_la-eigen_preconditioner.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_devel_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C + +src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo: src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_matrix.Tpo -c -o src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_matrix.Tpo src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_matrix.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_matrix.C' object='src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_devel_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C + +src/numerics/libmesh_devel_la-eigen_sparse_vector.lo: src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_devel_la-eigen_sparse_vector.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_vector.Tpo -c -o src/numerics/libmesh_devel_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_vector.Tpo src/numerics/$(DEPDIR)/libmesh_devel_la-eigen_sparse_vector.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_vector.C' object='src/numerics/libmesh_devel_la-eigen_sparse_vector.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_devel_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C + src/numerics/libmesh_devel_la-function_base.lo: src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_devel_la-function_base.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_devel_la-function_base.Tpo -c -o src/numerics/libmesh_devel_la-function_base.lo `test -f 'src/numerics/function_base.C' || echo '$(srcdir)/'`src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_devel_la-function_base.Tpo src/numerics/$(DEPDIR)/libmesh_devel_la-function_base.Plo @@ -17143,6 +17321,13 @@ src/solvers/libmesh_devel_la-eigen_solver.lo: src/solvers/eigen_solver.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_devel_la-eigen_solver.lo `test -f 'src/solvers/eigen_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_solver.C +src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo: src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_sparse_linear_solver.Tpo -c -o src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_sparse_linear_solver.Tpo src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_sparse_linear_solver.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/solvers/eigen_sparse_linear_solver.C' object='src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_devel_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C + src/solvers/libmesh_devel_la-eigen_time_solver.lo: src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_devel_la-eigen_time_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_time_solver.Tpo -c -o src/solvers/libmesh_devel_la-eigen_time_solver.lo `test -f 'src/solvers/eigen_time_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_time_solver.Tpo src/solvers/$(DEPDIR)/libmesh_devel_la-eigen_time_solver.Plo @@ -19173,6 +19358,27 @@ src/numerics/libmesh_oprof_la-distributed_vector.lo: src/numerics/distributed_ve @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_oprof_la-distributed_vector.lo `test -f 'src/numerics/distributed_vector.C' || echo '$(srcdir)/'`src/numerics/distributed_vector.C +src/numerics/libmesh_oprof_la-eigen_preconditioner.lo: src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_oprof_la-eigen_preconditioner.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_preconditioner.Tpo -c -o src/numerics/libmesh_oprof_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_preconditioner.Tpo src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_preconditioner.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_preconditioner.C' object='src/numerics/libmesh_oprof_la-eigen_preconditioner.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_oprof_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C + +src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo: src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_matrix.Tpo -c -o src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_matrix.Tpo src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_matrix.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_matrix.C' object='src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_oprof_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C + +src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo: src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_vector.Tpo -c -o src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_vector.Tpo src/numerics/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_vector.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_vector.C' object='src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_oprof_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C + src/numerics/libmesh_oprof_la-function_base.lo: src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_oprof_la-function_base.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_oprof_la-function_base.Tpo -c -o src/numerics/libmesh_oprof_la-function_base.lo `test -f 'src/numerics/function_base.C' || echo '$(srcdir)/'`src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_oprof_la-function_base.Tpo src/numerics/$(DEPDIR)/libmesh_oprof_la-function_base.Plo @@ -19873,6 +20079,13 @@ src/solvers/libmesh_oprof_la-eigen_solver.lo: src/solvers/eigen_solver.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_oprof_la-eigen_solver.lo `test -f 'src/solvers/eigen_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_solver.C +src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo: src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_linear_solver.Tpo -c -o src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_linear_solver.Tpo src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_sparse_linear_solver.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/solvers/eigen_sparse_linear_solver.C' object='src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_oprof_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C + src/solvers/libmesh_oprof_la-eigen_time_solver.lo: src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_oprof_la-eigen_time_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_time_solver.Tpo -c -o src/solvers/libmesh_oprof_la-eigen_time_solver.lo `test -f 'src/solvers/eigen_time_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_time_solver.Tpo src/solvers/$(DEPDIR)/libmesh_oprof_la-eigen_time_solver.Plo @@ -21903,6 +22116,27 @@ src/numerics/libmesh_opt_la-distributed_vector.lo: src/numerics/distributed_vect @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_opt_la-distributed_vector.lo `test -f 'src/numerics/distributed_vector.C' || echo '$(srcdir)/'`src/numerics/distributed_vector.C +src/numerics/libmesh_opt_la-eigen_preconditioner.lo: src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_opt_la-eigen_preconditioner.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_preconditioner.Tpo -c -o src/numerics/libmesh_opt_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_preconditioner.Tpo src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_preconditioner.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_preconditioner.C' object='src/numerics/libmesh_opt_la-eigen_preconditioner.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_opt_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C + +src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo: src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_matrix.Tpo -c -o src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_matrix.Tpo src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_matrix.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_matrix.C' object='src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_opt_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C + +src/numerics/libmesh_opt_la-eigen_sparse_vector.lo: src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_opt_la-eigen_sparse_vector.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_vector.Tpo -c -o src/numerics/libmesh_opt_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_vector.Tpo src/numerics/$(DEPDIR)/libmesh_opt_la-eigen_sparse_vector.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_vector.C' object='src/numerics/libmesh_opt_la-eigen_sparse_vector.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_opt_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C + src/numerics/libmesh_opt_la-function_base.lo: src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_opt_la-function_base.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_opt_la-function_base.Tpo -c -o src/numerics/libmesh_opt_la-function_base.lo `test -f 'src/numerics/function_base.C' || echo '$(srcdir)/'`src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_opt_la-function_base.Tpo src/numerics/$(DEPDIR)/libmesh_opt_la-function_base.Plo @@ -22603,6 +22837,13 @@ src/solvers/libmesh_opt_la-eigen_solver.lo: src/solvers/eigen_solver.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_opt_la-eigen_solver.lo `test -f 'src/solvers/eigen_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_solver.C +src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo: src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_sparse_linear_solver.Tpo -c -o src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_sparse_linear_solver.Tpo src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_sparse_linear_solver.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/solvers/eigen_sparse_linear_solver.C' object='src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_opt_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C + src/solvers/libmesh_opt_la-eigen_time_solver.lo: src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_opt_la-eigen_time_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_time_solver.Tpo -c -o src/solvers/libmesh_opt_la-eigen_time_solver.lo `test -f 'src/solvers/eigen_time_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_time_solver.Tpo src/solvers/$(DEPDIR)/libmesh_opt_la-eigen_time_solver.Plo @@ -24633,6 +24874,27 @@ src/numerics/libmesh_prof_la-distributed_vector.lo: src/numerics/distributed_vec @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_prof_la-distributed_vector.lo `test -f 'src/numerics/distributed_vector.C' || echo '$(srcdir)/'`src/numerics/distributed_vector.C +src/numerics/libmesh_prof_la-eigen_preconditioner.lo: src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_prof_la-eigen_preconditioner.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_preconditioner.Tpo -c -o src/numerics/libmesh_prof_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_preconditioner.Tpo src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_preconditioner.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_preconditioner.C' object='src/numerics/libmesh_prof_la-eigen_preconditioner.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_prof_la-eigen_preconditioner.lo `test -f 'src/numerics/eigen_preconditioner.C' || echo '$(srcdir)/'`src/numerics/eigen_preconditioner.C + +src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo: src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_matrix.Tpo -c -o src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_matrix.Tpo src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_matrix.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_matrix.C' object='src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_prof_la-eigen_sparse_matrix.lo `test -f 'src/numerics/eigen_sparse_matrix.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_matrix.C + +src/numerics/libmesh_prof_la-eigen_sparse_vector.lo: src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_prof_la-eigen_sparse_vector.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_vector.Tpo -c -o src/numerics/libmesh_prof_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_vector.Tpo src/numerics/$(DEPDIR)/libmesh_prof_la-eigen_sparse_vector.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/numerics/eigen_sparse_vector.C' object='src/numerics/libmesh_prof_la-eigen_sparse_vector.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/numerics/libmesh_prof_la-eigen_sparse_vector.lo `test -f 'src/numerics/eigen_sparse_vector.C' || echo '$(srcdir)/'`src/numerics/eigen_sparse_vector.C + src/numerics/libmesh_prof_la-function_base.lo: src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/numerics/libmesh_prof_la-function_base.lo -MD -MP -MF src/numerics/$(DEPDIR)/libmesh_prof_la-function_base.Tpo -c -o src/numerics/libmesh_prof_la-function_base.lo `test -f 'src/numerics/function_base.C' || echo '$(srcdir)/'`src/numerics/function_base.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/numerics/$(DEPDIR)/libmesh_prof_la-function_base.Tpo src/numerics/$(DEPDIR)/libmesh_prof_la-function_base.Plo @@ -25333,6 +25595,13 @@ src/solvers/libmesh_prof_la-eigen_solver.lo: src/solvers/eigen_solver.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_prof_la-eigen_solver.lo `test -f 'src/solvers/eigen_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_solver.C +src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo: src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_sparse_linear_solver.Tpo -c -o src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_sparse_linear_solver.Tpo src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_sparse_linear_solver.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/solvers/eigen_sparse_linear_solver.C' object='src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/solvers/libmesh_prof_la-eigen_sparse_linear_solver.lo `test -f 'src/solvers/eigen_sparse_linear_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_sparse_linear_solver.C + src/solvers/libmesh_prof_la-eigen_time_solver.lo: src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/solvers/libmesh_prof_la-eigen_time_solver.lo -MD -MP -MF src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_time_solver.Tpo -c -o src/solvers/libmesh_prof_la-eigen_time_solver.lo `test -f 'src/solvers/eigen_time_solver.C' || echo '$(srcdir)/'`src/solvers/eigen_time_solver.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_time_solver.Tpo src/solvers/$(DEPDIR)/libmesh_prof_la-eigen_time_solver.Plo diff --git a/include/Makefile.in b/include/Makefile.in index 89a9fc6a79f..9aa2b507ee2 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -688,6 +688,10 @@ include_HEADERS = \ numerics/dense_vector.h \ numerics/dense_vector_base.h \ numerics/distributed_vector.h \ + numerics/eigen_preconditioner.h \ + numerics/eigen_sparse_core.h \ + numerics/eigen_sparse_matrix.h \ + numerics/eigen_sparse_vector.h \ numerics/fem_function_base.h \ numerics/function_base.h \ numerics/numeric_vector.h \ @@ -780,6 +784,7 @@ include_HEADERS = \ solvers/adaptive_time_solver.h \ solvers/diff_solver.h \ solvers/eigen_solver.h \ + solvers/eigen_sparse_linear_solver.h \ solvers/eigen_time_solver.h \ solvers/euler2_solver.h \ solvers/euler_solver.h \ diff --git a/include/enums/enum_solver_package.h b/include/enums/enum_solver_package.h index d99e55abbc9..4f4387822e8 100644 --- a/include/enums/enum_solver_package.h +++ b/include/enums/enum_solver_package.h @@ -40,6 +40,7 @@ namespace libMeshEnums { TRILINOS_SOLVERS, LASPACK_SOLVERS, SLEPC_SOLVERS, + EIGEN_SOLVERS, INVALID_SOLVER_PACKAGE }; diff --git a/include/include_HEADERS b/include/include_HEADERS index c47e6391def..cbb86a70df5 100644 --- a/include/include_HEADERS +++ b/include/include_HEADERS @@ -208,6 +208,10 @@ include_HEADERS = \ numerics/dense_vector.h \ numerics/dense_vector_base.h \ numerics/distributed_vector.h \ + numerics/eigen_preconditioner.h \ + numerics/eigen_sparse_core.h \ + numerics/eigen_sparse_matrix.h \ + numerics/eigen_sparse_vector.h \ numerics/fem_function_base.h \ numerics/function_base.h \ numerics/numeric_vector.h \ @@ -300,6 +304,7 @@ include_HEADERS = \ solvers/adaptive_time_solver.h \ solvers/diff_solver.h \ solvers/eigen_solver.h \ + solvers/eigen_sparse_linear_solver.h \ solvers/eigen_time_solver.h \ solvers/euler2_solver.h \ solvers/euler_solver.h \ diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index 55e417ccf78..8d81b7e8954 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -5,7 +5,7 @@ # include the magic script! EXTRA_DIST = rebuild_makefile.sh -BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h dof_object.h factory.h getpot.h id_types.h libmesh.h libmesh_C_isnan.h libmesh_augment_std_namespace.h libmesh_base.h libmesh_common.h libmesh_documentation.h libmesh_exceptions.h libmesh_logging.h libmesh_version.h multi_predicates.h periodic_boundaries.h periodic_boundary.h periodic_boundary_base.h print_trace.h reference_counted_object.h reference_counter.h single_predicates.h sparsity_pattern.h variable.h variant_filter_iterator.h enum_eigen_solver_type.h enum_elem_quality.h enum_elem_type.h enum_fe_family.h enum_inf_map_type.h enum_io_package.h enum_norm_type.h enum_order.h enum_parallel_type.h enum_point_locator_type.h enum_preconditioner_type.h enum_quadrature_type.h enum_solver_package.h enum_solver_type.h enum_subset_solve_mode.h enum_xdr_mode.h adjoint_refinement_estimator.h adjoint_residual_error_estimator.h discontinuity_measure.h error_estimator.h exact_error_estimator.h exact_solution.h fourth_error_estimators.h hp_coarsentest.h hp_selector.h hp_singular.h jump_error_estimator.h kelly_error_estimator.h patch_recovery_error_estimator.h uniform_refinement_estimator.h weighted_patch_recovery_error_estimator.h fe.h fe_abstract.h fe_base.h fe_compute_data.h fe_interface.h fe_macro.h fe_map.h fe_transformation_base.h fe_type.h fe_xyz_map.h h1_fe_transformation.h hcurl_fe_transformation.h inf_fe.h inf_fe_instantiate_1D.h inf_fe_instantiate_2D.h inf_fe_instantiate_3D.h inf_fe_macro.h cell.h cell_hex.h cell_hex20.h cell_hex27.h cell_hex8.h cell_inf.h cell_inf_hex.h cell_inf_hex16.h cell_inf_hex18.h cell_inf_hex8.h cell_inf_prism.h cell_inf_prism12.h cell_inf_prism6.h cell_prism.h cell_prism15.h cell_prism18.h cell_prism6.h cell_pyramid.h cell_pyramid5.h cell_tet.h cell_tet10.h cell_tet4.h edge.h edge_edge2.h edge_edge3.h edge_edge4.h edge_inf_edge2.h elem.h elem_quality.h elem_range.h elem_type.h face.h face_inf_quad.h face_inf_quad4.h face_inf_quad6.h face_quad.h face_quad4.h face_quad8.h face_quad9.h face_tri.h face_tri3.h face_tri6.h node.h node_elem.h node_range.h plane.h point.h remote_elem.h side.h sphere.h stored_range.h surface.h abaqus_io.h boundary_info.h boundary_mesh.h diva_io.h ensight_io.h exodusII_io.h exodusII_io_helper.h fro_io.h gmsh_io.h gmv_io.h gnuplot_io.h inf_elem_builder.h legacy_xdr_io.h matlab_io.h medit_io.h mesh.h mesh_base.h mesh_communication.h mesh_data.h mesh_function.h mesh_generation.h mesh_input.h mesh_inserter_iterator.h mesh_modification.h mesh_output.h mesh_refinement.h mesh_serializer.h mesh_smoother.h mesh_smoother_laplace.h mesh_smoother_vsmoother.h mesh_tetgen_interface.h mesh_tetgen_wrapper.h mesh_tools.h mesh_triangle_holes.h mesh_triangle_interface.h mesh_triangle_wrapper.h nemesis_io.h nemesis_io_helper.h off_io.h parallel_mesh.h patch.h postscript_io.h serial_mesh.h tecplot_io.h tetgen_io.h ucd_io.h unstructured_mesh.h unv_io.h vtk_io.h xdr_head.h xdr_io.h xdr_mesh.h xdr_mgf.h xdr_mhead.h xdr_shead.h xdr_soln.h analytic_function.h const_fem_function.h const_function.h coupling_matrix.h dense_matrix.h dense_matrix_base.h dense_submatrix.h dense_subvector.h dense_vector.h dense_vector_base.h distributed_vector.h fem_function_base.h function_base.h laspack_matrix.h laspack_vector.h numeric_vector.h parsed_function.h petsc_macro.h petsc_matrix.h petsc_preconditioner.h petsc_vector.h preconditioner.h raw_accessor.h refinement_selector.h shell_matrix.h sparse_matrix.h sparse_shell_matrix.h sum_shell_matrix.h tensor_shell_matrix.h tensor_tools.h tensor_value.h trilinos_epetra_matrix.h trilinos_epetra_vector.h trilinos_preconditioner.h type_n_tensor.h type_tensor.h type_vector.h vector_value.h wrapped_function.h zero_function.h parallel.h parallel_algebra.h parallel_bin_sorter.h parallel_conversion_utils.h parallel_ghost_sync.h parallel_hilbert.h parallel_histogram.h parallel_implementation.h parallel_sort.h threads.h threads_allocators.h centroid_partitioner.h hilbert_sfc_partitioner.h linear_partitioner.h metis_partitioner.h morton_sfc_partitioner.h parmetis_partitioner.h partitioner.h sfc_partitioner.h diff_physics.h diff_qoi.h fem_physics.h quadrature.h quadrature_clough.h quadrature_conical.h quadrature_gauss.h quadrature_gm.h quadrature_grid.h quadrature_jacobi.h quadrature_monomial.h quadrature_rules.h quadrature_simpson.h quadrature_trap.h derived_rb_construction.h derived_rb_evaluation.h rb_assembly_expansion.h rb_construction.h rb_construction_base.h rb_eim_assembly.h rb_eim_construction.h rb_eim_evaluation.h rb_eim_theta.h rb_evaluation.h rb_parameters.h rb_parametrized.h rb_parametrized_function.h rb_scm_construction.h rb_scm_evaluation.h rb_temporal_discretization.h rb_theta.h rb_theta_expansion.h transient_rb_assembly_expansion.h transient_rb_construction.h transient_rb_evaluation.h transient_rb_theta_expansion.h direct_solution_transfer.h dtk_adapter.h dtk_evaluator.h dtk_solution_transfer.h meshfree_interpolation.h meshfree_solution_transfer.h meshfunction_solution_transfer.h solution_transfer.h adaptive_time_solver.h diff_solver.h eigen_solver.h eigen_time_solver.h euler2_solver.h euler_solver.h laspack_linear_solver.h linear.h linear_solver.h memory_solution_history.h newton_solver.h no_solution_history.h nonlinear_solver.h petsc_diff_solver.h petsc_dm_nonlinear_solver.h petsc_linear_solver.h petsc_nonlinear_solver.h petscdmlibmesh.h slepc_eigen_solver.h slepc_macro.h solution_history.h solver.h steady_solver.h time_solver.h trilinos_aztec_linear_solver.h trilinos_nox_nonlinear_solver.h twostep_time_solver.h unsteady_solver.h condensed_eigen_system.h continuation_system.h diff_context.h diff_system.h eigen_system.h elem_assembly.h equation_systems.h explicit_system.h fem_context.h fem_system.h frequency_system.h implicit_system.h linear_implicit_system.h newmark_system.h nonlinear_implicit_system.h parameter_vector.h qoi_set.h sensitivity_data.h steady_system.h system.h system_norm.h system_subset.h system_subset_by_subdomain.h transient_system.h compare_types.h error_vector.h hashword.h ignore_warnings.h location_maps.h mapvector.h null_output_iterator.h number_lookups.h ostream_proxy.h parameters.h perf_log.h perfmon.h plt_loader.h point_locator_base.h point_locator_list.h point_locator_tree.h pool_allocator.h restore_warnings.h statistics.h string_to_enum.h timestamp.h tree.h tree_base.h tree_node.h utility.h xdr_cxx.h parallel_communicator_specializations +BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h dof_object.h factory.h getpot.h id_types.h libmesh.h libmesh_C_isnan.h libmesh_augment_std_namespace.h libmesh_base.h libmesh_common.h libmesh_documentation.h libmesh_exceptions.h libmesh_logging.h libmesh_version.h multi_predicates.h periodic_boundaries.h periodic_boundary.h periodic_boundary_base.h print_trace.h reference_counted_object.h reference_counter.h single_predicates.h sparsity_pattern.h variable.h variant_filter_iterator.h enum_eigen_solver_type.h enum_elem_quality.h enum_elem_type.h enum_fe_family.h enum_inf_map_type.h enum_io_package.h enum_norm_type.h enum_order.h enum_parallel_type.h enum_point_locator_type.h enum_preconditioner_type.h enum_quadrature_type.h enum_solver_package.h enum_solver_type.h enum_subset_solve_mode.h enum_xdr_mode.h adjoint_refinement_estimator.h adjoint_residual_error_estimator.h discontinuity_measure.h error_estimator.h exact_error_estimator.h exact_solution.h fourth_error_estimators.h hp_coarsentest.h hp_selector.h hp_singular.h jump_error_estimator.h kelly_error_estimator.h patch_recovery_error_estimator.h uniform_refinement_estimator.h weighted_patch_recovery_error_estimator.h fe.h fe_abstract.h fe_base.h fe_compute_data.h fe_interface.h fe_macro.h fe_map.h fe_transformation_base.h fe_type.h fe_xyz_map.h h1_fe_transformation.h hcurl_fe_transformation.h inf_fe.h inf_fe_instantiate_1D.h inf_fe_instantiate_2D.h inf_fe_instantiate_3D.h inf_fe_macro.h cell.h cell_hex.h cell_hex20.h cell_hex27.h cell_hex8.h cell_inf.h cell_inf_hex.h cell_inf_hex16.h cell_inf_hex18.h cell_inf_hex8.h cell_inf_prism.h cell_inf_prism12.h cell_inf_prism6.h cell_prism.h cell_prism15.h cell_prism18.h cell_prism6.h cell_pyramid.h cell_pyramid5.h cell_tet.h cell_tet10.h cell_tet4.h edge.h edge_edge2.h edge_edge3.h edge_edge4.h edge_inf_edge2.h elem.h elem_quality.h elem_range.h elem_type.h face.h face_inf_quad.h face_inf_quad4.h face_inf_quad6.h face_quad.h face_quad4.h face_quad8.h face_quad9.h face_tri.h face_tri3.h face_tri6.h node.h node_elem.h node_range.h plane.h point.h remote_elem.h side.h sphere.h stored_range.h surface.h abaqus_io.h boundary_info.h boundary_mesh.h diva_io.h ensight_io.h exodusII_io.h exodusII_io_helper.h fro_io.h gmsh_io.h gmv_io.h gnuplot_io.h inf_elem_builder.h legacy_xdr_io.h matlab_io.h medit_io.h mesh.h mesh_base.h mesh_communication.h mesh_data.h mesh_function.h mesh_generation.h mesh_input.h mesh_inserter_iterator.h mesh_modification.h mesh_output.h mesh_refinement.h mesh_serializer.h mesh_smoother.h mesh_smoother_laplace.h mesh_smoother_vsmoother.h mesh_tetgen_interface.h mesh_tetgen_wrapper.h mesh_tools.h mesh_triangle_holes.h mesh_triangle_interface.h mesh_triangle_wrapper.h nemesis_io.h nemesis_io_helper.h off_io.h parallel_mesh.h patch.h postscript_io.h serial_mesh.h tecplot_io.h tetgen_io.h ucd_io.h unstructured_mesh.h unv_io.h vtk_io.h xdr_head.h xdr_io.h xdr_mesh.h xdr_mgf.h xdr_mhead.h xdr_shead.h xdr_soln.h analytic_function.h const_fem_function.h const_function.h coupling_matrix.h dense_matrix.h dense_matrix_base.h dense_submatrix.h dense_subvector.h dense_vector.h dense_vector_base.h distributed_vector.h eigen_preconditioner.h eigen_sparse_core.h eigen_sparse_matrix.h eigen_sparse_vector.h fem_function_base.h function_base.h laspack_matrix.h laspack_vector.h numeric_vector.h parsed_function.h petsc_macro.h petsc_matrix.h petsc_preconditioner.h petsc_vector.h preconditioner.h raw_accessor.h refinement_selector.h shell_matrix.h sparse_matrix.h sparse_shell_matrix.h sum_shell_matrix.h tensor_shell_matrix.h tensor_tools.h tensor_value.h trilinos_epetra_matrix.h trilinos_epetra_vector.h trilinos_preconditioner.h type_n_tensor.h type_tensor.h type_vector.h vector_value.h wrapped_function.h zero_function.h parallel.h parallel_algebra.h parallel_bin_sorter.h parallel_conversion_utils.h parallel_ghost_sync.h parallel_hilbert.h parallel_histogram.h parallel_implementation.h parallel_sort.h threads.h threads_allocators.h centroid_partitioner.h hilbert_sfc_partitioner.h linear_partitioner.h metis_partitioner.h morton_sfc_partitioner.h parmetis_partitioner.h partitioner.h sfc_partitioner.h diff_physics.h diff_qoi.h fem_physics.h quadrature.h quadrature_clough.h quadrature_conical.h quadrature_gauss.h quadrature_gm.h quadrature_grid.h quadrature_jacobi.h quadrature_monomial.h quadrature_rules.h quadrature_simpson.h quadrature_trap.h derived_rb_construction.h derived_rb_evaluation.h rb_assembly_expansion.h rb_construction.h rb_construction_base.h rb_eim_assembly.h rb_eim_construction.h rb_eim_evaluation.h rb_eim_theta.h rb_evaluation.h rb_parameters.h rb_parametrized.h rb_parametrized_function.h rb_scm_construction.h rb_scm_evaluation.h rb_temporal_discretization.h rb_theta.h rb_theta_expansion.h transient_rb_assembly_expansion.h transient_rb_construction.h transient_rb_evaluation.h transient_rb_theta_expansion.h direct_solution_transfer.h dtk_adapter.h dtk_evaluator.h dtk_solution_transfer.h meshfree_interpolation.h meshfree_solution_transfer.h meshfunction_solution_transfer.h solution_transfer.h adaptive_time_solver.h diff_solver.h eigen_solver.h eigen_sparse_linear_solver.h eigen_time_solver.h euler2_solver.h euler_solver.h laspack_linear_solver.h linear.h linear_solver.h memory_solution_history.h newton_solver.h no_solution_history.h nonlinear_solver.h petsc_diff_solver.h petsc_dm_nonlinear_solver.h petsc_linear_solver.h petsc_nonlinear_solver.h petscdmlibmesh.h slepc_eigen_solver.h slepc_macro.h solution_history.h solver.h steady_solver.h time_solver.h trilinos_aztec_linear_solver.h trilinos_nox_nonlinear_solver.h twostep_time_solver.h unsteady_solver.h condensed_eigen_system.h continuation_system.h diff_context.h diff_system.h eigen_system.h elem_assembly.h equation_systems.h explicit_system.h fem_context.h fem_system.h frequency_system.h implicit_system.h linear_implicit_system.h newmark_system.h nonlinear_implicit_system.h parameter_vector.h qoi_set.h sensitivity_data.h steady_system.h system.h system_norm.h system_subset.h system_subset_by_subdomain.h transient_system.h compare_types.h error_vector.h hashword.h ignore_warnings.h location_maps.h mapvector.h null_output_iterator.h number_lookups.h ostream_proxy.h parameters.h perf_log.h perfmon.h plt_loader.h point_locator_base.h point_locator_list.h point_locator_tree.h pool_allocator.h restore_warnings.h statistics.h string_to_enum.h timestamp.h tree.h tree_base.h tree_node.h utility.h xdr_cxx.h parallel_communicator_specializations DISTCLEANFILES = $(BUILT_SOURCES) @@ -669,6 +669,18 @@ dense_vector_base.h: $(top_srcdir)/include/numerics/dense_vector_base.h distributed_vector.h: $(top_srcdir)/include/numerics/distributed_vector.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ +eigen_preconditioner.h: $(top_srcdir)/include/numerics/eigen_preconditioner.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + +eigen_sparse_core.h: $(top_srcdir)/include/numerics/eigen_sparse_core.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + +eigen_sparse_matrix.h: $(top_srcdir)/include/numerics/eigen_sparse_matrix.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + +eigen_sparse_vector.h: $(top_srcdir)/include/numerics/eigen_sparse_vector.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + fem_function_base.h: $(top_srcdir)/include/numerics/fem_function_base.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ @@ -954,6 +966,9 @@ diff_solver.h: $(top_srcdir)/include/solvers/diff_solver.h eigen_solver.h: $(top_srcdir)/include/solvers/eigen_solver.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ +eigen_sparse_linear_solver.h: $(top_srcdir)/include/solvers/eigen_sparse_linear_solver.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + eigen_time_solver.h: $(top_srcdir)/include/solvers/eigen_time_solver.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index 6a1852e4979..8484157c55c 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -473,7 +473,9 @@ BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h \ const_fem_function.h const_function.h coupling_matrix.h \ dense_matrix.h dense_matrix_base.h dense_submatrix.h \ dense_subvector.h dense_vector.h dense_vector_base.h \ - distributed_vector.h fem_function_base.h function_base.h \ + distributed_vector.h eigen_preconditioner.h \ + eigen_sparse_core.h eigen_sparse_matrix.h \ + eigen_sparse_vector.h fem_function_base.h function_base.h \ laspack_matrix.h laspack_vector.h numeric_vector.h \ parsed_function.h petsc_macro.h petsc_matrix.h \ petsc_preconditioner.h petsc_vector.h preconditioner.h \ @@ -509,34 +511,35 @@ BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h \ meshfree_interpolation.h meshfree_solution_transfer.h \ meshfunction_solution_transfer.h solution_transfer.h \ adaptive_time_solver.h diff_solver.h eigen_solver.h \ - eigen_time_solver.h euler2_solver.h euler_solver.h \ - laspack_linear_solver.h linear.h linear_solver.h \ - memory_solution_history.h newton_solver.h \ - no_solution_history.h nonlinear_solver.h petsc_diff_solver.h \ - petsc_dm_nonlinear_solver.h petsc_linear_solver.h \ - petsc_nonlinear_solver.h petscdmlibmesh.h slepc_eigen_solver.h \ - slepc_macro.h solution_history.h solver.h steady_solver.h \ - time_solver.h trilinos_aztec_linear_solver.h \ - trilinos_nox_nonlinear_solver.h twostep_time_solver.h \ - unsteady_solver.h condensed_eigen_system.h \ - continuation_system.h diff_context.h diff_system.h \ - eigen_system.h elem_assembly.h equation_systems.h \ - explicit_system.h fem_context.h fem_system.h \ - frequency_system.h implicit_system.h linear_implicit_system.h \ - newmark_system.h nonlinear_implicit_system.h \ - parameter_vector.h qoi_set.h sensitivity_data.h \ - steady_system.h system.h system_norm.h system_subset.h \ - system_subset_by_subdomain.h transient_system.h \ - compare_types.h error_vector.h hashword.h ignore_warnings.h \ - location_maps.h mapvector.h null_output_iterator.h \ - number_lookups.h ostream_proxy.h parameters.h perf_log.h \ - perfmon.h plt_loader.h point_locator_base.h \ - point_locator_list.h point_locator_tree.h pool_allocator.h \ - restore_warnings.h statistics.h string_to_enum.h timestamp.h \ - tree.h tree_base.h tree_node.h utility.h xdr_cxx.h \ - parallel_communicator_specializations $(am__append_1) \ - $(am__append_3) $(am__append_5) $(am__append_7) \ - $(am__append_9) $(am__append_11) libmesh_config.h + eigen_sparse_linear_solver.h eigen_time_solver.h \ + euler2_solver.h euler_solver.h laspack_linear_solver.h \ + linear.h linear_solver.h memory_solution_history.h \ + newton_solver.h no_solution_history.h nonlinear_solver.h \ + petsc_diff_solver.h petsc_dm_nonlinear_solver.h \ + petsc_linear_solver.h petsc_nonlinear_solver.h \ + petscdmlibmesh.h slepc_eigen_solver.h slepc_macro.h \ + solution_history.h solver.h steady_solver.h time_solver.h \ + trilinos_aztec_linear_solver.h trilinos_nox_nonlinear_solver.h \ + twostep_time_solver.h unsteady_solver.h \ + condensed_eigen_system.h continuation_system.h diff_context.h \ + diff_system.h eigen_system.h elem_assembly.h \ + equation_systems.h explicit_system.h fem_context.h \ + fem_system.h frequency_system.h implicit_system.h \ + linear_implicit_system.h newmark_system.h \ + nonlinear_implicit_system.h parameter_vector.h qoi_set.h \ + sensitivity_data.h steady_system.h system.h system_norm.h \ + system_subset.h system_subset_by_subdomain.h \ + transient_system.h compare_types.h error_vector.h hashword.h \ + ignore_warnings.h location_maps.h mapvector.h \ + null_output_iterator.h number_lookups.h ostream_proxy.h \ + parameters.h perf_log.h perfmon.h plt_loader.h \ + point_locator_base.h point_locator_list.h point_locator_tree.h \ + pool_allocator.h restore_warnings.h statistics.h \ + string_to_enum.h timestamp.h tree.h tree_base.h tree_node.h \ + utility.h xdr_cxx.h parallel_communicator_specializations \ + $(am__append_1) $(am__append_3) $(am__append_5) \ + $(am__append_7) $(am__append_9) $(am__append_11) \ + libmesh_config.h DISTCLEANFILES = $(BUILT_SOURCES) $(am__append_2) $(am__append_4) \ $(am__append_6) $(am__append_8) $(am__append_10) \ $(am__append_12) libmesh_config.h @@ -1350,6 +1353,18 @@ dense_vector_base.h: $(top_srcdir)/include/numerics/dense_vector_base.h distributed_vector.h: $(top_srcdir)/include/numerics/distributed_vector.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ +eigen_preconditioner.h: $(top_srcdir)/include/numerics/eigen_preconditioner.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + +eigen_sparse_core.h: $(top_srcdir)/include/numerics/eigen_sparse_core.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + +eigen_sparse_matrix.h: $(top_srcdir)/include/numerics/eigen_sparse_matrix.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + +eigen_sparse_vector.h: $(top_srcdir)/include/numerics/eigen_sparse_vector.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + fem_function_base.h: $(top_srcdir)/include/numerics/fem_function_base.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ @@ -1635,6 +1650,9 @@ diff_solver.h: $(top_srcdir)/include/solvers/diff_solver.h eigen_solver.h: $(top_srcdir)/include/solvers/eigen_solver.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ +eigen_sparse_linear_solver.h: $(top_srcdir)/include/solvers/eigen_sparse_linear_solver.h + $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ + eigen_time_solver.h: $(top_srcdir)/include/solvers/eigen_time_solver.h $(AM_V_GEN)rm -f $@ && $(LN_S) $< $@ diff --git a/include/numerics/eigen_preconditioner.h b/include/numerics/eigen_preconditioner.h new file mode 100644 index 00000000000..432b9b9ef29 --- /dev/null +++ b/include/numerics/eigen_preconditioner.h @@ -0,0 +1,113 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + + + +#ifndef LIBMESH_EIGEN_PRECONDITIONER_H +#define LIBMESH_EIGEN_PRECONDITIONER_H + +#include "libmesh/libmesh_config.h" + +#ifdef LIBMESH_HAVE_EIGEN + +// Local includes +#include "libmesh/eigen_sparse_core.h" +#include "libmesh/preconditioner.h" +#include "libmesh/libmesh_common.h" +#include "libmesh/enum_solver_package.h" +#include "libmesh/enum_preconditioner_type.h" +#include "libmesh/reference_counted_object.h" +#include "libmesh/libmesh.h" + +// Eigen includes + +// C++ includes + +namespace libMesh +{ + +// forward declarations +template class AutoPtr; +template class SparseMatrix; +template class NumericVector; +template class ShellMatrix; + +/** + * This class provides an interface to the suite of preconditioners available + * from Eigen. + * + * @author Benjamin Kirk, 2013. + */ + +template +class EigenPreconditioner : public Preconditioner +{ +public: + + /** + * Constructor. Initializes EigenPreconditioner data structures + */ + EigenPreconditioner (); + + /** + * Destructor. + */ + virtual ~EigenPreconditioner (); + + /** + * Computes the preconditioned vector "y" based on input "x". + * Usually by solving Py=x to get the action of P^-1 x. + */ + virtual void apply(const NumericVector & x, NumericVector & y); + + /** + * Release all memory and clear data structures. + */ + virtual void clear () {} + + /** + * Initialize data structures if not done so already. + */ + virtual void init (); + +protected: +}; + + + + +/*----------------------- inline functions ----------------------------------*/ +template +inline +EigenPreconditioner::EigenPreconditioner () : + Preconditioner() +{ +} + + + +template +inline +EigenPreconditioner::~EigenPreconditioner () +{ + this->clear (); +} + +} // namespace libMesh + +#endif // #ifdef LIBMESH_HAVE_EIGEN +#endif // LIBMESH_EIGEN_PRECONDITIONER_H diff --git a/include/numerics/eigen_sparse_core.h b/include/numerics/eigen_sparse_core.h new file mode 100644 index 00000000000..b20378bca01 --- /dev/null +++ b/include/numerics/eigen_sparse_core.h @@ -0,0 +1,45 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + + + + +#ifndef LIBMESH_EIGEN_SPARSE_CORE_H +#define LIBMESH_EIGEN_SPARSE_CORE_H + + + +#include "libmesh/libmesh_common.h" + +#ifdef LIBMESH_HAVE_EIGEN + +// Local includes + +// C++ includes + +// Eigen includes + +namespace libMesh +{ + + + +} // namespace libMesh + + +#endif // #ifdef LIBMESH_HAVE_EIGEN +#endif // LIBMESH_EIGEN_SPARSE_CORE_H diff --git a/include/numerics/eigen_sparse_matrix.h b/include/numerics/eigen_sparse_matrix.h new file mode 100644 index 00000000000..9acbc8150be --- /dev/null +++ b/include/numerics/eigen_sparse_matrix.h @@ -0,0 +1,304 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + + + +#ifndef LIBMESH_EIGEN_SPARSE_MATRIX_H +#define LIBMESH_EIGEN_SPARSE_MATRIX_H + +#include "libmesh/libmesh_config.h" + +#ifdef LIBMESH_HAVE_EIGEN + +// Local includes +#include "libmesh/sparse_matrix.h" +#include "libmesh/eigen_sparse_core.h" + +// Eigen includes + +// C++ includes +#include +#include + +namespace libMesh +{ + + + +// Forward declarations +template class DenseMatrix; +template class EigenSparseVector; +template class EigenSparseLinearSolver; + + + +/** + * The EigenSparseMatrix class wraps a sparse matrix object from the Eigen + * library. + * + * @author Benjamin S. Kirk, 2013 + */ + +template +class EigenSparseMatrix : public SparseMatrix +{ + +public: + /** + * Constructor; initializes the matrix to + * be empty, without any structure, i.e. + * the matrix is not usable at all. This + * constructor is therefore only useful + * for matrices which are members of a + * class. All other matrices should be + * created at a point in the data flow + * where all necessary information is + * available. + * + * You have to initialize + * the matrix before usage with + * \p init(...). + */ + EigenSparseMatrix (); + + /** + * Destructor. Free all memory, but do not + * release the memory of the sparsity + * structure. + */ + ~EigenSparseMatrix (); + + /** + * The \p EigenSparseMatrix needs the full sparsity pattern. + */ + bool need_full_sparsity_pattern() const + { return true; } + + /** + * Updates the matrix sparsity pattern. This will + * tell the underlying matrix storage scheme how + * to map the \f$ (i,j) \f$ elements. + */ + void update_sparsity_pattern (const SparsityPattern::Graph &); + + /** + * Initialize a Eigen matrix that is of global + * dimension \f$ m \times n \f$ with local dimensions + * \f$ m_l \times n_l \f$. \p nnz is the number of on-processor + * nonzeros per row (defaults to 30). + * \p noz is the number of on-processor + * nonzeros per row (defaults to 30). + */ + void init (const numeric_index_type m, + const numeric_index_type n, + const numeric_index_type m_l, + const numeric_index_type n_l, + const numeric_index_type nnz=30, + const numeric_index_type noz=10); + + /** + * Initialize using sparsity structure computed by \p dof_map. + */ + void init (); + + /** + * Release all memory and return + * to a state just like after + * having called the default + * constructor. + */ + void clear (); + + /** + * Set all entries to 0. + */ + void zero (); + + /** + * Close the matrix. Dummy routine. After calling + * this method \p closed() is true and the matrix can + * be used in computations. + */ + void close () const { const_cast*>(this)->_closed = true; } + + /** + * @returns \p m, the row-dimension of + * the matrix where the marix is \f$ M \times N \f$. + */ + numeric_index_type m () const; + + /** + * @returns \p n, the column-dimension of + * the matrix where the marix is \f$ M \times N \f$. + */ + numeric_index_type n () const; + + /** + * return row_start, the index of the first + * matrix row stored on this processor + */ + numeric_index_type row_start () const; + + /** + * return row_stop, the index of the last + * matrix row (+1) stored on this processor + */ + numeric_index_type row_stop () const; + + /** + * Set the element \p (i,j) to \p value. + * Throws an error if the entry does + * not exist. Still, it is allowed to store + * zero values in non-existent fields. + */ + void set (const numeric_index_type i, + const numeric_index_type j, + const T value); + + /** + * Add \p value to the element + * \p (i,j). Throws an error if + * the entry does not + * exist. Still, it is allowed to + * store zero values in + * non-existent fields. + */ + void add (const numeric_index_type i, + const numeric_index_type j, + const T value); + + /** + * Add the full matrix to the + * Eigen matrix. This is useful + * for adding an element matrix + * at assembly time + */ + + void add_matrix (const DenseMatrix &dm, + const std::vector &rows, + const std::vector &cols); + + /** + * Same, but assumes the row and column maps are the same. + * Thus the matrix \p dm must be square. + */ + void add_matrix (const DenseMatrix &dm, + const std::vector &dof_indices); + + /** + * Add a Sparse matrix \p X, scaled with \p a, to \p this, + * stores the result in \p this: \f$\texttt{this} += a*X \f$. + * \p LASPACK does not provide a true \p axpy for matrices, + * so a hand-coded version with hopefully acceptable performance + * is provided. + */ + void add (const T a, SparseMatrix &X); + + /** + * Return the value of the entry + * \p (i,j). This may be an + * expensive operation, and you + * should always be careful where + * you call this function. + */ + T operator () (const numeric_index_type i, + const numeric_index_type j) const; + + /** + * Return the l1-norm of the matrix, that is + * \f$|M|_1=max_{all columns j}\sum_{all + * rows i} |M_ij|\f$, + * (max. sum of columns). + * This is the + * natural matrix norm that is compatible + * to the l1-norm for vectors, i.e. + * \f$|Mv|_1\leq |M|_1 |v|_1\f$. + */ + Real l1_norm () const { libmesh_error(); return 0.; } + + /** + * Return the linfty-norm of the + * matrix, that is + * \f$|M|_\infty=max_{all rows i}\sum_{all + * columns j} |M_ij|\f$, + * (max. sum of rows). + * This is the + * natural matrix norm that is compatible + * to the linfty-norm of vectors, i.e. + * \f$|Mv|_\infty \leq |M|_\infty |v|_\infty\f$. + */ + Real linfty_norm () const { libmesh_error(); return 0.; } + + /** + * see if Eigen matrix has been closed + * and fully assembled yet + */ + bool closed() const { return _closed; } + + /** + * Print the contents of the matrix, by default to libMesh::out. + * Currently identical to \p print(). + */ + void print_personal(std::ostream& os=libMesh::out) const { this->print(os); } + + /** + * Copies the diagonal part of the matrix into \p dest. + */ + virtual void get_diagonal (NumericVector& dest) const; + + /** + * Copies the transpose of the matrix into \p dest, which may be + * *this. + */ + virtual void get_transpose (SparseMatrix& dest) const; + +private: + + /** + * @returns the position in the compressed row + * storage scheme of the \f$ (i,j) \f$ element. + */ + numeric_index_type pos (const numeric_index_type i, + const numeric_index_type j) const; + + /** + * The compressed row indices. + */ + std::vector _csr; + + /** + * The start of each row in the compressed + * row index data structure. + */ + std::vector::const_iterator> _row_start; + + /** + * Flag indicating if the matrix has been closed yet. + */ + bool _closed; + + /** + * Make other Eigen datatypes friends + */ + friend class EigenSparseVector; + friend class EigenSparseLinearSolver; +}; + +} // namespace libMesh + +#endif // #ifdef LIBMESH_HAVE_EIGEN +#endif // #ifdef LIBMESH_EIGEN_SPARSE_MATRIX_H diff --git a/include/numerics/eigen_sparse_vector.h b/include/numerics/eigen_sparse_vector.h new file mode 100644 index 00000000000..a4a1ee667b3 --- /dev/null +++ b/include/numerics/eigen_sparse_vector.h @@ -0,0 +1,777 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + + + + +#ifndef LIBMESH_EIGEN_SPARSE_VECTOR_H +#define LIBMESH_EIGEN_SPARSE_VECTOR_H + + + +#include "libmesh/libmesh_common.h" + +#ifdef LIBMESH_HAVE_EIGEN + +// Local includes +#include "libmesh/eigen_sparse_core.h" +#include "libmesh/numeric_vector.h" + +// C++ includes + +// Eigen includes + +namespace libMesh +{ + + +// Forward declarations +template class EigenSparseLinearSolver; +template class SparseMatrix; + + +/** + * Eigen vector. Provides a nice interface to the + * Eigen C-based data structures for serial vectors. + * + * @author Benjamin S. Kirk, 2002 + */ + +template +class EigenSparseVector : public NumericVector +{ + public: + + /** + * Dummy-Constructor. Dimension=0 + */ + explicit + EigenSparseVector (const ParallelType = AUTOMATIC); + + /** + * Constructor. Set dimension to \p n and initialize all elements with zero. + */ + explicit + EigenSparseVector (const numeric_index_type n, + const ParallelType = AUTOMATIC); + + /** + * Constructor. Set local dimension to \p n_local, the global dimension + * to \p n, and initialize all elements with zero. + */ + EigenSparseVector (const numeric_index_type n, + const numeric_index_type n_local, + const ParallelType = AUTOMATIC); + + /** + * Constructor. Set local dimension to \p n_local, the global + * dimension to \p n, but additionally reserve memory for the + * indices specified by the \p ghost argument. + */ + EigenSparseVector (const numeric_index_type N, + const numeric_index_type n_local, + const std::vector& ghost, + const ParallelType = AUTOMATIC); + + /** + * Destructor, deallocates memory. Made virtual to allow + * for derived classes to behave properly. + */ + ~EigenSparseVector (); + + /** + * Call the assemble functions + */ + void close (); + + /** + * @returns the \p EigenSparseVector to a pristine state. + */ + void clear (); + + /** + * Set all entries to zero. Equivalent to \p v = 0, but more obvious and + * faster. + */ + void zero (); + + /** + * Creates a vector which has the same type, size and partitioning + * as this vector, but whose data is all zero. Returns it in an \p + * AutoPtr. + */ + virtual AutoPtr > zero_clone () const; + + /** + * Creates a copy of this vector and returns it in an \p AutoPtr. + */ + AutoPtr > clone () const; + + /** + * Change the dimension of the vector to \p N. The reserved memory for + * this vector remains unchanged if possible, to make things faster, but + * this may waste some memory, so take this in the back of your head. + * However, if \p N==0 all memory is freed, i.e. if you want to resize + * the vector and release the memory not needed, you have to first call + * \p init(0) and then \p init(N). This cited behaviour is analogous + * to that of the STL containers. + * + * On \p fast==false, the vector is filled by + * zeros. + */ + + void init (const numeric_index_type N, + const numeric_index_type n_local, + const bool fast=false, + const ParallelType ptype=AUTOMATIC); + + /** + * call init with n_local = N, + */ + void init (const numeric_index_type N, + const bool fast=false, + const ParallelType ptype=AUTOMATIC); + + /** + * Create a vector that holds tha local indices plus those specified + * in the \p ghost argument. + */ + void init (const numeric_index_type /*N*/, + const numeric_index_type /*n_local*/, + const std::vector& /*ghost*/, + const bool /*fast*/ = false, + const ParallelType = AUTOMATIC); + + /** + * Creates a vector that has the same dimension and storage type as + * \p other, including ghost dofs. + */ + virtual void init (const NumericVector& other, + const bool fast = false); + + /** + * \f$U(0-N) = s\f$: fill all components. + */ + NumericVector & operator= (const T s); + + /** + * \f$U = V\f$: copy all components. + */ + NumericVector & operator= (const NumericVector &V); + + /** + * \f$U = V\f$: copy all components. + */ + EigenSparseVector & operator= (const EigenSparseVector &V); + + /** + * \f$U = V\f$: copy all components. + */ + NumericVector & operator= (const std::vector &v); + + /** + * @returns the minimum element in the vector. + * In case of complex numbers, this returns the minimum + * Real part. + */ + Real min () const; + + /** + * @returns the maximum element in the vector. + * In case of complex numbers, this returns the maximum + * Real part. + */ + Real max () const; + + /** + * @returns the sum of values in a vector + */ + T sum () const; + + /** + * @returns the \f$l_1\f$-norm of the vector, i.e. + * the sum of the absolute values. + */ + Real l1_norm () const; + + /** + * @returns the \f$l_2\f$-norm of the vector, i.e. + * the square root of the sum of the + * squares of the elements. + */ + Real l2_norm () const; + + /** + * @returns the maximum absolute value of the + * elements of this vector, which is the + * \f$l_\infty\f$-norm of a vector. + */ + Real linfty_norm () const; + + /** + * @returns dimension of the vector. This + * function was formerly called \p n(), but + * was renamed to get the \p EigenSparseVector class + * closer to the C++ standard library's + * \p std::vector container. + */ + numeric_index_type size () const; + + /** + * @returns the local size of the vector + * (index_stop-index_start) + */ + numeric_index_type local_size() const; + + /** + * @returns the index of the first vector element + * actually stored on this processor + */ + numeric_index_type first_local_index() const; + + /** + * @returns the index of the last vector element + * actually stored on this processor + */ + numeric_index_type last_local_index() const; + + /** + * Access components, returns \p U(i). + */ + T operator() (const numeric_index_type i) const; + + /** + * Addition operator. + * Fast equivalent to \p U.add(1, V). + */ + NumericVector & operator += (const NumericVector &V); + + /** + * Subtraction operator. + * Fast equivalent to \p U.add(-1, V). + */ + NumericVector & operator -= (const NumericVector &V); + + /** + * Replace each entry v_i of this vector by its reciprocal, 1/v_i. + */ + virtual void reciprocal(); + + /** + * v(i) = value + */ + void set (const numeric_index_type i, const T value); + + /** + * v(i) += value + */ + void add (const numeric_index_type i, const T value); + + /** + * \f$U(0-LIBMESH_DIM)+=s\f$. + * Addition of \p s to all components. Note + * that \p s is a scalar and not a vector. + */ + void add (const T s); + + /** + * \f$ U+=V \f$. + * Simple vector addition, equal to the + * \p operator +=. + */ + void add (const NumericVector& V); + + /** + * \f$ U+=a*V \f$. + * Simple vector addition, equal to the + * \p operator +=. + */ + void add (const T a, const NumericVector& v); + + /** + * \f$ U+=v \f$ where v is a std::vector + * and you + * want to specify WHERE to add it + */ + void add_vector (const std::vector& v, + const std::vector& dof_indices); + + /** + * \f$ U+=V \f$ where U and V are type + * NumericVector and you + * want to specify WHERE to add + * the NumericVector V + */ + void add_vector (const NumericVector& V, + const std::vector& dof_indices); + + /** + * \f$U+=A*V\f$, add the product of a \p SparseMatrix \p A + * and a \p NumericVector \p V to \p this, where \p this=U. + */ + void add_vector (const NumericVector &, + const SparseMatrix &); + + /** + * \f$U+=V \f$ where U and V are type + * DenseVector and you + * want to specify WHERE to add + * the DenseVector V + */ + void add_vector (const DenseVector& V, + const std::vector& dof_indices); + + /** + * \f$U+=A^T*V\f$, add the product of the transpose of a \p SparseMatrix \p A_trans + * and a \p NumericVector \p V to \p this, where \p this=U. + */ + void add_vector_transpose (const NumericVector &, + const SparseMatrix &); + + /** + * \f$ U=v \f$ where v is a DenseVector + * and you want to specify WHERE to insert it + */ + virtual void insert (const std::vector& v, + const std::vector& dof_indices); + + /** + * \f$U=V\f$, where U and V are type + * NumericVector and you + * want to specify WHERE to insert + * the NumericVector V + */ + virtual void insert (const NumericVector& V, + const std::vector& dof_indices); + + /** + * \f$ U=V \f$ where V is type + * DenseVector and you + * want to specify WHERE to insert it + */ + virtual void insert (const DenseVector& V, + const std::vector& dof_indices); + + /** + * \f$ U=V \f$ where V is type + * DenseSubVector and you + * want to specify WHERE to insert it + */ + virtual void insert (const DenseSubVector& V, + const std::vector& dof_indices); + + /** + * Scale each element of the + * vector by the given factor. + */ + void scale (const T factor); + + /** + * v = abs(v)... that is, each entry in v is replaced + * by its absolute value. + */ + virtual void abs(); + + /** + * Computes the dot product, p = U.V + */ + virtual T dot(const NumericVector& V) const; + + /** + * Creates a copy of the global vector in the + * local vector \p v_local. + */ + void localize (std::vector& v_local) const; + + /** + * Same, but fills a \p NumericVector instead of + * a \p std::vector. + */ + void localize (NumericVector& v_local) const; + + /** + * Creates a local vector \p v_local containing + * only information relevant to this processor, as + * defined by the \p send_list. + */ + void localize (NumericVector& v_local, + const std::vector& send_list) const; + + /** + * Updates a local vector with selected values from neighboring + * processors, as defined by \p send_list. + */ + void localize (const numeric_index_type first_local_idx, + const numeric_index_type last_local_idx, + const std::vector& send_list); + + + /** + * Creates a local copy of the global vector in + * \p v_local only on processor \p proc_id. By + * default the data is sent to processor 0. This method + * is useful for outputting data from one processor. + */ + void localize_to_one (std::vector& v_local, + const processor_id_type proc_id=0) const; + + /** + * Computes the pointwise (i.e. component-wise) product of \p vec1 + * and \p vec2 and stores the result in \p *this. + */ + virtual void pointwise_mult (const NumericVector& vec1, + const NumericVector& vec2); + + /** + * Swaps the raw QVector contents. + */ + virtual void swap (NumericVector &v); + + private: + + /** + * Make other Eigen datatypes friends + */ + friend class EigenSparseLinearSolver; +}; + + + +//----------------------- ---------------------------------- +// EigenSparseVector inline methods +template +inline +EigenSparseVector::EigenSparseVector (const ParallelType ptype) +{ + this->_type = ptype; +} + + + +template +inline +EigenSparseVector::EigenSparseVector (const numeric_index_type n, + const ParallelType ptype) +{ + this->init(n, n, false, ptype); +} + + + +template +inline +EigenSparseVector::EigenSparseVector (const numeric_index_type n, + const numeric_index_type n_local, + const ParallelType ptype) +{ + this->init(n, n_local, false, ptype); +} + + + +template +inline +EigenSparseVector::EigenSparseVector (const numeric_index_type N, + const numeric_index_type n_local, + const std::vector& ghost, + const ParallelType ptype) +{ + this->init(N, n_local, ghost, false, ptype); +} + + + +template +inline +EigenSparseVector::~EigenSparseVector () +{ + this->clear (); +} + + + +template +inline +void EigenSparseVector::init (const numeric_index_type n, + const numeric_index_type libmesh_dbg_var(n_local), + const bool fast, + const ParallelType) +{ + libmesh_not_implemented(); +// // Eigen vectors only for serial cases, +// // but can provide a "parallel" vector on one processor. +// libmesh_assert_equal_to (n, n_local); + +// this->_type = SERIAL; + +// // Clear initialized vectors +// if (this->initialized()) +// this->clear(); + +// // create a sequential vector + +// static int cnt = 0; +// char foo[80]; +// std::sprintf(foo, "Vec-%d", cnt++); + +// V_Constr(&_vec, const_cast(foo), n, Normal, _LPTrue); + +// this->_is_initialized = true; +// #ifndef NDEBUG +// this->_is_closed = true; +// #endif + +// // Optionally zero out all components +// if (fast == false) +// this->zero (); + + return; +} + + + +template +inline +void EigenSparseVector::init (const numeric_index_type n, + const bool fast, + const ParallelType ptype) +{ + this->init(n,n,fast,ptype); +} + + +template +inline +void EigenSparseVector::init (const numeric_index_type n, + const numeric_index_type n_local, + const std::vector& libmesh_dbg_var(ghost), + const bool fast, + const ParallelType ptype) +{ + libmesh_assert(ghost.empty()); + this->init(n,n_local,fast,ptype); +} + + + +/* Default implementation for solver packages for which ghosted + vectors are not yet implemented. */ +template +void EigenSparseVector::init (const NumericVector& other, + const bool fast) +{ + this->init(other.size(),other.local_size(),fast,other.type()); +} + + + +template +inline +void EigenSparseVector::close () +{ + libmesh_assert (this->initialized()); + +#ifndef NDEBUG + this->_is_closed = true; +#endif +} + + + +template +inline +void EigenSparseVector::clear () +{ + libmesh_not_implemented(); +// if (this->initialized()) +// { +// V_Destr (&_vec); +// } + +// this->_is_initialized = false; +// #ifndef NDEBUG +// this->_is_closed = false; +// #endif +} + + + +template inline +void EigenSparseVector::zero () +{ + libmesh_not_implemented(); + // libmesh_assert (this->initialized()); + // libmesh_assert (this->closed()); + + // V_SetAllCmp (&_vec, 0.); +} + + + +template +inline +AutoPtr > EigenSparseVector::zero_clone () const +{ + AutoPtr > cloned_vector (new EigenSparseVector); + + cloned_vector->init(*this); + + return cloned_vector; +} + + + +template +inline +AutoPtr > EigenSparseVector::clone () const +{ + AutoPtr > cloned_vector (new EigenSparseVector); + + cloned_vector->init(*this, true); + + *cloned_vector = *this; + + return cloned_vector; +} + + + +template +inline +numeric_index_type EigenSparseVector::size () const +{ + libmesh_not_implemented(); + // libmesh_assert (this->initialized()); + + // return static_cast(V_GetDim(const_cast(&_vec))); +} + + + +template +inline +numeric_index_type EigenSparseVector::local_size () const +{ + libmesh_assert (this->initialized()); + + return this->size(); +} + + + +template +inline +numeric_index_type EigenSparseVector::first_local_index () const +{ + libmesh_assert (this->initialized()); + + return 0; +} + + + +template +inline +numeric_index_type EigenSparseVector::last_local_index () const +{ + libmesh_assert (this->initialized()); + + return this->size(); +} + + + +template +inline +void EigenSparseVector::set (const numeric_index_type i, const T value) +{ + libmesh_not_implemented(); + +// libmesh_assert (this->initialized()); +// libmesh_assert_less (i, this->size()); + +// V_SetCmp (&_vec, i+1, value); + +// #ifndef NDEBUG +// this->_is_closed = false; +// #endif +} + + + +template +inline +void EigenSparseVector::add (const numeric_index_type i, const T value) +{ + libmesh_not_implemented(); + +// libmesh_assert (this->initialized()); +// libmesh_assert_less (i, this->size()); + +// V_AddCmp (&_vec, i+1, value); + +// #ifndef NDEBUG +// this->_is_closed = false; +// #endif +} + + + +template +inline +T EigenSparseVector::operator() (const numeric_index_type i) const +{ + libmesh_not_implemented(); + + // libmesh_assert (this->initialized()); + // libmesh_assert ( ((i >= this->first_local_index()) && + // (i < this->last_local_index())) ); + + + // return static_cast(V_GetCmp(const_cast(&_vec), i+1)); +} + + + +template +inline +void EigenSparseVector::swap (NumericVector &other) +{ + EigenSparseVector& v = libmesh_cast_ref&>(other); + + libmesh_not_implemented(); + // // This is all grossly dependent on Eigen version... + + // std::swap(_vec.Name, v._vec.Name); + // std::swap(_vec.Dim, v._vec.Dim); + // std::swap(_vec.Instance, v._vec.Instance); + // std::swap(_vec.LockLevel, v._vec.LockLevel); + // std::swap(_vec.Multipl, v._vec.Multipl); + // std::swap(_vec.OwnData, v._vec.OwnData); + + // // This should still be O(1), since _vec.Cmp is just a pointer to + // // data on the heap + + // std::swap(_vec.Cmp, v._vec.Cmp); +} + + +} // namespace libMesh + + +#endif // #ifdef LIBMESH_HAVE_EIGEN +#endif // LIBMESH_EIGEN_SPARSE_VECTOR_H diff --git a/include/solvers/eigen_sparse_linear_solver.h b/include/solvers/eigen_sparse_linear_solver.h new file mode 100644 index 00000000000..db0f7ef6af9 --- /dev/null +++ b/include/solvers/eigen_sparse_linear_solver.h @@ -0,0 +1,182 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + + + +#ifndef LIBMESH_EIGEN_SPARSE_LINEAR_SOLVER_H +#define LIBMESH_EIGEN_SPARSE_LINEAR_SOLVER_H + +#include "libmesh/libmesh_common.h" + +#ifdef LIBMESH_HAVE_EIGEN + +// Eigen includes + +// Local includes +#include "libmesh/linear_solver.h" +#include "libmesh/eigen_sparse_vector.h" +#include "libmesh/eigen_sparse_matrix.h" + +// C++ includes + +namespace libMesh +{ + + + +/** + * This class provides an interface to Eigen + * iterative solvers that is compatible with the \p libMesh + * \p LinearSolver<> + * + * @author Benjamin Kirk, 2013 + */ +template +class EigenSparseLinearSolver : public LinearSolver +{ + public: + /** + * Constructor. Initializes Eigen data structures + */ + EigenSparseLinearSolver (); + + /** + * Destructor. + */ + ~EigenSparseLinearSolver (); + + /** + * Release all memory and clear data structures. + */ + void clear (); + + /** + * Initialize data structures if not done so already. + */ + void init (); + + /** + * Call the Eigen solver + */ + std::pair + solve (SparseMatrix &matrix, + NumericVector &solution, + NumericVector &rhs, + const double tol, + const unsigned int m_its); + + /** + * Call the Eigen solver to solve A^T x = b + */ + std::pair + adjoint_solve (SparseMatrix &matrix, + NumericVector &solution, + NumericVector &rhs, + const double tol, + const unsigned int m_its); + + /** + * Call the Eigen solver + */ + std::pair + solve (SparseMatrix &matrix, + SparseMatrix &pc, + NumericVector &solution, + NumericVector &rhs, + const double tol, + const unsigned int m_its); + + /** + * This function solves a system whose matrix is a shell matrix. + */ + std::pair + solve (const ShellMatrix& shell_matrix, + NumericVector& solution_in, + NumericVector& rhs_in, + const double tol, + const unsigned int m_its); + + /** + * This function solves a system whose matrix is a shell matrix, but + * a sparse matrix is used as preconditioning matrix, this allowing + * other preconditioners than JACOBI. + */ + virtual std::pair + solve (const ShellMatrix& shell_matrix, + const SparseMatrix& precond_matrix, + NumericVector& solution_in, + NumericVector& rhs_in, + const double tol, + const unsigned int m_its); + + /** + * Prints a useful message about why the latest linear solve + * con(di)verged. + */ + virtual void print_converged_reason(); + + private: + + /** + * Tells Eigen to use the user-specified preconditioner stored in + * \p _preconditioner_type + */ + void set_eigen_preconditioner_type (); + +}; + + +/*----------------------- functions ----------------------------------*/ +template +inline +EigenSparseLinearSolver::EigenSparseLinearSolver () +{ +} + + + +template +inline +EigenSparseLinearSolver::~EigenSparseLinearSolver () +{ + this->clear (); +} + + + +template +inline +std::pair +EigenSparseLinearSolver::solve (SparseMatrix&, + SparseMatrix&, + NumericVector&, + NumericVector&, + const double, + const unsigned int) +{ + libMesh::err << "ERROR: Eigen does not support a user-supplied preconditioner!" + << std::endl; + libmesh_error(); + + std::pair p; + return p; +} + +} // namespace libMesh + +#endif // #ifdef LIBMESH_HAVE_EIGEN +#endif // LIBMESH_EIGEN_SPARSE_LINEAR_SOLVER_H diff --git a/src/base/libmesh.C b/src/base/libmesh.C index b9aa3d8c531..52ddb6279a6 100644 --- a/src/base/libmesh.C +++ b/src/base/libmesh.C @@ -264,7 +264,9 @@ SolverPackage libMesh::libMeshPrivateData::_solver_package = PETSC_SOLVERS; #elif defined(LIBMESH_HAVE_TRILINOS) // Use Trilinos if PETSc isn't there TRILINOS_SOLVERS; -#elif defined(LIBMESH_HAVE_LASPACK) // Use LASPACK if neither are there +#elif defined(LIBMESH_HAVE_EIGEN) // Use Eigen if neither are there + LASPACK_SOLVERS; +#elif defined(LIBMESH_HAVE_LASPACK) // Use LASPACK as a last resort LASPACK_SOLVERS; #else // No valid linear solver package at compile time INVALID_SOLVER_PACKAGE; @@ -801,6 +803,17 @@ SolverPackage default_solver_package () libMeshPrivateData::_solver_package = TRILINOS_SOLVERS; #endif +#ifdef LIBMESH_HAVE_EIGEN + if (libMesh::on_command_line ("--use-eigen" ) || +#if defined(LIBMESH_HAVE_MPI) + // If the user bypassed MPI, we disable PETSc and Trilinos + // too + libMesh::on_command_line ("--disable-mpi") || +#endif + libMesh::on_command_line ("--disable-petsc")) + libMeshPrivateData::_solver_package = EIGEN_SOLVERS; +#endif + #ifdef LIBMESH_HAVE_LASPACK if (libMesh::on_command_line ("--use-laspack" ) || #if defined(LIBMESH_HAVE_MPI) @@ -814,6 +827,7 @@ SolverPackage default_solver_package () if (libMesh::on_command_line ("--disable-laspack") && libMesh::on_command_line ("--disable-trilinos") && + libMesh::on_command_line ("--disable-eigen") && ( #if defined(LIBMESH_HAVE_MPI) // If the user bypassed MPI, we disable PETSc too diff --git a/src/libmesh_SOURCES b/src/libmesh_SOURCES index 03ab0c39e48..05d9f6c4a9a 100644 --- a/src/libmesh_SOURCES +++ b/src/libmesh_SOURCES @@ -227,6 +227,9 @@ libmesh_SOURCES = \ src/numerics/dense_vector.C \ src/numerics/dense_vector_base.C \ src/numerics/distributed_vector.C \ + src/numerics/eigen_preconditioner.C \ + src/numerics/eigen_sparse_matrix.C \ + src/numerics/eigen_sparse_vector.C \ src/numerics/function_base.C \ src/numerics/laspack_matrix.C \ src/numerics/laspack_vector.C \ @@ -327,6 +330,7 @@ libmesh_SOURCES = \ src/solvers/adaptive_time_solver.C \ src/solvers/diff_solver.C \ src/solvers/eigen_solver.C \ + src/solvers/eigen_sparse_linear_solver.C \ src/solvers/eigen_time_solver.C \ src/solvers/euler2_solver.C \ src/solvers/euler_solver.C \ diff --git a/src/numerics/eigen_preconditioner.C b/src/numerics/eigen_preconditioner.C new file mode 100644 index 00000000000..a668131cf85 --- /dev/null +++ b/src/numerics/eigen_preconditioner.C @@ -0,0 +1,103 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + +#include "libmesh/libmesh_common.h" + +#ifdef LIBMESH_HAVE_EIGEN + +// C++ includes + +// Local Includes +#include "libmesh/eigen_preconditioner.h" +#include "libmesh/eigen_sparse_matrix.h" +#include "libmesh/eigen_sparse_vector.h" +#include "libmesh/libmesh_common.h" + +namespace libMesh +{ + +template +void EigenPreconditioner::apply(const NumericVector & x, NumericVector & y) +{ + EigenSparseVector & x_pvec = libmesh_cast_ref&>(const_cast&>(x)); + EigenSparseVector & y_pvec = libmesh_cast_ref&>(const_cast&>(y)); + + libmesh_not_implemented(); + + // Vec x_vec = x_pvec.vec(); + // Vec y_vec = y_pvec.vec(); + + // int ierr = PCApply(_pc,x_vec,y_vec); + // CHKERRABORT(libMesh::COMM_WORLD,ierr); +} + + + + +template +void EigenPreconditioner::init () +{ + libmesh_not_implemented(); + + // if(!this->_matrix) + // { + // libMesh::err << "ERROR: No matrix set for EigenPreconditioner, but init() called" << std::endl; + // libmesh_error(); + // } + + // // Clear the preconditioner in case it has been created in the past + // if (!this->_is_initialized) + // { + // // Should probably use PCReset(), but it's not working at the moment so we'll destroy instead + // if (_pc) + // { + // int ierr = LibMeshPCDestroy(&_pc); + // CHKERRABORT(libMesh::COMM_WORLD,ierr); + // } + + // int ierr = PCCreate(libMesh::COMM_WORLD,&_pc); + // CHKERRABORT(libMesh::COMM_WORLD,ierr); + + // EigenSparseMatrix * pmatrix = libmesh_cast_ptr*, SparseMatrix >(this->_matrix); + + // _mat = pmatrix->mat(); + // } + + // int ierr = PCSetOperators(_pc,_mat,_mat,SAME_NONZERO_PATTERN); + // CHKERRABORT(libMesh::COMM_WORLD,ierr); + + // // Set the PCType. Note: this used to be done *before* the call to + // // PCSetOperators(), and only when !_is_initialized, but + // // 1.) Some preconditioners (those employing sub-preconditioners, + // // for example) have to call PCSetUp(), and can only do this after + // // the operators have been set. + // // 2.) It should be safe to call set_petsc_preconditioner_type() + // // multiple times. + // set_petsc_preconditioner_type(this->_preconditioner_type, _pc); + + // this->_is_initialized = true; +} + + + +//------------------------------------------------------------------ +// Explicit instantiations +template class EigenPreconditioner; + +} // namespace libMesh + +#endif // #ifdef LIBMESH_HAVE_EIGEN diff --git a/src/numerics/eigen_sparse_matrix.C b/src/numerics/eigen_sparse_matrix.C new file mode 100644 index 00000000000..bb01186f5ee --- /dev/null +++ b/src/numerics/eigen_sparse_matrix.C @@ -0,0 +1,502 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + +// Local includes +#include "libmesh/libmesh_config.h" + +#ifdef LIBMESH_HAVE_EIGEN + +#include "libmesh/eigen_sparse_matrix.h" +#include "libmesh/dense_matrix.h" +#include "libmesh/dof_map.h" +#include "libmesh/sparsity_pattern.h" + +namespace libMesh +{ + + +//----------------------------------------------------------------------- +// EigenSparseMatrix members +template +void EigenSparseMatrix::update_sparsity_pattern (const SparsityPattern::Graph &sparsity_pattern) +{ + libmesh_not_implemented(); + + // // clear data, start over + // this->clear (); + + // // big trouble if this fails! + // libmesh_assert(this->_dof_map); + + // const numeric_index_type n_rows = sparsity_pattern.size(); + + // // Initialize the _row_start data structure, + // // allocate storage for the _csr array + // { + // std::size_t size = 0; + + // for (numeric_index_type row=0; row::iterator position = _csr.begin(); + + // _row_start.push_back (position); + + // for (numeric_index_type row=0; rowinitialized()); + // this->init (); + // libmesh_assert (this->initialized()); + // //libMesh::out << "n_rows=" << n_rows << std::endl; + // //libMesh::out << "m()=" << m() << std::endl; + // libmesh_assert_equal_to (n_rows, this->m()); + + // // Tell the matrix about its structure. Initialize it + // // to zero. + // for (numeric_index_type i=0; i::const_iterator + // rs = _row_start[i]; + + // const numeric_index_type length = _row_start[i+1] - rs; + + // Q_SetLen (&_QMat, i+1, length); + + // for (numeric_index_type l=0; l_is_initialized = true; +} + + + +template +void EigenSparseMatrix::init () +{ + // Ignore calls on initialized objects + if (this->initialized()) + return; + + // We need the DofMap for this! + libmesh_assert(this->_dof_map); + + // Clear intialized matrices + if (this->initialized()) + this->clear(); + + libmesh_not_implemented(); + +// const numeric_index_type n_rows = this->_dof_map->n_dofs(); +// #ifndef NDEBUG +// // The following variables are only used for assertions, +// // so avoid declaring them when asserts are inactive. +// const numeric_index_type n_cols = n_rows; +// const numeric_index_type n_l = this->_dof_map->n_dofs_on_processor(0); +// const numeric_index_type m_l = n_l; +// #endif + +// // Laspack Matrices only work for uniprocessor cases +// libmesh_assert_equal_to (n_rows, n_cols); +// libmesh_assert_equal_to (m_l, n_rows); +// libmesh_assert_equal_to (n_l, n_cols); + +// #ifndef NDEBUG +// // The following variables are only used for assertions, +// // so avoid declaring them when asserts are inactive. +// const std::vector& n_nz = this->_dof_map->get_n_nz(); +// const std::vector& n_oz = this->_dof_map->get_n_oz(); +// #endif + +// // Make sure the sparsity pattern isn't empty +// libmesh_assert_equal_to (n_nz.size(), n_l); +// libmesh_assert_equal_to (n_oz.size(), n_l); + +// if (n_rows==0) +// return; + +// Q_Constr(&_QMat, const_cast("Mat"), n_rows, _LPFalse, Rowws, Normal, _LPTrue); + +// this->_is_initialized = true; + +// libmesh_assert_equal_to (n_rows, this->m()); +} + + + +template +void EigenSparseMatrix::add_matrix(const DenseMatrix& dm, + const std::vector& rows, + const std::vector& cols) + +{ + libmesh_assert (this->initialized()); + unsigned int n_rows = libmesh_cast_int(rows.size()); + unsigned int n_cols = libmesh_cast_int(cols.size()); + libmesh_assert_equal_to (dm.m(), n_rows); + libmesh_assert_equal_to (dm.n(), n_cols); + + + for (unsigned int i=0; iadd(rows[i],cols[j],dm(i,j)); +} + + + +template +void EigenSparseMatrix::get_diagonal (NumericVector& /*dest*/) const +{ + libmesh_not_implemented(); +} + + + +template +void EigenSparseMatrix::get_transpose (SparseMatrix& /*dest*/) const +{ + libmesh_not_implemented(); +} + + + +template +EigenSparseMatrix::EigenSparseMatrix () : + _closed (false) +{ +} + + + +template +EigenSparseMatrix::~EigenSparseMatrix () +{ + this->clear (); +} + + + +template +void EigenSparseMatrix::clear () +{ + libmesh_not_implemented(); + + // if (this->initialized()) + // { + // Q_Destr(&_QMat); + // } + + // _csr.clear(); + // _row_start.clear(); + // _closed = false; + // this->_is_initialized = false; +} + + + +template +void EigenSparseMatrix::zero () +{ + libmesh_not_implemented(); + + // const numeric_index_type n_rows = this->m(); + + // for (numeric_index_type row=0; row::const_iterator + // r_start = _row_start[row]; + + // const numeric_index_type len = (_row_start[row+1] - _row_start[row]); + + // // Make sure we agree on the row length + // libmesh_assert_equal_to (len, Q_GetLen(&_QMat, row+1)); + + // for (numeric_index_type l=0; l +numeric_index_type EigenSparseMatrix::m () const +{ + libmesh_assert (this->initialized()); + + libmesh_not_implemented(); + return 0; + + // return static_cast(Q_GetDim(const_cast(&_QMat))); +} + + + +template +numeric_index_type EigenSparseMatrix::n () const +{ + libmesh_assert (this->initialized()); + + libmesh_not_implemented(); + + // return static_cast(Q_GetDim(const_cast(&_QMat))); +} + + + +template +numeric_index_type EigenSparseMatrix::row_start () const +{ + return 0; +} + + + +template +numeric_index_type EigenSparseMatrix::row_stop () const +{ + return this->m(); +} + + + +template +void EigenSparseMatrix::set (const numeric_index_type i, + const numeric_index_type j, + const T value) +{ + libmesh_assert (this->initialized()); + libmesh_assert_less (i, this->m()); + libmesh_assert_less (j, this->n()); + + libmesh_not_implemented(); + + // const numeric_index_type position = this->pos(i,j); + + // // Sanity check + // libmesh_assert_equal_to (*(_row_start[i]+position), j); + // libmesh_assert_equal_to ((j+1), Q_GetPos (&_QMat, i+1, position)); + + // Q_SetEntry (&_QMat, i+1, position, j+1, value); +} + + + +template +void EigenSparseMatrix::add (const numeric_index_type i, + const numeric_index_type j, + const T value) +{ + libmesh_assert (this->initialized()); + libmesh_assert_less (i, this->m()); + libmesh_assert_less (j, this->n()); + + libmesh_not_implemented(); + + // const numeric_index_type position = this->pos(i,j); + + // // Sanity check + // libmesh_assert_equal_to (*(_row_start[i]+position), j); + + // Q_AddVal (&_QMat, i+1, position, value); +} + + + +template +void EigenSparseMatrix::add_matrix(const DenseMatrix& dm, + const std::vector& dof_indices) +{ + this->add_matrix (dm, dof_indices, dof_indices); +} + + + +template +void EigenSparseMatrix::add (const T a_in, SparseMatrix &X_in) +{ + libmesh_assert (this->initialized()); + libmesh_assert_equal_to (this->m(), X_in.m()); + libmesh_assert_equal_to (this->n(), X_in.n()); + + EigenSparseMatrix* X = libmesh_cast_ptr*> (&X_in); + + libmesh_not_implemented(); + + // _LPNumber a = static_cast<_LPNumber> (a_in); + + // libmesh_assert(X); + + // // loops taken from EigenSparseMatrix::zero () + + // const numeric_index_type n_rows = this->m(); + + // for (numeric_index_type row=0; row::const_iterator + // r_start = _row_start[row]; + + // const numeric_index_type len = (_row_start[row+1] - _row_start[row]); + + // // Make sure we agree on the row length + // libmesh_assert_equal_to (len, Q_GetLen(&_QMat, row+1)); + // // compare matrix sparsity structures + // libmesh_assert_equal_to (len, Q_GetLen(&(X->_QMat), row+1)); + + + // for (numeric_index_type l=0; l(&(X->_QMat)), row+1, j+1); + // Q_AddVal (&_QMat, row+1, l, value); + // } + // } +} + + + + + template +T EigenSparseMatrix::operator () (const numeric_index_type i, + const numeric_index_type j) const +{ + libmesh_assert (this->initialized()); + libmesh_assert_less (i, this->m()); + libmesh_assert_less (j, this->n()); + + libmesh_not_implemented(); + return T(0.); + + // return Q_GetEl (const_cast(&_QMat), i+1, j+1); +} + + + +template +numeric_index_type EigenSparseMatrix::pos (const numeric_index_type i, + const numeric_index_type j) const +{ + libmesh_assert_less (i, this->m()); + libmesh_assert_less (j, this->n()); + libmesh_assert_less (i+1, _row_start.size()); + libmesh_assert (_row_start.back() == _csr.end()); + + libmesh_not_implemented(); + return 0; + + // // note this requires the _csr to be + // std::pair::const_iterator, + // std::vector::const_iterator> p = + // std::equal_range (_row_start[i], + // _row_start[i+1], + // j); + + // // Make sure the row contains the element j + // libmesh_assert (p.first != p.second); + + // // Make sure the values match + // libmesh_assert (*p.first == j); + + // // Return the position in the compressed row + // return std::distance (_row_start[i], p.first); +} + + + +//------------------------------------------------------------------ +// Explicit instantiations +template class EigenSparseMatrix; + +} // namespace libMesh + + +#endif // #ifdef LIBMESH_HAVE_EIGEN diff --git a/src/numerics/eigen_sparse_vector.C b/src/numerics/eigen_sparse_vector.C new file mode 100644 index 00000000000..59f2d1b75ae --- /dev/null +++ b/src/numerics/eigen_sparse_vector.C @@ -0,0 +1,550 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 // for std::min +#include + +// Local Includes +#include "libmesh/dense_subvector.h" +#include "libmesh/dense_vector.h" +#include "libmesh/eigen_sparse_vector.h" +#include "libmesh/eigen_sparse_matrix.h" + + +#ifdef LIBMESH_HAVE_EIGEN + +namespace libMesh +{ + +template +T EigenSparseVector::sum () const +{ + libmesh_assert (this->closed()); + + T _sum = 0; + + const numeric_index_type n = this->size(); + + for (numeric_index_type i=0; i!=n; ++i) + _sum += (*this)(i); + + return _sum; +} + + + +template +Real EigenSparseVector::l1_norm () const +{ + libmesh_assert (this->closed()); + + libmesh_not_implemented(); + return 0.; + + // return static_cast(l1Norm_V(const_cast(&_vec))); +} + + + +template +Real EigenSparseVector::l2_norm () const +{ + libmesh_assert (this->closed()); + + libmesh_not_implemented(); + return 0.; + + // return static_cast(l2Norm_V(const_cast(&_vec))); +} + + + +template +Real EigenSparseVector::linfty_norm () const +{ + libmesh_assert (this->closed()); + + libmesh_not_implemented(); + return 0.; + + // return static_cast(MaxNorm_V(const_cast(&_vec))); +} + + + +template +NumericVector& EigenSparseVector::operator += (const NumericVector& v) +{ + libmesh_assert (this->closed()); + + this->add(1., v); + + return *this; +} + + + + +template +NumericVector& EigenSparseVector::operator -= (const NumericVector& v) +{ + libmesh_assert (this->closed()); + + this->add(-1., v); + + return *this; +} + + + +template +void EigenSparseVector::reciprocal() +{ + libmesh_not_implemented(); + + // const numeric_index_type n = this->size(); + + // for (numeric_index_type i=0; iset(i, 1. / v); + // } +} + + + + +template +void EigenSparseVector::add (const T v) +{ + libmesh_not_implemented(); + +// const numeric_index_type n = this->size(); + +// for (numeric_index_type i=0; iadd (i, v); + +// #ifndef NDEBUG +// this->_is_closed = false; +// #endif +} + + + + +template +void EigenSparseVector::add (const NumericVector& v) +{ + this->add (1., v); +} + + + +template +void EigenSparseVector::add (const T a, const NumericVector& v_in) +{ + libmesh_not_implemented(); + +// // Make sure the vector passed in is really a EigenSparseVector +// const EigenSparseVector* v = libmesh_cast_ptr(&v_in); + +// #ifndef NDEBUG +// const bool was_closed = this->_is_closed; +// #endif + +// libmesh_assert(v); +// libmesh_assert_equal_to (this->size(), v->size()); + +// for (numeric_index_type i=0; isize(); i++) +// this->add (i, a*(*v)(i)); + +// #ifndef NDEBUG +// this->_is_closed = was_closed; +// #endif +} + + + +template +void EigenSparseVector::add_vector (const std::vector& v, + const std::vector& dof_indices) +{ + libmesh_assert (!v.empty()); + libmesh_assert_equal_to (v.size(), dof_indices.size()); + + for (numeric_index_type i=0; iadd (dof_indices[i], v[i]); +} + + + +template +void EigenSparseVector::add_vector (const NumericVector& V, + const std::vector& dof_indices) +{ + libmesh_assert_equal_to (V.size(), dof_indices.size()); + + for (numeric_index_type i=0; iadd (dof_indices[i], V(i)); +} + + + +template +void EigenSparseVector::add_vector (const DenseVector& V, + const std::vector& dof_indices) +{ + libmesh_assert_equal_to (V.size(), dof_indices.size()); + + for (unsigned int i=0; iadd (dof_indices[i], V(i)); +} + + + +template +void EigenSparseVector::insert (const std::vector& v, + const std::vector& dof_indices) +{ + libmesh_assert (!v.empty()); + libmesh_assert_equal_to (v.size(), dof_indices.size()); + + for (numeric_index_type i=0; iset (dof_indices[i], v[i]); +} + + + +template +void EigenSparseVector::insert (const NumericVector& V, + const std::vector& dof_indices) +{ + libmesh_assert_equal_to (V.size(), dof_indices.size()); + + for (numeric_index_type i=0; iset (dof_indices[i], V(i)); +} + + + +template +void EigenSparseVector::insert (const DenseVector& V, + const std::vector& dof_indices) +{ + libmesh_assert_equal_to (V.size(), dof_indices.size()); + + for (unsigned int i=0; iset (dof_indices[i], V(i)); +} + + + +template +void EigenSparseVector::insert (const DenseSubVector& V, + const std::vector& dof_indices) +{ + libmesh_assert_equal_to (V.size(), dof_indices.size()); + + for (unsigned int i=0; iset (dof_indices[i], V(i)); +} + + + +template +void EigenSparseVector::add_vector (const NumericVector &vec_in, + const SparseMatrix &mat_in) +{ + // Make sure the data passed in are really in Eigen types + const EigenSparseVector* vec = libmesh_cast_ptr*>(&vec_in); + const EigenSparseMatrix* mat = libmesh_cast_ptr*>(&mat_in); + + libmesh_assert(vec); + libmesh_assert(mat); + + libmesh_not_implemented(); + + // // += mat*vec + // AddAsgn_VV (&_vec, Mul_QV(const_cast(&mat->_QMat), + // const_cast(&vec->_vec))); +} + + +template +void EigenSparseVector::add_vector_transpose (const NumericVector &, + const SparseMatrix &) +{ + libmesh_not_implemented(); +} + + + +template +void EigenSparseVector::scale (const T factor) +{ + libmesh_assert (this->initialized()); + + libmesh_not_implemented(); + + // Asgn_VV(&_vec, Mul_SV (factor, &_vec)); +} + + + +template +void EigenSparseVector::abs() +{ + libmesh_assert (this->initialized()); + + const numeric_index_type n = this->size(); + + for (numeric_index_type i=0; i!=n; ++i) + this->set(i,std::abs((*this)(i))); +} + + + +template +T EigenSparseVector::dot (const NumericVector& V) const +{ + libmesh_assert (this->initialized()); + + // Make sure the NumericVector passed in is really a EigenSparseVector + const EigenSparseVector* v = libmesh_cast_ptr*>(&V); + libmesh_assert(v); + + libmesh_not_implemented(); + // return Mul_VV (const_cast(&(this->_vec)), + // const_cast(&(v->_vec))); +} + + + +template +NumericVector& +EigenSparseVector::operator = (const T s) +{ + libmesh_assert (this->initialized()); + libmesh_assert (this->closed()); + + libmesh_not_implemented(); + + // V_SetAllCmp (&_vec, s); + + return *this; +} + + + +template +NumericVector& +EigenSparseVector::operator = (const NumericVector& v_in) +{ + // Make sure the NumericVector passed in is really a EigenSparseVector + const EigenSparseVector* v = + libmesh_cast_ptr*>(&v_in); + + libmesh_assert(v); + + *this = *v; + + return *this; +} + + + +template +EigenSparseVector& +EigenSparseVector::operator = (const EigenSparseVector& v) +{ + libmesh_assert (this->initialized()); + libmesh_assert (v.closed()); + libmesh_assert_equal_to (this->size(), v.size()); + + libmesh_not_implemented(); + + // if (v.size() != 0) + // Asgn_VV (const_cast(&_vec), + // const_cast(&v._vec) + // ); + +#ifndef NDEBUG + this->_is_closed = true; +#endif + + return *this; +} + + + +template +NumericVector& +EigenSparseVector::operator = (const std::vector& v) +{ + libmesh_not_implemented(); + + // /** + // * Case 1: The vector is the same size of + // * The global vector. Only add the local components. + // */ + // if (this->size() == v.size()) + // for (numeric_index_type i=0; iset (i, v[i]); + + // else + // libmesh_error(); + + return *this; +} + + +template +void EigenSparseVector::localize (NumericVector& v_local_in) const +{ + // Make sure the NumericVector passed in is really a EigenSparseVector + EigenSparseVector* v_local = + libmesh_cast_ptr*>(&v_local_in); + + libmesh_assert(v_local); + + *v_local = *this; +} + + + +template +void EigenSparseVector::localize (NumericVector& v_local_in, + const std::vector& libmesh_dbg_var(send_list)) const +{ + // Make sure the NumericVector passed in is really a EigenSparseVector + EigenSparseVector* v_local = + libmesh_cast_ptr*>(&v_local_in); + + libmesh_assert(v_local); + libmesh_assert_less_equal (send_list.size(), v_local->size()); + + *v_local = *this; +} + + + +template +void EigenSparseVector::localize (const numeric_index_type libmesh_dbg_var(first_local_idx), + const numeric_index_type libmesh_dbg_var(last_local_idx), + const std::vector& libmesh_dbg_var(send_list)) +{ + libmesh_assert_equal_to (first_local_idx, 0); + libmesh_assert_equal_to (last_local_idx+1, this->size()); + + libmesh_assert_less_equal (send_list.size(), this->size()); + +#ifndef NDEBUG + this->_is_closed = true; +#endif +} + + + +template +void EigenSparseVector::localize (std::vector& v_local) const + +{ + v_local.resize(this->size()); + + for (numeric_index_type i=0; i +void EigenSparseVector::localize_to_one (std::vector& v_local, + const processor_id_type libmesh_dbg_var(pid)) const +{ + libmesh_assert_equal_to (pid, 0); + + this->localize (v_local); +} + + + +template +void EigenSparseVector::pointwise_mult (const NumericVector& /*vec1*/, + const NumericVector& /*vec2*/) +{ + libmesh_not_implemented(); +} + + + +template +Real EigenSparseVector::max() const +{ + libmesh_assert (this->initialized()); + if (!this->size()) + return -std::numeric_limits::max(); + + libmesh_not_implemented(); + return 0; + + // Real the_max = libmesh_real((*this)(0)); + + // const numeric_index_type n = this->size(); + + // for (numeric_index_type i=1; i +Real EigenSparseVector::min () const +{ + libmesh_assert (this->initialized()); + if (!this->size()) + return std::numeric_limits::max(); + + libmesh_not_implemented(); + return 0; + // Real the_min = libmesh_real((*this)(0)); + + // const numeric_index_type n = this->size(); + + // for (numeric_index_type i=1; i; + +} // namespace libMesh + + +#endif // #ifdef LIBMESH_HAVE_EIGEN diff --git a/src/numerics/numeric_vector.C b/src/numerics/numeric_vector.C index 79ccfd3501b..704d863329d 100644 --- a/src/numerics/numeric_vector.C +++ b/src/numerics/numeric_vector.C @@ -26,6 +26,7 @@ #include "libmesh/numeric_vector.h" #include "libmesh/distributed_vector.h" #include "libmesh/laspack_vector.h" +#include "libmesh/eigen_sparse_vector.h" #include "libmesh/petsc_vector.h" #include "libmesh/trilinos_epetra_vector.h" #include "libmesh/shell_matrix.h" @@ -76,6 +77,15 @@ NumericVector::build(const SolverPackage solver_package) #endif +#ifdef LIBMESH_HAVE_EIGEN + case EIGEN_SOLVERS: + { + AutoPtr > ap(new EigenSparseVector); + return ap; + } +#endif + + default: AutoPtr > ap(new DistributedVector); return ap; diff --git a/src/numerics/preconditioner.C b/src/numerics/preconditioner.C index 919cce61824..bb08bd07a9c 100644 --- a/src/numerics/preconditioner.C +++ b/src/numerics/preconditioner.C @@ -24,6 +24,9 @@ #include "libmesh/preconditioner.h" #include "libmesh/petsc_preconditioner.h" #include "libmesh/trilinos_preconditioner.h" +#include "libmesh/eigen_preconditioner.h" + + namespace libMesh { @@ -60,6 +63,11 @@ Preconditioner::build(const SolverPackage solver_package) return new TrilinosPreconditioner(); #endif +#ifdef LIBMESH_HAVE_EIGEN + case EIGEN_SOLVERS: + return new EigenPreconditioner(); +#endif + default: libMesh::err << "ERROR: Unrecognized solver package: " << solver_package diff --git a/src/numerics/sparse_matrix.C b/src/numerics/sparse_matrix.C index 88d1732363a..8e61432633b 100644 --- a/src/numerics/sparse_matrix.C +++ b/src/numerics/sparse_matrix.C @@ -22,6 +22,7 @@ // Local Includes #include "libmesh/dof_map.h" #include "libmesh/laspack_matrix.h" +#include "libmesh/eigen_sparse_matrix.h" #include "libmesh/parallel.h" #include "libmesh/petsc_matrix.h" #include "libmesh/sparse_matrix.h" @@ -122,6 +123,15 @@ SparseMatrix::build(const SolverPackage solver_package) #endif +#ifdef LIBMESH_HAVE_EIGEN + case EIGEN_SOLVERS: + { + AutoPtr > ap(new EigenSparseMatrix); + return ap; + } +#endif + + default: libMesh::err << "ERROR: Unrecognized solver package: " << solver_package diff --git a/src/solvers/eigen_sparse_linear_solver.C b/src/solvers/eigen_sparse_linear_solver.C new file mode 100644 index 00000000000..eb45fa24c7e --- /dev/null +++ b/src/solvers/eigen_sparse_linear_solver.C @@ -0,0 +1,497 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2012 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 + + + +#include "libmesh/libmesh_common.h" + +#ifdef LIBMESH_HAVE_EIGEN + + +// C++ includes + +// Local Includes +#include "libmesh/eigen_sparse_linear_solver.h" +#include "libmesh/libmesh_logging.h" + +namespace libMesh +{ + +/*----------------------- functions ----------------------------------*/ +template +void EigenSparseLinearSolver::clear () +{ + if (this->initialized()) + { + this->_is_initialized = false; + + this->_solver_type = GMRES; + this->_preconditioner_type = ILU_PRECOND; + } +} + + + +template +void EigenSparseLinearSolver::init () +{ + // Initialize the data structures if not done so already. + if (!this->initialized()) + { + this->_is_initialized = true; + } +} + + + +template +std::pair +EigenSparseLinearSolver::solve (SparseMatrix &matrix_in, + NumericVector &solution_in, + NumericVector &rhs_in, + const double tol, + const unsigned int m_its) +{ + START_LOG("solve()", "EigenSparseLinearSolver"); + this->init (); + + // Make sure the data passed in are really in Laspack types + EigenSparseMatrix* matrix = libmesh_cast_ptr*>(&matrix_in); + EigenSparseVector* solution = libmesh_cast_ptr*>(&solution_in); + EigenSparseVector* rhs = libmesh_cast_ptr*>(&rhs_in); + + libmesh_not_implemented(); + + return std::make_pair(0,0.); + + // // Zero-out the solution to prevent the solver from exiting in 0 + // // iterations (?) + // //TODO:[BSK] Why does Laspack do this? Comment out this and try ex13... + // solution->zero(); + + // // Close the matrix and vectors in case this wasn't already done. + // matrix->close (); + // solution->close (); + // rhs->close (); + + // // Set the preconditioner type + // this->set_laspack_preconditioner_type (); + + // // Set the solver tolerance + // SetRTCAccuracy (tol); + + // // Solve the linear system + // switch (this->_solver_type) + // { + // // Conjugate-Gradient + // case CG: + // { + // CGIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Conjugate-Gradient Normalized + // case CGN: + // { + // CGNIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Conjugate-Gradient Squared + // case CGS: + // { + // CGSIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Bi-Conjugate Gradient + // case BICG: + // { + // BiCGIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Bi-Conjugate Gradient Stabilized + // case BICGSTAB: + // { + // BiCGSTABIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Quasi-Minimum Residual + // case QMR: + // { + // QMRIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Symmetric over-relaxation + // case SSOR: + // { + // SSORIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Jacobi Relaxation + // case JACOBI: + // { + // JacobiIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Generalized Minimum Residual + // case GMRES: + // { + // SetGMRESRestart (30); + // GMRESIter (&matrix->_QMat, + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Unknown solver, use GMRES + // default: + // { + // libMesh::err << "ERROR: Unsupported LASPACK Solver: " + // << this->_solver_type << std::endl + // << "Continuing with GMRES" << std::endl; + + // this->_solver_type = GMRES; + + // return this->solve (*matrix, + // *solution, + // *rhs, + // tol, + // m_its); + // } + // } + + // // Check for an error + // if (LASResult() != LASOK) + // { + // libMesh::err << "ERROR: LASPACK Error: " << std::endl; + // WriteLASErrDescr(stdout); + // libmesh_error(); + // } + + // STOP_LOG("solve()", "EigenSparseLinearSolver"); + // // Get the convergence step # and residual + // return std::make_pair(GetLastNoIter(), GetLastAccuracy()); +} + + + +template +std::pair +EigenSparseLinearSolver::adjoint_solve (SparseMatrix &matrix_in, + NumericVector &solution_in, + NumericVector &rhs_in, + const double tol, + const unsigned int m_its) +{ + START_LOG("adjoint_solve()", "EigenSparseLinearSolver"); + this->init (); + + // Make sure the data passed in are really in Laspack types + EigenSparseMatrix* matrix = libmesh_cast_ptr*>(&matrix_in); + EigenSparseVector* solution = libmesh_cast_ptr*>(&solution_in); + EigenSparseVector* rhs = libmesh_cast_ptr*>(&rhs_in); + + libmesh_not_implemented(); + return std::make_pair(0,0.); + + // // Zero-out the solution to prevent the solver from exiting in 0 + // // iterations (?) + // //TODO:[BSK] Why does Laspack do this? Comment out this and try ex13... + // solution->zero(); + + // // Close the matrix and vectors in case this wasn't already done. + // matrix->close (); + // solution->close (); + // rhs->close (); + + // // Set the preconditioner type + // this->set_laspack_preconditioner_type (); + + // // Set the solver tolerance + // SetRTCAccuracy (tol); + + // // Solve the linear system + // switch (this->_solver_type) + // { + // // Conjugate-Gradient + // case CG: + // { + // CGIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Conjugate-Gradient Normalized + // case CGN: + // { + // CGNIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Conjugate-Gradient Squared + // case CGS: + // { + // CGSIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Bi-Conjugate Gradient + // case BICG: + // { + // BiCGIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Bi-Conjugate Gradient Stabilized + // case BICGSTAB: + // { + // BiCGSTABIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Quasi-Minimum Residual + // case QMR: + // { + // QMRIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Symmetric over-relaxation + // case SSOR: + // { + // SSORIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Jacobi Relaxation + // case JACOBI: + // { + // JacobiIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Generalized Minimum Residual + // case GMRES: + // { + // SetGMRESRestart (30); + // GMRESIter (Transp_Q(&matrix->_QMat), + // &solution->_vec, + // &rhs->_vec, + // m_its, + // _precond_type, + // 1.); + // break; + // } + + // // Unknown solver, use GMRES + // default: + // { + // libMesh::err << "ERROR: Unsupported LASPACK Solver: " + // << this->_solver_type << std::endl + // << "Continuing with GMRES" << std::endl; + + // this->_solver_type = GMRES; + + // return this->solve (*matrix, + // *solution, + // *rhs, + // tol, + // m_its); + // } + // } + + // // Check for an error + // if (LASResult() != LASOK) + // { + // libMesh::err << "ERROR: LASPACK Error: " << std::endl; + // WriteLASErrDescr(stdout); + // libmesh_error(); + // } + + // STOP_LOG("adjoint_solve()", "EigenSparseLinearSolver"); + // // Get the convergence step # and residual + // return std::make_pair(GetLastNoIter(), GetLastAccuracy()); +} + + + + +template +std::pair +EigenSparseLinearSolver::solve (const ShellMatrix& /*shell_matrix*/, + NumericVector& /*solution_in*/, + NumericVector& /*rhs_in*/, + const double /*tol*/, + const unsigned int /*m_its*/) +{ + libmesh_not_implemented(); + return std::make_pair(0,0.0); +} + + + +template +std::pair +EigenSparseLinearSolver::solve (const ShellMatrix& /*shell_matrix*/, + const SparseMatrix& /*precond_matrix*/, + NumericVector& /*solution_in*/, + NumericVector& /*rhs_in*/, + const double /*tol*/, + const unsigned int /*m_its*/) +{ + libmesh_not_implemented(); + return std::make_pair(0,0.0); +} + + + +template +void EigenSparseLinearSolver::set_eigen_preconditioner_type () +{ + libmesh_not_implemented(); + + // switch (this->_preconditioner_type) + // { + // case IDENTITY_PRECOND: + // _precond_type = NULL; return; + + // case ILU_PRECOND: + // _precond_type = ILUPrecond; return; + + // case JACOBI_PRECOND: + // _precond_type = JacobiPrecond; return; + + // case SSOR_PRECOND: + // _precond_type = SSORPrecond; return; + + + // default: + // libMesh::err << "ERROR: Unsupported LASPACK Preconditioner: " + // << this->_preconditioner_type << std::endl + // << "Continuing with ILU" << std::endl; + // this->_preconditioner_type = ILU_PRECOND; + // this->set_laspack_preconditioner_type(); + // } +} + + + +template +void EigenSparseLinearSolver::print_converged_reason() +{ + libMesh::out << "print_converged_reason() is currently only supported" + << "with Petsc 2.3.1 and later." << std::endl; +} + + + +//------------------------------------------------------------------ +// Explicit instantiations +template class EigenSparseLinearSolver; + +} // namespace libMesh + + +#endif // #ifdef LIBMESH_HAVE_EIGEN diff --git a/src/solvers/linear_solver.C b/src/solvers/linear_solver.C index 6c82d2b42e5..9fe4be34102 100644 --- a/src/solvers/linear_solver.C +++ b/src/solvers/linear_solver.C @@ -24,6 +24,7 @@ #include "libmesh/auto_ptr.h" #include "libmesh/linear_solver.h" #include "libmesh/laspack_linear_solver.h" +#include "libmesh/eigen_sparse_linear_solver.h" #include "libmesh/petsc_linear_solver.h" #include "libmesh/trilinos_aztec_linear_solver.h" #include "libmesh/preconditioner.h" @@ -69,6 +70,15 @@ LinearSolver::build(const SolverPackage solver_package) } #endif + +#ifdef LIBMESH_HAVE_EIGEN + case EIGEN_SOLVERS: + { + AutoPtr > ap(new EigenSparseLinearSolver); + return ap; + } +#endif + default: libMesh::err << "ERROR: Unrecognized solver package: " << solver_package