/* Preconditioner module. */ #if !defined(__PC_PACKAGE) #define __PC_PACKAGE #include "petsc.h" #include "mat.h" typedef enum { PCNONE, PCJACOBI, PCSOR, PCLU, PCSHELL, PCBJACOBI, PCMG, PCESOR, PCILU, PCICC } PCMethod; typedef struct _PC* PC; #define PC_COOKIE PETSC_COOKIE+9 extern int PCCreate(MPI_Comm,PC*); extern int PCSetMethod(PC,PCMethod); extern int PCSetUp(PC); extern int PCApply(PC,Vec,Vec); extern int PCApplyBAorAB(PC,int,Vec,Vec,Vec); extern int PCApplyTrans(PC,Vec,Vec); extern int PCApplyBAorABTrans(PC,int,Vec,Vec,Vec); extern int PCApplyRichardson(PC,Vec,Vec,Vec,int); extern int PCApplyRichardsonExists(PC); extern int PCRegisterAll(); extern int PCRegisterDestroy(); extern int PCRegister(PCMethod,char *,int (*)(PC)); extern int PCDestroy(PC); extern int PCSetFromOptions(PC); extern int PCGetMethodFromContext(PC,PCMethod*); extern int PCGetMethodName(PCMethod,char **); /* Flags for PCSetOperators */ #define MAT_SAME_NONZERO_PATTERN 1 extern int PCSetOperators(PC,Mat,Mat,int); extern int PCBJacobiSetUseTrueLocal(PC); extern int PCSetVector(PC,Vec); extern int PCPrintHelp(PC); extern int PCSetOptionsPrefix(PC,char*); extern int PCSORSetSymmetric(PC, int); extern int PCSORSetOmega(PC, double); extern int PCEisenstatSetOmega(PC, double); extern int PCSORSetIterations(PC, int); extern int PCBJacobiSetBlocks(PC, int); extern int PCBSIterSetBlockSolve(PC); extern int PCBSIterSetFrompOptions(PC); extern int PCBSIterSolve(PC,Vec,Vec,int*); extern int PCShellSetApply(PC, int (*)(void*,Vec,Vec), void*); extern int PCShellSetApplyRichardson(PC,int (*)(void*,Vec,Vec,Vec,int),void*); extern int PCGetOperators(PC,Mat*,Mat*,int*); extern int PCLUSetOrdering(PC,int); extern int PCLUSetUseInplace(PC); extern int PCILUSetOrdering(PC,int); extern int PCILUSetLevels(PC,int); #endif