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