HLIBpro  2.6
TLDL Class Reference

computes LDL factorisation \( A = LDL^T \) or \( A = LDL^H \) More...

#include <mat_fac.hh>

Public Member Functions

void factorise (TMatrix *A, const TTruncAcc &acc) const
 
auto eval_matrix (TMatrix *A, const matform_t matform) const -> std::unique_ptr< TFacMatrix >
 
auto inv_matrix (TMatrix *A, const matform_t matform) const -> std::unique_ptr< TFacInvMatrix >
 
void split (const TMatrix *A, TMatrix *&L, TMatrix *&D) const
 
std::pair< TMatrix *, TMatrix *> split (TMatrix *A) const
 
size_t pm_steps (const TMatrix *A) const
 return number of factorisation steps for A for progress meter
 

Public Attributes

 __pad0__: _options( opts ) {} ~TLDL () {} void set_options ( const fac_options_t opts ) { _options = opts
 standard constructor with optional LDL settings
 

Detailed Description

This class computes the LDL factorisation \(A = LDL^T\) ( \(A = LDL^H\)) of a symmetric (hermitian) matrix \(A\) with lower, unit triangular matrix \(L\) and diagonal matrix \(D\).

The factorisation may be either point wise, i.e. a real LU factorisation, or block wise in which case, dense diagonal matrix blocks are inverted.

Support for multiple threads is available, although the expectable speedup is limited, e.g. best suited for at most 4 threads.

Member Function Documentation

◆ eval_matrix()

auto eval_matrix ( TMatrix A,
const matform_t  matform 
) const -> std::unique_ptr< TFacMatrix >

return suitable representation for evaluating factors L and U

Parameters
ALDL factors to be represented
matformformat of original, non-factorised matrix

◆ factorise()

void factorise ( TMatrix A,
const TTruncAcc acc 
) const

compute LDL factorisation of given matrix

Parameters
Aon input matrix to factorise; on output factors L and D
accaccuracy of factorisation

◆ inv_matrix()

auto inv_matrix ( TMatrix A,
const matform_t  matform 
) const -> std::unique_ptr< TFacInvMatrix >

return suitable inverse representation of factors L and U

Parameters
ALDL factors to be represented
matformformat of original, non-factorised matrix

◆ split() [1/2]

void split ( const TMatrix A,
TMatrix *&  L,
TMatrix *&  D 
) const

split given matrix A into individual factors L and D

Parameters
Ajoined LDL factors
Lmatrix pointer to store factor L
Dmatrix pointer to store factor D
eval_typedetermines block-wise or point-wise evaluation

◆ split() [2/2]

std::pair< TMatrix *, TMatrix * > split ( TMatrix A) const

split matrix A into individual factors L and D; A is destroyed and L/D will contain the former submatrices of A