Actual source code: baij.h

 4:  #include include/private/matimpl.h
 5:  #include src/mat/impls/aij/seq/aij.h


  8: /*  
  9:   MATSEQBAIJ format - Block compressed row storage. The i[] and j[] 
 10:   arrays start at 0.
 11: */

 13: /* This header is shared by the SeqSBAIJ matrix */
 14: #define SEQBAIJHEADER \
 15:   PetscInt         bs2;              /*  square of block size */                                     \
 16:   PetscInt         mbs,nbs;          /* rows/bs, columns/bs */                                       \
 17:   PetscScalar      *mult_work;       /* work array for matrix vector product*/                       \
 18:   PetscScalar      *saved_values;                                                                    \
 19:                                                                                                      \
 20:   Mat              sbaijMat;         /* mat in sbaij format */                                       \
 21:                                                                                                      \
 22:   PetscInt         setvalueslen;     /* only used for single precision */                            \
 23:   MatScalar        *setvaluescopy;   /* area double precision values in MatSetValuesXXX() are copied \
 24:                                       before calling MatSetValuesXXX_SeqBAIJ_MatScalar() */          \
 25:                                                                                                      \
 26:   PetscTruth       pivotinblocks;    /* pivot inside factorization of each diagonal block */         \
 27:                                                                                                      \
 28:   PetscScalar      *idiag;           /* inverse of block diagonal  */                                \
 29:   PetscTruth       idiagvalid       /* if above has correct/current values */


 32: typedef struct {
 33:   SEQAIJHEADER(PetscScalar);
 34:   SEQBAIJHEADER;
 35: } Mat_SeqBAIJ;

 38: EXTERN PetscErrorCode MatSeqBAIJSetPreallocation_SeqBAIJ(Mat,PetscInt,PetscInt,PetscInt*);
 40: EXTERN PetscErrorCode MatILUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatFactorInfo*,Mat *);
 41: EXTERN PetscErrorCode MatICCFactorSymbolic_SeqBAIJ(Mat,IS,MatFactorInfo*,Mat *);
 42: EXTERN PetscErrorCode MatCholeskyFactorSymbolic_SeqBAIJ(Mat,IS,MatFactorInfo*,Mat*);
 43: EXTERN PetscErrorCode MatCholeskyFactorNumeric_SeqBAIJ_N(Mat,MatFactorInfo*,Mat*);
 44: EXTERN PetscErrorCode MatCholeskyFactorNumeric_SeqBAIJ_N_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
 45: EXTERN PetscErrorCode MatDuplicate_SeqBAIJ(Mat,MatDuplicateOption,Mat*);
 46: EXTERN PetscErrorCode MatMissingDiagonal_SeqBAIJ(Mat);
 47: EXTERN PetscErrorCode MatMarkDiagonal_SeqBAIJ(Mat);

 49: EXTERN PetscErrorCode MatLUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatFactorInfo*,Mat*);
 50: EXTERN PetscErrorCode MatLUFactor_SeqBAIJ(Mat,IS,IS,MatFactorInfo*);
 51: EXTERN PetscErrorCode MatIncreaseOverlap_SeqBAIJ(Mat,PetscInt,IS*,PetscInt);
 52: EXTERN PetscErrorCode MatGetSubMatrix_SeqBAIJ(Mat,IS,IS,PetscInt,MatReuse,Mat*);
 53: EXTERN PetscErrorCode MatGetSubMatrices_SeqBAIJ(Mat,PetscInt,const IS[],const IS[],MatReuse,Mat*[]);
 54: EXTERN PetscErrorCode MatMultTranspose_SeqBAIJ(Mat,Vec,Vec);
 55: EXTERN PetscErrorCode MatMultTransposeAdd_SeqBAIJ(Mat,Vec,Vec,Vec);
 56: EXTERN PetscErrorCode MatScale_SeqBAIJ(Mat,PetscScalar);
 57: EXTERN PetscErrorCode MatNorm_SeqBAIJ(Mat,NormType,PetscReal *);
 58: EXTERN PetscErrorCode MatEqual_SeqBAIJ(Mat,Mat,PetscTruth*);
 59: EXTERN PetscErrorCode MatGetDiagonal_SeqBAIJ(Mat,Vec);
 60: EXTERN PetscErrorCode MatDiagonalScale_SeqBAIJ(Mat,Vec,Vec);
 61: EXTERN PetscErrorCode MatGetInfo_SeqBAIJ(Mat,MatInfoType,MatInfo *);
 62: EXTERN PetscErrorCode MatZeroEntries_SeqBAIJ(Mat);

 64: EXTERN PetscErrorCode MatSeqBAIJ_UpdateFactorNumeric_NaturalOrdering(Mat);
 65: EXTERN PetscErrorCode MatSeqBAIJ_UpdateSolvers(Mat);

 67: EXTERN PetscErrorCode MatSolve_SeqBAIJ_Update(Mat,Vec,Vec);
 68: EXTERN PetscErrorCode MatSolve_SeqBAIJ_1(Mat,Vec,Vec);
 69: EXTERN PetscErrorCode MatSolve_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec);
 70: EXTERN PetscErrorCode MatSolve_SeqBAIJ_2(Mat,Vec,Vec);
 71: EXTERN PetscErrorCode MatSolve_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec);
 72: EXTERN PetscErrorCode MatSolve_SeqBAIJ_3(Mat,Vec,Vec);
 73: EXTERN PetscErrorCode MatSolve_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec);
 74: EXTERN PetscErrorCode MatSolve_SeqBAIJ_4(Mat,Vec,Vec);
 75: EXTERN PetscErrorCode MatSolve_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec);
 76: #if defined(PETSC_HAVE_SSE)
 77: EXTERN PetscErrorCode MatSolve_SeqBAIJ_4_SSE_Demotion(Mat,Vec,Vec);
 78: EXTERN PetscErrorCode MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion(Mat,Vec,Vec);
 79: EXTERN PetscErrorCode MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion_usj(Mat,Vec,Vec);
 80: #endif
 81: EXTERN PetscErrorCode MatSolve_SeqBAIJ_5(Mat,Vec,Vec);
 82: EXTERN PetscErrorCode MatSolve_SeqBAIJ_5_NaturalOrdering(Mat,Vec,Vec);
 83: EXTERN PetscErrorCode MatSolve_SeqBAIJ_6(Mat,Vec,Vec);
 84: EXTERN PetscErrorCode MatSolve_SeqBAIJ_6_NaturalOrdering(Mat,Vec,Vec);
 85: EXTERN PetscErrorCode MatSolve_SeqBAIJ_7(Mat,Vec,Vec);
 86: EXTERN PetscErrorCode MatSolve_SeqBAIJ_7_NaturalOrdering(Mat,Vec,Vec);
 87: EXTERN PetscErrorCode MatSolve_SeqBAIJ_N(Mat,Vec,Vec);

 89: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_Update(Mat,Vec,Vec);
 90: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_1(Mat,Vec,Vec);
 91: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec);
 92: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_2(Mat,Vec,Vec);
 93: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec);
 94: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_3(Mat,Vec,Vec);
 95: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec);
 96: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_4(Mat,Vec,Vec);
 97: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec);
 98: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_5(Mat,Vec,Vec);
 99: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_5_NaturalOrdering(Mat,Vec,Vec);
