Actual source code: cgimpl.h

  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;