Actual source code: aij.h
1: /* $Id: aij.h,v 1.46 2001/08/07 03:02:47 balay Exp $ */
5: #include src/mat/matimpl.h
7: /* Info about i-nodes (identical nodes) */
8: typedef struct {
9: PetscTruth use;
10: int node_count; /* number of inodes */
11: int *size; /* size of each inode */
12: int limit; /* inode limit */
13: int max_limit; /* maximum supported inode limit */
14: PetscTruth checked; /* if inodes have been checked for */
15: } Mat_SeqAIJ_Inode;
17: /*
18: MATSEQAIJ format - Compressed row storage (also called Yale sparse matrix
19: format). The i[] and j[] arrays start at 0. For example,
20: j[i[k]+p] is the pth column in row k. Note that the diagonal
21: matrix elements are stored with the rest of the nonzeros (not separately).
22: */
24: typedef struct {
25: PetscTruth sorted; /* if true, rows are sorted by increasing columns */
26: PetscTruth roworiented; /* if true, row-oriented input, default */
27: int nonew; /* 1 don't add new nonzeros, -1 generate error on new */
28: PetscTruth singlemalloc; /* if true a, i, and j have been obtained with
29: one big malloc */
30: PetscTruth freedata; /* free the i,j,a data when the matrix is destroyed; true by default */
31: int nz,maxnz; /* nonzeros, allocated nonzeros */
32: int *diag; /* pointers to diagonal elements */
33: int *i; /* pointer to beginning of each row */
34: int *imax; /* maximum space allocated for each row */
35: int *ilen; /* actual length of each row */
36: int *j; /* column values: j + i[k] - 1 is start of row k */
37: PetscScalar *a; /* nonzero elements */
38: IS row,col,icol; /* index sets, used for reorderings */
39: PetscScalar *solve_work; /* work space used in MatSolve */
40: Mat_SeqAIJ_Inode inode; /* identical node informaton */
41: int reallocs; /* number of mallocs done during MatSetValues()
42: as more values are set than were prealloced */
43: int rmax; /* max nonzeros in any row */
44: PetscTruth ilu_preserve_row_sums;
45: PetscReal lu_dtcol;
46: PetscReal lu_damping;
47: PetscReal lu_shift; /* Manteuffel shift switch, fraction */
48: PetscReal lu_shift_fraction;
49: PetscReal lu_zeropivot;
50: PetscScalar *saved_values; /* location for stashing nonzero values of matrix */
51: PetscScalar *idiag,*ssor; /* inverse of diagonal entries; space for eisen */
53: PetscTruth keepzeroedrows; /* keeps matrix structure same in calls to MatZeroRows()*/
54: PetscTruth ignorezeroentries;
55: ISColoring coloring; /* set with MatADSetColoring() used by MatADSetValues() */
56: Mat sbaijMat; /* mat in sbaij format */
58: int *xtoy,*xtoyB; /* map nonzero pattern of X into Y's, used by MatAXPY() */
59: Mat XtoY; /* used by MatAXPY() */
60: } Mat_SeqAIJ;
62: EXTERN int MatILUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat *);
63: EXTERN int MatICCFactorSymbolic_SeqAIJ(Mat,IS,MatFactorInfo*,Mat *);
64: EXTERN int MatCholeskyFactorSymbolic_SeqAIJ(Mat,IS,MatFactorInfo*,Mat*);
65: EXTERN int MatCholeskyFactorNumeric_SeqAIJ(Mat,Mat *);
66: EXTERN int MatDuplicate_SeqAIJ(Mat,MatDuplicateOption,Mat*);
67: EXTERN int MatMissingDiagonal_SeqAIJ(Mat);
68: EXTERN int MatMarkDiagonal_SeqAIJ(Mat);
70: EXTERN int MatMult_SeqAIJ(Mat A,Vec,Vec);
71: EXTERN int MatMultAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
72: EXTERN int MatMultTranspose_SeqAIJ(Mat A,Vec,Vec);
73: EXTERN int MatMultTransposeAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
74: EXTERN int MatRelax_SeqAIJ(Mat,Vec,PetscReal,MatSORType,PetscReal,int,int,Vec);
76: EXTERN int MatSetColoring_SeqAIJ(Mat,ISColoring);
77: EXTERN int MatSetValuesAdic_SeqAIJ(Mat,void*);
78: EXTERN int MatSetValuesAdifor_SeqAIJ(Mat,int,void*);
80: EXTERN int MatGetSymbolicTranspose_SeqAIJ(Mat,int *[],int *[]);
81: EXTERN int MatRestoreSymbolicTranspose_SeqAIJ(Mat,int *[],int *[]);
82: EXTERN int MatToSymmetricIJ_SeqAIJ(int,int*,int*,int,int,int**,int**);
83: EXTERN int Mat_AIJ_CheckInode(Mat,PetscTruth);
84: EXTERN int MatLUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat*);
85: EXTERN int MatLUFactorNumeric_SeqAIJ(Mat,Mat*);
86: EXTERN int MatLUFactor_SeqAIJ(Mat,IS,IS,MatFactorInfo*);
87: EXTERN int MatSolve_SeqAIJ(Mat,Vec,Vec);
88: EXTERN int MatSolveAdd_SeqAIJ(Mat,Vec,Vec,Vec);
89: EXTERN int MatSolveTranspose_SeqAIJ(Mat,Vec,Vec);
90: EXTERN int MatSolveTransposeAdd_SeqAIJ(Mat,Vec,Vec,Vec);
91: EXTERN int MatEqual_SeqAIJ(Mat A,Mat B,PetscTruth* flg);
92: EXTERN int MatFDColoringCreate_SeqAIJ(Mat,ISColoring,MatFDColoring);
93: EXTERN int MatILUDTFactor_SeqAIJ(Mat,MatFactorInfo*,IS,IS,Mat*);
94: EXTERN int MatLoad_SeqAIJ(PetscViewer,const MatType,Mat*);
95: EXTERN int RegisterApplyPtAPRoutines_Private(Mat);
96: EXTERN_C_BEGIN
97: EXTERN int MatConvert_SeqAIJ_SeqSBAIJ(Mat,const MatType,Mat*);
98: EXTERN int MatConvert_SeqAIJ_SeqBAIJ(Mat,const MatType,Mat*);
99: EXTERN int MatReorderForNonzeroDiagonal_SeqAIJ(Mat,PetscReal,IS,IS);
100: EXTERN int MatAdjustForInodes_SeqAIJ(Mat,IS*,IS*);
101: EXTERN int MatSeqAIJGetInodeSizes_SeqAIJ(Mat,int*,int*[],int*);
102: EXTERN_C_END
104: #endif