// ---------------------------------------------------------------------
//
-// 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.
//
//
// ---------------------------------------------------------------------
-
// test the PETSc LSQR solver
-
#include "../tests.h"
#include "../lac/testmatrix.h"
-#include <cmath>
-#include <fstream>
-#include <iostream>
-#include <iomanip>
+
#include <deal.II/base/logstream.h>
#include <deal.II/lac/petsc_sparse_matrix.h>
#include <deal.II/lac/petsc_vector.h>
#include <deal.II/lac/petsc_solver.h>
#include <deal.II/lac/petsc_precondition.h>
-#include <deal.II/lac/vector_memory.h>
-#include <typeinfo>
-
-template<typename SolverType, typename MatrixType, typename VectorType, class PRECONDITION>
-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);
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);
+ }
}