dune-pdelab  2.7-git
solver.hh
Go to the documentation of this file.
1 // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=8 sw=2 sts=2:
3 #ifndef DUNE_PDELAB_BACKEND_SOLVER_HH
4 #define DUNE_PDELAB_BACKEND_SOLVER_HH
5 
6 #include <dune/common/fvector.hh>
8 
9 namespace Dune {
10  namespace PDELab {
11 
15 
17  {
21  template<class V>
22  typename Dune::template FieldTraits<typename V::ElementType >::real_type norm(const V& v) const
23  {
24  return v.two_norm();
25  }
26  };
27 
28  // Status information of a linear solver
29  template<class RFType>
31  {
32  bool converged; // Solver converged
33  unsigned int iterations; // number of iterations
34  double elapsed; // total user time in seconds
35  RFType reduction; // defect reduction
36  RFType conv_rate; // convergence rate (average reduction per step)
37 
39  {
40  clear();
41  }
42 
43  void clear()
44  {
45  converged = false;
46  iterations = 0;
47  elapsed = 0.0;
48  reduction = 0.0;
49  conv_rate = 0.0;
50  }
51  };
52 
54  {
55  public:
58  {
59  return res;
60  }
61 
62  protected:
64  };
65 
67 
68 
69  template <typename LS, typename = void>
70  struct LinearSolverHasIsMatrixFree : std::false_type {};
71 
73  template <typename LS>
74  struct LinearSolverHasIsMatrixFree<LS, std::void_t<decltype(std::declval<LS>().isMatrixFree)>> : std::true_type {};
75 
80  template <typename LS>
81  constexpr bool linearSolverIsMatrixFree(){
83  if constexpr (LS::isMatrixFree){
84  return true;
85  }
86  }
87  else{
88  return false;
89  }
90  }
91 
92  } // end namespace PDELab
93 } // end namespace Dune
94 
95 
96 #endif // DUNE_PDELAB_BACKEND_SOLVER_HH
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
constexpr bool linearSolverIsMatrixFree()
Function that checks if a linear solver is matrix-free.
Definition: solver.hh:81
Definition: solver.hh:17
Dune::template FieldTraits< typename V::ElementType >::real_type norm(const V &v) const
compute global norm of a vector
Definition: solver.hh:22
Definition: solver.hh:31
void clear()
Definition: solver.hh:43
RFType conv_rate
Definition: solver.hh:36
bool converged
Definition: solver.hh:32
RFType reduction
Definition: solver.hh:35
LinearSolverResult()
Definition: solver.hh:38
unsigned int iterations
Definition: solver.hh:33
double elapsed
Definition: solver.hh:34
Definition: solver.hh:54
Dune::PDELab::LinearSolverResult< double > res
Definition: solver.hh:63
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: solver.hh:57