Program listing for file numerics/src/tools/NumericsSparseMatrix.h#
Return to documentation for this file
1#ifndef NumericsSparseMatrix_H
2#define NumericsSparseMatrix_H
3
4
5
6#include <stdio.h>
7#include "CSparseMatrix.h"
8#include "NumericsFwd.h"
9#include "SiconosConfig.h"
10
11#include "NumericsDataVersion.h"
12
13
14typedef struct linalg_data_t
15{
16 int id;
17 void (*free_fn)(struct linalg_data_t*);
18} linalg_data_t;
19
20typedef enum { SN_LINALG_UNKNOWN, SN_LINALG_MKL } linalg_data_id;
21
22#if defined(__cplusplus) && !defined(BUILD_AS_CPP)
23extern "C"
24{
25#endif
26
27
28
29 typedef enum { NSM_CSPARSE, NSM_MUMPS, NSM_UMFPACK, NSM_MKL_PARDISO, NSM_SUPERLU, NSM_SUPERLU_MT, NSM_HSL } NSM_linear_solver;
30
31 typedef void (*freeNSLSP)(void* p);
32
33
34 typedef enum { NSM_CS_CSC = -1, NSM_CS_CSR = -2 } NumericsSparseTypesNZ;
35
36
37 struct NSM_linear_solver_params
38 {
39
40 NumericsMatrix * parent_matrix;
41 NSM_linear_solver solver;
42 NSM_linear_solver LDLT_solver;
43
44 void* linear_solver_data;
45 freeNSLSP solver_free_hook;
46
47 int* iWork;
48 int iWorkSize;
49 double* dWork;
50 int dWorkSize;
51
52 linalg_data_t* linalg_data;
53 };
54
55
56 typedef enum { NSM_UNKNOWN, NSM_TRIPLET, NSM_CSC, NSM_CSR, NSM_HALF_TRIPLET } NumericsSparseOrigin;
57
58 typedef NumericsSparseOrigin NSM_t;
59
60
61 struct NumericsSparseMatrix
62 {
63 CSparseMatrix* triplet;
64 CSparseMatrix* half_triplet;
65 CSparseMatrix* csc;
66 CSparseMatrix* trans_csc;
67 CSparseMatrix* csr;
68 CS_INT* diag_indx;
69 NSM_t origin;
70 NSM_linear_solver_params* linearSolverParams;
71
72
73 NumericsDataVersion versions[5];
74 };
75
76
77
78 void NSM_null(NumericsSparseMatrix* A);
79
80
81 NumericsSparseMatrix* NSM_new(void);
82
83 NumericsSparseMatrix * NSM_triplet_eye(unsigned int size);
84
85 NumericsSparseMatrix * NSM_triplet_scalar(unsigned int size, double s);
86
87
88 NumericsSparseMatrix* NSM_clear(NumericsSparseMatrix* A);
89
90
91 void NSM_version_copy(const NumericsSparseMatrix* const A,
92 NumericsSparseMatrix* B);
93
94
95 void NSM_copy(NumericsSparseMatrix* A, NumericsSparseMatrix* B);
96
97
98 void NSM_clear_p(void *p);
99
100
101 double* NSM_data(NumericsSparseMatrix* A);
102
103
104
105 static inline void* NSM_linear_solver_data(NSM_linear_solver_params* p)
106 {
107 return p->linear_solver_data;
108 }
109
110 static inline double* NSM_workspace(NSM_linear_solver_params* p)
111
112 {
113 return p->dWork;
114 }
115
116
117 size_t NSM_nnz(const CSparseMatrix* const A);
118
119
120 CS_INT* NSM_diag_indices(NumericsMatrix* M);
121
122
123
124 void NSM_extract_block(NumericsMatrix* M, double* blockM, size_t pos_row, size_t pos_col, size_t block_row_size, size_t block_col_size);
125
126
127 NSM_linear_solver_params* NSM_linearSolverParams_free(NSM_linear_solver_params* p);
128
129
130 NSM_linear_solver_params* NSM_linearSolverParams_new(void);
131
132
133
134 NSM_linear_solver_params* NSM_linearSolverParams(NumericsMatrix* A);
135
136
137 void NSM_fix_csc(CSparseMatrix* A);
138
139 void NSM_sort_csc(CSparseMatrix* A);
140
141
142 unsigned NSM_origin(const NumericsSparseMatrix* M);
143
144
145 CSparseMatrix* NSM_get_origin(const NumericsSparseMatrix* M);
146
147 void NSM_write_in_file(const NumericsSparseMatrix* m, FILE* file);
148
149
150 NumericsSparseMatrix* NSM_new_from_file(FILE *file);
151
152 int NSM_to_dense(const NumericsSparseMatrix * const A, double * B);
153
154
155 version_t NSM_version(const NumericsSparseMatrix* M, NSM_t type);
156
157
158 version_t NSM_max_version(const NumericsSparseMatrix* M);
159
160
161 void NSM_set_version(NumericsSparseMatrix* M, NSM_t type,
162 version_t value);
163
164
165 void NSM_reset_versions(NumericsSparseMatrix *M);
166
167
168 void NSM_reset_version(NumericsSparseMatrix*M, NSM_t type);
169
170
171 void NSM_inc_version(NumericsSparseMatrix* M, NSM_t type);
172
173
174 NSM_t NSM_latest_id(const NumericsSparseMatrix* M);
175
176
177 CSparseMatrix* NSM_latest(const NumericsSparseMatrix* M);
178
179
180 void NSM_version_sync(NumericsSparseMatrix* M);
181
182#if defined(__cplusplus) && !defined(BUILD_AS_CPP)
183}
184#endif
185
186#endif