Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/opennl/superlu/supermatrix.h')
-rw-r--r--intern/opennl/superlu/supermatrix.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/intern/opennl/superlu/supermatrix.h b/intern/opennl/superlu/supermatrix.h
new file mode 100644
index 00000000000..665e22dc91f
--- /dev/null
+++ b/intern/opennl/superlu/supermatrix.h
@@ -0,0 +1,140 @@
+#ifndef __SUPERLU_SUPERMATRIX /* allow multiple inclusions */
+#define __SUPERLU_SUPERMATRIX
+
+/********************************************
+ * The matrix types are defined as follows. *
+ ********************************************/
+typedef enum {
+ SLU_NC, /* column-wise, no supernode */
+ SLU_NR, /* row-wize, no supernode */
+ SLU_SC, /* column-wise, supernode */
+ SLU_SR, /* row-wise, supernode */
+ SLU_NCP, /* column-wise, column-permuted, no supernode
+ (The consecutive columns of nonzeros, after permutation,
+ may not be stored contiguously.) */
+ SLU_DN /* Fortran style column-wise storage for dense matrix */
+} Stype_t;
+
+typedef enum {
+ SLU_S, /* single */
+ SLU_D, /* double */
+ SLU_C, /* single complex */
+ SLU_Z /* double complex */
+} Dtype_t;
+
+typedef enum {
+ SLU_GE, /* general */
+ SLU_TRLU, /* lower triangular, unit diagonal */
+ SLU_TRUU, /* upper triangular, unit diagonal */
+ SLU_TRL, /* lower triangular */
+ SLU_TRU, /* upper triangular */
+ SLU_SYL, /* symmetric, store lower half */
+ SLU_SYU, /* symmetric, store upper half */
+ SLU_HEL, /* Hermitian, store lower half */
+ SLU_HEU /* Hermitian, store upper half */
+} Mtype_t;
+
+typedef struct {
+ Stype_t Stype; /* Storage type: interprets the storage structure
+ pointed to by *Store. */
+ Dtype_t Dtype; /* Data type. */
+ Mtype_t Mtype; /* Matrix type: describes the mathematical property of
+ the matrix. */
+ int_t nrow; /* number of rows */
+ int_t ncol; /* number of columns */
+ void *Store; /* pointer to the actual storage of the matrix */
+} SuperMatrix;
+
+/***********************************************
+ * The storage schemes are defined as follows. *
+ ***********************************************/
+
+/* Stype == NC (Also known as Harwell-Boeing sparse matrix format) */
+typedef struct {
+ int_t nnz; /* number of nonzeros in the matrix */
+ void *nzval; /* pointer to array of nonzero values, packed by column */
+ int_t *rowind; /* pointer to array of row indices of the nonzeros */
+ int_t *colptr; /* pointer to array of beginning of columns in nzval[]
+ and rowind[] */
+ /* Note:
+ Zero-based indexing is used;
+ colptr[] has ncol+1 entries, the last one pointing
+ beyond the last column, so that colptr[ncol] = nnz. */
+} NCformat;
+
+/* Stype == NR (Also known as row compressed storage (RCS). */
+typedef struct {
+ int_t nnz; /* number of nonzeros in the matrix */
+ void *nzval; /* pointer to array of nonzero values, packed by row */
+ int_t *colind; /* pointer to array of column indices of the nonzeros */
+ int_t *rowptr; /* pointer to array of beginning of rows in nzval[]
+ and colind[] */
+ /* Note:
+ Zero-based indexing is used;
+ nzval[] and colind[] are of the same length, nnz;
+ rowptr[] has nrow+1 entries, the last one pointing
+ beyond the last column, so that rowptr[nrow] = nnz. */
+} NRformat;
+
+/* Stype == SC */
+typedef struct {
+ int_t nnz; /* number of nonzeros in the matrix */
+ int_t nsuper; /* number of supernodes, minus 1 */
+ void *nzval; /* pointer to array of nonzero values, packed by column */
+ int_t *nzval_colptr;/* pointer to array of beginning of columns in nzval[] */
+ int_t *rowind; /* pointer to array of compressed row indices of
+ rectangular supernodes */
+ int_t *rowind_colptr;/* pointer to array of beginning of columns in rowind[] */
+ int_t *col_to_sup; /* col_to_sup[j] is the supernode number to which column
+ j belongs; mapping from column to supernode number. */
+ int_t *sup_to_col; /* sup_to_col[s] points to the start of the s-th
+ supernode; mapping from supernode number to column.
+ e.g.: col_to_sup: 0 1 2 2 3 3 3 4 4 4 4 4 4 (ncol=12)
+ sup_to_col: 0 1 2 4 7 12 (nsuper=4) */
+ /* Note:
+ Zero-based indexing is used;
+ nzval_colptr[], rowind_colptr[], col_to_sup and
+ sup_to_col[] have ncol+1 entries, the last one
+ pointing beyond the last column.
+ For col_to_sup[], only the first ncol entries are
+ defined. For sup_to_col[], only the first nsuper+2
+ entries are defined. */
+} SCformat;
+
+/* Stype == NCP */
+typedef struct {
+ int_t nnz; /* number of nonzeros in the matrix */
+ void *nzval; /* pointer to array of nonzero values, packed by column */
+ int_t *rowind;/* pointer to array of row indices of the nonzeros */
+ /* Note: nzval[]/rowind[] always have the same length */
+ int_t *colbeg;/* colbeg[j] points to the beginning of column j in nzval[]
+ and rowind[] */
+ int_t *colend;/* colend[j] points to one past the last element of column
+ j in nzval[] and rowind[] */
+ /* Note:
+ Zero-based indexing is used;
+ The consecutive columns of the nonzeros may not be
+ contiguous in storage, because the matrix has been
+ postmultiplied by a column permutation matrix. */
+} NCPformat;
+
+/* Stype == DN */
+typedef struct {
+ int_t lda; /* leading dimension */
+ void *nzval; /* array of size lda*ncol to represent a dense matrix */
+} DNformat;
+
+
+
+/*********************************************************
+ * Macros used for easy access of sparse matrix entries. *
+ *********************************************************/
+#define L_SUB_START(col) ( Lstore->rowind_colptr[col] )
+#define L_SUB(ptr) ( Lstore->rowind[ptr] )
+#define L_NZ_START(col) ( Lstore->nzval_colptr[col] )
+#define L_FST_SUPC(superno) ( Lstore->sup_to_col[superno] )
+#define U_NZ_START(col) ( Ustore->colptr[col] )
+#define U_SUB(ptr) ( Ustore->rowind[ptr] )
+
+
+#endif /* __SUPERLU_SUPERMATRIX */