From: Matthias Maier Date: Tue, 12 Jul 2016 16:37:34 +0000 (-0500) Subject: Tests: Fix petsc/solver_11 to test for convergence X-Git-Tag: v8.5.0-rc1~860^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F2817%2Fhead;p=dealii.git Tests: Fix petsc/solver_11 to test for convergence --- diff --git a/tests/petsc/solver_11.cc b/tests/petsc/solver_11.cc index b3e24b7e25..fe03ac48f7 100644 --- a/tests/petsc/solver_11.cc +++ b/tests/petsc/solver_11.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2004 - 2015 by the deal.II authors +// Copyright (C) 2004 - 2016 by the deal.II authors // // This file is part of the deal.II library. // @@ -13,67 +13,23 @@ // // --------------------------------------------------------------------- - // test the PETSc LSQR solver - #include "../tests.h" #include "../lac/testmatrix.h" -#include -#include -#include -#include + #include #include #include #include #include -#include -#include - -template -void -check_solve(SolverType &solver, - const SolverControl &solver_control, - const MatrixType &A, - VectorType &u, - VectorType &f, - const PRECONDITION &P) -{ - deallog << "Solver type: " << typeid(solver).name() << std::endl; - - u = 0.; - f = 1.; - try - { - deallog.depth_file(0); - solver.solve(A,u,f,P); - deallog.depth_file(3); - } - catch (dealii::SolverControl::NoConvergence &e) - { - // just like for Richardson: expect to - // get here, don't abort the program - deallog.depth_file(3); - deallog << "Catched exception dealii::SolverControl::NoConvergence" << std::endl; - } - - deallog << "Solver stopped after " << solver_control.last_step() - << " iterations" << std::endl; -} - int main(int argc, char **argv) { - std::ofstream logfile("output"); - deallog.attach(logfile); - deallog << std::setprecision(4); - deallog.threshold_double(1.e-10); + initlog(); Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, 1); { - SolverControl control(100, 1.e-3); - const unsigned int size = 32; unsigned int dim = (size-1)*(size-1); @@ -86,12 +42,20 @@ int main(int argc, char **argv) PETScWrappers::Vector f(dim); PETScWrappers::Vector u(dim); + f = 1.; + u = 0.; + A.compress (VectorOperation::insert); + f.compress (VectorOperation::insert); + u.compress (VectorOperation::insert); + SolverControl control(200, 1.e-8); PETScWrappers::SolverLSQR solver(control); PETScWrappers::PreconditionJacobi preconditioner(A); - check_solve (solver, control, A,u,f, preconditioner); - } + check_solver_within_range( + solver.solve(A,u,f, preconditioner), + control.last_step(), 171, 175); + } } diff --git a/tests/petsc/solver_11.output b/tests/petsc/solver_11.output index b00603808b..619295c5d7 100644 --- a/tests/petsc/solver_11.output +++ b/tests/petsc/solver_11.output @@ -1,5 +1,3 @@ DEAL::Size 32 Unknowns 961 -DEAL::Solver type: N6dealii13PETScWrappers10SolverLSQRE -DEAL::Catched exception dealii::SolverControl::NoConvergence -DEAL::Solver stopped after 100 iterations +DEAL::Solver stopped within 171 - 175 iterations