File: Sparskit.h

package info (click to toggle)
getdp 3.0.4%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 10,856 kB
  • sloc: cpp: 63,020; fortran: 13,955; yacc: 9,350; f90: 1,640; lex: 799; makefile: 55; ansic: 34; awk: 33; sh: 23
file content (172 lines) | stat: -rw-r--r-- 4,894 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#ifndef _SPARSKIT_H_
#define _SPARSKIT_H_

#include "ListUtils.h"

#define ELAP      1
#define KUL       2

#define NONE      0

#define SPARSE    1
#define DENSE     2

#define CSR       1  /* Compressed Sparse Row */
#define CSC       2  /* Compressed Sparse Column */
#define MSR       3  /* Modified Sparse Row */
#define COO       4  /* Coordinate */

#define CG        1
#define CGNR      2
#define BCG       3
#define DBCG      4
#define BCGSTAB   5
#define TFQMR     6
#define FOM       7
#define GMRES     8
#define FGMRES    9
#define DQGMRES   10
#define LU        11
#define PGMRES    12

#define ILUT      1
#define ILUTP     2
#define ILUD      3
#define ILUDP     4
#define ILUK      5
#define ILU0      6
#define MILU0     7
#define DIAGONAL  8

#define RCMK      1

#define DIAG_SCALING    1
#define MAX_SCALING     2
#define NORM1_SCALING   3
#define NORM2_SCALING   4

#if defined(HAVE_ILU_FLOAT)
#define sscalar float
#else
#define sscalar double
#endif

typedef struct {
  /* sparse matrix */
  List_T  *a;
  List_T  *jptr, *ai, *ptr;

  /* permuted matrix */
  double  *a_rcmk ;
  int     *ia_rcmk, *ja_rcmk;

  /* permutation vectors */
  int     *permr, *permp, *rpermr;

  /* ILU decomposition */
  sscalar *alu;
  int     *jlu, *ju;
}Sparse_Matrix;

typedef struct {
  int      LU_Exist;
  double  *a, *lu;
}Dense_Matrix;

typedef struct{
  int T, N, changed, ILU_Exists, notranspose, scaled;
  double  *rowscal, *colscal;
  Sparse_Matrix   S;
  Dense_Matrix    F;
}Matrix;

typedef struct {
  int    Matrix_Format;
  int    Matrix_Printing;
  int    Matrix_Storage;
  int    Scaling ;
  int    Renumbering_Technique;
  int    Preconditioner;
  int    Preconditioner_Position;
  int    Nb_Fill;
  double Dropping_Tolerance;
  double Permutation_Tolerance;
  double Diagonal_Compensation;
  int    Re_Use_ILU;
  int    Algorithm;
  int    Krylov_Size;
  double IC_Acceleration;
  int    Iterative_Improvement;
  int    Re_Use_LU;
  int    Nb_Iter_Max;
  double Stopping_Test;
}Solver_Params;

void init_solver(Solver_Params *p, const char *name);
void init_solver_option(Solver_Params *p, const char *name, const char *value);

void init_matrix(int Nb, Matrix *M, Solver_Params *p);
void init_vector(int Nb, double **V);

void free_matrix(Matrix *M);

void zero_matrix(Matrix *M);
void zero_matrix2(Matrix *M);
void zero_vector(int Nb, double *V);

void copy_vector(int Nb, double *U, double *V);

void add_vector_vector(int Nb, double *U, double *V);
void add_vector_prod_vector_double(int Nb, double *U, double *V, double d);
void add_matrix_double(Matrix *M, int il, int ic, double val);
void add_matrix_matrix(Matrix *M, Matrix *N);
void add_matrix_prod_matrix_double(Matrix *M, Matrix *N, double d);

void sub_vector_vector_1(int Nb, double *U, double *V);
void sub_vector_vector_2(int Nb, double *U, double *V);

void prod_vector_double(int Nb, double *U, double a);
void prodsc_vector_vector(int Nb, double *U, double *V, double *prosca);
void prodsc_vectorconj_vector(int Nb, double *U, double *V, double *proscar, double *proscai);
void prod_matrix_vector(Matrix *M, double *v, double *res);
void prod_matrix_double(Matrix *M, double v);
void multi_prod_matrix_double(int n, Matrix **Mat, double *coef, Matrix *MatRes);
void multi_prod_vector_double(int n, int Sizevec, double **Vec, double *coef, double *VecRes);
void multi_prod_matrix_vector(int n, int Sizevec, Matrix **Mat, double **Vec, double *VecRes);

void norm2_vector(int Nb, double *U, double *norm);
void norminf_vector(int Nb, double *U, double *norm);

void identity_matrix(Matrix *M);

void scale_matrix(int scaling, Matrix *M);
void scale_vector(int ROW_or_COLUMN, Matrix *M, double *V);

void get_column_in_matrix(Matrix *M, int col, double *V);
void get_element_in_matrix(Matrix *M, int row, int col, double *V);

void formatted_write_matrix(FILE *pfile, Matrix *M, int style);
void formatted_write_vector(FILE *pfile, int Nb, double *V, int style);
void formatted_read_matrix(Matrix *M, const char *name, const char *ext, int style);
void formatted_read_vector(int Nb, double *V, const char *name, const char *ext, int style);

void binary_write_matrix(Matrix *M, const char *name, const char *ext);
void binary_write_vector(int Nb, double *V, const char *name, const char *ext);
void binary_read_matrix(Matrix *M, const char *name, const char *ext);
void binary_read_vector(int Nb, double **V, const char *name, const char *ext);

void print_matrix(Matrix *M);
void print_vector(double *v, int N);
void print_vector_int(int *v, int N);

void print_matrix_info_CSR(int N, int *jptr, int *ai);
void print_matrix_info_MSR(int N, sscalar *a, int *jptr);
void print_matrix_info_DENSE(int N);

void csr_format(Sparse_Matrix *M, int N);
void restore_format(Sparse_Matrix *M);

void solve_matrix(Matrix *M, Solver_Params *p, double *b, double *x);
void print_parametres(Solver_Params *p);

#endif