HLIBpro
2.8.1
|
Classes | |
struct | fac_options_t |
options for matrix factorisations More... | |
class | TLU |
Computes LU factorisation \( A = LU \). More... | |
class | TLDU |
Computes LDU factorisation \( A = LDU \). More... | |
class | TLL |
computes Cholesky factorisation \( A = LL^T \) or \( A=LL^H \) More... | |
class | TLDL |
computes LDL factorisation \( A = LDL^T \) or \( A = LDL^H \) More... | |
struct | inv_options_t |
options for matrix inversion More... | |
struct | solve_option_t |
options for how to solve with given matrix More... | |
struct | eval_option_t |
options for how to evaluate given matrix More... | |
class | TLowRankApx |
base class for all low rank approximation techniques More... | |
class | TZeroLRApx |
Approximate all low-rank blocks by zero, e.g. for nearfield only. More... | |
class | TDenseLRApx< T > |
Computes dense matrix block without approximation. More... | |
class | TSVDLRApx< T > |
Uses exact SVD to compute low rank approximation (WARNING: O(n³) complexity) More... | |
class | TRandSVDLRApx< T > |
Uses randomized SVD to compute low rank approximation (WARNING: O(n²) complexity) More... | |
class | TRRQRLRApx< T > |
Uses rank-revealing QR to compute low rank approximation. More... | |
class | TACA< T > |
Defines interface for all ACA algorithms and implements classical ACA. More... | |
class | TACAPlus< T > |
Implements ACA+, which corrects some of the deficits of the original ACA algorithm. More... | |
class | TACAFull< T > |
ACA with full pivot search (complexity: O(n²)) More... | |
class | THCA< T > |
uses hybrid cross approximation (HCA) for computing low rank approximation More... | |
class | TPermHCAGeneratorFn< T_val > |
base class for HCA generator functions using row/column permutations More... | |
Functions | |
void | eval_diag (const TMatrix *A, TVector *v, const matop_t op, const eval_option_t &options) |
evaluate D·x=y with (block) diagonal D More... | |
void | eval (const TMatrix *A, TVector *v, const matop_t op, const eval_option_t &options) |
evaluate L·U·x=y with lower triangular L and upper triangular U More... | |
void | eval_lower (const TMatrix *A, TVector *v, const matop_t op, const eval_option_t &options) |
evaluate A·x=y with lower triangular A More... | |
void | eval_upper (const TMatrix *A, TVector *v, const matop_t op, const eval_option_t &options) |
evaluate A·x = y with upper triangular A More... | |
void | invert (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute \( A^{-1} \) More... | |
DAG::Graph | gen_dag_invert (TMatrix *A, const inv_options_t &opts=inv_options_t()) |
generate DAG for computing \( A^{-1} \) | |
void | invert_ll (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute \( A^{-1} \) More... | |
DAG::Graph | gen_dag_invert_ll (TMatrix *A, const inv_options_t &opts=inv_options_t()) |
generate DAG for computing \( A^{-1} \) for lower-left part of \(A\) | |
void | invert_ll (TMatrix *L, TMatrix *X, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute \( X = L^{-1} \) More... | |
void | invert_ur (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute \( A^{-1} \) More... | |
DAG::Graph | gen_dag_invert_ur (TMatrix *A, const inv_options_t &opts=inv_options_t()) |
generate DAG for computing \( A^{-1} \) for upper-right part of \(A\) | |
void | invert_diag (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute \( A^{-1} \) More... | |
TVector * | inverse_diag (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
Compute diagonal of \( A^{-1} \). More... | |
void | gauss_elim (TMatrix *A, TMatrix *C, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
Compute \(A^{-1} \) via Gaussian elimination. More... | |
void | gauss_elim (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
Compute \(A^{-1} \) via Gaussian elimination. More... | |
void | invert (TDenseMatrix *A) |
compute \( A^{-1} \) More... | |
std::unique_ptr< TDenseMatrix > | inverse (const TDenseMatrix *A) |
compute and return \( A^{-1} \) More... | |
template<typename value_t > | |
void | multiply_diag (const value_t alpha, const matop_t op_A, const TMatrix *A, const matop_t op_D, const TMatrix *D, const matop_t op_B, const TMatrix *B, const value_t beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
compute C ≔ β·C + α·op(A)·op(D)·op(B) with (block) diagonal matrix D | |
template<typename value_t > | |
void | multiply_diag_accu (const value_t alpha, const matop_t op_A, const TMatrix *A, const matop_t op_D, const TMatrix *D, const matop_t op_B, const TMatrix *B, TMatrix *C, const TTruncAcc &acc) |
compute C ≔ C + α·op(A)·op(D)·op(B) with (block) diagonal matrix D using accumulators | |
template<typename value_t > | |
std::unique_ptr< TMatrix > | multiply_diag (const value_t alpha, const matop_t op_A, const TMatrix *A, const matop_t op_D, const TMatrix *D, const matop_t op_B, const TMatrix *B) |
compute C ≔ α·op(A)·op(D)·op(B) with (block) diagonal matrix D More... | |
size_t | multiply_diag_steps (const matop_t op_A, const TMatrix *A, const matop_t op_D, const TMatrix *D, const matop_t op_B, const TMatrix *B, const TMatrix *C) |
return number of steps for computing C ≔ C + op(A)·op(D)·op(B) | |
void | mul_diag_left (const TScalarVector &v, TMatrix *A) |
compute B = diag(v)·A and overwrite A | |
void | mul_diag_right (TMatrix *A, const TScalarVector &v) |
compute B = A·diag(v) and overwrite A | |
Fourier Transformation | |
Functions for the forward and backward Fourier transformation of vectors. | |
void | fft (TVector *v) |
perform FFT for vector v (inplace) | |
void | ifft (TVector *v) |
perform inverse FFT for vector v (inplace) | |
Matrix Addition | |
template<typename T_value > | |
void | add (const T_value alpha, const TMatrix *A, const T_value beta, TMatrix *C, const TTruncAcc &acc) |
C ≔ α·A + β·C. More... | |
template<typename T_value > | |
void | add_identity (TMatrix *A, const T_value lambda) |
compute A ≔ A + λ·I | |
std::unique_ptr< TMatrix > | add (std::list< const TMatrix * > &matrices, const TTruncAcc &acc) |
compute and return Σ_i A_i | |
std::unique_ptr< TMatrix > | add (std::list< std::unique_ptr< TMatrix > > &matrices, const TTruncAcc &acc) |
Matrix Factorisation | |
Functions related to matrix factorisation, e.g. LU or Cholesky factorisation. | |
std::unique_ptr< TFacMatrix > | factorise (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute factorisation of A More... | |
std::unique_ptr< TFacInvMatrix > | factorise_inv (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute factorisation of A and return inverse operator More... | |
void | lu (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LU factorisation | |
std::unique_ptr< TFacInvMatrix > | lu_inv (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LU factorisation and return inverse operator | |
void | ldu (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LDU factorisation | |
std::unique_ptr< TFacInvMatrix > | ldu_inv (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LDU factorisation and return inverse operator | |
void | ll (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute Cholesky factorisation | |
std::unique_ptr< TFacInvMatrix > | ll_inv (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute Cholesky factorisation and return inverse operator | |
void | ldl (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LDL^H factorisation | |
std::unique_ptr< TFacInvMatrix > | ldl_inv (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LDL factorisation and return inverse operator | |
void | test_convert_dense (TBlockMatrix *B, const uint i, const uint j) |
test, if given matrix B_ij is lowrank with too large rank and convert to dense | |
void | chol (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
std::unique_ptr< TFacInvMatrix > | chol_inv (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
Matrix Multiplication | |
template<typename T_value > | |
void | multiply (const T_value alpha, const matop_t op_A, const TMatrix *A, const matop_t op_B, const TMatrix *B, const T_value beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
compute C ≔ β·C + α·op(A)·op(B) More... | |
template<typename T_value > | |
void | multiply (const T_value alpha, const TMatrix *A, const TMatrix *B, const T_value beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
compute C = β·C + α·A·B More... | |
template<typename value_t > | |
void | multiply_accu (const value_t alpha, const matop_t op_A, const TMatrix *A, const matop_t op_B, const TMatrix *B, const value_t beta, TMatrix *C, const TTruncAcc &acc) |
compute C ≔ C + α·op(A)·op(B) using accumulators | |
template<typename T_value > | |
std::unique_ptr< TMatrix > | multiply (const T_value alpha, const matop_t op_A, const TMatrix *A, const matop_t op_B, const TMatrix *B) |
compute C ≔ β·C + α·op(A)·op(B) More... | |
void | multiply_ll_left (const real alpha, const TMatrix *L, TMatrix *A, const TTruncAcc &acc, const eval_option_t &opts) |
compute A ≔ α·L·A with lower left tridiagonal L | |
void | multiply_ll_right (const real alpha, TMatrix *A, const TMatrix *L, const TTruncAcc &acc, const eval_option_t &opts) |
compute A ≔ α·A·L with lower left tridiagonal L | |
void | multiply_ll_right (const real alpha, const TMatrix *A, const TMatrix *B, TMatrix *C, const TTruncAcc &acc, const eval_option_t &opts) |
compute C ≔ C + α·A·B with lower left tridiagonal B | |
void | multiply_ur_left (const real alpha, const TMatrix *U, TMatrix *A, const TTruncAcc &acc, const eval_option_t &opts) |
compute A ≔ α·U·A with upper right tridiagonal U | |
void | multiply_ur_right (const real alpha, TMatrix *A, const TMatrix *U, const TTruncAcc &acc, const eval_option_t &opts) |
compute A ≔ α·A·U with upper right tridiagonal U | |
void | multiply_ur_ll (const TMatrix *U, const TMatrix *L, TMatrix *A, const TTruncAcc &acc, const eval_option_t &opts_U, const eval_option_t &opts_L) |
Compute A ≔ A + U·L. More... | |
void | multiply_llt_d_ll (const TMatrix *L, const TMatrix *D, TMatrix *C, const matop_t op_L, const TTruncAcc &acc) |
Compute C ≔ C + L^T·D·L. More... | |
void | multiply_llt_d_left (const real alpha, const TMatrix *L, const TMatrix *D, TMatrix *B, const matop_t op_L, const TTruncAcc &acc) |
Compute B ≔ op(L)·D·B inplace, overwriting B. More... | |
void | multiply_llt_d_left (const real alpha, const TMatrix *L, const TMatrix *D, const TMatrix *B, TMatrix *C, const matop_t op_L, const TTruncAcc &acc) |
Compute C ≔ C + op(L)·D·B. More... | |
template<typename T_value > | |
void | multiply (const T_value alpha, const TMatrixView &A, const TMatrix *B, const T_value beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
template<typename T_value > | |
void | multiply (const T_value alpha, const TMatrix *A, const TMatrixView &B, const T_value beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
template<typename T_value > | |
void | multiply (const T_value alpha, const TMatrixView &A, const TMatrixView &B, const T_value beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
template<typename value_t > | |
void | add_product (const value_t alpha, const matop_t op_A, const TMatrix *A, const matop_t op_B, const TMatrix *B, TMatrix *C, const TTruncAcc &acc, const bool lazy=CFG::Arith::lazy_eval) |
template<typename T_value > | |
std::unique_ptr< TMatrix > | multiply (const T_value alpha, const matop_t op_A, const TRkMatrix *A, const matop_t op_B, const TMatrix *B) |
template<typename T_value > | |
std::unique_ptr< TMatrix > | multiply (const T_value alpha, const matop_t op_A, const TMatrix *A, const matop_t op_B, const TRkMatrix *B) |
template<typename T_value > | |
std::unique_ptr< TMatrix > | multiply (const T_value alpha, const matop_t op_A, const TDenseMatrix *A, const matop_t op_B, const TMatrix *B) |
template<typename T_value > | |
std::unique_ptr< TMatrix > | multiply (const T_value alpha, const matop_t op_A, const TMatrix *A, const matop_t op_B, const TDenseMatrix *B) |
size_t | multiply_steps (const matop_t op_A, const TMatrix *A, const matop_t op_B, const TMatrix *B, const TMatrix *C) |
size_t | multiply_ll_left_steps (const TMatrix *A, const TMatrix *B) |
size_t | multiply_ll_right_steps (const TMatrix *A, const TMatrix *B) |
size_t | multiply_ur_left_steps (const TMatrix *A, const TMatrix *B) |
size_t | multiply_ur_right_steps (const TMatrix *A, const TMatrix *B) |
size_t | multiply_ur_ll_steps (const TMatrix *A) |
size_t | multiply_llt_d_ll_steps (const TMatrix *L) |
size_t | multiply_llt_d_left_steps (const TMatrix *L, const TMatrix *B) |
Matrix-Vector Multiplication | |
void | mul_vec (const TProcSet &ps, const real alpha, const TMatrix *A, const TVector *x, const real beta, TVector *y, const matop_t op) |
compute y ≔ α·A·x + β·y on (possibly) distributed matrix A on all processors in ps More... | |
void | cmul_vec (const TProcSet &ps, const complex alpha, const TMatrix *A, const TVector *x, const complex beta, TVector *y, const matop_t op) |
same as mul_vec but with complex valued scalars ( More... | |
void | mul_vec_diag (const real alpha, const matop_t op_A, const TMatrix *A, const matop_t op_D, const TMatrix *D, const TVector *x, const real beta, TVector *y) |
compute y ≔ α·A·D·x + β·y with diagonal matrix D More... | |
This module provides most higher level algebra functions, e.g. matrix multiplication, inversion and factorisation. See also Basic Matrix Algebra and Matrix Factorisation for an introduction into H-arithmetic.
To include all algebra functions and classes add
to your source files.
void HLIB::add | ( | const T_value | alpha, |
const TMatrix * | A, | ||
const T_value | beta, | ||
TMatrix * | C, | ||
const TTruncAcc & | acc | ||
) |
The function computes the sum \f$ C := \alpha A + \beta C \f$ with a predefined accuracy \a acc. Thread parallel execution is supported.
alpha | scaling factor for A |
A | update matrix for C |
beta | scaling factor for C |
C | matrix to update |
acc | accuracy of summation |
void HLIB::add_product | ( | const value_t | alpha, |
const matop_t | op_A, | ||
const TMatrix * | A, | ||
const matop_t | op_B, | ||
const TMatrix * | B, | ||
TMatrix * | C, | ||
const TTruncAcc & | acc, | ||
const bool | lazy = CFG::Arith::lazy_eval |
||
) |
start accumulator based matrix multiplication C = C + α·A·B
void HLIB::cmul_vec | ( | const TProcSet & | ps, |
const complex | alpha, | ||
const TMatrix * | A, | ||
const TVector * | x, | ||
const complex | beta, | ||
TVector * | y, | ||
const matop_t | op | ||
) |
void HLIB::eval | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const eval_option_t & | options | ||
) |
void HLIB::eval_diag | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const eval_option_t & | options | ||
) |
void HLIB::eval_lower | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const eval_option_t & | options | ||
) |
void HLIB::eval_upper | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const eval_option_t & | options | ||
) |
std::unique_ptr< TFacMatrix > HLIB::factorise | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const fac_options_t & | options = fac_options_t() |
||
) |
Compute triangular factorisation of \a A while choosing appropriate factorisation method depending on the format of \a A, e.g. if unsymmetric, symmetric or hermitian. The return value is an operator object representing the factorised form and suitable for evaluation, e.g. matrix-vector multiplication (see TFacMatrix). \a A will be overwritten with the actual factorisation data.
std::unique_ptr< TFacInvMatrix > HLIB::factorise_inv | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const fac_options_t & | options = fac_options_t() |
||
) |
Compute triangular factorisation of \a A as in factorise but instead of an operator for evaluation of the factorised \a A, an operator for evaluation of the inverse of \a A is returned (see TFacInvMatrix).
void HLIB::gauss_elim | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
\a A is overwritten by \f$A^{-1} \f$. The elimination is performed in-place, although local copy operations are needed. (ATTENTION: experimental)
void HLIB::gauss_elim | ( | TMatrix * | A, |
TMatrix * | C, | ||
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
\a A is overwritten by \f$A^{-1} \f$. \a C is optional and may be used during computation as temporary space. If present, it should have same format as \a A.
std::unique_ptr< TDenseMatrix > HLIB::inverse | ( | const TDenseMatrix * | A | ) |
Compute inverse of \f$ A \f$ (dense matrix version) but do not modify \f$ A \f$.
TVector* HLIB::inverse_diag | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute only the diagonal of \a A and return the resulting vector. \a A is modified during computation.
void HLIB::invert | ( | TDenseMatrix * | A | ) |
Compute inverse of \f$ A \f$ (dense matrix version). \a A is overwritten by \f$ A^{-1} \f$ during inversion.
void HLIB::invert | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of \f$ A \f$ with block-wise accuracy \a acc. \a A is overwritten by \f$ A^{-1} \f$ during inversion.
void HLIB::invert_diag | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of diagonal matrix \f$ A \f$ with block-wise accuracy \a acc. \a A is overwritten by \f$ A^{-1} \f$ during inversion.
void HLIB::invert_ll | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of lower-left triangular matrix \f$ A \f$ with block-wise accuracy \a acc. \a A is overwritten by \f$ A^{-1} \f$ during inversion.
void HLIB::invert_ll | ( | TMatrix * | L, |
TMatrix * | X, | ||
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of lower-left triangular matrix \f$ L \f$ with block-wise accuracy \a acc. \a L may be modified during inversion.
void HLIB::invert_ur | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of upper-right triangular matrix \f$ A \f$ with block-wise accuracy \a acc. \a A is overwritten by \f$ A^{-1} \f$ during inversion.
void HLIB::mul_vec | ( | const TProcSet & | ps, |
const real | alpha, | ||
const TMatrix * | A, | ||
const TVector * | x, | ||
const real | beta, | ||
TVector * | y, | ||
const matop_t | op | ||
) |
ps | processor set defining processors involved in computation |
alpha | scaling factor for multiplication |
A | matrix to multiply with |
x | vector to multiply with |
beta | scaling factor of updated vector |
y | vector to update with multiplication result |
op | defines transformation of matrix, e.g. transposed, adjoint ( |
void HLIB::mul_vec_diag | ( | const real | alpha, |
const matop_t | op_A, | ||
const TMatrix * | A, | ||
const matop_t | op_D, | ||
const TMatrix * | D, | ||
const TVector * | x, | ||
const real | beta, | ||
TVector * | y | ||
) |
alpha | scaling factor for update |
op_A | transformation of matrix A, e.g. transposed, adjoint ( |
A | arbitrary matrix |
op_D | transformation of matrix D |
D | diagonal matrix |
x | source vector |
beta | scaling factor for destination |
y | destination vector |
std::unique_ptr< TMatrix > HLIB::multiply | ( | const T_value | alpha, |
const matop_t | op_A, | ||
const TMatrix * | A, | ||
const matop_t | op_B, | ||
const TMatrix * | B | ||
) |
The function computes to matrix product \f$\alpha \tilde A \tilde B\f$ where \f$\tilde A\f$ and \f$\tilde B\f$ may be the non-modified, transposed or adjoint matrices \f$A\f$ and \f$B\f$ respectively. The output format is based on the format of \f$A\f$ or \f$B\f$, which assumes that at least one of those is a non-blocked matrix. Otherwise, an exception is thrown!
alpha | scaling factor of product |
op_A | matrix modifier for A |
A | first matrix factor |
op_B | matrix modifier for B |
B | second matrix factor |
void HLIB::multiply | ( | const T_value | alpha, |
const matop_t | op_A, | ||
const TMatrix * | A, | ||
const matop_t | op_B, | ||
const TMatrix * | B, | ||
const T_value | beta, | ||
TMatrix * | C, | ||
const TTruncAcc & | acc, | ||
TProgressBar * | progress = NULL |
||
) |
The function computes to matrix product \f$C := \beta C + \alpha \tilde A \tilde B\f$ where \f$\tilde A\f$ and \f$\tilde B\f$ may be the non-modified, transposed or adjoint matrices \f$A\f$ and \f$B\f$ respectively. The result of the multiplication is written to \f$C\f$, whereby the block structure of \a C is not changed, e.g. the resulting block structure of the product is defined by \a C. Thread-parallel execution is supported by the matrix multiplication. This function is available in various versions without corresponding parameters, e.g. without \a op_A, \a op_B.
alpha | scaling factor of product |
op_A | matrix modifier for A |
A | first matrix factor |
op_B | matrix modifier for B |
B | second matrix factor |
beta | scaling factor for C |
C | matrix to update |
acc | accuracy of multiplication |
progress | optional progress bar |
|
inline |
matrices are provided as matrix view (or in combination with matrix)
std::unique_ptr< TMatrix > HLIB::multiply_diag | ( | const value_t | alpha, |
const matop_t | op_A, | ||
const TMatrix * | A, | ||
const matop_t | op_D, | ||
const TMatrix * | D, | ||
const matop_t | op_B, | ||
const TMatrix * | B | ||
) |
void HLIB::multiply_llt_d_left | ( | const real | alpha, |
const TMatrix * | L, | ||
const TMatrix * | D, | ||
const TMatrix * | B, | ||
TMatrix * | C, | ||
const matop_t | op_L, | ||
const TTruncAcc & | acc | ||
) |
Compute C ≔ C + op(L)·D·B with lower left tridiagonal L, diagonal D and general B
void HLIB::multiply_llt_d_left | ( | const real | alpha, |
const TMatrix * | L, | ||
const TMatrix * | D, | ||
TMatrix * | B, | ||
const matop_t | op_L, | ||
const TTruncAcc & | acc | ||
) |
Compute B ≔ op(L)·D·B with lower left tridiagonal L and diagonal D.
void HLIB::multiply_llt_d_ll | ( | const TMatrix * | L, |
const TMatrix * | D, | ||
TMatrix * | C, | ||
const matop_t | op_L, | ||
const TTruncAcc & | acc | ||
) |
Compute C ≔ C + L^T·D·L with lower left tridiagonal L and diagonal D.
void HLIB::multiply_ur_ll | ( | const TMatrix * | U, |
const TMatrix * | L, | ||
TMatrix * | A, | ||
const TTruncAcc & | acc, | ||
const eval_option_t & | opts_U, | ||
const eval_option_t & | opts_L | ||
) |
Compute A ≔ A + U·L with lower left tridiagonal L and upper right tridiagonal U.