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