xref: /petsc/include/petscpc.h (revision 88d459dfb11b274ecd1d5bb99c83d4bd989a5877)
1*88d459dfSBarry Smith /* $Id: pc.h,v 1.80 1998/04/22 14:24:26 curfman Exp bsmith $ */
2d03aef70SBarry Smith 
3d03aef70SBarry Smith /*
437f753daSBarry Smith       Preconditioner module.
5d03aef70SBarry Smith */
6*88d459dfSBarry Smith #if !defined(__PC_H)
7*88d459dfSBarry Smith #define __PC_H
8d03aef70SBarry Smith #include "petsc.h"
9d03aef70SBarry Smith #include "mat.h"
10d03aef70SBarry Smith 
1182bf6240SBarry Smith extern DLList 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*);
111f0479e8cSBarry Smith extern int PCShellSetApplyRichardson(PC,int (*)(void*,Vec,Vec,Vec,int),void*);
1125f789019SLois Curfman McInnes extern int PCShellSetName(PC,char*);
1135f789019SLois Curfman McInnes extern int PCShellGetName(PC,char**);
114aabeff55SBarry Smith 
115ca161407SBarry Smith extern int PCLUSetMatReordering(PC,MatReorderingType);
116ca161407SBarry Smith extern int PCILUSetMatReordering(PC,MatReorderingType);
1170213d9f2SLois Curfman McInnes extern int PCLUSetUseInPlace(PC);
118c977d184SBarry Smith extern int PCLUSetFill(PC,double);
1190213d9f2SLois Curfman McInnes extern int PCILUSetUseInPlace(PC);
120c977d184SBarry Smith extern int PCILUSetFill(PC,double);
1219e25ed09SBarry Smith extern int PCILUSetLevels(PC,int);
122a2ce50c7SBarry Smith extern int PCILUSetReuseReordering(PC,PetscTruth);
123a2ce50c7SBarry Smith extern int PCILUSetUseDropTolerance(PC,double,int);
124a2ce50c7SBarry Smith extern int PCILUSetReuseFill(PC,PetscTruth);
125a2ce50c7SBarry Smith 
12624a74354SBarry Smith extern int PCEisenstatUseDiagonalScaling(PC);
1279e25ed09SBarry Smith 
1286d84be18SBarry Smith extern int PCASMSetLocalSubdomains(PC, int, IS *);
1296d84be18SBarry Smith extern int PCASMSetTotalSubdomains(PC, int, IS *);
130de55ef05SSatish Balay extern int PCASMSetOverlap(PC, int);
131d252947aSBarry Smith typedef enum {PC_ASM_BASIC = 3,PC_ASM_RESTRICT = 1,PC_ASM_INTERPOLATE = 2,PC_ASM_NONE = 0} PCASMType;
132d252947aSBarry Smith extern int PCASMSetType(PC,PCASMType);
13377c4ece6SBarry Smith 
13477c4ece6SBarry Smith extern int PCASMCreateSubdomains2D(int,int,int,int,int,int,int *,IS **);
135981c4779SBarry Smith 
136981c4779SBarry Smith typedef enum {PC_COMPOSITE_ADDITIVE, PC_COMPOSITE_MULTIPLICATIVE} PCCompositeType;
137981c4779SBarry Smith extern int PCCompositeSetType(PC,PCCompositeType);
138981c4779SBarry Smith extern int PCCompositeAddPC(PC,PCType);
139981c4779SBarry Smith 
140d03aef70SBarry Smith #endif
141da3a660dSBarry Smith 
142981c4779SBarry Smith 
143981c4779SBarry Smith 
144981c4779SBarry Smith 
145