Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Eigen::UmfPackLU< _MatrixType > Class Template Reference

A sparse LU factorization and solver based on UmfPack. More...

#include <src/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h>

+ Inheritance diagram for Eigen::UmfPackLU< _MatrixType >:
+ Collaboration diagram for Eigen::UmfPackLU< _MatrixType >:

Public Types

enum  { ColsAtCompileTime = MatrixType::ColsAtCompileTime , MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime }
 
typedef _MatrixType MatrixType
 
typedef MatrixType::Scalar Scalar
 
typedef MatrixType::RealScalar RealScalar
 
typedef MatrixType::StorageIndex StorageIndex
 
typedef Matrix< Scalar, Dynamic, 1 > Vector
 
typedef Matrix< int, 1, MatrixType::ColsAtCompileTime > IntRowVectorType
 
typedef Matrix< int, MatrixType::RowsAtCompileTime, 1 > IntColVectorType
 
typedef SparseMatrix< ScalarLUMatrixType
 
typedef SparseMatrix< Scalar, ColMajor, int > UmfpackMatrixType
 
typedef Ref< const UmfpackMatrixType, StandardCompressedFormatUmfpackMatrixRef
 
typedef Array< double, UMFPACK_CONTROL, 1 > UmfpackControl
 
typedef Array< double, UMFPACK_INFO, 1 > UmfpackInfo
 

Public Member Functions

 UmfPackLU ()
 
template<typename InputMatrixType >
 UmfPackLU (const InputMatrixType &matrix)
 
 ~UmfPackLU ()
 
Index rows () const
 
Index cols () const
 
ComputationInfo info () const
 Reports whether previous computation was successful.
 
const LUMatrixTypematrixL () const
 
const LUMatrixTypematrixU () const
 
const IntColVectorTypepermutationP () const
 
const IntRowVectorTypepermutationQ () const
 
template<typename InputMatrixType >
void compute (const InputMatrixType &matrix)
 
template<typename InputMatrixType >
void analyzePattern (const InputMatrixType &matrix)
 
int umfpackFactorizeReturncode () const
 
const UmfpackControlumfpackControl () const
 
UmfpackControlumfpackControl ()
 
template<typename InputMatrixType >
void factorize (const InputMatrixType &matrix)
 
void umfpackReportControl ()
 
void umfpackReportInfo ()
 
void umfpackReportStatus ()
 
template<typename BDerived , typename XDerived >
bool _solve_impl (const MatrixBase< BDerived > &b, MatrixBase< XDerived > &x) const
 
Scalar determinant () const
 
void extractData () const
 
UmfPackLU< _MatrixType > & derived ()
 
const UmfPackLU< _MatrixType > & derived () const
 
const Solve< UmfPackLU< _MatrixType >, Rhs > solve (const MatrixBase< Rhs > &b) const
 
const Solve< UmfPackLU< _MatrixType >, Rhs > solve (const SparseMatrixBase< Rhs > &b) const
 
void _solve_impl (const SparseMatrixBase< Rhs > &b, SparseMatrixBase< Dest > &dest) const
 

Protected Types

typedef SparseSolverBase< UmfPackLU< _MatrixType > > Base
 

Protected Member Functions

void init ()
 
void analyzePattern_impl ()
 
void factorize_impl ()
 
template<typename MatrixDerived >
void grab (const EigenBase< MatrixDerived > &A)
 
void grab (const UmfpackMatrixRef &A)
 

Protected Attributes

LUMatrixType m_l
 
int m_fact_errorCode
 
UmfpackControl m_control
 
UmfpackInfo m_umfpackInfo
 
LUMatrixType m_u
 
IntColVectorType m_p
 
IntRowVectorType m_q
 
UmfpackMatrixType m_dummy
 
UmfpackMatrixRef mp_matrix
 
voidm_numeric
 
voidm_symbolic
 
ComputationInfo m_info
 
int m_factorizationIsOk
 
int m_analysisIsOk
 
bool m_extractedDataAreDirty
 
bool m_isInitialized
 

