1 #pragma once 2 3 #include <petsc/private/kspimpl.h> 4 #include <petsc/private/matimpl.h> 5 #include <petscksp.h> 6 7 typedef struct { 8 Mat A, Ap, B, C, D; 9 KSP ksp; 10 Vec work1, work2; 11 MatSchurComplementAinvType ainvtype; 12 } Mat_SchurComplement; 13 14 PETSC_INTERN PetscErrorCode MatCreateVecs_SchurComplement(Mat N, Vec *, Vec *); 15 PETSC_INTERN PetscErrorCode MatView_SchurComplement(Mat, PetscViewer); 16 PETSC_INTERN PetscErrorCode MatMultTranspose_SchurComplement(Mat, Vec, Vec); 17 PETSC_INTERN PetscErrorCode MatMult_SchurComplement(Mat, Vec, Vec); 18 PETSC_INTERN PetscErrorCode MatMultAdd_SchurComplement(Mat, Vec, Vec, Vec); 19 PETSC_INTERN PetscErrorCode MatSetFromOptions_SchurComplement(Mat, PetscOptionItems); 20 PETSC_INTERN PetscErrorCode MatDestroy_SchurComplement(Mat); 21 PETSC_INTERN PetscErrorCode MatGetSchurComplement_Basic(Mat, IS, IS, IS, IS, MatReuse, Mat *, MatSchurComplementAinvType, MatReuse, Mat *); 22 23 PETSC_EXTERN PetscErrorCode MatCreate_SchurComplement(Mat); 24