HLIBpro
2.4
|
Classes | |
struct | fac_options_t |
options for matrix factorisations More... | |
class | TLU |
Computes LU factorisation . More... | |
class | TLDU |
Computes LDU factorisation . More... | |
class | TLL |
computes Cholesky factorisation or More... | |
class | TLDL |
computes LDL factorisation or More... | |
struct | inv_options_t |
options for matrix inversion More... | |
struct | solve_option_t |
determines characteristics of triangular system More... | |
struct | tri_eval_option_t |
determines characteristics of triangular system 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 | TSVDLRApx< T > |
Uses exact SVD to compute low rank approximation (WARNING: O(n³) complexity) 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 tri_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 tri_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 tri_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 tri_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 More... | |
void | invert_ll (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute More... | |
void | invert_ur (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute More... | |
void | invert_diag (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
compute More... | |
TVector * | inverse_diag (TMatrix *A, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
Compute diagonal of . More... | |
void | gauss_elim (TMatrix *A, TMatrix *C, const TTruncAcc &acc, const inv_options_t &opts=inv_options_t()) |
Compute via Gaussian elimination. More... | |
void | invert (TDenseMatrix *A) |
compute More... | |
std::unique_ptr< TDenseMatrix > | inverse (const TDenseMatrix *A) |
compute and return More... | |
void | multiply_diag (const real 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 real beta, TMatrix *C, const TTruncAcc &acc, TProgressBar *progress=NULL) |
compute C ≔ β·C + α·op(A)·op(D)·op(B) where D is a block diagonal matrix | |
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 | |
Matrix Factorisation | |
Functions related to matrix factorisation, e.g. LU or Cholesky factorisation. | |
std::unique_ptr< TLinearOperator > | factorise (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute factorisation of A More... | |
std::unique_ptr< TLinearOperator > | 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 using TLU | |
void | ldu (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LDU factorisation using TLDU | |
void | ll (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LL^H factorisation using TLL | |
void | ldl (TMatrix *A, const TTruncAcc &acc, const fac_options_t &options=fac_options_t()) |
compute LDL^H factorisation using TLDL | |
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... | |
void | multiply_ll_left (const real alpha, const TMatrix *L, TMatrix *A, const TTruncAcc &acc, const tri_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 tri_eval_option_t &opts) |
compute A ≔ α·A·L with lower left tridiagonal L | |
void | multiply_ur_left (const real alpha, const TMatrix *U, TMatrix *A, const TTruncAcc &acc, const tri_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 tri_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) |
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) |
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 𝓗-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 with a predefined accuracy 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::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 tri_eval_option_t & | options | ||
) |
void HLIB::eval_diag | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const tri_eval_option_t & | options | ||
) |
void HLIB::eval_lower | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const tri_eval_option_t & | options | ||
) |
void HLIB::eval_upper | ( | const TMatrix * | A, |
TVector * | v, | ||
const matop_t | op, | ||
const tri_eval_option_t & | options | ||
) |
std::unique_ptr< TLinearOperator > HLIB::factorise | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const fac_options_t & | options = fac_options_t() |
||
) |
Compute triangular factorisation of A while choosing appropriate factorisation method depending on the format of 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 will be overwritten with the actual factorisation data.
std::unique_ptr< TLinearOperator > HLIB::factorise_inv | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const fac_options_t & | options = fac_options_t() |
||
) |
Compute triangular factorisation of A as in factorise but instead of an operator for evaluation of the factorised A, an operator for evaluation of the inverse of A is returned (see TFacInvMatrix).
void HLIB::gauss_elim | ( | TMatrix * | A, |
TMatrix * | C, | ||
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
A is modified during computation.
std::unique_ptr< TDenseMatrix > HLIB::inverse | ( | const TDenseMatrix * | A | ) |
Compute inverse of (dense matrix version) but do not modify .
TVector* HLIB::inverse_diag | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute only the diagonal of A and return the resulting vector. A is modified during computation.
void HLIB::invert | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of with block-wise accuracy acc. A is overwritten by during inversion.
void HLIB::invert | ( | TDenseMatrix * | A | ) |
Compute inverse of (dense matrix version). A is overwritten by during inversion.
void HLIB::invert_diag | ( | TMatrix * | A, |
const TTruncAcc & | acc, | ||
const inv_options_t & | opts = inv_options_t() |
||
) |
Compute inverse of diagonal matrix with block-wise accuracy acc. A is overwritten by 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 with block-wise accuracy acc. A is overwritten by 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 with block-wise accuracy acc. A is overwritten by 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 |
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 where and may be the non-modified, transposed or adjoint matrices and respectively.
The result of the multiplication is written to , whereby the block structure of C is not changed, e.g. the resulting block structure of the product is defined by C.
Thread-parallel execution is supported by the matrix multiplication.
This function is available in various versions without corresponding parameters, e.g. without op_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)
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_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_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.