LSST Applications g063fba187b+cac8b7c890,g0f08755f38+6aee506743,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a2382251a+b4475c5878,g1dcb35cd9c+8f9bc1652e,g20f6ffc8e0+6aee506743,g217e2c1bcf+73dee94bd0,g28da252d5a+1f19c529b9,g2bbee38e9b+3f2625acfc,g2bc492864f+3f2625acfc,g3156d2b45e+6e55a43351,g32e5bea42b+1bb94961c2,g347aa1857d+3f2625acfc,g35bb328faa+a8ce1bb630,g3a166c0a6a+3f2625acfc,g3e281a1b8c+c5dd892a6c,g3e8969e208+a8ce1bb630,g414038480c+5927e1bc1e,g41af890bb2+8a9e676b2a,g7af13505b9+809c143d88,g80478fca09+6ef8b1810f,g82479be7b0+f568feb641,g858d7b2824+6aee506743,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,ga5288a1d22+2903d499ea,gb58c049af0+d64f4d3760,gc28159a63d+3f2625acfc,gcab2d0539d+b12535109e,gcf0d15dbbd+46a3f46ba9,gda6a2b7d83+46a3f46ba9,gdaeeff99f8+1711a396fd,ge79ae78c31+3f2625acfc,gef2f8181fd+0a71e47438,gf0baf85859+c1f95f4921,gfa517265be+6aee506743,gfa999e8aa5+17cd334064,w.2024.51
LSST Data Management Base Package
Loading...
Searching...
No Matches
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

using MatrixType = _MatrixType
 
using Index = typename MatrixType::Index
 
using RealScalar = typename MatrixType::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>
using CholmodSimplicialLDLT2< _MatrixType, _UpLo >::Index = typename MatrixType::Index

Definition at line 57 of file Eigenstuff.h.

◆ MatrixType

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

Definition at line 56 of file Eigenstuff.h.

◆ RealScalar

template<typename _MatrixType , int _UpLo = Eigen::Lower>
using CholmodSimplicialLDLT2< _MatrixType, _UpLo >::RealScalar = typename MatrixType::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 }
typename 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
typename 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: