xref: /petsc/include/petscpc.h (revision 719b6502565631ad41b76eefb7ea7dab7cd92912)
1*719b6502SBarry Smith /* $Id: pc.h,v 1.81 1998/06/11 19:59:10 bsmith Exp bsmith $ */
2d03aef70SBarry Smith 
3d03aef70SBarry Smith /*
437f753daSBarry Smith       Preconditioner module.
5d03aef70SBarry Smith */
688d459dfSBarry Smith #if !defined(__PC_H)
788d459dfSBarry Smith #define __PC_H
8d03aef70SBarry Smith #include "petsc.h"
9d03aef70SBarry Smith #include "mat.h"
10d03aef70SBarry Smith 
11*719b6502SBarry Smith extern FList PCList;
1282bf6240SBarry Smith typedef char *PCType;
1382bf6240SBarry Smith 
1482bf6240SBarry Smith #define PCNONE      "none"
1582bf6240SBarry Smith #define PCJACOBI    "jacobi"
1682bf6240SBarry Smith #define PCSOR       "sor"
1782bf6240SBarry Smith #define PCLU        "lu"
1882bf6240SBarry Smith #define PCSHELL     "shell"
1982bf6240SBarry Smith #define PCBJACOBI   "bjacobi"
2082bf6240SBarry Smith #define PCMG        "mg"
2182bf6240SBarry Smith #define PCEISENSTAT "eisenstat"
2282bf6240SBarry Smith #define PCILU       "ilu"
2382bf6240SBarry Smith #define PCICC       "icc"
2482bf6240SBarry Smith #define PCASM       "asm"
2582bf6240SBarry Smith #define PCBGS       "bgs"
2682bf6240SBarry Smith #define PCSLES      "sles"
2782bf6240SBarry 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 
53cf256101SBarry Smith extern int    PCRegisterDestroy(void);
5482bf6240SBarry Smith extern int    PCRegisterAll(char*);
5584cb2905SBarry Smith extern int    PCRegisterAllCalled;
5684cb2905SBarry Smith 
576df38c32SLois Curfman McInnes extern int PCRegister_Private(char*,char*,char*,int(*)(PC));
586df38c32SLois Curfman McInnes #if defined(USE_DYNAMIC_LIBRARIES)
596df38c32SLois Curfman McInnes #define PCRegister(a,b,c,d) PCRegister_Private(a,b,c,0)
606df38c32SLois Curfman McInnes #else
616df38c32SLois Curfman McInnes #define PCRegister(a,b,c,d) PCRegister_Private(a,b,c,d)
626df38c32SLois Curfman McInnes #endif
636df38c32SLois Curfman McInnes 
648ed539a5SBarry Smith extern int    PCDestroy(PC);
658ed539a5SBarry Smith extern int    PCSetFromOptions(PC);
6682bf6240SBarry Smith extern int    PCGetType(PC,PCType*);
6714c91fddSBarry Smith 
68291315efSLois Curfman McInnes extern int    PCGetFactoredMatrix(PC,Mat*);
691bffabb2SLois Curfman McInnes extern int    PCSetModifySubMatrices(PC,int(*)(PC,int,IS*,IS*,Mat*,void*),void*);
701bffabb2SLois Curfman McInnes extern int    PCModifySubMatrices(PC,int,IS*,IS*,Mat*,void*);
715b116368SBarry Smith 
7296e03844SLois Curfman McInnes extern int PCSetOperators(PC,Mat,Mat,MatStructure);
734b0e389bSBarry Smith extern int PCGetOperators(PC,Mat*,Mat*,MatStructure*);
744b0e389bSBarry Smith 
758ed539a5SBarry Smith extern int PCSetVector(PC,Vec);
768ed539a5SBarry Smith extern int PCPrintHelp(PC);
77023758ceSLois Curfman McInnes extern int PCView(PC,Viewer);
787bc3d0afSSatish Balay 
791eb62cbbSBarry Smith extern int PCSetOptionsPrefix(PC,char*);
800985bb82SSatish Balay extern int PCAppendOptionsPrefix(PC,char*);
810985bb82SSatish Balay extern int PCGetOptionsPrefix(PC,char**);
828ed539a5SBarry Smith 
834b0e389bSBarry Smith extern int PCNullSpaceCreate(MPI_Comm,int,int,Vec *,PCNullSpace*);
844b0e389bSBarry Smith extern int PCNullSpaceDestroy(PCNullSpace);
854b0e389bSBarry Smith extern int PCNullSpaceRemove(PCNullSpace,Vec);
864b0e389bSBarry Smith 
8784cb2905SBarry Smith /* ------------- options specific to particular preconditioners --------- */
88ddda3453SLois Curfman McInnes extern int PCSORSetSymmetric(PC, MatSORType);
898ed539a5SBarry Smith extern int PCSORSetOmega(PC, double);
905b116368SBarry Smith extern int PCEisenstatSetOmega(PC, double);
9120563c6bSBarry Smith extern int PCSORSetIterations(PC, int);
92d03aef70SBarry Smith 
936d4a8577SBarry Smith typedef enum {PCBGS_FORWARD_SWEEP=1,PCBGS_SYMMETRIC_SWEEP=2} PCBGSType;
94b4fd4287SBarry Smith extern int PCBGSSetSymmetric(PC, PCBGSType);
95b4fd4287SBarry Smith 
9615aa81f8SBarry Smith #define USE_PRECONDITIONER_MATRIX 0
9715aa81f8SBarry Smith #define USE_TRUE_MATRIX           1
9849c46530SBarry Smith extern int PCBJacobiSetUseTrueLocal(PC);
99905e6a2fSBarry Smith extern int PCBJacobiSetTotalBlocks(PC, int, int*);
100905e6a2fSBarry Smith extern int PCBJacobiSetLocalBlocks(PC, int, int*);
1011eb62cbbSBarry Smith 
1027daf8ffeSSatish Balay extern int PCBGSSetUseTrueLocal(PC);
103905e6a2fSBarry Smith extern int PCBGSSetTotalBlocks(PC, int, int*);
104905e6a2fSBarry Smith extern int PCBGSSetLocalBlocks(PC, int, int*);
1057daf8ffeSSatish Balay extern int PCBGSSetSymmetric(PC, PCBGSType);
1067daf8ffeSSatish Balay 
107981c4779SBarry Smith extern int PCSLESSetUseTrue(PC);
10814c91fddSBarry Smith extern int PCCompositeSetUseTrue(PC);
109981c4779SBarry Smith 
110aabeff55SBarry Smith extern int PCShellSetApply(PC, int (*)(void*,Vec,Vec), void*);
111*719b6502SBarry Smith extern int PCShellSetSetUp(PC, int (*)(void*));
112f0479e8cSBarry Smith extern int PCShellSetApplyRichardson(PC,int (*)(void*,Vec,Vec,Vec,int),void*);
1135f789019SLois Curfman McInnes extern int PCShellSetName(PC,char*);
1145f789019SLois Curfman McInnes extern int PCShellGetName(PC,char**);
115aabeff55SBarry Smith 
116ca161407SBarry Smith extern int PCLUSetMatReordering(PC,MatReorderingType);
117*719b6502SBarry Smith extern int PCLUSetReuseReordering(PC,PetscTruth);
118*719b6502SBarry Smith extern int PCLUSetReuseFill(PC,PetscTruth);
119*719b6502SBarry Smith 
120ca161407SBarry Smith extern int PCILUSetMatReordering(PC,MatReorderingType);
1210213d9f2SLois Curfman McInnes extern int PCLUSetUseInPlace(PC);
122c977d184SBarry Smith extern int PCLUSetFill(PC,double);
1230213d9f2SLois Curfman McInnes extern int PCILUSetUseInPlace(PC);
124c977d184SBarry Smith extern int PCILUSetFill(PC,double);
1259e25ed09SBarry Smith extern int PCILUSetLevels(PC,int);
126a2ce50c7SBarry Smith extern int PCILUSetReuseReordering(PC,PetscTruth);
127a2ce50c7SBarry Smith extern int PCILUSetUseDropTolerance(PC,double,int);
128a2ce50c7SBarry Smith extern int PCILUSetReuseFill(PC,PetscTruth);
129a2ce50c7SBarry Smith 
13024a74354SBarry Smith extern int PCEisenstatUseDiagonalScaling(PC);
1319e25ed09SBarry Smith 
1326d84be18SBarry Smith extern int PCASMSetLocalSubdomains(PC, int, IS *);
1336d84be18SBarry Smith extern int PCASMSetTotalSubdomains(PC, int, IS *);
134de55ef05SSatish Balay extern int PCASMSetOverlap(PC, int);
135d252947aSBarry Smith typedef enum {PC_ASM_BASIC = 3,PC_ASM_RESTRICT = 1,PC_ASM_INTERPOLATE = 2,PC_ASM_NONE = 0} PCASMType;
136d252947aSBarry Smith extern int PCASMSetType(PC,PCASMType);
13777c4ece6SBarry Smith 
13877c4ece6SBarry Smith extern int PCASMCreateSubdomains2D(int,int,int,int,int,int,int *,IS **);
139981c4779SBarry Smith 
140981c4779SBarry Smith typedef enum {PC_COMPOSITE_ADDITIVE, PC_COMPOSITE_MULTIPLICATIVE} PCCompositeType;
141981c4779SBarry Smith extern int PCCompositeSetType(PC,PCCompositeType);
142981c4779SBarry Smith extern int PCCompositeAddPC(PC,PCType);
143981c4779SBarry Smith 
144d03aef70SBarry Smith #endif
145da3a660dSBarry Smith 
146981c4779SBarry Smith 
147981c4779SBarry Smith 
148981c4779SBarry Smith 
149