Actual source code: pcmat.c

      1: #define PETSCKSP_DLL

     3:  #include src/ksp/pc/pcimpl.h

      7: static PetscErrorCode PCApply_Mat(PC pc,Vec x,Vec y)
      8: {

     12:   MatMult(pc->pmat,x,y);
     13:   return(0);
     14: }

     18: static PetscErrorCode PCApplyTranspose_Mat(PC pc,Vec x,Vec y)
     19: {

     23:   MatMultTranspose(pc->pmat,x,y);
     24:   return(0);
     25: }

     29: static PetscErrorCode PCDestroy_Mat(PC pc)
     30: {
     32:   return(0);
     33: }

     35: /*MC
     36:      PCMAT - A preconditioner obtained by multiplying by the preconditioner matrix supplied
     37:              in PCSetOperators() or KSPSetOperators()

     39:    Notes:  This one is a little strange. One rarely has an explict matrix that approximates the
     40:          inverse of the matrix they wish to solve for.

     42:    Level: intermediate

     44: .seealso:  PCCreate(), PCSetType(), PCType (for list of available types), PC,
     45:            PCSHELL

     47: M*/

     52: PetscErrorCode PETSCKSP_DLLEXPORT PCCreate_Mat(PC pc)
     53: {
     55:   pc->ops->apply               = PCApply_Mat;
     56:   pc->ops->applytranspose      = PCApplyTranspose_Mat;
     57:   pc->ops->setup               = 0;
     58:   pc->ops->destroy             = PCDestroy_Mat;
     59:   pc->ops->setfromoptions      = 0;
     60:   pc->ops->view                = 0;
     61:   pc->ops->applyrichardson     = 0;
     62:   pc->ops->applysymmetricleft  = 0;
     63:   pc->ops->applysymmetricright = 0;
     64:   return(0);
     65: }