1 #ifndef SUBMATFREE_H 2 #define SUBMATFREE_H 3 4 #include <petscmat.h> 5 6 typedef struct { 7 Mat A; 8 Vec VC; /* Work vector in the column space */ 9 Vec VR; /* Work vector in the row space */ 10 IS Rows, Cols; 11 12 } _p_MatSubMatFreeCtx; 13 14 typedef _p_MatSubMatFreeCtx *MatSubMatFreeCtx; 15 16 PetscErrorCode MatCreateSubMatrixFree(Mat, IS, IS, Mat *); 17 PetscErrorCode MatSMFResetRowColumn(Mat, IS, IS); 18 PetscErrorCode MatMult_SMF(Mat, Vec, Vec); 19 PetscErrorCode MatMultTranspose_SMF(Mat, Vec, Vec); 20 PetscErrorCode MatDiagonalSet_SMF(Mat, Vec, InsertMode); 21 PetscErrorCode MatDestroy_SMF(Mat); 22 PetscErrorCode MatView_SMF(Mat, PetscViewer); 23 PetscErrorCode MatShift_SMF(Mat, PetscReal); 24 PetscErrorCode MatDuplicate_SMF(Mat, MatDuplicateOption, Mat *); 25 PetscErrorCode MatEqual_SMF(Mat, Mat, PetscBool *); 26 PetscErrorCode MatScale_SMF(Mat, PetscReal); 27 PetscErrorCode MatCreateSubMatrix_SMF(Mat, IS, IS, MatReuse, Mat *); 28 PetscErrorCode MatCreateSubMatrices_SMF(Mat, PetscInt, IS *, IS *, MatReuse, Mat **); 29 PetscErrorCode MatTranspose_SMF(Mat, Mat *); 30 PetscErrorCode MatGetDiagonal_SMF(Mat, Vec); 31 PetscErrorCode MatGetColumnVector_SMF(Mat, Vec, PetscInt); 32 PetscErrorCode MatNorm_SMF(Mat, NormType, PetscReal *); 33 PetscErrorCode MatGetRowMax_SMF(Mat, Vec); 34 PetscErrorCode MatGetRow_SMF(Mat, PetscInt, PetscInt *, const PetscInt **, const PetscScalar **); 35 PetscErrorCode MatRestoreRow_SMF(Mat, PetscInt, PetscInt *, const PetscInt **, const PetscScalar **); 36 #endif 37