Private Member Functions

 UmfPackLU (const UmfPackLU &)
 

Detailed Description

template<typename _MatrixType>
class Eigen::UmfPackLU< _MatrixType >

A sparse LU factorization and solver based on UmfPack.

This class allows to solve for A.X = B sparse linear problems via a LU factorization using the UmfPack library. The sparse matrix A must be squared and full rank. The vectors or matrices X and B can be either dense or sparse.

Warning
The input matrix A should be in a compressed and column-major form. Otherwise an expensive copy will be made. You can call the inexpensive makeCompressed() to get a compressed matrix.
Template Parameters
_MatrixTypethe type of the sparse matrix A, it must be a SparseMatrix<>

\implsparsesolverconcept

See also
TutorialSparseSolverConcept, class SparseLU

Member Typedef Documentation

◆ Base

template<typename _MatrixType >
typedef SparseSolverBase<UmfPackLU<_MatrixType> > Eigen::UmfPackLU< _MatrixType >::Base
protected

◆ IntColVectorType

template<typename _MatrixType >
typedef Matrix<int, MatrixType::RowsAtCompileTime, 1> Eigen::UmfPackLU< _MatrixType >::IntColVectorType

◆ IntRowVectorType

template<typename _MatrixType >
typedef Matrix<int, 1, MatrixType::ColsAtCompileTime> Eigen::UmfPackLU< _MatrixType >::IntRowVectorType

◆ LUMatrixType

template<typename _MatrixType >
typedef SparseMatrix<Scalar> Eigen::UmfPackLU< _MatrixType >::LUMatrixType

◆ MatrixType

template<typename _MatrixType >
typedef _MatrixType Eigen::UmfPackLU< _MatrixType >::MatrixType

◆ RealScalar

template<typename _MatrixType >
typedef MatrixType::RealScalar Eigen::UmfPackLU< _MatrixType >::RealScalar

◆ Scalar

template<typename _MatrixType >
typedef MatrixType::Scalar Eigen::UmfPackLU< _MatrixType >::Scalar

◆ StorageIndex

template<typename _MatrixType >
typedef MatrixType::StorageIndex Eigen::UmfPackLU< _MatrixType >::StorageIndex

◆ UmfpackControl

template<typename _MatrixType >
typedef Array<double, UMFPACK_CONTROL, 1> Eigen::UmfPackLU< _MatrixType >::UmfpackControl

◆ UmfpackInfo

template<typename _MatrixType >
typedef Array<double, UMFPACK_INFO, 1> Eigen::UmfPackLU< _MatrixType >::UmfpackInfo

◆ UmfpackMatrixRef

template<typename _MatrixType >
typedef Ref<const UmfpackMatrixType, StandardCompressedFormat> Eigen::UmfPackLU< _MatrixType >::UmfpackMatrixRef

◆ UmfpackMatrixType

template<typename _MatrixType >
typedef SparseMatrix<Scalar,ColMajor,int> Eigen::UmfPackLU< _MatrixType >::UmfpackMatrixType

◆ Vector

template<typename _MatrixType >
typedef Matrix<Scalar,Dynamic,1> Eigen::UmfPackLU< _MatrixType >::Vector

Member Enumeration Documentation

◆ anonymous enum

template<typename _MatrixType >
anonymous enum
Enumerator
ColsAtCompileTime 
MaxColsAtCompileTime 
169 {
170 ColsAtCompileTime = MatrixType::ColsAtCompileTime,
171 MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
172 };
@ ColsAtCompileTime
Definition UmfPackSupport.h:170
@ MaxColsAtCompileTime
Definition UmfPackSupport.h:171

Constructor & Destructor Documentation

◆ UmfPackLU() [1/3]

template<typename _MatrixType >
Eigen::UmfPackLU< _MatrixType >::UmfPackLU ( )
inline
180 : m_dummy(0,0), mp_matrix(m_dummy)
181 {
182 init();
183 }
UmfpackMatrixRef mp_matrix
Definition UmfPackSupport.h:420
void init()
Definition UmfPackSupport.h:357
UmfpackMatrixType m_dummy
Definition UmfPackSupport.h:419

