173f4d377SMatthew Knepley /* $Id: petscpc.h,v 1.122 2001/08/21 21:03:12 bsmith Exp $ */ 2d03aef70SBarry Smith 3d03aef70SBarry Smith /* 437f753daSBarry Smith Preconditioner module. 5d03aef70SBarry Smith */ 60a835dfdSSatish Balay #if !defined(__PETSCPC_H) 70a835dfdSSatish Balay #define __PETSCPC_H 80a835dfdSSatish Balay #include "petscmat.h" 9e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 10d03aef70SBarry Smith 111dbb0a54SBarry Smith EXTERN int PCInitializePackage(const char[]); 121dbb0a54SBarry Smith 13eec0b4cfSBarry Smith /* 14eec0b4cfSBarry Smith PCList contains the list of preconditioners currently registered 15f1af5d2fSBarry Smith These are added with the PCRegisterDynamic() macro 16eec0b4cfSBarry Smith */ 17b0a32e0cSBarry Smith extern PetscFList PCList; 1882bf6240SBarry Smith typedef char *PCType; 1982bf6240SBarry Smith 203d957683SBarry Smith /*S 213d957683SBarry Smith PC - Abstract PETSc object that manages all preconditioners 223d957683SBarry Smith 233d957683SBarry Smith Level: beginner 243d957683SBarry Smith 253d957683SBarry Smith Concepts: preconditioners 263d957683SBarry Smith 271a480d89SAdministrator .seealso: PCCreate(), PCSetType(), PCType (for list of available types) 283d957683SBarry Smith S*/ 293d957683SBarry Smith typedef struct _p_PC* PC; 303d957683SBarry Smith 313d957683SBarry Smith /*E 323d957683SBarry Smith PCType - String with the name of a PETSc preconditioner method or the creation function 333d957683SBarry Smith with an optional dynamic library name, for example 343d957683SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:mypccreate() 353d957683SBarry Smith 363d957683SBarry Smith Level: beginner 373d957683SBarry Smith 381a480d89SAdministrator Notes: Click on the links below to see details on a particular solver 391a480d89SAdministrator 401a480d89SAdministrator .seealso: PCSetType(), PC, PCCreate() 413d957683SBarry Smith E*/ 4282bf6240SBarry Smith #define PCNONE "none" 4382bf6240SBarry Smith #define PCJACOBI "jacobi" 4482bf6240SBarry Smith #define PCSOR "sor" 4582bf6240SBarry Smith #define PCLU "lu" 4682bf6240SBarry Smith #define PCSHELL "shell" 4782bf6240SBarry Smith #define PCBJACOBI "bjacobi" 4882bf6240SBarry Smith #define PCMG "mg" 4982bf6240SBarry Smith #define PCEISENSTAT "eisenstat" 5082bf6240SBarry Smith #define PCILU "ilu" 5182bf6240SBarry Smith #define PCICC "icc" 5282bf6240SBarry Smith #define PCASM "asm" 53*94b7f48cSBarry Smith #define PCKSP "ksp" 5482bf6240SBarry Smith #define PCCOMPOSITE "composite" 55421c37bdSBarry Smith #define PCREDUNDANT "redundant" 5627b520f0SBarry Smith #define PCSPAI "spai" 5727b520f0SBarry Smith #define PCMILU "milu" 58186905e3SBarry Smith #define PCNN "nn" 594bbc92c1SBarry Smith #define PCCHOLESKY "cholesky" 60237f4ff4SBarry Smith #define PCRAMG "ramg" 61a6b93e97SBarry Smith #define PCSAMG "samg" 623a7fca6bSBarry Smith #define PCPBJACOBI "pbjacobi" 63123ea438SMatthew Knepley #define PCMULTILEVEL "multilevel" 64123ea438SMatthew Knepley #define PCSCHUR "schur" 659f236934SBarry Smith #define PCESI "esi" 669f236934SBarry Smith #define PCPETSCESI "petscesi" 677f5ff6fdSBarry Smith #define PCMAT "mat" 68c4888f26SBarry Smith #define PCHYPRE "hypre" 69123ea438SMatthew Knepley 70123ea438SMatthew Knepley /* Logging support */ 71123ea438SMatthew Knepley extern int PC_COOKIE; 72d5ba7fb7SMatthew Knepley extern int PC_SetUp, PC_SetUpOnBlocks, PC_Apply, PC_ApplyCoarse, PC_ApplyMultiple, PC_ApplySymmetricLeft; 73d5ba7fb7SMatthew Knepley extern int PC_ApplySymmetricRight, PC_ModifySubMatrices; 74123ea438SMatthew Knepley 753d957683SBarry Smith /*E 763d957683SBarry Smith PCSide - If the preconditioner is to be applied to the left, right 773d957683SBarry Smith or symmetrically around the operator. 78d03aef70SBarry Smith 793d957683SBarry Smith Level: beginner 8021e95762SBarry Smith 813d957683SBarry Smith .seealso: 823d957683SBarry Smith E*/ 83aad2872bSLois Curfman McInnes typedef enum { PC_LEFT,PC_RIGHT,PC_SYMMETRIC } PCSide; 8472b7852fSLois Curfman McInnes 85ca44d042SBarry Smith EXTERN int PCCreate(MPI_Comm,PC*); 86ca44d042SBarry Smith EXTERN int PCSetType(PC,PCType); 87ca44d042SBarry Smith EXTERN int PCSetUp(PC); 88ca44d042SBarry Smith EXTERN int PCSetUpOnBlocks(PC); 895fcf39f4SBarry Smith EXTERN int PCApply(PC,Vec,Vec,PCSide); 90ca44d042SBarry Smith EXTERN int PCApplySymmetricLeft(PC,Vec,Vec); 91ca44d042SBarry Smith EXTERN int PCApplySymmetricRight(PC,Vec,Vec); 92ca44d042SBarry Smith EXTERN int PCApplyBAorAB(PC,PCSide,Vec,Vec,Vec); 93ca44d042SBarry Smith EXTERN int PCApplyTranspose(PC,Vec,Vec); 94a56c5f4cSvictorle EXTERN int PCHasApplyTranspose(PC,PetscTruth*); 95ca44d042SBarry Smith EXTERN int PCApplyBAorABTranspose(PC,PCSide,Vec,Vec,Vec); 9677d8c4bbSBarry Smith EXTERN int PCApplyRichardson(PC,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,int); 97ca44d042SBarry Smith EXTERN int PCApplyRichardsonExists(PC,PetscTruth*); 9884cb2905SBarry Smith 99ca44d042SBarry Smith EXTERN int PCRegisterDestroy(void); 100707b6823SBarry Smith EXTERN int PCRegisterAll(const char[]); 1012bad1931SBarry Smith extern PetscTruth PCRegisterAllCalled; 10284cb2905SBarry Smith 103707b6823SBarry Smith EXTERN int PCRegister(const char[],const char[],const char[],int(*)(PC)); 10430de9b25SBarry Smith 10530de9b25SBarry Smith /*MC 10630de9b25SBarry Smith PCRegisterDynamic - Adds a method to the preconditioner package. 10730de9b25SBarry Smith 10830de9b25SBarry Smith Synopsis: 10930de9b25SBarry Smith int PCRegisterDynamic(char *name_solver,char *path,char *name_create,int (*routine_create)(PC)) 11030de9b25SBarry Smith 11130de9b25SBarry Smith Not collective 11230de9b25SBarry Smith 11330de9b25SBarry Smith Input Parameters: 11430de9b25SBarry Smith + name_solver - name of a new user-defined solver 11530de9b25SBarry Smith . path - path (either absolute or relative) the library containing this solver 11630de9b25SBarry Smith . name_create - name of routine to create method context 11730de9b25SBarry Smith - routine_create - routine to create method context 11830de9b25SBarry Smith 11930de9b25SBarry Smith Notes: 12030de9b25SBarry Smith PCRegisterDynamic() may be called multiple times to add several user-defined preconditioners. 12130de9b25SBarry Smith 12230de9b25SBarry Smith If dynamic libraries are used, then the fourth input argument (routine_create) 12330de9b25SBarry Smith is ignored. 12430de9b25SBarry Smith 12530de9b25SBarry Smith Sample usage: 12630de9b25SBarry Smith .vb 12730de9b25SBarry Smith PCRegisterDynamic("my_solver","/home/username/my_lib/lib/libO/solaris/mylib", 12830de9b25SBarry Smith "MySolverCreate",MySolverCreate); 12930de9b25SBarry Smith .ve 13030de9b25SBarry Smith 13130de9b25SBarry Smith Then, your solver can be chosen with the procedural interface via 13230de9b25SBarry Smith $ PCSetType(pc,"my_solver") 13330de9b25SBarry Smith or at runtime via the option 13430de9b25SBarry Smith $ -pc_type my_solver 13530de9b25SBarry Smith 13630de9b25SBarry Smith Level: advanced 13730de9b25SBarry Smith 13830de9b25SBarry Smith Notes: ${PETSC_ARCH}, ${PETSC_DIR}, ${PETSC_LIB_DIR}, ${BOPT}, or ${any environmental variable} 13930de9b25SBarry Smith occuring in pathname will be replaced with appropriate values. 14030de9b25SBarry Smith If your function is not being put into a shared library then use PCRegister() instead 14130de9b25SBarry Smith 14230de9b25SBarry Smith .keywords: PC, register 14330de9b25SBarry Smith 14430de9b25SBarry Smith .seealso: PCRegisterAll(), PCRegisterDestroy() 14530de9b25SBarry Smith M*/ 146aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 147f1af5d2fSBarry Smith #define PCRegisterDynamic(a,b,c,d) PCRegister(a,b,c,0) 1486df38c32SLois Curfman McInnes #else 149f1af5d2fSBarry Smith #define PCRegisterDynamic(a,b,c,d) PCRegister(a,b,c,d) 1506df38c32SLois Curfman McInnes #endif 1516df38c32SLois Curfman McInnes 152ca44d042SBarry Smith EXTERN int PCDestroy(PC); 153ca44d042SBarry Smith EXTERN int PCSetFromOptions(PC); 1542d7fb46dSBarry Smith EXTERN int PCESISetFromOptions(PC); 155ca44d042SBarry Smith EXTERN int PCGetType(PC,PCType*); 15614c91fddSBarry Smith 157ca44d042SBarry Smith EXTERN int PCGetFactoredMatrix(PC,Mat*); 158707b6823SBarry Smith EXTERN int PCSetModifySubMatrices(PC,int(*)(PC,int,const IS[],const IS[],Mat[],void*),void*); 159707b6823SBarry Smith EXTERN int PCModifySubMatrices(PC,int,const IS[],const IS[],Mat[],void*); 1605b116368SBarry Smith 161ca44d042SBarry Smith EXTERN int PCSetOperators(PC,Mat,Mat,MatStructure); 162ca44d042SBarry Smith EXTERN int PCGetOperators(PC,Mat*,Mat*,MatStructure*); 1634b0e389bSBarry Smith 164ca44d042SBarry Smith EXTERN int PCSetVector(PC,Vec); 165ca44d042SBarry Smith EXTERN int PCGetVector(PC,Vec*); 166b0a32e0cSBarry Smith EXTERN int PCView(PC,PetscViewer); 1677bc3d0afSSatish Balay 168707b6823SBarry Smith EXTERN int PCSetOptionsPrefix(PC,const char[]); 169707b6823SBarry Smith EXTERN int PCAppendOptionsPrefix(PC,const char[]); 170707b6823SBarry Smith EXTERN int PCGetOptionsPrefix(PC,char*[]); 1718ed539a5SBarry Smith 17274637425SBarry Smith EXTERN int PCNullSpaceAttach(PC,MatNullSpace); 1734b0e389bSBarry Smith 17471601f6fSBarry Smith EXTERN int PCComputeExplicitOperator(PC,Mat*); 17571601f6fSBarry Smith 176d6913704SBarry Smith /* 177d6913704SBarry Smith These are used to provide extra scaling of preconditioned 178d6913704SBarry Smith operator for time-stepping schemes like in PVODE 179d6913704SBarry Smith */ 180d6913704SBarry Smith EXTERN int PCDiagonalScale(PC,PetscTruth*); 1813d957683SBarry Smith EXTERN int PCDiagonalScaleLeft(PC,Vec,Vec); 1823d957683SBarry Smith EXTERN int PCDiagonalScaleRight(PC,Vec,Vec); 1833d957683SBarry Smith EXTERN int PCDiagonalScaleSet(PC,Vec); 184d6913704SBarry Smith 18584cb2905SBarry Smith /* ------------- options specific to particular preconditioners --------- */ 186329f5518SBarry Smith 187237f4ff4SBarry Smith EXTERN int PCJacobiSetUseRowMax(PC); 188ca44d042SBarry Smith EXTERN int PCSORSetSymmetric(PC,MatSORType); 18987828ca2SBarry Smith EXTERN int PCSORSetOmega(PC,PetscReal); 190c14dc6b6SHong Zhang EXTERN int PCSORSetIterations(PC,int,int); 191d03aef70SBarry Smith 19287828ca2SBarry Smith EXTERN int PCEisenstatSetOmega(PC,PetscReal); 193ca44d042SBarry Smith EXTERN int PCEisenstatNoDiagonalScaling(PC); 194421c37bdSBarry Smith 19515aa81f8SBarry Smith #define USE_PRECONDITIONER_MATRIX 0 19615aa81f8SBarry Smith #define USE_TRUE_MATRIX 1 197ca44d042SBarry Smith EXTERN int PCBJacobiSetUseTrueLocal(PC); 198707b6823SBarry Smith EXTERN int PCBJacobiSetTotalBlocks(PC,int,const int[]); 199707b6823SBarry Smith EXTERN int PCBJacobiSetLocalBlocks(PC,int,const int[]); 2001eb62cbbSBarry Smith 201*94b7f48cSBarry Smith EXTERN int PCKSPSetUseTrue(PC); 202981c4779SBarry Smith 203ca44d042SBarry Smith EXTERN int PCShellSetApply(PC,int (*)(void*,Vec,Vec),void*); 204af1ee7f0SSatish Balay EXTERN int PCShellSetApplyTranspose(PC,int (*)(void*,Vec,Vec)); 205ca44d042SBarry Smith EXTERN int PCShellSetSetUp(PC,int (*)(void*)); 206807270aaSBarry Smith EXTERN int PCShellSetApplyRichardson(PC,int (*)(void*,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,int),void*); 2073a7fca6bSBarry Smith EXTERN int PCShellSetView(PC,int (*)(void*,PetscViewer)); 208707b6823SBarry Smith EXTERN int PCShellSetName(PC,const char[]); 209707b6823SBarry Smith EXTERN int PCShellGetName(PC,char*[]); 210aabeff55SBarry Smith 211ca44d042SBarry Smith EXTERN int PCLUSetMatOrdering(PC,MatOrderingType); 212ca44d042SBarry Smith EXTERN int PCLUSetReuseOrdering(PC,PetscTruth); 213ca44d042SBarry Smith EXTERN int PCLUSetReuseFill(PC,PetscTruth); 214ca44d042SBarry Smith EXTERN int PCLUSetUseInPlace(PC); 21587828ca2SBarry Smith EXTERN int PCLUSetFill(PC,PetscReal); 21687828ca2SBarry Smith EXTERN int PCLUSetDamping(PC,PetscReal); 21721c26570Svictorle EXTERN int PCLUSetShift(PC,PetscTruth); 2183a7fca6bSBarry Smith EXTERN int PCLUSetPivoting(PC,PetscReal); 219bcd9e38bSBarry Smith EXTERN int PCLUSetPivotInBlocks(PC,PetscTruth); 2209c8c1041SBarry Smith EXTERN int PCLUSetZeroPivot(PC,PetscReal); 221421c37bdSBarry Smith 222f5a88c2aSLois Curfman McInnes EXTERN int PCCholeskySetMatOrdering(PC,MatOrderingType); 223f5a88c2aSLois Curfman McInnes EXTERN int PCCholeskySetReuseOrdering(PC,PetscTruth); 224f5a88c2aSLois Curfman McInnes EXTERN int PCCholeskySetReuseFill(PC,PetscTruth); 225f5a88c2aSLois Curfman McInnes EXTERN int PCCholeskySetUseInPlace(PC); 22687828ca2SBarry Smith EXTERN int PCCholeskySetFill(PC,PetscReal); 22787828ca2SBarry Smith EXTERN int PCCholeskySetDamping(PC,PetscReal); 22821c26570Svictorle EXTERN int PCCholeskySetShift(PC,PetscTruth); 229bcd9e38bSBarry Smith EXTERN int PCCholeskySetPivotInBlocks(PC,PetscTruth); 230f5a88c2aSLois Curfman McInnes 231ca44d042SBarry Smith EXTERN int PCILUSetMatOrdering(PC,MatOrderingType); 232ca44d042SBarry Smith EXTERN int PCILUSetUseInPlace(PC); 23387828ca2SBarry Smith EXTERN int PCILUSetFill(PC,PetscReal); 234ca44d042SBarry Smith EXTERN int PCILUSetLevels(PC,int); 235ca44d042SBarry Smith EXTERN int PCILUSetReuseOrdering(PC,PetscTruth); 23623a25f79SSatish Balay EXTERN int PCILUSetUseDropTolerance(PC,PetscReal,PetscReal,int); 237186905e3SBarry Smith EXTERN int PCILUDTSetReuseFill(PC,PetscTruth); 238ca44d042SBarry Smith EXTERN int PCILUSetAllowDiagonalFill(PC); 23987828ca2SBarry Smith EXTERN int PCILUSetDamping(PC,PetscReal); 24021c26570Svictorle EXTERN int PCILUSetShift(PC,PetscTruth); 241bcd9e38bSBarry Smith EXTERN int PCILUSetPivotInBlocks(PC,PetscTruth); 2429c8c1041SBarry Smith EXTERN int PCILUSetZeroPivot(PC,PetscReal); 243a2ce50c7SBarry Smith 244b35a507dSBarry Smith EXTERN int PCICCSetMatOrdering(PC,MatOrderingType); 24587828ca2SBarry Smith EXTERN int PCICCSetFill(PC,PetscReal); 246b35a507dSBarry Smith EXTERN int PCICCSetLevels(PC,int); 247e89f9133SHong Zhang EXTERN int PCICCSetDamping(PC,PetscReal); 24821c26570Svictorle EXTERN int PCICCSetShift(PC,PetscTruth); 249bcd9e38bSBarry Smith EXTERN int PCICCSetPivotInBlocks(PC,PetscTruth); 250e89f9133SHong Zhang EXTERN int PCICCSetZeroPivot(PC,PetscReal); 251b35a507dSBarry Smith 252707b6823SBarry Smith EXTERN int PCASMSetLocalSubdomains(PC,int,IS[]); 253707b6823SBarry Smith EXTERN int PCASMSetTotalSubdomains(PC,int,IS[]); 254ca44d042SBarry Smith EXTERN int PCASMSetOverlap(PC,int); 2553d957683SBarry Smith /*E 2563d957683SBarry Smith PCASMType - Type of additive Schwarz method to use 2573d957683SBarry Smith 2583d957683SBarry Smith $ PC_ASM_BASIC - symmetric version where residuals from the ghost points are used 2593d957683SBarry Smith $ and computed values in ghost regions are added together. Classical 2603d957683SBarry Smith $ standard additive Schwarz 2613d957683SBarry Smith $ PC_ASM_RESTRICT - residuals from ghost points are used but computed values in ghost 2623d957683SBarry Smith $ region are discarded. Default 2633d957683SBarry Smith $ PC_ASM_INTERPOLATE - residuals from ghost points are not used, computed values in ghost 2643d957683SBarry Smith $ region are added back in 2653d957683SBarry Smith $ PC_ASM_NONE - ghost point residuals are not used, computed ghost values are discarded 2663d957683SBarry Smith $ not very good. 2673d957683SBarry Smith 2683d957683SBarry Smith Level: beginner 2693d957683SBarry Smith 2703d957683SBarry Smith .seealso: PCASMSetType() 2713d957683SBarry Smith E*/ 272d252947aSBarry Smith typedef enum {PC_ASM_BASIC = 3,PC_ASM_RESTRICT = 1,PC_ASM_INTERPOLATE = 2,PC_ASM_NONE = 0} PCASMType; 273ca44d042SBarry Smith EXTERN int PCASMSetType(PC,PCASMType); 274ca44d042SBarry Smith EXTERN int PCASMCreateSubdomains2D(int,int,int,int,int,int,int *,IS **); 275ca44d042SBarry Smith EXTERN int PCASMSetUseInPlace(PC); 276707b6823SBarry Smith EXTERN int PCASMGetLocalSubdomains(PC,int*,IS*[]); 277707b6823SBarry Smith EXTERN int PCASMGetLocalSubmatrices(PC,int*,Mat*[]); 278981c4779SBarry Smith 2793d957683SBarry Smith /*E 2803d957683SBarry Smith PCCompositeType - Determines how two or more preconditioner are composed 2813d957683SBarry Smith 2823d957683SBarry Smith $ PC_COMPOSITE_ADDITIVE - results from application of all preconditioners are added together 2833d957683SBarry Smith $ PC_COMPOSITE_MULTIPLICATIVE - preconditioners are applied sequentially to the residual freshly 2843d957683SBarry Smith $ computed after the previous preconditioner application 2853d957683SBarry Smith $ PC_COMPOSITE_SPECIAL - This is very special for a matrix of the form alpha I + R + S 2863d957683SBarry Smith $ where first preconditioner is built from alpha I + S and second from 2873d957683SBarry Smith $ alpha I + R 2883d957683SBarry Smith 2893d957683SBarry Smith Level: beginner 2903d957683SBarry Smith 2913d957683SBarry Smith .seealso: PCCompositeSetType() 2923d957683SBarry Smith E*/ 2931d1367b7SBarry Smith typedef enum {PC_COMPOSITE_ADDITIVE,PC_COMPOSITE_MULTIPLICATIVE,PC_COMPOSITE_SPECIAL} PCCompositeType; 29437bd1cefSSatish Balay EXTERN int PCCompositeSetUseTrue(PC); 295ca44d042SBarry Smith EXTERN int PCCompositeSetType(PC,PCCompositeType); 296ca44d042SBarry Smith EXTERN int PCCompositeAddPC(PC,PCType); 297ca44d042SBarry Smith EXTERN int PCCompositeGetPC(PC pc,int n,PC *); 29887828ca2SBarry Smith EXTERN int PCCompositeSpecialSetAlpha(PC,PetscScalar); 299981c4779SBarry Smith 300ca44d042SBarry Smith EXTERN int PCRedundantSetScatter(PC,VecScatter,VecScatter); 301b6ef3bfaSBarry Smith EXTERN int PCRedundantGetOperators(PC,Mat*,Mat*); 302b6ef3bfaSBarry Smith EXTERN int PCRedundantGetPC(PC,PC*); 303b0a32e0cSBarry Smith EXTERN int MatGetOrderingList(PetscFList *list); 304da3a660dSBarry Smith 305123ea438SMatthew Knepley EXTERN int PCMultiLevelSetFields(PC, int, int); 306123ea438SMatthew Knepley EXTERN int PCMultiLevelSetNonlinearIterate(PC, Vec); 307123ea438SMatthew Knepley EXTERN int PCMultiLevelSetGradientOperator(PC, int, int, PetscScalar); 308123ea438SMatthew Knepley EXTERN int PCMultiLevelApplyGradient(PC, Vec, Vec); 309123ea438SMatthew Knepley EXTERN int PCMultiLevelApplyGradientTrans(PC, Vec, Vec); 310123ea438SMatthew Knepley EXTERN int PCMultiLevelBuildSolution(PC, Vec); 311123ea438SMatthew Knepley EXTERN int PCMultiLevelGetMultiplier(PC, Vec, Vec); 312981c4779SBarry Smith 313123ea438SMatthew Knepley EXTERN int PCSchurSetGradientOperator(PC, int, int); 314123ea438SMatthew Knepley EXTERN int PCSchurGetIterationNumber(PC, int *, int *); 315981c4779SBarry Smith 3163304466cSBarry Smith EXTERN int PCSPAISetEpsilon(PC,double); 3173304466cSBarry Smith EXTERN int PCSPAISetNBSteps(PC,int); 3183304466cSBarry Smith EXTERN int PCSPAISetMax(PC,int); 3193304466cSBarry Smith EXTERN int PCSPAISetMaxNew(PC,int); 3203304466cSBarry Smith EXTERN int PCSPAISetBlockSize(PC,int); 3213304466cSBarry Smith EXTERN int PCSPAISetCacheSize(PC,int); 3223304466cSBarry Smith EXTERN int PCSPAISetVerbose(PC,int); 3233304466cSBarry Smith EXTERN int PCSPAISetSp(PC,int); 3243304466cSBarry Smith 325707b6823SBarry Smith EXTERN int PCHYPRESetType(PC,const char[]); 32689caefffSBarry Smith EXTERN int PCBJacobiGetLocalBlocks(PC,int*,const int*[]); 32789caefffSBarry Smith EXTERN int PCBJacobiGetTotalBlocks(PC,int*,const int*[]); 3283304466cSBarry Smith 329e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 330123ea438SMatthew Knepley #endif /* __PETSCPC_H */ 331