xref: /petsc/include/petscpc.h (revision 82bf6240e2c962f3f106f2e53a46e3db58a7d347)
1*82bf6240SBarry Smith /* $Id: pc.h,v 1.77 1998/01/12 16:02:51 bsmith Exp bsmith $ */
2d03aef70SBarry Smith 
3d03aef70SBarry Smith /*
437f753daSBarry Smith       Preconditioner module.
5d03aef70SBarry Smith */
6d03aef70SBarry Smith #if !defined(__PC_PACKAGE)
7d03aef70SBarry Smith #define __PC_PACKAGE
8d03aef70SBarry Smith #include "petsc.h"
9d03aef70SBarry Smith #include "mat.h"
10d03aef70SBarry Smith 
11*82bf6240SBarry Smith extern DLList PCList;
12*82bf6240SBarry Smith typedef char *PCType;
13*82bf6240SBarry Smith 
14*82bf6240SBarry Smith #define PCNONE      "none"
15*82bf6240SBarry Smith #define PCJACOBI    "jacobi"
16*82bf6240SBarry Smith #define PCSOR       "sor"
17*82bf6240SBarry Smith #define PCLU        "lu"
18*82bf6240SBarry Smith #define PCSHELL     "shell"
19*82bf6240SBarry Smith #define PCBJACOBI   "bjacobi"
20*82bf6240SBarry Smith #define PCMG        "mg"
21*82bf6240SBarry Smith #define PCEISENSTAT "eisenstat"
22*82bf6240SBarry Smith #define PCILU       "ilu"
23*82bf6240SBarry Smith #define PCICC       "icc"
24*82bf6240SBarry Smith #define PCASM       "asm"
25*82bf6240SBarry Smith #define PCBGS       "bgs"
26*82bf6240SBarry Smith #define PCSLES      "sles"
27*82bf6240SBarry Smith #define PCCOMPOSITE "composite"
28d03aef70SBarry Smith 
293e5c7decSSatish Balay typedef struct _p_PC* PC;
309e25ed09SBarry Smith #define PC_COOKIE     PETSC_COOKIE+9
31d03aef70SBarry Smith 
323f1d51d7SBarry Smith /*
333f1d51d7SBarry Smith       Null space code is not yet developed
343f1d51d7SBarry Smith */
35f09e8eb9SSatish Balay typedef struct _p_PCNullSpace* PCNullSpace;
3621e95762SBarry Smith #define PCNULLSPACE_COOKIE    PETSC_COOKIE+17
3721e95762SBarry Smith 
38aad2872bSLois Curfman McInnes typedef enum { PC_LEFT, PC_RIGHT, PC_SYMMETRIC } PCSide;
3972b7852fSLois Curfman McInnes 
406b5873e3SBarry Smith extern int    PCCreate(MPI_Comm,PC*);
414b0e389bSBarry Smith extern int    PCSetType(PC,PCType);
428ed539a5SBarry Smith extern int    PCSetUp(PC);
436d84be18SBarry Smith extern int    PCSetUpOnBlocks(PC);
44aabeff55SBarry Smith extern int    PCApply(PC,Vec,Vec);
4577c4ece6SBarry Smith extern int    PCApplySymmetricLeft(PC,Vec,Vec);
4677c4ece6SBarry Smith extern int    PCApplySymmetricRight(PC,Vec,Vec);
47aad2872bSLois Curfman McInnes extern int    PCApplyBAorAB(PC,PCSide,Vec,Vec,Vec);
48aabeff55SBarry Smith extern int    PCApplyTrans(PC,Vec,Vec);
49aad2872bSLois Curfman McInnes extern int    PCApplyBAorABTrans(PC,PCSide,Vec,Vec,Vec);
50aabeff55SBarry Smith extern int    PCApplyRichardson(PC,Vec,Vec,Vec,int);
5177c4ece6SBarry Smith extern int    PCApplyRichardsonExists(PC,PetscTruth*);
5284cb2905SBarry Smith 
53d6dfbf8fSBarry Smith extern int    PCRegisterDestroy();
54*82bf6240SBarry Smith extern int    PCRegisterAll(char*);
5584cb2905SBarry Smith extern int    PCRegisterAllCalled;
5684cb2905SBarry Smith 
578ed539a5SBarry Smith extern int    PCDestroy(PC);
588ed539a5SBarry Smith extern int    PCSetFromOptions(PC);
59*82bf6240SBarry Smith extern int    PCGetType(PC,PCType*);
6014c91fddSBarry Smith 
61291315efSLois Curfman McInnes extern int    PCGetFactoredMatrix(PC,Mat*);
621bffabb2SLois Curfman McInnes extern int    PCSetModifySubMatrices(PC,int(*)(PC,int,IS*,IS*,Mat*,void*),void*);
631bffabb2SLois Curfman McInnes extern int    PCModifySubMatrices(PC,int,IS*,IS*,Mat*,void*);
645b116368SBarry Smith 
6596e03844SLois Curfman McInnes extern int PCSetOperators(PC,Mat,Mat,MatStructure);
664b0e389bSBarry Smith extern int PCGetOperators(PC,Mat*,Mat*,MatStructure*);
674b0e389bSBarry Smith 
688ed539a5SBarry Smith extern int PCSetVector(PC,Vec);
698ed539a5SBarry Smith extern int PCPrintHelp(PC);
70023758ceSLois Curfman McInnes extern int PCView(PC,Viewer);
717bc3d0afSSatish Balay 
721eb62cbbSBarry Smith extern int PCSetOptionsPrefix(PC,char*);
730985bb82SSatish Balay extern int PCAppendOptionsPrefix(PC,char*);
740985bb82SSatish Balay extern int PCGetOptionsPrefix(PC,char**);
758ed539a5SBarry Smith 
764b0e389bSBarry Smith extern int PCNullSpaceCreate(MPI_Comm,int,int,Vec *,PCNullSpace*);
774b0e389bSBarry Smith extern int PCNullSpaceDestroy(PCNullSpace);
784b0e389bSBarry Smith extern int PCNullSpaceRemove(PCNullSpace,Vec);
794b0e389bSBarry Smith 
8084cb2905SBarry Smith /* ------------- options specific to particular preconditioners --------- */
81ddda3453SLois Curfman McInnes extern int PCSORSetSymmetric(PC, MatSORType);
828ed539a5SBarry Smith extern int PCSORSetOmega(PC, double);
835b116368SBarry Smith extern int PCEisenstatSetOmega(PC, double);
8420563c6bSBarry Smith extern int PCSORSetIterations(PC, int);
85d03aef70SBarry Smith 
866d4a8577SBarry Smith typedef enum {PCBGS_FORWARD_SWEEP=1,PCBGS_SYMMETRIC_SWEEP=2} PCBGSType;
87b4fd4287SBarry Smith extern int PCBGSSetSymmetric(PC, PCBGSType);
88b4fd4287SBarry Smith 
8915aa81f8SBarry Smith #define USE_PRECONDITIONER_MATRIX 0
9015aa81f8SBarry Smith #define USE_TRUE_MATRIX           1
9149c46530SBarry Smith extern int PCBJacobiSetUseTrueLocal(PC);
92905e6a2fSBarry Smith extern int PCBJacobiSetTotalBlocks(PC, int, int*);
93905e6a2fSBarry Smith extern int PCBJacobiSetLocalBlocks(PC, int, int*);
941eb62cbbSBarry Smith 
957daf8ffeSSatish Balay extern int PCBGSSetUseTrueLocal(PC);
96905e6a2fSBarry Smith extern int PCBGSSetTotalBlocks(PC, int, int*);
97905e6a2fSBarry Smith extern int PCBGSSetLocalBlocks(PC, int, int*);
987daf8ffeSSatish Balay extern int PCBGSSetSymmetric(PC, PCBGSType);
997daf8ffeSSatish Balay 
100981c4779SBarry Smith extern int PCSLESSetUseTrue(PC);
10114c91fddSBarry Smith extern int PCCompositeSetUseTrue(PC);
102981c4779SBarry Smith 
103aabeff55SBarry Smith extern int PCShellSetApply(PC, int (*)(void*,Vec,Vec), void*);
104f0479e8cSBarry Smith extern int PCShellSetApplyRichardson(PC,int (*)(void*,Vec,Vec,Vec,int),void*);
1055f789019SLois Curfman McInnes extern int PCShellSetName(PC,char*);
1065f789019SLois Curfman McInnes extern int PCShellGetName(PC,char**);
107aabeff55SBarry Smith 
108ca161407SBarry Smith extern int PCLUSetMatReordering(PC,MatReorderingType);
109ca161407SBarry Smith extern int PCILUSetMatReordering(PC,MatReorderingType);
1100213d9f2SLois Curfman McInnes extern int PCLUSetUseInPlace(PC);
111c977d184SBarry Smith extern int PCLUSetFill(PC,double);
1120213d9f2SLois Curfman McInnes extern int PCILUSetUseInPlace(PC);
113c977d184SBarry Smith extern int PCILUSetFill(PC,double);
1149e25ed09SBarry Smith extern int PCILUSetLevels(PC,int);
115a2ce50c7SBarry Smith extern int PCILUSetReuseReordering(PC,PetscTruth);
116a2ce50c7SBarry Smith extern int PCILUSetUseDropTolerance(PC,double,int);
117a2ce50c7SBarry Smith extern int PCILUSetReuseFill(PC,PetscTruth);
118a2ce50c7SBarry Smith 
11924a74354SBarry Smith extern int PCEisenstatUseDiagonalScaling(PC);
1209e25ed09SBarry Smith 
1216d84be18SBarry Smith extern int PCASMSetLocalSubdomains(PC, int, IS *);
1226d84be18SBarry Smith extern int PCASMSetTotalSubdomains(PC, int, IS *);
123de55ef05SSatish Balay extern int PCASMSetOverlap(PC, int);
124d252947aSBarry Smith typedef enum {PC_ASM_BASIC = 3,PC_ASM_RESTRICT = 1,PC_ASM_INTERPOLATE = 2,PC_ASM_NONE = 0} PCASMType;
125d252947aSBarry Smith extern int PCASMSetType(PC,PCASMType);
12677c4ece6SBarry Smith 
12777c4ece6SBarry Smith extern int PCASMCreateSubdomains2D(int,int,int,int,int,int,int *,IS **);
128981c4779SBarry Smith 
129981c4779SBarry Smith typedef enum {PC_COMPOSITE_ADDITIVE, PC_COMPOSITE_MULTIPLICATIVE} PCCompositeType;
130981c4779SBarry Smith extern int PCCompositeSetType(PC,PCCompositeType);
131981c4779SBarry Smith extern int PCCompositeAddPC(PC,PCType);
132981c4779SBarry Smith 
133d03aef70SBarry Smith #endif
134da3a660dSBarry Smith 
135981c4779SBarry Smith 
136981c4779SBarry Smith 
137981c4779SBarry Smith 
138