References Eigen::UmfPackLU< _MatrixType >::init().

+ Here is the call graph for this function:

◆ UmfPackLU() [2/3]

template<typename _MatrixType >
template<typename InputMatrixType >
Eigen::UmfPackLU< _MatrixType >::UmfPackLU ( const InputMatrixType &  matrix)
inlineexplicit
187 : mp_matrix(matrix)
188 {
189 init();
190 compute(matrix);
191 }
void compute(const InputMatrixType &matrix)
Definition UmfPackSupport.h:242

References Eigen::UmfPackLU< _MatrixType >::compute(), and Eigen::UmfPackLU< _MatrixType >::init().

+ Here is the call graph for this function:

◆ ~UmfPackLU()

template<typename _MatrixType >
Eigen::UmfPackLU< _MatrixType >::~UmfPackLU ( )
inline
194 {
197 }
void * m_numeric
Definition UmfPackSupport.h:422
void * m_symbolic
Definition UmfPackSupport.h:423
MatrixType::Scalar Scalar
Definition UmfPackSupport.h:160
void umfpack_free_numeric(void **Numeric, double)
Definition UmfPackSupport.h:44
void umfpack_free_symbolic(void **Symbolic, double)
Definition UmfPackSupport.h:50

References Eigen::UmfPackLU< _MatrixType >::m_numeric, Eigen::UmfPackLU< _MatrixType >::m_symbolic, Eigen::umfpack_free_numeric(), and Eigen::umfpack_free_symbolic().

+ Here is the call graph for this function:

◆ UmfPackLU() [3/3]

template<typename _MatrixType >
Eigen::UmfPackLU< _MatrixType >::UmfPackLU ( const UmfPackLU< _MatrixType > &  )
inlineprivate
431{ }

Member Function Documentation

◆ _solve_impl() [1/2]

