Actual source code: pcimpl.h

  1: /* $Id: pcimpl.h,v 1.32 2001/08/21 21:03:12 bsmith Exp $ */

  3: #ifndef _PCIMPL
  4: #define _PCIMPL

 6:  #include petscksp.h
 7:  #include petscpc.h

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

 28: /*
 29:    Preconditioner context
 30: */
 31: struct _p_PC {
 32:   PETSCHEADER(struct _PCOps)
 33:   int           setupcalled;
 34:   MatStructure  flag;
 35:   Mat           mat,pmat;
 36:   Vec           vec;
 37:   Vec           diagonalscaleright,diagonalscaleleft; /* used for time integration scaling */
 38:   PetscTruth    diagonalscale;
 39:   MatNullSpace  nullsp;
 40:   int           (*modifysubmatrices)(PC,int,IS*,IS*,Mat*,void*); /* user provided routine */
 41:   void          *modifysubmatricesP; /* context for user routine */
 42:   void          *data;
 43: };



 47: #endif