Actual source code: aij.h

 4:  #include src/mat/matimpl.h

  6: /* Info about i-nodes (identical nodes) */
  7: typedef struct {
  8:   PetscTruth use;
  9:   PetscInt   node_count;                    /* number of inodes */
 10:   PetscInt   *size;                         /* size of each inode */
 11:   PetscInt   limit;                         /* inode limit */
 12:   PetscInt   max_limit;                     /* maximum supported inode limit */
 13:   PetscTruth checked;                       /* if inodes have been checked for */
 14: } Mat_SeqAIJ_Inode;

 16: /*  
 17:   MATSEQAIJ format - Compressed row storage (also called Yale sparse matrix
 18:   format).  The i[] and j[] arrays start at 0. For example,
 19:   j[i[k]+p] is the pth column in row k.  Note that the diagonal
 20:   matrix elements are stored with the rest of the nonzeros (not separately).
 21: */

 23: typedef struct {
 24:   PetscTruth       sorted;           /* if true, rows are sorted by increasing columns */
 25:   PetscTruth       roworiented;      /* if true, row-oriented input, default */
 26:   PetscInt         nonew;            /* 1 don't add new nonzeros, -1 generate error on new */
 27:   PetscTruth       singlemalloc;     /* if true a, i, and j have been obtained with
 28:                                           one big malloc */
 29:   PetscTruth       freedata;        /* free the i,j,a data when the matrix is destroyed; true by default */
 30:   PetscInt         nz,maxnz;        /* nonzeros, allocated nonzeros */
 31:   PetscInt         *diag;            /* pointers to diagonal elements */
 32:   PetscInt         *i;               /* pointer to beginning of each row */
 33:   PetscInt         *imax;            /* maximum space allocated for each row */
 34:   PetscInt         *ilen;            /* actual length of each row */
 35:   PetscInt         *j;               /* column values: j + i[k] - 1 is start of row k */
 36:   PetscScalar      *a;               /* nonzero elements */
 37:   IS               row,col,icol;   /* index sets, used for reorderings */
 38:   PetscScalar      *solve_work;      /* work space used in MatSolve */
 39:   Mat_SeqAIJ_Inode inode;            /* identical node informaton */
 40:   PetscInt         reallocs;         /* number of mallocs done during MatSetValues() 
 41:                                         as more values are set than were prealloced */
 42:   PetscInt         rmax;             /* max nonzeros in any row */
 43:   PetscTruth       ilu_preserve_row_sums;
 44:   PetscReal        lu_dtcol;
 45:   PetscReal        lu_damping;
 46:   PetscReal        lu_shift;         /* Manteuffel shift switch, fraction */
 47:   PetscReal        lu_shift_fraction;
 48:   PetscReal        lu_zeropivot;
 49:   PetscScalar      *saved_values;    /* location for stashing nonzero values of matrix */
 50:   PetscScalar      *idiag,*ssor;     /* inverse of diagonal entries; space for eisen */

 52:   PetscTruth       keepzeroedrows;   /* keeps matrix structure same in calls to MatZeroRows()*/
 53:   PetscTruth       ignorezeroentries;
 54:   ISColoring       coloring;         /* set with MatADSetColoring() used by MatADSetValues() */
 55:   Mat              sbaijMat;         /* mat in sbaij format */

 57:   PetscInt         *xtoy,*xtoyB;     /* map nonzero pattern of X into Y's, used by MatAXPY() */
 58:   Mat              XtoY;             /* used by MatAXPY() */
 59: } Mat_SeqAIJ;

 61: EXTERN PetscErrorCode MatILUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat *);
 62: EXTERN PetscErrorCode MatICCFactorSymbolic_SeqAIJ(Mat,IS,MatFactorInfo*,Mat *);
 63: EXTERN PetscErrorCode MatCholeskyFactorSymbolic_SeqAIJ(Mat,IS,MatFactorInfo*,Mat*);
 64: EXTERN PetscErrorCode MatCholeskyFactorNumeric_SeqAIJ(Mat,Mat *);
 65: EXTERN PetscErrorCode MatDuplicate_SeqAIJ(Mat,MatDuplicateOption,Mat*);
 66: EXTERN PetscErrorCode MatMissingDiagonal_SeqAIJ(Mat);
 67: EXTERN PetscErrorCode MatMarkDiagonal_SeqAIJ(Mat);

 69: EXTERN PetscErrorCode MatMult_SeqAIJ(Mat A,Vec,Vec);
 70: EXTERN PetscErrorCode MatMultAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
 71: EXTERN PetscErrorCode MatMultTranspose_SeqAIJ(Mat A,Vec,Vec);
 72: EXTERN PetscErrorCode MatMultTransposeAdd_SeqAIJ(Mat A,Vec,Vec,Vec);
 73: EXTERN PetscErrorCode MatRelax_SeqAIJ(Mat,Vec,PetscReal,MatSORType,PetscReal,PetscInt,PetscInt,Vec);

 75: EXTERN PetscErrorCode MatSetColoring_SeqAIJ(Mat,ISColoring);
 76: EXTERN PetscErrorCode MatSetValuesAdic_SeqAIJ(Mat,void*);
 77: EXTERN PetscErrorCode MatSetValuesAdifor_SeqAIJ(Mat,PetscInt,void*);

 79: EXTERN PetscErrorCode MatGetSymbolicTranspose_SeqAIJ(Mat,PetscInt *[],PetscInt *[]);
 80: EXTERN PetscErrorCode MatGetSymbolicTransposeReduced_SeqAIJ(Mat,PetscInt,PetscInt,PetscInt *[],PetscInt *[]);
 81: EXTERN PetscErrorCode MatRestoreSymbolicTranspose_SeqAIJ(Mat,PetscInt *[],PetscInt *[]);
 82: EXTERN PetscErrorCode MatToSymmetricIJ_SeqAIJ(PetscInt,PetscInt*,PetscInt*,PetscInt,PetscInt,PetscInt**,PetscInt**);
 83: EXTERN PetscErrorCode Mat_AIJ_CheckInode(Mat,PetscTruth);
 84: EXTERN PetscErrorCode MatLUFactorSymbolic_SeqAIJ(Mat,IS,IS,MatFactorInfo*,Mat*);
 85: EXTERN PetscErrorCode MatLUFactorNumeric_SeqAIJ(Mat,Mat*);
 86: EXTERN PetscErrorCode MatLUFactor_SeqAIJ(Mat,IS,IS,MatFactorInfo*);
 87: EXTERN PetscErrorCode MatSolve_SeqAIJ(Mat,Vec,Vec);
 88: EXTERN PetscErrorCode MatSolveAdd_SeqAIJ(Mat,Vec,Vec,Vec);
 89: EXTERN PetscErrorCode MatSolveTranspose_SeqAIJ(Mat,Vec,Vec);
 90: EXTERN PetscErrorCode MatSolveTransposeAdd_SeqAIJ(Mat,Vec,Vec,Vec);
 91: EXTERN PetscErrorCode MatEqual_SeqAIJ(Mat A,Mat B,PetscTruth* flg);
 92: EXTERN PetscErrorCode MatFDColoringCreate_SeqAIJ(Mat,ISColoring,MatFDColoring);
 93: EXTERN PetscErrorCode MatILUDTFactor_SeqAIJ(Mat,MatFactorInfo*,IS,IS,Mat*);
 94: EXTERN PetscErrorCode MatLoad_SeqAIJ(PetscViewer,const MatType,Mat*);
 95: EXTERN PetscErrorCode RegisterApplyPtAPRoutines_Private(Mat);
 96: EXTERN PetscErrorCode MatMatMult_SeqAIJ_SeqAIJ(Mat,Mat,MatReuse,PetscReal,Mat*);
 97: EXTERN PetscErrorCode MatMatMultSymbolic_SeqAIJ_SeqAIJ(Mat,Mat,PetscReal,Mat*);
 98: EXTERN PetscErrorCode MatMatMultNumeric_SeqAIJ_SeqAIJ(Mat,Mat,Mat);
 99: EXTERN PetscErrorCode MatPtAP_SeqAIJ_SeqAIJ(Mat,Mat,MatReuse,PetscReal,Mat*);