template<typename MatrixType >
template<typename BDerived , typename XDerived >
bool Eigen::UmfPackLU< MatrixType >::_solve_impl ( const MatrixBase< BDerived > &  b,
MatrixBase< XDerived > &  x 
) const
474{
475 Index rhsCols = b.cols();
476 eigen_assert((BDerived::Flags&RowMajorBit)==0 && "UmfPackLU backend does not support non col-major rhs yet");
477 eigen_assert((XDerived::Flags&RowMajorBit)==0 && "UmfPackLU backend does not support non col-major result yet");
478 eigen_assert(b.derived().data() != x.derived().data() && " Umfpack does not support inplace solve");
479
480 int errorCode;
481 Scalar* x_ptr = 0;
482 Matrix<Scalar,Dynamic,1> x_tmp;
483 if(x.innerStride()!=1)
484 {
485 x_tmp.resize(x.rows());
486 x_ptr = x_tmp.data();
487 }
488 for (int j=0; j<rhsCols; ++j)
489 {
490 if(x.innerStride()==1)
491 x_ptr = &x.col(j).coeffRef(0);
492 errorCode = umfpack_solve(UMFPACK_A,
493 mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
494 x_ptr, &b.const_cast_derived().col(j).coeffRef(0), m_numeric, m_control.data(), m_umfpackInfo.data());
495 if(x.innerStride()!=1)
496 x.col(j) = x_tmp;
497 if (errorCode!=0)
498 return false;
499 }
500
501 return true;
502}
#define eigen_assert(x)
Definition Macros.h:579
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar * data() const
Definition PlainObjectBase.h:255
UmfpackInfo m_umfpackInfo
Definition UmfPackSupport.h:413
UmfpackControl m_control
Definition UmfPackSupport.h:412
const unsigned int RowMajorBit
Definition Constants.h:61
int umfpack_solve(int sys, const int Ap[], const int Ai[], const double Ax[], double X[], const double B[], void *Numeric, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
Definition UmfPackSupport.h:84
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:33
TCoord< P > x(const P &p)
Definition geometry_traits.hpp:297

References Eigen::PlainObjectBase< Derived >::data(), eigen_assert, Eigen::PlainObjectBase< Derived >::resize(), Eigen::RowMajorBit, and Eigen::umfpack_solve().

+ Here is the call graph for this function:

◆ _solve_impl() [2/2]

void Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::_solve_impl ( const SparseMatrixBase< Rhs > &  b,
SparseMatrixBase< Dest > &  dest 
) const
inlineinherited
112 {
113 internal::solve_sparse_through_dense_panels(derived(), b.derived(), dest.derived());
114 }
UmfPackLU< _MatrixType > & derived()
Definition SparseSolverBase.h:79

◆ analyzePattern()

template<typename _MatrixType >
template<typename InputMatrixType >
void Eigen::UmfPackLU< _MatrixType >::analyzePattern ( const InputMatrixType &  matrix)
inline

Performs a symbolic decomposition on the sparcity of matrix.

This function is particularly useful when solving for several problems having the same structure.

See also
factorize(), compute()
259 {
262
263 grab(matrix.derived());
264
266 }
void grab(const EigenBase< MatrixDerived > &A)
Definition UmfPackSupport.h:394
void analyzePattern_impl()
Definition UmfPackSupport.h:368

References Eigen::UmfPackLU< _MatrixType >::analyzePattern_impl(), Eigen::UmfPackLU< _MatrixType >::grab(), Eigen::UmfPackLU< _MatrixType >::m_numeric, Eigen::UmfPackLU< _MatrixType >::m_symbolic, Eigen::umfpack_free_numeric(), and Eigen::umfpack_free_symbolic().

+ Here is the call graph for this function:

◆ analyzePattern_impl()

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::analyzePattern_impl ( )
inlineprotected
369 {
370 m_fact_errorCode = umfpack_symbolic(internal::convert_index<int>(mp_matrix.rows()),
371 internal::convert_index<int>(mp_matrix.cols()),
372 mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
374
375 m_isInitialized = true;
377 m_analysisIsOk = true;
378 m_factorizationIsOk = false;
380 }
bool m_isInitialized
Definition SparseSolverBase.h:119
int m_factorizationIsOk
Definition UmfPackSupport.h:426
int m_fact_errorCode
Definition UmfPackSupport.h:411
int m_analysisIsOk
Definition UmfPackSupport.h:427
bool m_extractedDataAreDirty
Definition UmfPackSupport.h:428
ComputationInfo m_info
Definition UmfPackSupport.h:425
@ InvalidInput
Definition Constants.h:439
@ Success
Definition Constants.h:432
int umfpack_symbolic(int n_row, int n_col, const int Ap[], const int Ai[], const double Ax[], void **Symbolic, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
Definition UmfPackSupport.h:56

References Eigen::PlainObjectBase< Derived >::data(), Eigen::InvalidInput, Eigen::UmfPackLU< _MatrixType >::m_analysisIsOk, Eigen::UmfPackLU< _MatrixType >::m_control, Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, Eigen::UmfPackLU< _MatrixType >::m_fact_errorCode, Eigen::UmfPackLU< _MatrixType >::m_factorizationIsOk, Eigen::UmfPackLU< _MatrixType >::m_info, Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::m_isInitialized, Eigen::UmfPackLU< _MatrixType >::m_symbolic, Eigen::UmfPackLU< _MatrixType >::m_umfpackInfo, Eigen::UmfPackLU< _MatrixType >::mp_matrix, Eigen::Success, and Eigen::umfpack_symbolic().

Referenced by Eigen::UmfPackLU< _MatrixType >::analyzePattern(), and Eigen::UmfPackLU< _MatrixType >::compute().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cols()

template<typename _MatrixType >
Index Eigen::UmfPackLU< _MatrixType >::cols ( ) const
inline
200{ return mp_matrix.cols(); }

References Eigen::UmfPackLU< _MatrixType >::mp_matrix.

◆ compute()

template<typename _MatrixType >
template<typename InputMatrixType >
void Eigen::UmfPackLU< _MatrixType >::compute ( const InputMatrixType &  matrix)
inline

Computes the sparse Cholesky decomposition of matrix Note that the matrix should be column-major, and in compressed format for best performance.

See also
SparseMatrix::makeCompressed().
243 {
246 grab(matrix.derived());
249 }
void factorize_impl()
Definition UmfPackSupport.h:382

References Eigen::UmfPackLU< _MatrixType >::analyzePattern_impl(), Eigen::UmfPackLU< _MatrixType >::factorize_impl(), Eigen::UmfPackLU< _MatrixType >::grab(), Eigen::UmfPackLU< _MatrixType >::m_numeric, Eigen::UmfPackLU< _MatrixType >::m_symbolic, Eigen::umfpack_free_numeric(), and Eigen::umfpack_free_symbolic().

Referenced by Eigen::UmfPackLU< _MatrixType >::UmfPackLU().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ derived() [1/2]

UmfPackLU< _MatrixType > & Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::derived ( )
inlineinherited
79{ return *static_cast<Derived*>(this); }

◆ derived() [2/2]

const UmfPackLU< _MatrixType > & Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::derived ( ) const
inlineinherited
80{ return *static_cast<const Derived*>(this); }

◆ determinant()

template<typename MatrixType >
UmfPackLU< MatrixType >::Scalar Eigen::UmfPackLU< MatrixType >::determinant
465{
466 Scalar det;
468 return det;
469}
int umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle, double User_Info[UMFPACK_INFO])
Definition UmfPackSupport.h:124

References Eigen::umfpack_get_determinant().

+ Here is the call graph for this function:

◆ extractData()

template<typename MatrixType >
void Eigen::UmfPackLU< MatrixType >::extractData
437{
439 {
440 // get size of the data
441 int lnz, unz, rows, cols, nz_udiag;
442 umfpack_get_lunz(&lnz, &unz, &rows, &cols, &nz_udiag, m_numeric, Scalar());
443
444 // allocate data
445 m_l.resize(rows,(std::min)(rows,cols));
446 m_l.resizeNonZeros(lnz);
447
448 m_u.resize((std::min)(rows,cols),cols);
449 m_u.resizeNonZeros(unz);
450
451 m_p.resize(rows);
452 m_q.resize(cols);
453
454 // extract
457 m_p.data(), m_q.data(), 0, 0, 0, m_numeric);
458
460 }
461}
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition PlainObjectBase.h:279
void resizeNonZeros(Index size)
Definition SparseMatrix.h:644
const StorageIndex * innerIndexPtr() const
Definition SparseMatrix.h:157
const StorageIndex * outerIndexPtr() const
Definition SparseMatrix.h:166
const Scalar * valuePtr() const
Definition SparseMatrix.h:148
void resize(Index rows, Index cols)
Definition SparseMatrix.h:621
Index rows() const
Definition UmfPackSupport.h:199
LUMatrixType m_l
Definition UmfPackSupport.h:410
IntColVectorType m_p
Definition UmfPackSupport.h:416
IntRowVectorType m_q
Definition UmfPackSupport.h:417
Index cols() const
Definition UmfPackSupport.h:200
LUMatrixType m_u
Definition UmfPackSupport.h:415
int umfpack_get_numeric(int Lp[], int Lj[], double Lx[], int Up[], int Ui[], double Ux[], int P[], int Q[], double Dx[], int *do_recip, double Rs[], void *Numeric)
Definition UmfPackSupport.h:108
int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric, double)
Definition UmfPackSupport.h:98

