Discontinuous Galerkin Library
#include "dg/algorithm.h"
|
Chebyshev Polynomial Preconditioner \( C( A)\). More...
Public Types | |
using | container_type = ContainerType |
using | value_type = get_value_type< ContainerType > |
value type of the ContainerType class More... | |
Public Member Functions | |
ChebyshevPreconditioner (Matrix op, const ContainerType ©able, value_type ev_min, value_type ev_max, unsigned degree) | |
Construct the k-th Chebyshev Polynomial. More... | |
template<class ContainerType0 , class ContainerType1 > | |
void | symv (const ContainerType0 &x, ContainerType1 &y) |
Chebyshev Polynomial Preconditioner \( C( A)\).
k
, which is optimal in minimizing the A-norm. Thus a polynomial preconditioner cannot decrease the number of matrix-vector multiplications needed to achieve a certain accuracy. However, since polynomial preconditioners do not use scalar products they may offset the increased overhead if the dot product becomes a bottleneck for performance or scalability. Matrix | Preferably a reference type |
ContainerType |
using dg::ChebyshevPreconditioner< Matrix, ContainerType >::container_type = ContainerType |
using dg::ChebyshevPreconditioner< Matrix, ContainerType >::value_type = get_value_type<ContainerType> |
value type of the ContainerType class
|
inline |
Construct the k-th Chebyshev Polynomial.
op | The Matrix (copied, so maybe choose a reference type for shallow copying) will be called as dg::blas2::symv( op, x, y) |
copyable | A ContainerType must be copy-constructible from this |
ev_min | an estimate of the minimum Eigenvalue (It is important to get a good value here. Unfortunately, we currently have no perfect way of getting this value, as a suggestion use 0.01*max_ev ) |
ev_max | an estimate of the maximum Eigenvalue of \( A\) (must be larger than min_ev ) Use EVE to get this value |
degree | degree k of the Polynomial (5 should be a good number) |
|
inline |