16inline void check_symmetric_tridiagonal_shape(std::size_t diagonal_size, std::size_t offdiagonal_size)
18 if (diagonal_size == 0)
20 PRECONDITION(offdiagonal_size == 0,
"invalid symmetric tridiagonal shape", diagonal_size, offdiagonal_size);
24 PRECONDITION(offdiagonal_size + 1 == diagonal_size,
"invalid symmetric tridiagonal shape", diagonal_size,
48 [[nodiscard]]
constexpr std::size_t
size() const noexcept {
return diagonal.size(); }
49 [[nodiscard]]
constexpr bool empty() const noexcept {
return diagonal.empty(); }
54 PRECONDITION(column < this->
size(),
"symmetric tridiagonal column index out of range", column, this->
size());
59 if (
row + 1 == column)
63 if (column + 1 ==
row)
71template <uni20::Real Real>
73 std::span<Real const> offdiagonal)
87 std::vector<Real> diagonal_storage_;
88 std::vector<Real> offdiagonal_storage_;
95 : diagonal_storage_(
size), offdiagonal_storage_(
size == 0 ? 0 :
size - 1),
diagonal(diagonal_storage_),
100 : diagonal_storage_(other.diagonal_storage_), offdiagonal_storage_(other.offdiagonal_storage_),
105 : diagonal_storage_(std::move(other.diagonal_storage_)),
106 offdiagonal_storage_(std::move(other.offdiagonal_storage_)),
diagonal(diagonal_storage_),
113 [[nodiscard]] std::size_t
size() const noexcept {
return diagonal.size(); }
Fixed-size owning real symmetric tridiagonal matrix.
Definition krylov/tridiagonal.hpp:85
std::size_t size() const noexcept
Definition krylov/tridiagonal.hpp:113
symmetric_tridiagonal_matrix(symmetric_tridiagonal_matrix &&other) noexcept
Definition krylov/tridiagonal.hpp:104
symmetric_tridiagonal_matrix(symmetric_tridiagonal_matrix const &other)
Definition krylov/tridiagonal.hpp:99
symmetric_tridiagonal_matrix(std::size_t size)
Definition krylov/tridiagonal.hpp:94
std::span< Real > const offdiagonal
Definition krylov/tridiagonal.hpp:92
std::span< Real > const diagonal
Definition krylov/tridiagonal.hpp:91
symmetric_tridiagonal_matrix & operator=(symmetric_tridiagonal_matrix &&)=delete
bool empty() const noexcept
Definition krylov/tridiagonal.hpp:114
Real operator[](std::size_t row, std::size_t column) const
Definition krylov/tridiagonal.hpp:121
symmetric_tridiagonal_view< Real > view() const noexcept
Definition krylov/tridiagonal.hpp:116
symmetric_tridiagonal_matrix & operator=(symmetric_tridiagonal_matrix const &)=delete
Concept for real scalar types (float, double, etc.).
Definition scalar_concepts.hpp:69
Definition block_tensor_vector.hpp:23
symmetric_tridiagonal_view< Real > symmetric_tridiagonal(std::span< Real const > diagonal, std::span< Real const > offdiagonal)
Definition krylov/tridiagonal.hpp:72
Non-owning read-only view of a real symmetric tridiagonal matrix.
Definition krylov/tridiagonal.hpp:38
std::span< Real const > const diagonal
Definition krylov/tridiagonal.hpp:39
std::span< Real const > const offdiagonal
Definition krylov/tridiagonal.hpp:40
Real operator[](std::size_t row, std::size_t column) const
Definition krylov/tridiagonal.hpp:51
constexpr bool empty() const noexcept
Definition krylov/tridiagonal.hpp:49
constexpr std::size_t size() const noexcept
Definition krylov/tridiagonal.hpp:48
symmetric_tridiagonal_view(std::span< Real const > diagonal_in, std::span< Real const > offdiagonal_in)
Definition krylov/tridiagonal.hpp:42
#define PRECONDITION(cond,...)
Definition trace.hpp:341