References Eigen::umfpack_get_lunz(), and Eigen::umfpack_get_numeric().

Referenced by Eigen::UmfPackLU< _MatrixType >::matrixL(), Eigen::UmfPackLU< _MatrixType >::matrixU(), Eigen::UmfPackLU< _MatrixType >::permutationP(), and Eigen::UmfPackLU< _MatrixType >::permutationQ().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ factorize()

template<typename _MatrixType >
template<typename InputMatrixType >
void Eigen::UmfPackLU< _MatrixType >::factorize ( const InputMatrixType &  matrix)
inline

Performs a numeric decomposition of matrix

The given matrix must has the same sparcity than the matrix on which the pattern anylysis has been performed.

See also
analyzePattern(), compute()
309 {
310 eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
311 if(m_numeric)
313
314 grab(matrix.derived());
315
317 }

References eigen_assert, Eigen::UmfPackLU< _MatrixType >::factorize_impl(), Eigen::UmfPackLU< _MatrixType >::grab(), Eigen::UmfPackLU< _MatrixType >::m_analysisIsOk, Eigen::UmfPackLU< _MatrixType >::m_numeric, and Eigen::umfpack_free_numeric().

+ Here is the call graph for this function:

◆ factorize_impl()

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::factorize_impl ( )
inlineprotected
383 {
384
385 m_fact_errorCode = umfpack_numeric(mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
387
388 m_info = m_fact_errorCode == UMFPACK_OK ? Success : NumericalIssue;
389 m_factorizationIsOk = true;
391 }
@ NumericalIssue
Definition Constants.h:434
int umfpack_numeric(const int Ap[], const int Ai[], const double Ax[], void *Symbolic, void **Numeric, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
Definition UmfPackSupport.h:70

References Eigen::PlainObjectBase< Derived >::data(), Eigen::UmfPackLU< _MatrixType >::m_control, Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, Eigen::UmfPackLU< _MatrixType >::m_fact_errorCode, Eigen::UmfPackLU< _MatrixType >::m_factorizationIsOk, Eigen::UmfPackLU< _MatrixType >::m_info, Eigen::UmfPackLU< _MatrixType >::m_numeric, Eigen::UmfPackLU< _MatrixType >::m_symbolic, Eigen::UmfPackLU< _MatrixType >::m_umfpackInfo, Eigen::UmfPackLU< _MatrixType >::mp_matrix, Eigen::NumericalIssue, Eigen::Success, and Eigen::umfpack_numeric().

Referenced by Eigen::UmfPackLU< _MatrixType >::compute(), and Eigen::UmfPackLU< _MatrixType >::factorize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ grab() [1/2]

template<typename _MatrixType >
template<typename MatrixDerived >
void Eigen::UmfPackLU< _MatrixType >::grab ( const EigenBase< MatrixDerived > &  A)
inlineprotected
395 {
396 mp_matrix.~UmfpackMatrixRef();
397 ::new (&mp_matrix) UmfpackMatrixRef(A.derived());
398 }
Ref< const UmfpackMatrixType, StandardCompressedFormat > UmfpackMatrixRef
Definition UmfPackSupport.h:168

References Eigen::EigenBase< Derived >::derived(), and Eigen::UmfPackLU< _MatrixType >::mp_matrix.

Referenced by Eigen::UmfPackLU< _MatrixType >::analyzePattern(), Eigen::UmfPackLU< _MatrixType >::compute(), and Eigen::UmfPackLU< _MatrixType >::factorize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ grab() [2/2]

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::grab ( const UmfpackMatrixRef A)
inlineprotected
401 {
402 if(&(A.derived()) != &mp_matrix)
403 {
404 mp_matrix.~UmfpackMatrixRef();
405 ::new (&mp_matrix) UmfpackMatrixRef(A);
406 }
407 }

References Eigen::UmfPackLU< _MatrixType >::mp_matrix.

◆ info()

template<typename _MatrixType >
ComputationInfo Eigen::UmfPackLU< _MatrixType >::info ( ) const
inline

Reports whether previous computation was successful.

Returns
Success if computation was succesful, NumericalIssue if the matrix.appears to be negative.
208 {
209 eigen_assert(m_isInitialized && "Decomposition is not initialized.");
210 return m_info;
211 }

References eigen_assert, Eigen::UmfPackLU< _MatrixType >::m_info, and Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::m_isInitialized.

◆ init()

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::init ( )
inlineprotected
358 {
360 m_isInitialized = false;
361 m_numeric = 0;
362 m_symbolic = 0;
364
366 }
void umfpack_defaults(double control[UMFPACK_CONTROL], double)
Definition UmfPackSupport.h:20

References Eigen::PlainObjectBase< Derived >::data(), Eigen::InvalidInput, Eigen::UmfPackLU< _MatrixType >::m_control, Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, Eigen::UmfPackLU< _MatrixType >::m_info, Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::m_isInitialized, Eigen::UmfPackLU< _MatrixType >::m_numeric, Eigen::UmfPackLU< _MatrixType >::m_symbolic, and Eigen::umfpack_defaults().

Referenced by Eigen::UmfPackLU< _MatrixType >::UmfPackLU(), and Eigen::UmfPackLU< _MatrixType >::UmfPackLU().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ matrixL()

template<typename _MatrixType >
const LUMatrixType & Eigen::UmfPackLU< _MatrixType >::matrixL ( ) const
inline
214 {
216 return m_l;
217 }
void extractData() const
Definition UmfPackSupport.h:436

References Eigen::UmfPackLU< _MatrixType >::extractData(), Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, and Eigen::UmfPackLU< _MatrixType >::m_l.

+ Here is the call graph for this function:

◆ matrixU()

template<typename _MatrixType >
const LUMatrixType & Eigen::UmfPackLU< _MatrixType >::matrixU ( ) const
inline
220 {
222 return m_u;
223 }

References Eigen::UmfPackLU< _MatrixType >::extractData(), Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, and Eigen::UmfPackLU< _MatrixType >::m_u.

+ Here is the call graph for this function:

◆ permutationP()

template<typename _MatrixType >
const IntColVectorType & Eigen::UmfPackLU< _MatrixType >::permutationP ( ) const
inline
226 {
228 return m_p;
229 }

References Eigen::UmfPackLU< _MatrixType >::extractData(), Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, and Eigen::UmfPackLU< _MatrixType >::m_p.

+ Here is the call graph for this function:

◆ permutationQ()

template<typename _MatrixType >
const IntRowVectorType & Eigen::UmfPackLU< _MatrixType >::permutationQ ( ) const
inline
232 {
234 return m_q;
235 }

References Eigen::UmfPackLU< _MatrixType >::extractData(), Eigen::UmfPackLU< _MatrixType >::m_extractedDataAreDirty, and Eigen::UmfPackLU< _MatrixType >::m_q.

+ Here is the call graph for this function:

◆ rows()

template<typename _MatrixType >
Index Eigen::UmfPackLU< _MatrixType >::rows ( ) const
inline
199{ return mp_matrix.rows(); }

References Eigen::UmfPackLU< _MatrixType >::mp_matrix.

◆ solve() [1/2]

const Solve< UmfPackLU< _MatrixType > , Rhs > Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::solve ( const MatrixBase< Rhs > &  b) const
inlineinherited
Returns
an expression of the solution x of $ A x = b $ using the current decomposition of A.
See also
compute()
89 {
90 eigen_assert(m_isInitialized && "Solver is not initialized.");
91 eigen_assert(derived().rows()==b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
92 return Solve<Derived, Rhs>(derived(), b.derived());
93 }
size_t rows(const T &raster)
Definition MarchingSquares.hpp:55

◆ solve() [2/2]

const Solve< UmfPackLU< _MatrixType > , Rhs > Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::solve ( const SparseMatrixBase< Rhs > &  b) const
inlineinherited
Returns
an expression of the solution x of $ A x = b $ using the current decomposition of A.
See also
compute()
102 {
103 eigen_assert(m_isInitialized && "Solver is not initialized.");
104 eigen_assert(derived().rows()==b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
105 return Solve<Derived, Rhs>(derived(), b.derived());
106 }

◆ umfpackControl() [1/2]

template<typename _MatrixType >
UmfpackControl & Eigen::UmfPackLU< _MatrixType >::umfpackControl ( )
inline

Provides access to the control settings array used by UmfPack.

If this array contains NaN's, the default values are used.

See UMFPACK documentation for details.

297 {
298 return m_control;
299 }

References Eigen::UmfPackLU< _MatrixType >::m_control.

◆ umfpackControl() [2/2]

template<typename _MatrixType >
const UmfpackControl & Eigen::UmfPackLU< _MatrixType >::umfpackControl ( ) const
inline

Provides access to the control settings array used by UmfPack.

If this array contains NaN's, the default values are used.

See UMFPACK documentation for details.

286 {
287 return m_control;
288 }

References Eigen::UmfPackLU< _MatrixType >::m_control.

◆ umfpackFactorizeReturncode()

template<typename _MatrixType >
int Eigen::UmfPackLU< _MatrixType >::umfpackFactorizeReturncode ( ) const
inline

Provides the return status code returned by UmfPack during the numeric factorization.

See also
factorize(), compute()
274 {
275 eigen_assert(m_numeric && "UmfPackLU: you must first call factorize()");
276 return m_fact_errorCode;
277 }

References eigen_assert, Eigen::UmfPackLU< _MatrixType >::m_fact_errorCode, and Eigen::UmfPackLU< _MatrixType >::m_numeric.

◆ umfpackReportControl()

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::umfpackReportControl ( )
inline

Prints the current UmfPack control settings.

See also
umfpackControl()
324 {
326 }
void umfpack_report_control(double control[UMFPACK_CONTROL], double)
Definition UmfPackSupport.h:38

References Eigen::PlainObjectBase< Derived >::data(), Eigen::UmfPackLU< _MatrixType >::m_control, and Eigen::umfpack_report_control().

+ Here is the call graph for this function:

◆ umfpackReportInfo()

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::umfpackReportInfo ( )
inline

Prints statistics collected by UmfPack.

See also
analyzePattern(), compute()
333 {
334 eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
336 }
void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double)
Definition UmfPackSupport.h:26

References Eigen::PlainObjectBase< Derived >::data(), eigen_assert, Eigen::UmfPackLU< _MatrixType >::m_analysisIsOk, Eigen::UmfPackLU< _MatrixType >::m_control, Eigen::UmfPackLU< _MatrixType >::m_umfpackInfo, and Eigen::umfpack_report_info().

+ Here is the call graph for this function:

◆ umfpackReportStatus()

template<typename _MatrixType >
void Eigen::UmfPackLU< _MatrixType >::umfpackReportStatus ( )
inline

Prints the status of the previous factorization operation performed by UmfPack (symbolic or numerical factorization).

See also
analyzePattern(), compute()
342 {
343 eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
345 }
void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double)
Definition UmfPackSupport.h:32

References Eigen::PlainObjectBase< Derived >::data(), eigen_assert, Eigen::UmfPackLU< _MatrixType >::m_analysisIsOk, Eigen::UmfPackLU< _MatrixType >::m_control, Eigen::UmfPackLU< _MatrixType >::m_fact_errorCode, and Eigen::umfpack_report_status().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_analysisIsOk

◆ m_control

◆ m_dummy

template<typename _MatrixType >
UmfpackMatrixType Eigen::UmfPackLU< _MatrixType >::m_dummy
protected

◆ m_extractedDataAreDirty

◆ m_fact_errorCode

◆ m_factorizationIsOk

template<typename _MatrixType >
int Eigen::UmfPackLU< _MatrixType >::m_factorizationIsOk
protected

◆ m_info

◆ m_isInitialized

bool Eigen::SparseSolverBase< UmfPackLU< _MatrixType > >::m_isInitialized
mutableprotectedinherited

◆ m_l

template<typename _MatrixType >
LUMatrixType Eigen::UmfPackLU< _MatrixType >::m_l
mutableprotected

◆ m_numeric

◆ m_p

template<typename _MatrixType >
IntColVectorType Eigen::UmfPackLU< _MatrixType >::m_p
mutableprotected

◆ m_q

template<typename _MatrixType >
IntRowVectorType Eigen::UmfPackLU< _MatrixType >::m_q
mutableprotected

◆ m_symbolic

◆ m_u

template<typename _MatrixType >
LUMatrixType Eigen::UmfPackLU< _MatrixType >::m_u
mutableprotected

◆ m_umfpackInfo

◆ mp_matrix


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