Actual source code: aij.h
1: /* $Id: aij.h,v 1.43 2001/03/23 22:04:55 bsmith Exp $ */
3: #include "src/mat/matimpl.h"
8: /* Info about i-nodes (identical nodes) */
9: typedef struct {
10: PetscTruth use;
11: int node_count; /* number of inodes */
12: int *size; /* size of each inode */
13: int limit; /* inode limit */
14: int max_limit; /* maximum supported inode limit */
15: } Mat_SeqAIJ_Inode;
17: /*
18: MATSEQAIJ format - Compressed row storage (also called Yale sparse matrix
19: format), compatible with Fortran. The i[] and j[] arrays start at 1,
20: or 0, depending on the value of shift. For example, in Fortran
21: j[i[k]+p+shift] is the pth column in row k. Note that the diagonal
22: matrix elements are stored with the rest of the nonzeros (not separately).
23: */
25: typedef struct {
26: PetscTruth sorted; /* if true, rows are sorted by increasing columns */
27: PetscTruth roworiented; /* if true, row-oriented input, default */
28: int nonew; /* 1 don't add new nonzeros, -1 generate error on new */
29: PetscTruth singlemalloc; /* if true a, i, and j have been obtained with
30: one big malloc */
31: PetscTruth freedata; /* free the i,j,a data when the matrix is destroyed; true by default */
32: int nz,maxnz; /* nonzeros, allocated nonzeros */
33: int *diag; /* pointers to diagonal elements */
34: int *i; /* pointer to beginning of each row */
35: int *imax; /* maximum space allocated for each row */
36: int *ilen; /* actual length of each row */
37: int *j; /* column values: j + i[k] - 1 is start of row k */
38: Scalar *a; /* nonzero elements */
39: IS row,col,icol; /* index sets, used for reorderings */
40: Scalar *solve_work; /* work space used in MatSolve */
41: void *spptr; /* pointer for special library like SuperLU */
42: int indexshift; /* zero or -one for C or Fortran indexing */
43: Mat_SeqAIJ_Inode inode; /* identical node informaton */
44: int reallocs; /* number of mallocs done during MatSetValues()
45: as more values are set than were prealloced */
46: int rmax; /* max nonzeros in any row */
47: PetscTruth ilu_preserve_row_sums;
48: PetscReal lu_dtcol;
49: PetscTruth lu_damp;
50: PetscReal lu_damping;
51: Scalar *saved_values; /* location for stashing nonzero values of matrix */
52: Scalar *idiag,*ssor; /* inverse of diagonal entries; space for eisen */
54: PetscTruth keepzeroedrows; /* keeps matrix structure same in calls to MatZeroRows()*/
55: PetscTruth ignorezeroentries;
56: } Mat_SeqAIJ;
58: EXTERN int MatILUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatILUInfo*,Mat *);
59: EXTERN int MatDuplicate_SeqAIJ(Mat,MatDuplicateOption,Mat*);
60: EXTERN int MatMarkDiagonal_SeqAIJ(Mat);
62: EXTERN int MatMult_SeqAIJ(Mat A,Vec,Vec);
63: EXTERN int MatMultAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
64: EXTERN int MatMultTranspose_SeqAIJ(Mat A,Vec,Vec);
65: EXTERN int MatMultTransposeAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
66: EXTERN int MatRelax_SeqAIJ(Mat,Vec,double,MatSORType,double,int,Vec);
68: #endif