Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Files containing the data structures to make the CSDP library work.
[simgrid.git] / include / csdp / blockmat.h
1 /*
2   This file contains definitions for the block matrix data structures used
3   in CSDP 3.0.  Note that there are an additional set of definitions used
4   for sparse constraint matrices.
5 */
6
7
8 /*
9   Each block is a diagonal block or a matrix
10 */
11
12 enum blockcat {DIAG, MATRIX, PACKEDMATRIX};
13
14 /*
15   A block data record contains a pointer to the actual data for the block.
16   Note that matrices are stored in Fortran form, while vectors are stored
17   using indices 1, 2, ..., n.
18 */
19
20 union blockdatarec {
21   double *vec;
22   double *mat;
23 };
24
25 /*
26   A block record describes an individual block within a matrix. 
27 */
28
29 struct blockrec {
30   union blockdatarec data;
31   enum blockcat blockcategory;
32 #ifndef NOSHORTS
33   unsigned short blocksize;
34 #else
35   int blocksize;
36 #endif
37 };
38
39 /*
40   A block matrix contains an entire matrix in block diagonal form.
41  */
42
43 struct blockmatrix {
44   int nblocks;
45   struct blockrec *blocks;
46 };
47
48 /*
49    Definition for constraint matrices.
50  */
51
52 /*
53  * There's one of these for each nonzero block in each constraint matrix.
54  */
55 struct sparseblock {
56   struct sparseblock *next;
57   struct sparseblock *nextbyblock;
58   double *entries;
59 #ifndef NOSHORTS
60   unsigned short *iindices;
61   unsigned short *jindices;
62   int numentries;
63   unsigned short blocknum;
64   unsigned short blocksize;
65   unsigned short constraintnum;
66   unsigned short issparse;
67 #else
68   int *iindices;
69   int *jindices;
70   int numentries;
71   int blocknum;
72   int blocksize;
73   int constraintnum;
74   int issparse;
75 #endif
76 };
77
78
79 /*
80  * A constraint matrix is just an array of pointers to linked lists of
81  * the constraint blocks.  
82  */
83
84 struct constraintmatrix {
85   struct sparseblock *blocks;
86 };
87
88
89
90