LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | Protected Member Functions | List of all members
CholmodSimplicialLDLT2< _MatrixType, _UpLo > Class Template Reference

#include <Eigenstuff.h>

Inheritance diagram for CholmodSimplicialLDLT2< _MatrixType, _UpLo >:

Public Types

typedef _MatrixType MatrixType
 
typedef MatrixType::Index Index
 
typedef MatrixType::RealScalar RealScalar
 

Public Member Functions

 CholmodSimplicialLDLT2 ()
 
 CholmodSimplicialLDLT2 (MatrixType const &matrix)
 
void update (SparseMatrixD const &H, bool UpOrDown)
 

Protected Member Functions

void init ()
 

Detailed Description

template<typename _MatrixType, int _UpLo = Eigen::Lower>
class CholmodSimplicialLDLT2< _MatrixType, _UpLo >

Definition at line 50 of file Eigenstuff.h.

Member Typedef Documentation

◆ Index

template<typename _MatrixType , int _UpLo = Eigen::Lower>
typedef MatrixType::Index CholmodSimplicialLDLT2< _MatrixType, _UpLo >::Index

Definition at line 57 of file Eigenstuff.h.

◆ MatrixType

template<typename _MatrixType , int _UpLo = Eigen::Lower>
typedef _MatrixType CholmodSimplicialLDLT2< _MatrixType, _UpLo >::MatrixType

Definition at line 56 of file Eigenstuff.h.

◆ RealScalar

template<typename _MatrixType , int _UpLo = Eigen::Lower>
typedef MatrixType::RealScalar CholmodSimplicialLDLT2< _MatrixType, _UpLo >::RealScalar

Definition at line 58 of file Eigenstuff.h.

Constructor & Destructor Documentation

◆ CholmodSimplicialLDLT2() [1/2]

template<typename _MatrixType , int _UpLo = Eigen::Lower>
CholmodSimplicialLDLT2< _MatrixType, _UpLo >::CholmodSimplicialLDLT2 ( )
inline

Definition at line 60 of file Eigenstuff.h.

60 : Base() { init(); }

◆ CholmodSimplicialLDLT2() [2/2]

template<typename _MatrixType , int _UpLo = Eigen::Lower>
CholmodSimplicialLDLT2< _MatrixType, _UpLo >::CholmodSimplicialLDLT2 ( MatrixType const &  matrix)
inline

Definition at line 62 of file Eigenstuff.h.

62  : Base() {
63  init();
64  this->compute(matrix);
65  }

Member Function Documentation

◆ init()

template<typename _MatrixType , int _UpLo = Eigen::Lower>
void CholmodSimplicialLDLT2< _MatrixType, _UpLo >::init ( )
inlineprotected

Definition at line 90 of file Eigenstuff.h.

90  {
91  m_cholmod.final_asis = 1;
92  m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
93  // In CholmodBase::CholmodBase(), the following statement is missing in
94  // SuiteSparse 3.2.0.8. Fixed in 3.2.7
95  Base::m_shiftOffset[0] = Base::m_shiftOffset[1] = RealScalar(0.0);
96  }
MatrixType::RealScalar RealScalar
Definition: Eigenstuff.h:58

◆ update()

template<typename _MatrixType , int _UpLo = Eigen::Lower>
void CholmodSimplicialLDLT2< _MatrixType, _UpLo >::update ( SparseMatrixD const &  H,
bool  UpOrDown 
)
inline

Definition at line 68 of file Eigenstuff.h.

68  {
69  // check size
70  Index const size = Base::m_cholmodFactor->n;
71  EIGEN_UNUSED_VARIABLE(size);
72  eigen_assert(size == H.rows());
73 
74  cholmod_sparse C_cs = viewAsCholmod(H);
75  /* We have to apply the magic permutation to the update matrix,
76  read page 117 of Cholmod UserGuide.pdf */
77  // Using cholmod_l_* functions instead of cholmod_* because index is Eigen::Index instead of int.
78  cholmod_sparse *C_cs_perm =
79  cholmod_l_submatrix(&C_cs, (Eigen::Index*)Base::m_cholmodFactor->Perm,
80  Base::m_cholmodFactor->n, nullptr, -1, true, true, &this->cholmod());
81  assert(C_cs_perm);
82  int isOk = cholmod_l_updown(UpOrDown, C_cs_perm, Base::m_cholmodFactor, &this->cholmod());
83  cholmod_l_free_sparse(&C_cs_perm, &this->cholmod());
84  if (!isOk) {
85  throw(LSST_EXCEPT(lsst::pex::exceptions::RuntimeError, "cholmod_update failed!"));
86  }
87  }
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
MatrixType::Index Index
Definition: Eigenstuff.h:57
Reports errors that are due to events beyond the control of the program.
Definition: Runtime.h:104

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