1 #pragma once 2 3 #include <petsc/private/kspimpl.h> /*I "petscksp.h" I*/ 4 5 typedef struct { 6 PetscInt mmax; /* The maximum number vectors of each type to store */ 7 PetscInt nprealloc; /* How many vectors to preallocate */ 8 PetscInt nvecs; /* How many vectors are actually stored */ 9 PetscInt vecb; /* How many vectors to allocate at a time in a chunk */ 10 Vec *pvecs, *svecs, *qvecs, *tvecs, **ppvecs, **psvecs, **pqvecs, **ptvecs, *qold, *pold, *sold, *told; 11 PetscInt *chunksizes; /* Chunk sizes allocated */ 12 PetscInt nchunks; /* Number of chunks */ 13 KSPFCDTruncationType truncstrat; 14 PetscInt n_restarts; 15 PetscScalar *dots; 16 PetscReal *etas; 17 Vec *redux; 18 PetscBool norm_breakdown; /* set if the recurred norm eta breaks down -> restart triggered */ 19 PetscBool unroll_w; 20 void *modifypc_ctx; /* user defined data for the modifypc function */ 21 KSPFlexibleModifyPCFn *modifypc; /* function to modify the preconditioner*/ 22 PetscCtxDestroyFn *modifypc_destroy; /* function to destroy the user context for the modifypc function */ 23 } KSP_PIPEGCR; 24