100: EXTERN PetscErrorCode MatPtAPSymbolic_SeqAIJ_SeqAIJ(Mat,Mat,PetscReal,Mat*);
101: EXTERN PetscErrorCode MatPtAPNumeric_SeqAIJ_SeqAIJ(Mat,Mat,Mat);
102: EXTERN PetscErrorCode MatMatMultTranspose_SeqAIJ_SeqAIJ(Mat,Mat,MatReuse,PetscReal,Mat*);
103: EXTERN PetscErrorCode MatMatMultTransposeSymbolic_SeqAIJ_SeqAIJ(Mat,Mat,PetscReal,Mat*);
104: EXTERN PetscErrorCode MatMatMultTransposeNumeric_SeqAIJ_SeqAIJ(Mat,Mat,Mat);
105: EXTERN PetscErrorCode MatSetValues_SeqAIJ(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
106: EXTERN PetscErrorCode MatGetRow_SeqAIJ(Mat,PetscInt,PetscInt*,PetscInt**,PetscScalar**);
107: EXTERN PetscErrorCode MatRestoreRow_SeqAIJ(Mat,PetscInt,PetscInt*,PetscInt**,PetscScalar**);
108: EXTERN PetscErrorCode MatPrintHelp_SeqAIJ(Mat);
109: EXTERN PetscErrorCode MatAXPY_SeqAIJ(const PetscScalar[],Mat,Mat,MatStructure);

112: EXTERN PetscErrorCode MatConvert_SeqAIJ_SeqSBAIJ(Mat,const MatType,Mat*);
113: EXTERN PetscErrorCode MatConvert_SeqAIJ_SeqBAIJ(Mat,const MatType,Mat*);
114: EXTERN PetscErrorCode MatReorderForNonzeroDiagonal_SeqAIJ(Mat,PetscReal,IS,IS);
115: EXTERN PetscErrorCode MatAdjustForInodes_SeqAIJ(Mat,IS*,IS*);
116: EXTERN PetscErrorCode MatSeqAIJGetInodeSizes_SeqAIJ(Mat,PetscInt*,PetscInt*[],PetscInt*);

119: #endif