24template <
typename number>
35template <
typename number>
48template <
typename number>
54 return std::all_of(left.begin(),
56 numbers::value_is_zero<number>) &&
59 numbers::value_is_zero<number>) &&
60 std::all_of(right.begin(),
62 numbers::value_is_zero<number>);
67template <
typename number>
71 const bool adding)
const
84 typename std::vector<number>::const_iterator d =
diagonal.begin();
85 typename std::vector<number>::const_iterator r = right.begin();
88 typename std::vector<number>::const_iterator l = left.begin();
97 w(0) += (*d) * v(0) + (*r) * v(1);
101 for (
size_type i = 1; i < e; ++i, ++d, ++r, ++l)
102 w(i) += (*l) * v(i - 1) + (*d) * v(i) + (*r) * v(i + 1);
104 w(e) += (*l) * v(e - 1) + (*d) * v(e);
108 w(0) = (*d) * v(0) + (*r) * v(1);
111 for (
size_type i = 1; i < e; ++i, ++d, ++r, ++l)
112 w(i) = (*l) * v(i - 1) + (*d) * v(i) + (*r) * v(i + 1);
113 w(e) = (*l) * v(e - 1) + (*d) * v(e);
118template <
typename number>
128template <
typename number>
132 const bool adding)
const
143 typename std::vector<number>::const_iterator d =
diagonal.begin();
144 typename std::vector<number>::const_iterator r = right.begin();
145 typename std::vector<number>::const_iterator l = left.begin();
153 w(0) += (*d) * v(0) + (*l) * v(1);
156 for (
size_type i = 1; i < e; ++i, ++d, ++r, ++l)
157 w(i) += (*l) * v(i + 1) + (*d) * v(i) + (*r) * v(i - 1);
158 w(e) += (*d) * v(e) + (*r) * v(e - 1);
162 w(0) = (*d) * v(0) + (*l) * v(1);
165 for (
size_type i = 1; i < e; ++i, ++d, ++r, ++l)
166 w(i) = (*l) * v(i + 1) + (*d) * v(i) + (*r) * v(i - 1);
167 w(e) = (*d) * v(e) + (*r) * v(e - 1);
173template <
typename number>
183template <
typename number>
191 typename std::vector<number>::const_iterator d =
diagonal.begin();
192 typename std::vector<number>::const_iterator r = right.begin();
193 typename std::vector<number>::const_iterator l = left.begin();
199 number result = w(0) * ((*d) * v(0) + (*r) * v(1));
202 for (
size_type i = 1; i < e; ++i, ++d, ++r, ++l)
203 result += w(i) * ((*l) * v(i - 1) + (*d) * v(i) + (*r) * v(i + 1));
204 result += w(e) * ((*l) * v(e - 1) + (*d) * v(e));
210template <
typename number>
214 return matrix_scalar_product(v, v);
219template <
typename number>
223#ifdef DEAL_II_WITH_LAPACK
233 static_cast<number *
>(
nullptr),
235 static_cast<number *
>(
nullptr),
247template <
typename number>
260#ifdef DEAL_II_WITH_COMPLEX_VALUES
void Tvmult_add(Vector< number > &w, const Vector< number > &v) const
void vmult(Vector< number > &w, const Vector< number > &v, const bool adding=false) const
number matrix_norm_square(const Vector< number > &v) const
void reinit(size_type n, bool symmetric=false)
void vmult_add(Vector< number > &w, const Vector< number > &v) const
void compute_eigenvalues()
void Tvmult(Vector< number > &w, const Vector< number > &v, const bool adding=false) const
number eigenvalue(const size_type i) const
TridiagonalMatrix(size_type n=0, bool symmetric=false)
number matrix_scalar_product(const Vector< number > &u, const Vector< number > &v) const
virtual size_type size() const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcNeedsLAPACK()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcState(State arg1)
#define AssertThrow(cond, exc)
void stev(const char *, const ::types::blas_int *, number1 *, number2 *, number3 *, const ::types::blas_int *, number4 *, ::types::blas_int *)
@ matrix
Contents is actually a matrix.
@ eigenvalues
Eigenvalue vector is filled.
@ symmetric
Matrix is symmetric.
@ diagonal
Matrix is diagonal.
constexpr types::blas_int one