Actual source code: petsc-pcimpl.h

petsc-3.3-p7 2013-05-11
  2: #ifndef _PCIMPL_H
  3: #define _PCIMPL_H

  5: #include <petscksp.h>
  6: #include <petscpc.h>

  8: typedef struct _PCOps *PCOps;
  9: struct _PCOps {
 10:   PetscErrorCode (*setup)(PC);
 11:   PetscErrorCode (*apply)(PC,Vec,Vec);
 12:   PetscErrorCode (*applyrichardson)(PC,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,PetscInt,PetscBool ,PetscInt*,PCRichardsonConvergedReason*);
 13:   PetscErrorCode (*applyBA)(PC,PCSide,Vec,Vec,Vec);
 14:   PetscErrorCode (*applytranspose)(PC,Vec,Vec);
 15:   PetscErrorCode (*applyBAtranspose)(PC,PetscInt,Vec,Vec,Vec);
 16:   PetscErrorCode (*setfromoptions)(PC);
 17:   PetscErrorCode (*presolve)(PC,KSP,Vec,Vec);
 18:   PetscErrorCode (*postsolve)(PC,KSP,Vec,Vec);
 19:   PetscErrorCode (*getfactoredmatrix)(PC,Mat*);
 20:   PetscErrorCode (*applysymmetricleft)(PC,Vec,Vec);
 21:   PetscErrorCode (*applysymmetricright)(PC,Vec,Vec);
 22:   PetscErrorCode (*setuponblocks)(PC);
 23:   PetscErrorCode (*destroy)(PC);
 24:   PetscErrorCode (*view)(PC,PetscViewer);
 25:   PetscErrorCode (*reset)(PC);
 26: };

 28: /*
 29:    Preconditioner context
 30: */
 31: struct _p_PC {
 32:   PETSCHEADER(struct _PCOps);
 33:   DM             dm;
 34:   PetscInt       setupcalled;
 35:   PetscInt       setfromoptionscalled;
 36:   MatStructure   flag;
 37:   Mat            mat,pmat;
 38:   Vec            diagonalscaleright,diagonalscaleleft; /* used for time integration scaling */
 39:   PetscBool      diagonalscale;
 40:   PetscBool      nonzero_guess; /* used by PCKSP, PCREDUNDANT and PCHMPI */
 41:   PetscErrorCode (*modifysubmatrices)(PC,PetscInt,const IS[],const IS[],Mat[],void*); /* user provided routine */
 42:   void           *modifysubmatricesP; /* context for user routine */
 43:   void           *data;
 44:   PetscInt       reuse; /* flag for reusing the numerical factorization */
 45:   PetscInt       presolvedone;  /* has PCPreSolve() already been run */
 46:   void           *user;             /* optional user-defined context */
 47: };

 49: PETSC_EXTERN PetscLogEvent PC_SetUp, PC_SetUpOnBlocks, PC_Apply, PC_ApplyCoarse, PC_ApplyMultiple, PC_ApplySymmetricLeft;
 50: PETSC_EXTERN PetscLogEvent PC_ApplySymmetricRight, PC_ModifySubMatrices, PC_ApplyOnBlocks, PC_ApplyTransposeOnBlocks, PC_ApplyOnMproc;

 52: #endif