1: /* 2: Private Krylov Context Structure (KSP) for Conjugate Gradient 4: This one is very simple. It contains a flag indicating the symmetry 5: structure of the matrix and work space for (optionally) computing 6: eigenvalues. 7: */ 9: #pragma once 11: /* 12: Defines the basic KSP object 13: */ 14: #include <petsc/private/kspimpl.h> 16: PETSC_INTERN PetscErrorCode KSPDestroy_CG(KSP); 17: PETSC_INTERN PetscErrorCode KSPReset_CG(KSP); 18: PETSC_INTERN PetscErrorCode KSPView_CG(KSP, PetscViewer); 19: PETSC_INTERN PetscErrorCode KSPSetFromOptions_CG(KSP, PetscOptionItems *); 20: PETSC_INTERN PetscErrorCode KSPCGSetType_CG(KSP, KSPCGType); 22: /* 23: This struct is shared by several KSP implementations 24: */ 26: typedef struct { 27: KSPCGType type; /* type of system (symmetric or Hermitian) */ 29: // The following arrays are of size ksp->maxit 30: PetscScalar *e, *d; 31: PetscReal *ee, *dd; /* work space for Lanczos algorithm */ 33: /* Trust region support */ 34: PetscReal radius; 35: PetscReal obj; 36: PetscReal obj_min; 38: PetscBool singlereduction; /* use variant of CG that combines both inner products */ 39: } KSP_CG;