]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Port arpack/step-36_parpack_mf to use inverse_operator
authorMatthias Maier <tamiko@43-1.org>
Sun, 2 Jul 2017 17:20:13 +0000 (12:20 -0500)
committerMatthias Maier <tamiko@43-1.org>
Mon, 3 Jul 2017 10:15:14 +0000 (05:15 -0500)
tests/arpack/step-36_parpack_mf.cc

index 3405ee3e8b0bfc60b08c06ae4ab92f7aa5ca0034..031cdca388def3179bf7096caa48d86b88ac6d24 100644 (file)
@@ -36,7 +36,7 @@
 #include <deal.II/fe/fe_tools.h>
 #include <deal.II/grid/grid_generator.h>
 #include <deal.II/matrix_free/operators.h>
-#include <deal.II/lac/iterative_inverse.h>
+#include <deal.II/lac/linear_operator.h>
 #include <deal.II/lac/precondition.h>
 #include <deal.II/numerics/vector_tools.h>
 
@@ -121,25 +121,26 @@ void test ()
     SolverControl solver_control     (dof_handler.n_dofs(), 1e-9,/*log_history*/false,/*log_results*/false);
     SolverControl solver_control_lin (dof_handler.n_dofs(), 1e-10,/*log_history*/false,/*log_results*/false);
 
+    // set up iterative inverse
+    static ReductionControl inner_control_c(dof_handler.n_dofs(), 0.0, 1.e-13);
 
+    typedef LinearAlgebra::distributed::Vector<double> VectorType;
+    SolverCG<VectorType> solver_c(inner_control_c);
     PreconditionIdentity preconditioner;
-    IterativeInverse<LinearAlgebra::distributed::Vector<double> > shift_and_invert;
-    shift_and_invert.initialize(laplace,preconditioner);
-    shift_and_invert.solver.select("cg");
-    static ReductionControl inner_control_c(dof_handler.n_dofs(), 0.0, 1.e-13);
-    shift_and_invert.solver.set_control(inner_control_c);
+    const auto shift_and_invert =
+      inverse_operator(linear_operator<VectorType>(laplace),
+                       solver_c,
+                       preconditioner);
 
     const unsigned int num_arnoldi_vectors = 2*eigenvalues.size() + 2;
-
     PArpackSolver<LinearAlgebra::distributed::Vector<double> >::AdditionalData
     additional_data(num_arnoldi_vectors,
                     PArpackSolver<LinearAlgebra::distributed::Vector<double> >::largest_magnitude,
                     true);
 
-    PArpackSolver<LinearAlgebra::distributed::Vector<double> > eigensolver
-    (solver_control,
-     mpi_communicator,
-     additional_data);
+    PArpackSolver<LinearAlgebra::distributed::Vector<double>> eigensolver(
+      solver_control, mpi_communicator, additional_data);
+
     eigensolver.reinit(eigenfunctions[0]);
     // make sure initial vector is orthogonal to the space due to constraints
     {

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.