22#ifndef INCLUDE_SOLVERS_AND_PRECONDITIONERS_VERIFY_CALCULATION_OF_DIAGONAL_H_
23#define INCLUDE_SOLVERS_AND_PRECONDITIONERS_VERIFY_CALCULATION_OF_DIAGONAL_H_
25#include <deal.II/base/conditional_ostream.h>
26#include <deal.II/lac/la_parallel_vector.h>
37template<
typename Operator,
typename value_type>
39verify_calculation_of_diagonal(Operator & op,
40 dealii::LinearAlgebra::distributed::Vector<value_type> & diagonal,
41 MPI_Comm
const & mpi_comm)
43 dealii::ConditionalOStream pcout(std::cout,
44 dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0);
45 pcout <<
"Verify calculation of diagonal:" << std::endl;
47 typedef dealii::LinearAlgebra::distributed::Vector<value_type>
VectorType;
61 for(
unsigned int i = 0; i < diagonal_check.size(); ++i)
63 if(diagonal_check.in_local_range(i))
70 if(diagonal_check.in_local_range(i))
72 diagonal_check(i) = dst(i);
77 value_type norm_diagonal = diagonal.l2_norm();
78 value_type norm_diagonal_check = diagonal_check.l2_norm();
81 <<
"L2 norm diagonal - Variant 1: " << std::setprecision(10) << norm_diagonal << std::endl;
82 pcout <<
"L2 norm diagonal - Variant 2: " << std::setprecision(10) << norm_diagonal_check
85 diagonal_check.add(-1.0, diagonal);
86 value_type norm_error = diagonal_check.l2_norm();
88 pcout <<
"L2 error diagonal: " << std::setprecision(10) << norm_error << std::endl << std::endl;