GammaLib 2.0.0
Loading...
Searching...
No Matches
GSparseSymbolic.hpp
Go to the documentation of this file.
1/***************************************************************************
2 * GSparseSymbolic.hpp - Sparse matrix symbolic analysis class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2006-2013 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- *
6 * *
7 * This program is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 * *
20 ***************************************************************************/
21/**
22 * @file GSparseSymbolic.hpp
23 * @brief Sparse matrix symbolic analysis class definition
24 * @author Juergen Knoedlseder
25 */
26
27#ifndef GSPARSESYMBOLIC_HPP
28#define GSPARSESYMBOLIC_HPP
29
30/* __ Includes ___________________________________________________________ */
31
32/* __ Definitions ________________________________________________________ */
33
34/* __ Enumerators ________________________________________________________ */
35
36/* __ Structures _________________________________________________________ */
37
38/* __ Prototypes (implementions in GMatrixSparse) ________________________ */
39GMatrixSparse cs_symperm(const GMatrixSparse& matrix, const int* pinv);
40GMatrixSparse cs_transpose(const GMatrixSparse& matrix, int values);
41double cs_cumsum(int* p, int* c, int n);
42
43
44/***********************************************************************//**
45 * @class GSparseSymbolic
46 *
47 * @brief Sparse matrix symbolic analysis class
48 *
49 * This class implements the symbolic analysis of a sparse matrix.
50 ***************************************************************************/
52
53 // I/O friends
54 friend std::ostream& operator<< (std::ostream& os, const GSparseSymbolic& s);
55
56 // Friend classes
57 friend class GMatrixSparse;
58 friend class GSparseNumeric;
59
60public:
61 // Constructors and destructors
62 GSparseSymbolic(void);
63 virtual ~GSparseSymbolic(void);
64
65 // Assignment operator
67
68 // Methods
69 void cholesky_symbolic_analysis(int order, const GMatrixSparse& m);
70
71private:
72 // Private methods
73 int* cs_amd (int order, const GMatrixSparse* A);
74 int* cs_counts(const GMatrixSparse* A, const int* parent, const int* post, int ata);
75 int* cs_etree(const GMatrixSparse* A, int ata);
76 int cs_fkeep(GMatrixSparse* A, int(*fkeep)(int, int, double, void*), void* other);
77 int cs_leaf(int i, int j, const int* first, int* maxfirst, int* prevleaf, int* ancestor, int* jleaf);
78 int* cs_pinv(int const* p, int n);
79 int* cs_post(const int* parent, int n);
80 int cs_tdfs(int j, int k, int* head, const int* next, int* post, int* stack);
81 static void init_ata(const GMatrixSparse* AT, const int* post, int* wrk_int, int** head, int** next);
82 static int cs_diag(int i, int j, double aij, void* other);
83 static int cs_wclear(int mark, int lemax, int* w, int n);
84
85 // Data
86 int* m_pinv; //!< Inverse row permutation for QR, fill reduce permutation for Cholesky
87 int* m_q; //!< Fill-reducing column permutation for LU and QR
88 int* m_parent; //!< elimination tree for Cholesky and QR
89 int* m_cp; //!< column pointers for Cholesky, row counts for QR
90 int* m_leftmost; //!< leftmost[i] = min(find(A(i,:))), for QR
91 int m_m2; //!< # of rows for QR, after adding fictitious rows
92 double m_lnz; //!< # entries in L for LU or Cholesky; in V for QR
93 double m_unz; //!< # entries in U for LU; in R for QR
94 int m_n_pinv; //!< Number of elements in m_pinv
95 int m_n_q; //!< Number of elements in m_q
96 int m_n_parent; //!< Number of elements in m_parent
97 int m_n_cp; //!< Number of elements in m_cp
98 int m_n_leftmost; //!< Number of elements in m_leftmost
99};
100
101#endif /* GSPARSESYMBOLIC_HPP */
GMatrixSparse cs_transpose(const GMatrixSparse &matrix, int values)
double cs_cumsum(int *p, int *c, int n)
cs_cumsum
GMatrixSparse cs_symperm(const GMatrixSparse &matrix, const int *pinv)
cs_symperm
Sparse matrix class interface definition.
Sparse matrix numeric analysis class.
Sparse matrix symbolic analysis class.
int * cs_post(const int *parent, int n)
int * cs_etree(const GMatrixSparse *A, int ata)
GSparseSymbolic(void)
Void constructor.
int * m_pinv
Inverse row permutation for QR, fill reduce permutation for Cholesky.
int m_n_parent
Number of elements in m_parent.
int * cs_amd(int order, const GMatrixSparse *A)
int cs_leaf(int i, int j, const int *first, int *maxfirst, int *prevleaf, int *ancestor, int *jleaf)
static int cs_wclear(int mark, int lemax, int *w, int n)
int cs_fkeep(GMatrixSparse *A, int(*fkeep)(int, int, double, void *), void *other)
cs_fkeep
void cholesky_symbolic_analysis(int order, const GMatrixSparse &m)
int * m_cp
column pointers for Cholesky, row counts for QR
int * cs_counts(const GMatrixSparse *A, const int *parent, const int *post, int ata)
friend std::ostream & operator<<(std::ostream &os, const GSparseSymbolic &s)
virtual ~GSparseSymbolic(void)
Destructor.
int m_n_pinv
Number of elements in m_pinv.
static void init_ata(const GMatrixSparse *AT, const int *post, int *wrk_int, int **head, int **next)
int * m_q
Fill-reducing column permutation for LU and QR.
int m_n_leftmost
Number of elements in m_leftmost.
int * m_parent
elimination tree for Cholesky and QR
int m_n_cp
Number of elements in m_cp.
GSparseSymbolic & operator=(const GSparseSymbolic &s)
int * m_leftmost
leftmost[i] = min(find(A(i,:))), for QR
int cs_tdfs(int j, int k, int *head, const int *next, int *post, int *stack)
int m_n_q
Number of elements in m_q.
static int cs_diag(int i, int j, double aij, void *other)
int * cs_pinv(int const *p, int n)