1d03aef70SBarry Smith /* 237f753daSBarry Smith Preconditioner module. 3d03aef70SBarry Smith */ 40a835dfdSSatish Balay #if !defined(__PETSCPC_H) 50a835dfdSSatish Balay #define __PETSCPC_H 60a835dfdSSatish Balay #include "petscmat.h" 7e1589f56SBarry Smith #include "petscdm.h" 8e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 9d03aef70SBarry Smith 10dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCInitializePackage(const char[]); 111dbb0a54SBarry Smith 12eec0b4cfSBarry Smith /* 13eec0b4cfSBarry Smith PCList contains the list of preconditioners currently registered 14f1af5d2fSBarry Smith These are added with the PCRegisterDynamic() macro 15eec0b4cfSBarry Smith */ 16b0a32e0cSBarry Smith extern PetscFList PCList; 1782bf6240SBarry Smith 183d957683SBarry Smith /*S 193d957683SBarry Smith PC - Abstract PETSc object that manages all preconditioners 203d957683SBarry Smith 213d957683SBarry Smith Level: beginner 223d957683SBarry Smith 233d957683SBarry Smith Concepts: preconditioners 243d957683SBarry Smith 251a480d89SAdministrator .seealso: PCCreate(), PCSetType(), PCType (for list of available types) 263d957683SBarry Smith S*/ 273d957683SBarry Smith typedef struct _p_PC* PC; 283d957683SBarry Smith 293d957683SBarry Smith /*E 303d957683SBarry Smith PCType - String with the name of a PETSc preconditioner method or the creation function 313d957683SBarry Smith with an optional dynamic library name, for example 323d957683SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:mypccreate() 333d957683SBarry Smith 343d957683SBarry Smith Level: beginner 353d957683SBarry Smith 361a480d89SAdministrator Notes: Click on the links below to see details on a particular solver 371a480d89SAdministrator 381a480d89SAdministrator .seealso: PCSetType(), PC, PCCreate() 393d957683SBarry Smith E*/ 40a313700dSBarry Smith #define PCType char* 4182bf6240SBarry Smith #define PCNONE "none" 4282bf6240SBarry Smith #define PCJACOBI "jacobi" 4382bf6240SBarry Smith #define PCSOR "sor" 4482bf6240SBarry Smith #define PCLU "lu" 4582bf6240SBarry Smith #define PCSHELL "shell" 4682bf6240SBarry Smith #define PCBJACOBI "bjacobi" 4782bf6240SBarry Smith #define PCMG "mg" 4882bf6240SBarry Smith #define PCEISENSTAT "eisenstat" 4982bf6240SBarry Smith #define PCILU "ilu" 5082bf6240SBarry Smith #define PCICC "icc" 5182bf6240SBarry Smith #define PCASM "asm" 52*ab3e923fSDmitry Karpeev #define PCGASM "gasm" 5394b7f48cSBarry Smith #define PCKSP "ksp" 5482bf6240SBarry Smith #define PCCOMPOSITE "composite" 55421c37bdSBarry Smith #define PCREDUNDANT "redundant" 5627b520f0SBarry Smith #define PCSPAI "spai" 57186905e3SBarry Smith #define PCNN "nn" 584bbc92c1SBarry Smith #define PCCHOLESKY "cholesky" 593a7fca6bSBarry Smith #define PCPBJACOBI "pbjacobi" 607f5ff6fdSBarry Smith #define PCMAT "mat" 61c4888f26SBarry Smith #define PCHYPRE "hypre" 620971522cSBarry Smith #define PCFIELDSPLIT "fieldsplit" 63be16f70fSSatish Balay #define PCTFS "tfs" 645582bec1SHong Zhang #define PCML "ml" 6536a49750SBarry Smith #define PCPROMETHEUS "prometheus" 662a6744ebSBarry Smith #define PCGALERKIN "galerkin" 677233f9f0SBarry Smith #define PCEXOTIC "exotic" 68161c5ca9SBarry Smith #define PCOPENMP "openmp" 69cf037197Ssdaitch #define PCSUPPORTGRAPH "supportgraph" 70f4b8409dSBarry Smith #define PCASA "asa" 7124c02a0fSBarry Smith #define PCCP "cp" 72628b8437SMatthew Knepley #define PCBFBT "bfbt" 73519d70e2SJed Brown #define PCLSC "lsc" 741d6018f0SLisandro Dalcin #define PCPYTHON "python" 75f91d8e95SBarry Smith #define PCPFMG "pfmg" 76d851a50bSGlenn Hammond #define PCSYSPFMG "syspfmg" 77df826632SBarry Smith #define PCREDISTRIBUTE "redistribute" 78ee59dc9aSVictor Minden #define PCSACUDA "sacuda" 79123ea438SMatthew Knepley 80123ea438SMatthew Knepley /* Logging support */ 810700a824SBarry Smith extern PetscClassId PETSCKSP_DLLEXPORT PC_CLASSID; 82123ea438SMatthew Knepley 833d957683SBarry Smith /*E 843d957683SBarry Smith PCSide - If the preconditioner is to be applied to the left, right 853d957683SBarry Smith or symmetrically around the operator. 86d03aef70SBarry Smith 873d957683SBarry Smith Level: beginner 8821e95762SBarry Smith 893d957683SBarry Smith .seealso: 903d957683SBarry Smith E*/ 91aad2872bSLois Curfman McInnes typedef enum { PC_LEFT,PC_RIGHT,PC_SYMMETRIC } PCSide; 929dcbbd2bSBarry Smith extern const char *PCSides[]; 9372b7852fSLois Curfman McInnes 94dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCCreate(MPI_Comm,PC*); 95a313700dSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetType(PC,const PCType); 96dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetUp(PC); 97dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetUpOnBlocks(PC); 98dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApply(PC,Vec,Vec); 99dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplySymmetricLeft(PC,Vec,Vec); 100dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplySymmetricRight(PC,Vec,Vec); 101dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplyBAorAB(PC,PCSide,Vec,Vec,Vec); 102dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplyTranspose(PC,Vec,Vec); 103ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplyTransposeExists(PC,PetscBool *); 104dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplyBAorABTranspose(PC,PCSide,Vec,Vec,Vec); 1054d0a8057SBarry Smith 1064d0a8057SBarry Smith /*E 1074d0a8057SBarry Smith PCRichardsonConvergedReason - reason a PCApplyRichardson method terminates 1084d0a8057SBarry Smith 1094d0a8057SBarry Smith Level: advanced 1104d0a8057SBarry Smith 1114d0a8057SBarry Smith Notes: this must match finclude/petscpc.h and the KSPConvergedReason values in petscksp.h 1124d0a8057SBarry Smith 1134d0a8057SBarry Smith .seealso: PCApplyRichardson() 1144d0a8057SBarry Smith E*/ 1154d0a8057SBarry Smith typedef enum { 1164d0a8057SBarry Smith PCRICHARDSON_CONVERGED_RTOL = 2, 1174d0a8057SBarry Smith PCRICHARDSON_CONVERGED_ATOL = 3, 1184d0a8057SBarry Smith PCRICHARDSON_CONVERGED_ITS = 4, 1194d0a8057SBarry Smith PCRICHARDSON_DIVERGED_DTOL = -4} PCRichardsonConvergedReason; 1204d0a8057SBarry Smith 121ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplyRichardson(PC,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,PetscInt,PetscBool ,PetscInt*,PCRichardsonConvergedReason*); 122ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCApplyRichardsonExists(PC,PetscBool *); 123ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetInitialGuessNonzero(PC,PetscBool ); 12484cb2905SBarry Smith 125dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRegisterDestroy(void); 126dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRegisterAll(const char[]); 127ace3abfcSBarry Smith extern PetscBool PCRegisterAllCalled; 12884cb2905SBarry Smith 129dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRegister(const char[],const char[],const char[],PetscErrorCode(*)(PC)); 13030de9b25SBarry Smith 13130de9b25SBarry Smith /*MC 13230de9b25SBarry Smith PCRegisterDynamic - Adds a method to the preconditioner package. 13330de9b25SBarry Smith 13430de9b25SBarry Smith Synopsis: 1351890ba74SBarry Smith PetscErrorCode PCRegisterDynamic(const char *name_solver,const char *path,const char *name_create,PetscErrorCode (*routine_create)(PC)) 13630de9b25SBarry Smith 13730de9b25SBarry Smith Not collective 13830de9b25SBarry Smith 13930de9b25SBarry Smith Input Parameters: 14030de9b25SBarry Smith + name_solver - name of a new user-defined solver 14130de9b25SBarry Smith . path - path (either absolute or relative) the library containing this solver 14230de9b25SBarry Smith . name_create - name of routine to create method context 14330de9b25SBarry Smith - routine_create - routine to create method context 14430de9b25SBarry Smith 14530de9b25SBarry Smith Notes: 14630de9b25SBarry Smith PCRegisterDynamic() may be called multiple times to add several user-defined preconditioners. 14730de9b25SBarry Smith 14830de9b25SBarry Smith If dynamic libraries are used, then the fourth input argument (routine_create) 14930de9b25SBarry Smith is ignored. 15030de9b25SBarry Smith 15130de9b25SBarry Smith Sample usage: 15230de9b25SBarry Smith .vb 15330de9b25SBarry Smith PCRegisterDynamic("my_solver","/home/username/my_lib/lib/libO/solaris/mylib", 15430de9b25SBarry Smith "MySolverCreate",MySolverCreate); 15530de9b25SBarry Smith .ve 15630de9b25SBarry Smith 15730de9b25SBarry Smith Then, your solver can be chosen with the procedural interface via 15830de9b25SBarry Smith $ PCSetType(pc,"my_solver") 15930de9b25SBarry Smith or at runtime via the option 16030de9b25SBarry Smith $ -pc_type my_solver 16130de9b25SBarry Smith 16230de9b25SBarry Smith Level: advanced 16330de9b25SBarry Smith 164ab901514SBarry Smith Notes: ${PETSC_ARCH}, ${PETSC_DIR}, ${PETSC_LIB_DIR}, or ${any environmental variable} 16530de9b25SBarry Smith occuring in pathname will be replaced with appropriate values. 16630de9b25SBarry Smith If your function is not being put into a shared library then use PCRegister() instead 16730de9b25SBarry Smith 16830de9b25SBarry Smith .keywords: PC, register 16930de9b25SBarry Smith 17030de9b25SBarry Smith .seealso: PCRegisterAll(), PCRegisterDestroy() 17130de9b25SBarry Smith M*/ 172aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 173f1af5d2fSBarry Smith #define PCRegisterDynamic(a,b,c,d) PCRegister(a,b,c,0) 1746df38c32SLois Curfman McInnes #else 175f1af5d2fSBarry Smith #define PCRegisterDynamic(a,b,c,d) PCRegister(a,b,c,d) 1766df38c32SLois Curfman McInnes #endif 1776df38c32SLois Curfman McInnes 178dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCDestroy(PC); 179dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetFromOptions(PC); 180a313700dSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGetType(PC,const PCType*); 18114c91fddSBarry Smith 182a4fd02acSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorGetMatrix(PC,Mat*); 183dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetModifySubMatrices(PC,PetscErrorCode(*)(PC,PetscInt,const IS[],const IS[],Mat[],void*),void*); 184dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCModifySubMatrices(PC,PetscInt,const IS[],const IS[],Mat[],void*); 1855b116368SBarry Smith 186dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetOperators(PC,Mat,Mat,MatStructure); 187dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGetOperators(PC,Mat*,Mat*,MatStructure*); 188ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGetOperatorsSet(PC,PetscBool *,PetscBool *); 1894b0e389bSBarry Smith 190dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCView(PC,PetscViewer); 1917bc3d0afSSatish Balay 192dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetOptionsPrefix(PC,const char[]); 193dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCAppendOptionsPrefix(PC,const char[]); 1942dcb1b2aSMatthew Knepley EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGetOptionsPrefix(PC,const char*[]); 1958ed539a5SBarry Smith 196dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCComputeExplicitOperator(PC,Mat*); 19771601f6fSBarry Smith 198d6913704SBarry Smith /* 199d6913704SBarry Smith These are used to provide extra scaling of preconditioned 2000f3b3ca1SHong Zhang operator for time-stepping schemes like in SUNDIALS 201d6913704SBarry Smith */ 202ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGetDiagonalScale(PC,PetscBool *); 203dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCDiagonalScaleLeft(PC,Vec,Vec); 204dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCDiagonalScaleRight(PC,Vec,Vec); 205c5eb9154SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetDiagonalScale(PC,Vec); 206d6913704SBarry Smith 20784cb2905SBarry Smith /* ------------- options specific to particular preconditioners --------- */ 208329f5518SBarry Smith 209dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCJacobiSetUseRowMax(PC); 210d87ca0b3SLisandro Dalcin EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCJacobiSetUseRowSum(PC); 211cd47f5d9SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCJacobiSetUseAbs(PC); 212dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSORSetSymmetric(PC,MatSORType); 213dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSORSetOmega(PC,PetscReal); 214dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSORSetIterations(PC,PetscInt,PetscInt); 215d03aef70SBarry Smith 216dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCEisenstatSetOmega(PC,PetscReal); 217dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCEisenstatNoDiagonalScaling(PC); 218421c37bdSBarry Smith 21915aa81f8SBarry Smith #define USE_PRECONDITIONER_MATRIX 0 22015aa81f8SBarry Smith #define USE_TRUE_MATRIX 1 221dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCBJacobiSetUseTrueLocal(PC); 222dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCBJacobiSetTotalBlocks(PC,PetscInt,const PetscInt[]); 223dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCBJacobiSetLocalBlocks(PC,PetscInt,const PetscInt[]); 2241eb62cbbSBarry Smith 225dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCKSPSetUseTrue(PC); 226981c4779SBarry Smith 2276891c3e4SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetApply(PC,PetscErrorCode (*)(PC,Vec,Vec)); 2286891c3e4SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetApplyBA(PC,PetscErrorCode (*)(PC,PCSide,Vec,Vec,Vec)); 2296891c3e4SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetApplyTranspose(PC,PetscErrorCode (*)(PC,Vec,Vec)); 2306891c3e4SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetSetUp(PC,PetscErrorCode (*)(PC)); 231ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetApplyRichardson(PC,PetscErrorCode (*)(PC,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,PetscInt,PetscBool ,PetscInt*,PCRichardsonConvergedReason*)); 2326891c3e4SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetView(PC,PetscErrorCode (*)(PC,PetscViewer)); 2336891c3e4SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetDestroy(PC,PetscErrorCode (*)(PC)); 234be29d3c6SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellGetContext(PC,void**); 235be29d3c6SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetContext(PC,void*); 236dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellSetName(PC,const char[]); 237dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCShellGetName(PC,char*[]); 238aabeff55SBarry Smith 239dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetZeroPivot(PC,PetscReal); 240d90ac83dSHong Zhang 241d90ac83dSHong Zhang EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetShiftType(PC,MatFactorShiftType); 242d90ac83dSHong Zhang EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetShiftAmount(PC,PetscReal); 243d90ac83dSHong Zhang 244c7393fdbSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetMatSolverPackage(PC,const MatSolverPackage); 24535bd34faSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorGetMatSolverPackage(PC,const MatSolverPackage*); 2462401956bSBarry Smith 24755ba2a51SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetFill(PC,PetscReal); 2488ff23777SHong Zhang EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetColumnPivot(PC,PetscReal); 2492401956bSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorReorderForNonzeroDiagonal(PC,PetscReal); 250421c37bdSBarry Smith 251e36ff184SSatish Balay EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetMatOrderingType(PC,const MatOrderingType); 252ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetReuseOrdering(PC,PetscBool ); 253ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetReuseFill(PC,PetscBool ); 2542401956bSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetUseInPlace(PC); 25512a54f56SSatish Balay EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetAllowDiagonalFill(PC); 256ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetPivotInBlocks(PC,PetscBool ); 257f5a88c2aSLois Curfman McInnes 2582401956bSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetLevels(PC,PetscInt); 259b7c853c4SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFactorSetDropTolerance(PC,PetscReal,PetscReal,PetscInt); 260b35a507dSBarry Smith 2612b691e39SMatthew Knepley EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMSetLocalSubdomains(PC,PetscInt,IS[],IS[]); 2622b691e39SMatthew Knepley EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMSetTotalSubdomains(PC,PetscInt,IS[],IS[]); 263dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMSetOverlap(PC,PetscInt); 264ace3abfcSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMSetSortIndices(PC,PetscBool ); 265f746d493SDmitry Karpeev 2663d957683SBarry Smith /*E 2673d957683SBarry Smith PCASMType - Type of additive Schwarz method to use 2683d957683SBarry Smith 2693d957683SBarry Smith $ PC_ASM_BASIC - symmetric version where residuals from the ghost points are used 2703d957683SBarry Smith $ and computed values in ghost regions are added together. Classical 2713d957683SBarry Smith $ standard additive Schwarz 2723d957683SBarry Smith $ PC_ASM_RESTRICT - residuals from ghost points are used but computed values in ghost 2733d957683SBarry Smith $ region are discarded. Default 2743d957683SBarry Smith $ PC_ASM_INTERPOLATE - residuals from ghost points are not used, computed values in ghost 2753d957683SBarry Smith $ region are added back in 2763d957683SBarry Smith $ PC_ASM_NONE - ghost point residuals are not used, computed ghost values are discarded 2773d957683SBarry Smith $ not very good. 2783d957683SBarry Smith 2793d957683SBarry Smith Level: beginner 2803d957683SBarry Smith 2813d957683SBarry Smith .seealso: PCASMSetType() 2823d957683SBarry Smith E*/ 283d252947aSBarry Smith typedef enum {PC_ASM_BASIC = 3,PC_ASM_RESTRICT = 1,PC_ASM_INTERPOLATE = 2,PC_ASM_NONE = 0} PCASMType; 2849dcbbd2bSBarry Smith extern const char *PCASMTypes[]; 2859dcbbd2bSBarry Smith 286dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMSetType(PC,PCASMType); 28792bb6962SLisandro Dalcin EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMCreateSubdomains(Mat,PetscInt,IS*[]); 2882b691e39SMatthew Knepley EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMDestroySubdomains(PetscInt,IS[],IS[]); 2893d03bb48SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMCreateSubdomains2D(PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,IS**,IS**); 2902b691e39SMatthew Knepley EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMGetLocalSubdomains(PC,PetscInt*,IS*[],IS*[]); 291dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCASMGetLocalSubmatrices(PC,PetscInt*,Mat*[]); 292981c4779SBarry Smith 2933d957683SBarry Smith /*E 294f746d493SDmitry Karpeev PCGASMType - Type of generalized additive Schwarz method to use (differs from ASM in allowing multiple processors per domain) 295f746d493SDmitry Karpeev 296f746d493SDmitry Karpeev $ PC_GASM_BASIC - symmetric version where residuals from the ghost points are used 297f746d493SDmitry Karpeev $ and computed values in ghost regions are added together. Classical 298f746d493SDmitry Karpeev $ standard additive Schwarz 299f746d493SDmitry Karpeev $ PC_GASM_RESTRICT - residuals from ghost points are used but computed values in ghost 300f746d493SDmitry Karpeev $ region are discarded. Default 301f746d493SDmitry Karpeev $ PC_GASM_INTERPOLATE - residuals from ghost points are not used, computed values in ghost 302f746d493SDmitry Karpeev $ region are added back in 303f746d493SDmitry Karpeev $ PC_GASM_NONE - ghost point residuals are not used, computed ghost values are discarded 304f746d493SDmitry Karpeev $ not very good. 305f746d493SDmitry Karpeev 306f746d493SDmitry Karpeev Level: beginner 307f746d493SDmitry Karpeev 308f746d493SDmitry Karpeev .seealso: PCGASMSetType() 309f746d493SDmitry Karpeev E*/ 310f746d493SDmitry Karpeev typedef enum {PC_GASM_BASIC = 3,PC_GASM_RESTRICT = 1,PC_GASM_INTERPOLATE = 2,PC_GASM_NONE = 0} PCGASMType; 311f746d493SDmitry Karpeev extern const char *PCGASMTypes[]; 312f746d493SDmitry Karpeev 313f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMSetLocalSubdomains(PC,PetscInt,IS[],IS[]); 314*ab3e923fSDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMSetTotalSubdomains(PC,PetscInt); 315f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMSetOverlap(PC,PetscInt); 316f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMSetSortIndices(PC,PetscBool ); 317f746d493SDmitry Karpeev 318f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMSetType(PC,PCGASMType); 319f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMCreateSubdomains(Mat,PetscInt,IS*[]); 320f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMDestroySubdomains(PetscInt,IS[],IS[]); 321f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMCreateSubdomains2D(PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,IS**,IS**); 322f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMGetLocalSubdomains(PC,PetscInt*,IS*[],IS*[]); 323f746d493SDmitry Karpeev EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGASMGetLocalSubmatrices(PC,PetscInt*,Mat*[]); 324f746d493SDmitry Karpeev 325f746d493SDmitry Karpeev /*E 3263d957683SBarry Smith PCCompositeType - Determines how two or more preconditioner are composed 3273d957683SBarry Smith 3283d957683SBarry Smith $ PC_COMPOSITE_ADDITIVE - results from application of all preconditioners are added together 3293d957683SBarry Smith $ PC_COMPOSITE_MULTIPLICATIVE - preconditioners are applied sequentially to the residual freshly 3303d957683SBarry Smith $ computed after the previous preconditioner application 331ccb205f8SBarry Smith $ PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE - preconditioners are applied sequentially to the residual freshly 332ccb205f8SBarry Smith $ computed from first preconditioner to last and then back (Use only for symmetric matrices and preconditions) 3333d957683SBarry Smith $ PC_COMPOSITE_SPECIAL - This is very special for a matrix of the form alpha I + R + S 3343d957683SBarry Smith $ where first preconditioner is built from alpha I + S and second from 3353d957683SBarry Smith $ alpha I + R 3363d957683SBarry Smith 3373d957683SBarry Smith Level: beginner 3383d957683SBarry Smith 3393d957683SBarry Smith .seealso: PCCompositeSetType() 3403d957683SBarry Smith E*/ 3413b224e63SBarry Smith typedef enum {PC_COMPOSITE_ADDITIVE,PC_COMPOSITE_MULTIPLICATIVE,PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE,PC_COMPOSITE_SPECIAL,PC_COMPOSITE_SCHUR} PCCompositeType; 3429dcbbd2bSBarry Smith extern const char *PCCompositeTypes[]; 3439dcbbd2bSBarry Smith 344dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCCompositeSetUseTrue(PC); 345dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCCompositeSetType(PC,PCCompositeType); 346dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCCompositeAddPC(PC,PCType); 3479a05e725SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCCompositeGetPC(PC,PetscInt,PC *); 348dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCCompositeSpecialSetAlpha(PC,PetscScalar); 349981c4779SBarry Smith 35009a6bc64SHong Zhang EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRedundantSetNumber(PC,PetscInt); 351dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRedundantSetScatter(PC,VecScatter,VecScatter); 352dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRedundantGetOperators(PC,Mat*,Mat*); 353dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCRedundantGetPC(PC,PC*); 354da3a660dSBarry Smith 355dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetEpsilon(PC,double); 356dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetNBSteps(PC,PetscInt); 357dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetMax(PC,PetscInt); 358dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetMaxNew(PC,PetscInt); 359dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetBlockSize(PC,PetscInt); 360dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetCacheSize(PC,PetscInt); 361dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetVerbose(PC,PetscInt); 362dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSPAISetSp(PC,PetscInt); 3633304466cSBarry Smith 364dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCHYPRESetType(PC,const char[]); 365dd896f7dSSatish Balay EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCHYPREGetType(PC,const char*[]); 366dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCBJacobiGetLocalBlocks(PC,PetscInt*,const PetscInt*[]); 367dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCBJacobiGetTotalBlocks(PC,PetscInt*,const PetscInt*[]); 3683304466cSBarry Smith 3696685144eSJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFieldSplitSetFields(PC,const char[],PetscInt,const PetscInt*); 370dba47a55SKris Buschelman EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFieldSplitSetType(PC,PCCompositeType); 37151f519a2SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFieldSplitSetBlockSize(PC,PetscInt); 372db4c96c1SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFieldSplitSetIS(PC,const char[],IS); 373084e4875SJed Brown 374084e4875SJed Brown /*E 375084e4875SJed Brown PCFieldSplitSchurPreType - Determines how to precondition Schur complement 376084e4875SJed Brown 377084e4875SJed Brown Level: intermediate 378084e4875SJed Brown 379084e4875SJed Brown .seealso: PCFieldSplitSchurPrecondition() 380084e4875SJed Brown E*/ 381084e4875SJed Brown typedef enum {PC_FIELDSPLIT_SCHUR_PRE_SELF,PC_FIELDSPLIT_SCHUR_PRE_DIAG,PC_FIELDSPLIT_SCHUR_PRE_USER} PCFieldSplitSchurPreType; 382f7c28744SJed Brown extern const char *const PCFieldSplitSchurPreTypes[]; 383084e4875SJed Brown 384084e4875SJed Brown EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFieldSplitSchurPrecondition(PC,PCFieldSplitSchurPreType,Mat); 38530ad9308SMatthew Knepley EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCFieldSplitGetSchurBlocks(PC,Mat*,Mat*,Mat*,Mat*); 3863d30b1ffSBarry Smith 3872a6744ebSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGalerkinSetRestriction(PC,Mat); 3882a6744ebSBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGalerkinSetInterpolation(PC,Mat); 3892a6744ebSBarry Smith 3901a3fd43dSSatish Balay EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetCoordinates(PC,PetscInt,PetscReal*); 3912102ba4dSSatish Balay EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSASetVectors(PC,PetscInt,PetscReal *); 3922102ba4dSSatish Balay 3931d6018f0SLisandro Dalcin EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCPythonSetType(PC,const char[]); 39467fac13cSBarry Smith 3956c699258SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCSetDM(PC,DM); 3966c699258SBarry Smith EXTERN PetscErrorCode PETSCKSP_DLLEXPORT PCGetDM(PC,DM*); 3976c699258SBarry Smith 3986c699258SBarry Smith 399e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 400d3b1e0e7SMatthew Knepley 401123ea438SMatthew Knepley #endif /* __PETSCPC_H */ 402