Program listing for file numerics/src/tools/NumericsSparseMatrix.h#

  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