100: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_6(Mat,Vec,Vec);
101: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_6_NaturalOrdering(Mat,Vec,Vec);
102: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_7(Mat,Vec,Vec);
103: EXTERN PetscErrorCode MatSolveTranspose_SeqBAIJ_7_NaturalOrdering(Mat,Vec,Vec);

105: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_1(Mat,MatFactorInfo*,Mat*);
106: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_2(Mat,MatFactorInfo*,Mat*);
107: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_2_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
108: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_3(Mat,MatFactorInfo*,Mat*);
109: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_3_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
110: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_4(Mat,MatFactorInfo*,Mat*);
111: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
112: #if defined(PETSC_HAVE_SSE)
113: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering_SSE(Mat,MatFactorInfo*,Mat*);
114: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering_SSE_usj(Mat,MatFactorInfo*,Mat*);
115: #else
116: #endif
117: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_5(Mat,MatFactorInfo*,Mat*);
118: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_5_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
119: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_6(Mat,MatFactorInfo*,Mat*);
120: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_6_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
121: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_7(Mat,MatFactorInfo*,Mat*);
122: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_7_NaturalOrdering(Mat,MatFactorInfo*,Mat*);
123: EXTERN PetscErrorCode MatLUFactorNumeric_SeqBAIJ_N(Mat,MatFactorInfo*,Mat*);

125: EXTERN PetscErrorCode MatMult_SeqBAIJ_1(Mat,Vec,Vec);
126: EXTERN PetscErrorCode MatMult_SeqBAIJ_2(Mat,Vec,Vec);
127: EXTERN PetscErrorCode MatMult_SeqBAIJ_3(Mat,Vec,Vec);
128: EXTERN PetscErrorCode MatMult_SeqBAIJ_4(Mat,Vec,Vec);
129: EXTERN PetscErrorCode MatMult_SeqBAIJ_5(Mat,Vec,Vec);
130: EXTERN PetscErrorCode MatMult_SeqBAIJ_6(Mat,Vec,Vec);
131: EXTERN PetscErrorCode MatMult_SeqBAIJ_7(Mat,Vec,Vec);
132: EXTERN PetscErrorCode MatMult_SeqBAIJ_N(Mat,Vec,Vec);

134: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_1(Mat,Vec,Vec,Vec);
135: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_2(Mat,Vec,Vec,Vec);
136: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_3(Mat,Vec,Vec,Vec);
137: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_4(Mat,Vec,Vec,Vec);
138: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_5(Mat,Vec,Vec,Vec);
139: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_6(Mat,Vec,Vec,Vec);
140: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_7(Mat,Vec,Vec,Vec);
141: EXTERN PetscErrorCode MatMultAdd_SeqBAIJ_N(Mat,Vec,Vec,Vec);
142: EXTERN PetscErrorCode MatLoad_SeqBAIJ(PetscViewer, MatType,Mat*);

144: #endif