22#ifndef EXADG_SOLVERS_AND_PRECONDITIONERS_UTILITIES_VERIFY_CALCULATION_OF_DIAGONAL_H_
23#define EXADG_SOLVERS_AND_PRECONDITIONERS_UTILITIES_VERIFY_CALCULATION_OF_DIAGONAL_H_
26#include <deal.II/base/conditional_ostream.h>
27#include <deal.II/lac/la_parallel_vector.h>
38template<
typename Operator,
typename value_type>
40verify_calculation_of_diagonal(Operator & op,
41 dealii::LinearAlgebra::distributed::Vector<value_type> & diagonal,
42 MPI_Comm
const & mpi_comm)
44 dealii::ConditionalOStream pcout(std::cout,
45 dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0);
46 pcout <<
"Verify calculation of diagonal:" << std::endl;
48 typedef dealii::LinearAlgebra::distributed::Vector<value_type>
VectorType;
62 for(
unsigned int i = 0; i < diagonal_check.size(); ++i)
64 if(diagonal_check.in_local_range(i))
71 if(diagonal_check.in_local_range(i))
73 diagonal_check(i) = dst(i);
78 value_type norm_diagonal = diagonal.l2_norm();
79 value_type norm_diagonal_check = diagonal_check.l2_norm();
82 <<
"L2 norm diagonal - Variant 1: " << std::setprecision(10) << norm_diagonal << std::endl;
83 pcout <<
"L2 norm diagonal - Variant 2: " << std::setprecision(10) << norm_diagonal_check
86 diagonal_check.add(-1.0, diagonal);
87 value_type norm_error = diagonal_check.l2_norm();
89 pcout <<
"L2 error diagonal: " << std::setprecision(10) << norm_error << std::endl << std::endl;