1: #pragma once 3: #include <petsc/private/pcimpl.h> 4: #include <petscksp.h> 6: typedef struct { 7: PetscBool init; /* do only init step - error correction of direction is omitted */ 8: PetscBool correct; /* add CP (Qr) correction to descent direction */ 9: PetscScalar correctfact; 10: PetscInt reductionfact; 11: Mat W, Wt, WtA, WtAW; /* deflation space, coarse problem mats */ 12: KSP WtAWinv; /* deflation coarse problem */ 13: KSPType ksptype; 14: PC pc; /* additional preconditioner */ 15: Vec work; 16: Vec *workcoarse; 17: const char *prefix; 19: PCDeflationSpaceType spacetype; 20: PetscInt spacesize; 21: PetscInt lvl; 22: PetscInt maxlvl; 23: PetscBool extendsp; 24: } PC_Deflation; 26: PETSC_INTERN PetscErrorCode PCDeflationComputeSpace(PC);