// ---------------------------------------------------------------------
//
-// 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 Richardson 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
- {
- solver.solve(A,u,f,P);
- }
- catch (dealii::SolverControl::NoConvergence &e)
- {
- deallog << "Exception: " << e.get_exc_name() << 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);
+
+ // Richardson is a tricky smoother for the kind of FD matrix we use in
+ // this test. So, simply test that we're able to reduce the residual to
+ // a reasonably small value of 1.e-4.
+ SolverControl control(2500, 1.e-4);
PETScWrappers::SolverRichardson 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(), 2295, 2300);
+ }
}
DEAL::Size 32 Unknowns 961
-DEAL::Solver type: N6dealii13PETScWrappers16SolverRichardsonE
-DEAL::Starting value 7.750
-DEAL::Failure step 100 value 4.004
-DEAL::Exception: SolverControl::NoConvergence (solver_control.last_step(), solver_control.last_value())
-DEAL::Solver stopped after 100 iterations
+DEAL::Solver stopped within 2295 - 2300 iterations
// ---------------------------------------------------------------------
//
-// 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 Chebychev 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)
- {
- deallog.depth_file(3);
- deallog << "Exception: " << e.get_exc_name() << 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);
+ 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);
+
+ // Chebychev is a tricky smoother for the kind of FD matrix we use in
+ // this test. So, simply test that we're able to reduce the residual to
+ // a reasonably small value of 1.e-3.
+ SolverControl control(2500, 1.e-3);
PETScWrappers::SolverChebychev 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(), 1120, 1125);
+ }
}
DEAL::Size 32 Unknowns 961
-DEAL::Solver type: N6dealii13PETScWrappers15SolverChebychevE
-DEAL::Exception: SolverControl::NoConvergence (solver_control.last_step(), solver_control.last_value())
-DEAL::Solver stopped after 100 iterations
+DEAL::Solver stopped within 1120 - 1125 iterations