MFEM  v4.6.0 Finite element discretization library
mfem::LUFactors Class Reference

#include <densemat.hpp>

Inheritance diagram for mfem::LUFactors:
[legend]
Collaboration diagram for mfem::LUFactors:
[legend]

## Public Member Functions

LUFactors ()

LUFactors (double *data_, int *ipiv_)

virtual bool Factor (int m, double TOL=0.0)
Compute the LU factorization of the current matrix. More...

virtual double Det (int m) const

void Mult (int m, int n, double *X) const

void LSolve (int m, int n, double *X) const

void USolve (int m, int n, double *X) const

virtual void Solve (int m, int n, double *X) const

void RightSolve (int m, int n, double *X) const

virtual void GetInverseMatrix (int m, double *X) const
Assuming L.U = P.A factored data of size (m x m), compute X <- A^{-1}. More...

void BlockFactor (int m, int n, double *A12, double *A21, double *A22) const

void BlockForwSolve (int m, int n, int r, const double *L21, double *B1, double *B2) const

void BlockBackSolve (int m, int n, int r, const double *U12, const double *X2, double *Y1) const

Public Member Functions inherited from mfem::Factors
Factors ()

Factors (double *data_)

virtual ~Factors ()

## Static Public Member Functions

static void SubMult (int m, int n, int r, const double *A21, const double *X1, double *X2)

## Public Attributes

int * ipiv

Public Attributes inherited from mfem::Factors
double * data

## Static Public Attributes

static const int ipiv_base = 1

## Detailed Description

Class that can compute LU factorization of external data and perform various operations with the factored data.

Definition at line 656 of file densemat.hpp.

## ◆ LUFactors() [1/2]

 mfem::LUFactors::LUFactors ( )
inline

With this constructor, the (public) data and ipiv members should be set explicitly before calling class methods.

Definition at line 668 of file densemat.hpp.

## ◆ LUFactors() [2/2]

 mfem::LUFactors::LUFactors ( double * data_, int * ipiv_ )
inline

Definition at line 670 of file densemat.hpp.

## ◆ BlockBackSolve()

 void mfem::LUFactors::BlockBackSolve ( int m, int n, int r, const double * U12, const double * X2, double * Y1 ) const

Given BlockFactor()'d data, perform the backward block solve in | U U12 | | X1 | = | Y1 | | 0 S22 | | X2 | | Y2 |. The input is the solution block X2 and the block Y1 resulting from BlockForwSolve(). The result block X1 overwrites input block Y1: Y1 <- X1 = U^{-1} (Y1 - U12 X2).

Definition at line 3584 of file densemat.cpp.

## ◆ BlockFactor()

 void mfem::LUFactors::BlockFactor ( int m, int n, double * A12, double * A21, double * A22 ) const

Assuming P.A = L.U factored data of size (m x m), compute the 2x2 block decomposition: | P 0 | | A A12 | = | L 0 | | U U12 | | 0 I | | A21 A22 | | L21 I | | 0 S22 | where A12, A21, and A22 are matrices of size (m x n), (n x m), and (n x n), respectively. The blocks are overwritten as follows: A12 <- U12 = L^{-1} P A12 A21 <- L21 = A21 U^{-1} A22 <- S22 = A22 - L21 U12. The block S22 is the Schur complement.

Definition at line 3549 of file densemat.cpp.

## ◆ BlockForwSolve()

 void mfem::LUFactors::BlockForwSolve ( int m, int n, int r, const double * L21, double * B1, double * B2 ) const

Given BlockFactor()'d data, perform the forward block solve for the linear system: | A A12 | | X1 | = | B1 | | A21 A22 | | X2 | | B2 | written in the factored form: | L 0 | | U U12 | | X1 | = | P 0 | | B1 | | L21 I | | 0 S22 | | X2 | | 0 I | | B2 |. The resulting blocks Y1, Y2 solve the system: | L 0 | | Y1 | = | P 0 | | B1 | | L21 I | | Y2 | | 0 I | | B2 | The blocks are overwritten as follows: B1 <- Y1 = L^{-1} P B1 B2 <- Y2 = B2 - L21 Y1 = B2 - A21 A^{-1} B1 The blocks B1/Y1 and B2/Y2 are of size (m x r) and (n x r), respectively. The Schur complement system is given by: S22 X2 = Y2.

Definition at line 3575 of file densemat.cpp.

## ◆ Det()

 double mfem::LUFactors::Det ( int m ) const
virtual

Assuming L.U = P.A factored data of size (m x m), compute |A| from the diagonal values of U and the permutation information.

Reimplemented from mfem::Factors.

Definition at line 3308 of file densemat.cpp.

## ◆ Factor()

 bool mfem::LUFactors::Factor ( int m, double TOL = 0.0 )
virtual

Compute the LU factorization of the current matrix.

Factorize the current matrix of size (m x m) overwriting it with the LU factors. The factorization is such that L.U = P.A, where A is the original matrix and P is a permutation matrix represented by ipiv.

Parameters
 [in] m size of the square matrix [in] TOL optional fuzzy comparison tolerance. Defaults to 0.0.
Returns
status set to true if successful, otherwise, false.

Reimplemented from mfem::Factors.

Definition at line 3249 of file densemat.cpp.

## ◆ GetInverseMatrix()

 void mfem::LUFactors::GetInverseMatrix ( int m, double * X ) const
virtual

Assuming L.U = P.A factored data of size (m x m), compute X <- A^{-1}.

Reimplemented from mfem::Factors.

Definition at line 3469 of file densemat.cpp.

## ◆ LSolve()

 void mfem::LUFactors::LSolve ( int m, int n, double * X ) const

Assuming L.U = P.A factored data of size (m x m), compute X <- L^{-1} P X, for a matrix X of size (m x n).

Definition at line 3359 of file densemat.cpp.

## ◆ Mult()

 void mfem::LUFactors::Mult ( int m, int n, double * X ) const

Assuming L.U = P.A factored data of size (m x m), compute X <- A X, for a matrix X of size (m x n).

Definition at line 3325 of file densemat.cpp.

## ◆ RightSolve()

 void mfem::LUFactors::RightSolve ( int m, int n, double * X ) const

Assuming L.U = P.A factored data of size (m x m), compute X <- X A^{-1}, for a matrix X of size (n x m).

Definition at line 3414 of file densemat.cpp.

## ◆ Solve()

 void mfem::LUFactors::Solve ( int m, int n, double * X ) const
virtual

Assuming L.U = P.A factored data of size (m x m), compute X <- A^{-1} X, for a matrix X of size (m x n).

Reimplemented from mfem::Factors.

Definition at line 3400 of file densemat.cpp.

## ◆ SubMult()

 void mfem::LUFactors::SubMult ( int m, int n, int r, const double * A21, const double * X1, double * X2 )
static

Given an (n x m) matrix A21, compute X2 <- X2 - A21 X1, for matrices X1, and X2 of size (m x r) and (n x r), respectively.

Definition at line 3532 of file densemat.cpp.

## ◆ USolve()

 void mfem::LUFactors::USolve ( int m, int n, double * X ) const

Assuming L.U = P.A factored data of size (m x m), compute X <- U^{-1} X, for a matrix X of size (m x n).

Definition at line 3382 of file densemat.cpp.

## ◆ ipiv

 int* mfem::LUFactors::ipiv

Definition at line 659 of file densemat.hpp.

## ◆ ipiv_base

 static const int mfem::LUFactors::ipiv_base = 1
static

Definition at line 661 of file densemat.hpp.

The documentation for this class was generated from the following files: