Actual source code: schurm.h

      1: #pragma once

      3: #include <petsc/private/kspimpl.h>
      4: #include <petsc/private/matimpl.h>
      5: #include <petscksp.h>

      7: typedef struct {
      8:   Mat                        A, Ap, B, C, D;
      9:   KSP                        ksp;
     10:   Vec                        work1, work2;
     11:   MatSchurComplementAinvType ainvtype;
     12: } Mat_SchurComplement;

     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 *);

     23: PETSC_EXTERN PetscErrorCode MatCreate_SchurComplement(Mat);