batmat main
Batched linear algebra routines
Loading...
Searching...
No Matches
batmat::linalg::micro_kernels::sterf Namespace Reference

Classes

struct  SterfOptions

Functions

template<class T, class Abi>
std::expected< index_t, index_tsterf (view< T, Abi, StorageOrder::ColMajor > diag, view< T, Abi, StorageOrder::ColMajor > subdiag, SterfOptions options) noexcept
 Eigenvalues of a symmetric tridiagonal matrix given by diag and subdiag, computed in-place using the Pal-Walker-Kahan variant of the implicit QR/QL method with Wilkinson shifts.
constexpr auto default_tolerance (auto user_tol) noexcept
template<class T, class Abi>
datapar::simd< T, Abi > safe_scaling_factor (datapar::simd< T, Abi > anorm) noexcept
template<class T, class Abi>
bool all_zero (datapar::simd< T, Abi > x) noexcept
template<class T, class Abi>
bool negligible_squared_e (datapar::simd< T, Abi > e0_sq, datapar::simd< T, Abi > d0, datapar::simd< T, Abi > d1, T ε_sq) noexcept
template<class T, class Abi>
std::pair< datapar::simd< T, Abi >, datapar::simd< T, Abi > > stable_2x2_eigenvalues (datapar::simd< T, Abi > a, datapar::simd< T, Abi > b, datapar::simd< T, Abi > c) noexcept
 Eigenvalues of [a b; b c].
template<class T, class Abi>
void solve_2x2_squared_e_inplace (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e, index_t l) noexcept
template<class T, class Abi>
void scale_diag_only (uview< T, Abi, StorageOrder::ColMajor > d, index_t l, index_t m, datapar::simd< T, Abi > factor) noexcept
template<class T, class Abi>
void scale_squared_e (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e, index_t l, index_t m, datapar::simd< T, Abi > factor) noexcept
template<class T, class Abi>
void sterf_ql_sweep_squared_e_inplace (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e, index_t l, index_t m) noexcept
template<class T, class Abi>
void sterf_qr_sweep_squared_e_inplace (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e, index_t l, index_t m) noexcept
template<class T, class Abi>
void sterf_dynamic_step_squared_e_inplace (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e, index_t l, index_t m) noexcept
template<class T, class Abi>
datapar::simd< T, Abi > squared_block_norm_estimate_from_squared_e (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e_sq, index_t l, index_t m) noexcept
template<class T, class Abi>
datapar::simd< T, Abi > block_norm_estimate_from_squared_e (uview< T, Abi, StorageOrder::ColMajor > d, uview< T, Abi, StorageOrder::ColMajor > e_sq, index_t l, index_t m) noexcept

Class Documentation

◆ batmat::linalg::micro_kernels::sterf::SterfOptions

struct batmat::linalg::micro_kernels::sterf::SterfOptions
Class Members
double relative_tolerance = 0.0 If <= 0, machine epsilon is used.
index_t max_iterations_per_eigenvalue = 64

Function Documentation

◆ sterf()

template<class T, class Abi>
std::expected< index_t, index_t > batmat::linalg::micro_kernels::sterf::sterf ( view< T, Abi, StorageOrder::ColMajor > diag,
view< T, Abi, StorageOrder::ColMajor > subdiag,
SterfOptions options )
noexcept

Eigenvalues of a symmetric tridiagonal matrix given by diag and subdiag, computed in-place using the Pal-Walker-Kahan variant of the implicit QR/QL method with Wilkinson shifts.

Based on LAPACK 3.12.1's STERF: https://netlib.org/lapack//explore-html/d4/d9d/group__sterf_gad293bb81da1c7785b42796d1e197f08c.html

Definition at line 227 of file sterf.tpp.

◆ default_tolerance()

auto batmat::linalg::micro_kernels::sterf::default_tolerance ( auto user_tol)
nodiscardconstexprnoexcept

