6#include <deal.II/lac/precondition.h>
7#include <deal.II/lac/solver_cg.h>
8#include <deal.II/lac/solver_control.h>
20#include <prismspf/config.h>
32template <
typename number>
33class CGSolver :
public dealii::SolverCG<BlockVector<number>>
37 using BaseClass = dealii::SolverCG<BlockVector<number>>;
38 using BaseClass::all_condition_numbers_signal;
39 using BaseClass::all_eigenvalues_signal;
40 using BaseClass::condition_number_signal;
41 using BaseClass::determine_beta_by_flexible_formula;
42 using BaseClass::eigenvalues_signal;
65 template <
typename MatrixType,
typename PreconditionerType>
72 using namespace dealii;
75 SolverControl::State
solver_state = SolverControl::iterate;
77 LogStream::Prefix
prefix(
"cg");
85 std::vector<typename VectorType::value_type>
diagonal;
86 std::vector<typename VectorType::value_type>
offdiagonal;
92 internal::SolverCG::IterationWorker<VectorType, MatrixType, PreconditionerType>
131 worker.finalize_after_convergence(
it);
139 SolverControl::NoConvergence(
it,
worker.residual_norm));
This class exists as a hack to get access to the residual vector for the custom convergence criterion...
Definition linear_helper.h:34
void solve_better(const MatrixType &A, BlockVector< number > &x, const BlockVector< number > &b, const PreconditionerType &preconditioner)
Solve method we are replacing in prisms-pf because we need access to the residual.
Definition linear_helper.h:67
dealii::SolverCG< BlockVector< number > > BaseClass
Definition linear_helper.h:37
dealii::SolverCG< BlockVector< number > >::AdditionalData AddData
Definition linear_helper.h:36
CGSolver(dealii::SolverControl &cn, const AddData &data=AddData())
Constructor. Use an object of type GrowingVectorMemory as a default to allocate memory.
Definition linear_helper.h:57
CGSolver(dealii::SolverControl &cn, dealii::VectorMemory< BlockVector< number > > &mem, const AddData &data=AddData())
Constructor.
Definition linear_helper.h:47
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVector
Typedef for solution block vector.
Definition group_solution_handler.h:29
Definition conditional_ostreams.cc:20
PreconditionerType
Preconditioner type.
Definition type_enums.h:100