83 const real*
data()
const {
return data_.get(); }
93 bool on_gpu()
const {
return d_data_ !=
nullptr; }
100 std::unique_ptr<real[]> data_;
101 real* d_data_ =
nullptr;
Banded matrix with efficient storage for direct solvers.
idx kl() const
Number of lower diagonals.
idx ldab() const
Leading dimension of band storage (2*kl + ku + 1)
idx size() const
Matrix dimension.
idx bandwidth() const
Total bandwidth (kl + ku + 1)
BandedMatrix & operator=(const BandedMatrix &)
const real * gpu_data() const
real & operator()(idx i, idx j)
Access element at (row, col) in original matrix coordinates.
bool in_band(idx i, idx j) const
Check if (i,j) is within the band.
real & band(idx band_row, idx col)
Direct access to band storage.
const real * data() const
idx ku() const
Number of upper diagonals.
real * data()
Raw pointer to band storage (column-major)
BandedSolverResult banded_solve(const BandedMatrix &A, const Vector &b, Vector &x)
Solve banded system Ax = b (convenience function)
Backend
Selects which backend handles a linalg operation.
void banded_lu_solve_multi(const BandedMatrix &A, const idx *ipiv, real *B, idx nrhs)
Solve multiple right-hand sides using LU factorization.
real banded_norm1(const BandedMatrix &A)
Compute 1-norm of banded matrix.
real beta(real a, real b)
B(a, b) – beta function.
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
BandedSolverResult banded_lu(BandedMatrix &A, idx *ipiv)
LU factorization of banded matrix with partial pivoting.
real banded_rcond(const BandedMatrix &A, const idx *ipiv, real anorm)
Estimate reciprocal condition number of banded matrix.
void banded_gemv(real alpha, const BandedMatrix &A, const Vector &x, real beta, Vector &y, Backend backend=default_backend)
Banded matrix-vector product y = alpha*A*x + beta*y.
void banded_lu_solve(const BandedMatrix &A, const idx *ipiv, Vector &b)
Solve banded system using precomputed LU factorization.
constexpr Backend default_backend
void banded_matvec(const BandedMatrix &A, const Vector &x, Vector &y, Backend backend=default_backend)
Banded matrix-vector product y = A*x.
Backend enum for linear algebra operations.
Result from banded solver.
bool success
True if solve succeeded.
idx pivot_row
Row of zero pivot if singular (0 if success)
real rcond
Reciprocal condition number estimate (0 if not computed)