Definition at line 16 of file sterf.tpp.

◆ safe_scaling_factor()

template<class T, class Abi>
datapar::simd< T, Abi > batmat::linalg::micro_kernels::sterf::safe_scaling_factor ( datapar::simd< T, Abi > anorm)
nodiscardnoexcept

Definition at line 21 of file sterf.tpp.

◆ all_zero()

template<class T, class Abi>
bool batmat::linalg::micro_kernels::sterf::all_zero ( datapar::simd< T, Abi > x)
nodiscardnoexcept

Definition at line 39 of file sterf.tpp.

◆ negligible_squared_e()

template<class T, class Abi>
bool batmat::linalg::micro_kernels::sterf::negligible_squared_e ( datapar::simd< T, Abi > e0_sq,
datapar::simd< T, Abi > d0,
datapar::simd< T, Abi > d1,
T ε_sq )
nodiscardnoexcept

Definition at line 45 of file sterf.tpp.

◆ stable_2x2_eigenvalues()

template<class T, class Abi>
std::pair< datapar::simd< T, Abi >, datapar::simd< T, Abi > > batmat::linalg::micro_kernels::sterf::stable_2x2_eigenvalues ( datapar::simd< T, Abi > a,
datapar::simd< T, Abi > b,
datapar::simd< T, Abi > c )
nodiscardnoexcept

Eigenvalues of [a b; b c].

Definition at line 55 of file sterf.tpp.

◆ solve_2x2_squared_e_inplace()

template<class T, class Abi>
void batmat::linalg::micro_kernels::sterf::solve_2x2_squared_e_inplace ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e,
index_t l )
noexcept

Definition at line 70 of file sterf.tpp.

◆ scale_diag_only()

template<class T, class Abi>
void batmat::linalg::micro_kernels::sterf::scale_diag_only ( uview< T, Abi, StorageOrder::ColMajor > d,
index_t l,
index_t m,
datapar::simd< T, Abi > factor )
noexcept

Definition at line 81 of file sterf.tpp.

◆ scale_squared_e()

template<class T, class Abi>
void batmat::linalg::micro_kernels::sterf::scale_squared_e ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e,
index_t l,
index_t m,
datapar::simd< T, Abi > factor )
noexcept

Definition at line 88 of file sterf.tpp.

◆ sterf_ql_sweep_squared_e_inplace()

template<class T, class Abi>
void batmat::linalg::micro_kernels::sterf::sterf_ql_sweep_squared_e_inplace ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e,
index_t l,
index_t m )
noexcept

Definition at line 98 of file sterf.tpp.

◆ sterf_qr_sweep_squared_e_inplace()

template<class T, class Abi>
void batmat::linalg::micro_kernels::sterf::sterf_qr_sweep_squared_e_inplace ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e,
index_t l,
index_t m )
noexcept

Definition at line 139 of file sterf.tpp.

◆ sterf_dynamic_step_squared_e_inplace()

template<class T, class Abi>
void batmat::linalg::micro_kernels::sterf::sterf_dynamic_step_squared_e_inplace ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e,
index_t l,
index_t m )
noexcept

Definition at line 180 of file sterf.tpp.

◆ squared_block_norm_estimate_from_squared_e()

template<class T, class Abi>
datapar::simd< T, Abi > batmat::linalg::micro_kernels::sterf::squared_block_norm_estimate_from_squared_e ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e_sq,
index_t l,
index_t m )
nodiscardnoexcept

Definition at line 194 of file sterf.tpp.

◆ block_norm_estimate_from_squared_e()

template<class T, class Abi>
datapar::simd< T, Abi > batmat::linalg::micro_kernels::sterf::block_norm_estimate_from_squared_e ( uview< T, Abi, StorageOrder::ColMajor > d,
uview< T, Abi, StorageOrder::ColMajor > e_sq,
index_t l,
index_t m )
nodiscardnoexcept

Definition at line 215 of file sterf.tpp.