xref: /petsc/src/mat/impls/aij/seq/aij.h (revision 09f3b4e5628a00a1eaf17d80982cfbcc515cc9c1)
1 
2 #if !defined(__AIJ_H)
3 #define __AIJ_H
4 #include "src/mat/impls/csr/inode/inode.h"
5 /*
6   MATSEQAIJ format - Compressed row storage (also called Yale sparse matrix
7   format).  The i[] and j[] arrays start at 0. For example,
8   j[i[k]+p] is the pth column in row k.  Note that the diagonal
9   matrix elements are stored with the rest of the nonzeros (not separately).
10 */
11 
12 typedef struct {
13   MAT_INODE_HEADER;
14   PetscTruth       sorted;           /* if true, rows are sorted by increasing columns */
15   PetscTruth       roworiented;      /* if true, row-oriented input, default */
16   PetscInt         nonew;            /* 1 don't add new nonzeros, -1 generate error on new */
17   PetscTruth       singlemalloc;     /* if true a, i, and j have been obtained with
18                                           one big malloc */
19   PetscTruth       freedata;         /* free the i,j,a data when the matrix is destroyed; true by default */
20   PetscInt         maxnz;            /* allocated nonzeros */
21   PetscInt         *imax;            /* maximum space allocated for each row */
22   PetscInt         *ilen;            /* actual length of each row */
23   PetscInt         reallocs;         /* number of mallocs done during MatSetValues()
24                                         as more values are set than were prealloced */
25   PetscInt         rmax;             /* max nonzeros in any row */
26   PetscScalar      *saved_values;    /* location for stashing nonzero values of matrix */
27   PetscScalar      *idiag,*ssor;     /* inverse of diagonal entries; space for eisen */
28 
29   PetscTruth       keepzeroedrows;   /* keeps matrix structure same in calls to MatZeroRows()*/
30   PetscTruth       ignorezeroentries;
31   ISColoring       coloring;         /* set with MatADSetColoring() used by MatADSetValues() */
32 
33   PetscInt         *xtoy,*xtoyB;     /* map nonzero pattern of X into Y's, used by MatAXPY() */
34   Mat              XtoY;             /* used by MatAXPY() */
35   Mat_CompressedRow compressedrow;   /* use compressed row format */
36 } Mat_SeqAIJ;
37 
38 EXTERN_C_BEGIN
39 EXTERN PetscErrorCode MatSeqAIJSetPreallocation_SeqAIJ(Mat,PetscInt,PetscInt*);
40 EXTERN_C_END
41 EXTERN PetscErrorCode MatILUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat *);
42 EXTERN PetscErrorCode MatICCFactorSymbolic_SeqAIJ(Mat,IS,MatFactorInfo*,Mat *);
43 EXTERN PetscErrorCode MatCholeskyFactorSymbolic_SeqAIJ(Mat,IS,MatFactorInfo*,Mat*);
44 EXTERN PetscErrorCode MatCholeskyFactorNumeric_SeqAIJ(Mat,MatFactorInfo*,Mat*);
45 EXTERN PetscErrorCode MatDuplicate_SeqAIJ(Mat,MatDuplicateOption,Mat*);
46 EXTERN PetscErrorCode MatMissingDiagonal_SeqAIJ(Mat);
47 EXTERN PetscErrorCode MatMarkDiagonal_SeqAIJ(Mat);
48 
49 EXTERN PetscErrorCode MatMult_SeqAIJ(Mat A,Vec,Vec);
50 EXTERN PetscErrorCode MatMultAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
51 EXTERN PetscErrorCode MatMultTranspose_SeqAIJ(Mat A,Vec,Vec);
52 EXTERN PetscErrorCode MatMultTransposeAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
53 EXTERN PetscErrorCode MatRelax_SeqAIJ(Mat,Vec,PetscReal,MatSORType,PetscReal,PetscInt,PetscInt,Vec);
54 
55 EXTERN PetscErrorCode MatSetColoring_SeqAIJ(Mat,ISColoring);
56 EXTERN PetscErrorCode MatSetValuesAdic_SeqAIJ(Mat,void*);
57 EXTERN PetscErrorCode MatSetValuesAdifor_SeqAIJ(Mat,PetscInt,void*);
58 
59 EXTERN PetscErrorCode MatGetSymbolicTranspose_SeqAIJ(Mat,PetscInt *[],PetscInt *[]);
60 EXTERN PetscErrorCode MatGetSymbolicTransposeReduced_SeqAIJ(Mat,PetscInt,PetscInt,PetscInt *[],PetscInt *[]);
61 EXTERN PetscErrorCode MatRestoreSymbolicTranspose_SeqAIJ(Mat,PetscInt *[],PetscInt *[]);
62 EXTERN PetscErrorCode MatToSymmetricIJ_SeqAIJ(PetscInt,PetscInt*,PetscInt*,PetscInt,PetscInt,PetscInt**,PetscInt**);
63 EXTERN PetscErrorCode MatLUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat*);
64 EXTERN PetscErrorCode MatLUFactorNumeric_SeqAIJ(Mat,MatFactorInfo*,Mat*);
65 EXTERN PetscErrorCode MatLUFactor_SeqAIJ(Mat,IS,IS,MatFactorInfo*);
66 EXTERN PetscErrorCode MatSolve_SeqAIJ(Mat,Vec,Vec);
67 EXTERN PetscErrorCode MatSolveAdd_SeqAIJ(Mat,Vec,Vec,Vec);
68 EXTERN PetscErrorCode MatSolveTranspose_SeqAIJ(Mat,Vec,Vec);
69 EXTERN PetscErrorCode MatSolveTransposeAdd_SeqAIJ(Mat,Vec,Vec,Vec);
70 EXTERN PetscErrorCode MatMatSolve_SeqAIJ(Mat,Mat,Mat);
71 EXTERN PetscErrorCode MatEqual_SeqAIJ(Mat A,Mat B,PetscTruth* flg);
72 EXTERN PetscErrorCode MatFDColoringCreate_SeqAIJ(Mat,ISColoring,MatFDColoring);
73 EXTERN PetscErrorCode MatILUDTFactor_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat*);
74 EXTERN PetscErrorCode MatLoad_SeqAIJ(PetscViewer, MatType,Mat*);
75 EXTERN PetscErrorCode RegisterApplyPtAPRoutines_Private(Mat);
76 EXTERN PetscErrorCode MatMatMult_SeqAIJ_SeqAIJ(Mat,Mat,MatReuse,PetscReal,Mat*);
77 EXTERN PetscErrorCode MatMatMultSymbolic_SeqAIJ_SeqAIJ(Mat,Mat,PetscReal,Mat*);
78 EXTERN PetscErrorCode MatMatMultNumeric_SeqAIJ_SeqAIJ(Mat,Mat,Mat);
79 EXTERN PetscErrorCode MatPtAPSymbolic_SeqAIJ(Mat,Mat,PetscReal,Mat*);
80 EXTERN PetscErrorCode MatPtAPNumeric_SeqAIJ(Mat,Mat,Mat);
81 EXTERN PetscErrorCode MatPtAPSymbolic_SeqAIJ_SeqAIJ(Mat,Mat,PetscReal,Mat*);
82 EXTERN PetscErrorCode MatPtAPNumeric_SeqAIJ_SeqAIJ(Mat,Mat,Mat);
83 EXTERN PetscErrorCode MatMatMultTranspose_SeqAIJ_SeqAIJ(Mat,Mat,MatReuse,PetscReal,Mat*);
84 EXTERN PetscErrorCode MatMatMultTransposeSymbolic_SeqAIJ_SeqAIJ(Mat,Mat,PetscReal,Mat*);
85 EXTERN PetscErrorCode MatMatMultTransposeNumeric_SeqAIJ_SeqAIJ(Mat,Mat,Mat);
86 EXTERN PetscErrorCode MatSetValues_SeqAIJ(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
87 EXTERN PetscErrorCode MatGetRow_SeqAIJ(Mat,PetscInt,PetscInt*,PetscInt**,PetscScalar**);
88 EXTERN PetscErrorCode MatRestoreRow_SeqAIJ(Mat,PetscInt,PetscInt*,PetscInt**,PetscScalar**);
89 EXTERN PetscErrorCode MatPrintHelp_SeqAIJ(Mat);
90 EXTERN PetscErrorCode MatAXPY_SeqAIJ(Mat,PetscScalar,Mat,MatStructure);
91 
92 EXTERN_C_BEGIN
93 EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConvert_SeqAIJ_SeqSBAIJ(Mat, MatType,MatReuse,Mat*);
94 EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConvert_SeqAIJ_SeqBAIJ(Mat, MatType,MatReuse,Mat*);
95 EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatReorderForNonzeroDiagonal_SeqAIJ(Mat,PetscReal,IS,IS);
96 EXTERN_C_END
97 
98 #endif
99