annotate main/sparse/SuperLU/SRC/supermatrix.h @ 0:6b33357c7561 octave-forge

Initial revision
author pkienzle
date Wed, 10 Oct 2001 19:54:49 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
1 #ifndef __SUPERLU_SUPERMATRIX /* allow multiple inclusions */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
2 #define __SUPERLU_SUPERMATRIX
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
3
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
4 /********************************************
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
5 * The matrix types are defined as follows. *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
6 ********************************************/
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
7 typedef enum {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
8 NC, /* column-wise, no supernode */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
9 NR, /* row-wize, no supernode */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
10 SC, /* column-wise, supernode */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
11 SR, /* row-wise, supernode */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
12 NCP, /* column-wise, column-permuted, no supernode
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
13 (The consecutive columns of nonzeros, after permutation,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
14 may not be stored contiguously.) */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
15 DN /* Fortran style column-wise storage for dense matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
16 } Stype_t;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
17
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
18 typedef enum {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
19 _S, /* single */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
20 _D, /* double */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
21 _C, /* single complex */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
22 _Z /* double complex */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
23 } Dtype_t;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
24
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
25 typedef enum {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
26 GE, /* general */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
27 TRLU, /* lower triangular, unit diagonal */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
28 TRUU, /* upper triangular, unit diagonal */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
29 TRL, /* lower triangular */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
30 TRU, /* upper triangular */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
31 SYL, /* symmetric, store lower half */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
32 SYU, /* symmetric, store upper half */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
33 HEL, /* Hermitian, store lower half */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
34 HEU /* Hermitian, store upper half */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
35 } Mtype_t;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
36
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
37 typedef struct {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
38 Stype_t Stype; /* Storage type: interprets the storage structure
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
39 pointed to by *Store. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
40 Dtype_t Dtype; /* Data type. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
41 Mtype_t Mtype; /* Matrix type: describes the mathematical property of
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
42 the matrix. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
43 int nrow; /* number of rows */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
44 int ncol; /* number of columns */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
45 void *Store; /* pointer to the actual storage of the matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
46 } SuperMatrix;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
47
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
48 /***********************************************
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
49 * The storage schemes are defined as follows. *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
50 ***********************************************/
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
51
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
52 /* Stype == NC (Also known as Harwell-Boeing sparse matrix format (CCS)) */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
53 typedef struct {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
54 int nnz; /* number of nonzeros in the matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
55 void *nzval; /* pointer to array of nonzero values, packed by column */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
56 int *rowind; /* pointer to array of row indices of the nonzeros */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
57 int *colptr; /* pointer to array of beginning of columns in nzval[]
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
58 and rowind[] */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
59 /* Note:
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
60 Zero-based indexing is used;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
61 colptr[] has ncol+1 entries, the last one pointing
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
62 beyond the last column, so that colptr[ncol] = nnz. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
63 } NCformat;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
64
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
65 /* Stype == NR (Also known as row compressed storage (RCS). */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
66 typedef struct {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
67 int nnz; /* number of nonzeros in the matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
68 void *nzval; /* pointer to array of nonzero values, packed by row */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
69 int *colind; /* pointer to array of column indices of the nonzeros */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
70 int *rowptr; /* pointer to array of beginning of rows in nzval[]
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
71 and colind[] */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
72 /* Note:
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
73 Zero-based indexing is used;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
74 rowptr[] has nrow+1 entries, the last one pointing
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
75 beyond the last column, so that rowptr[nrow] = nnz. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
76 } NRformat;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
77
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
78 /* Stype == SC */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
79 typedef struct {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
80 int nnz; /* number of nonzeros in the matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
81 int nsuper; /* number of supernodes, minus 1 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
82 void *nzval; /* pointer to array of nonzero values, packed by column */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
83 int *nzval_colptr;/* pointer to array of beginning of columns in nzval[] */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
84 int *rowind; /* pointer to array of compressed row indices of
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
85 rectangular supernodes */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
86 int *rowind_colptr;/* pointer to array of beginning of columns in rowind[] */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
87 int *col_to_sup; /* col_to_sup[j] is the supernode number to which column
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
88 j belongs; mapping from column to supernode number. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
89 int *sup_to_col; /* sup_to_col[s] points to the start of the s-th
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
90 supernode; mapping from supernode number to column.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
91 e.g.: col_to_sup: 0 1 2 2 3 3 3 4 4 4 4 4 (ncol=12)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
92 sup_to_col: 0 1 2 4 7 12 (nsuper=4) */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
93 /* Note:
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
94 Zero-based indexing is used;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
95 nzval_colptr[], rowind_colptr[], col_to_sup and
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
96 sup_to_col[] have ncol+1 entries, the last one
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
97 pointing beyond the last column. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
98 } SCformat;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
99
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
100 /* Stype == NCP */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
101 typedef struct {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
102 int nnz; /* number of nonzeros in the matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
103 void *nzval; /* pointer to array of nonzero values, packed by column */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
104 int *rowind; /* pointer to array of row indices of the nonzeros */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
105 /* Note: nzval[]/rowind[] always have the same length */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
106 int *colbeg; /* colbeg[j] points to the beginning of column j in nzval[]
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
107 and rowind[] */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
108 int *colend; /* colend[j] points to one past the last element of column
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
109 j in nzval[] and rowind[] */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
110 /* Note:
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
111 Zero-based indexing is used;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
112 The consecutive columns of the nonzeros may not be
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
113 contiguous in storage, because the matrix has been
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
114 postmultiplied by a column permutation matrix. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
115 } NCPformat;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
116
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
117 /* Stype == DN */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
118 typedef struct {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
119 int lda; /* leading dimension */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
120 void *nzval; /* array of size lda*ncol to represent a dense matrix */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
121 } DNformat;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
122
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
123
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
124
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
125 /*********************************************************
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
126 * Macros used for easy access of sparse matrix entries. *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
127 *********************************************************/
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
128 #define L_SUB_START(col) ( Lstore->rowind_colptr[col] )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
129 #define L_SUB(ptr) ( Lstore->rowind[ptr] )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
130 #define L_NZ_START(col) ( Lstore->nzval_colptr[col] )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
131 #define L_FST_SUPC(superno) ( Lstore->sup_to_col[superno] )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
132 #define U_NZ_START(col) ( Ustore->colptr[col] )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
133 #define U_SUB(ptr) ( Ustore->rowind[ptr] )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
134
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
135
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
136 #endif /* __SUPERLU_SUPERMATRIX */