xref: /petsc/include/petscpc.h (revision 174dc0c8cee294b82b85e4dd3b331b29396264fc)
1 /*
2       Preconditioner module.
3 */
4 #pragma once
5 
6 #include <petscmat.h>
7 #include <petscdmtypes.h>
8 #include <petscpctypes.h>
9 
10 /* MANSEC = KSP */
11 /* SUBMANSEC = PC */
12 
13 PETSC_EXTERN PetscErrorCode PCInitializePackage(void);
14 PETSC_EXTERN PetscErrorCode PCFinalizePackage(void);
15 
16 /*
17     PCList contains the list of preconditioners currently registered
18    These are added with PCRegister()
19 */
20 PETSC_EXTERN PetscFunctionList PCList;
21 
22 /* Logging support */
23 PETSC_EXTERN PetscClassId PC_CLASSID;
24 
25 /* Arrays of names for options in implementation PCs */
26 PETSC_EXTERN const char *const *const PCSides;
27 PETSC_EXTERN const char *const        PCJacobiTypes[];
28 PETSC_EXTERN const char *const        PCASMTypes[];
29 PETSC_EXTERN const char *const        PCGASMTypes[];
30 PETSC_EXTERN const char *const        PCCompositeTypes[];
31 PETSC_EXTERN const char *const        PCFieldSplitSchurPreTypes[];
32 PETSC_EXTERN const char *const        PCFieldSplitSchurFactTypes[];
33 PETSC_EXTERN const char *const        PCPARMSGlobalTypes[];
34 PETSC_EXTERN const char *const        PCPARMSLocalTypes[];
35 PETSC_EXTERN const char *const        PCMGTypes[];
36 PETSC_EXTERN const char *const        PCMGCycleTypes[];
37 PETSC_EXTERN const char *const        PCMGGalerkinTypes[];
38 PETSC_EXTERN const char *const        PCMGCoarseSpaceTypes[];
39 PETSC_EXTERN const char *const        PCExoticTypes[];
40 PETSC_EXTERN const char *const        PCPatchConstructTypes[];
41 PETSC_EXTERN const char *const        PCDeflationTypes[];
42 PETSC_EXTERN const char *const *const PCFailedReasons;
43 
44 PETSC_EXTERN PetscErrorCode PCCreate(MPI_Comm, PC *);
45 PETSC_EXTERN PetscErrorCode PCSetType(PC, PCType);
46 PETSC_EXTERN PetscErrorCode PCGetType(PC, PCType *);
47 PETSC_EXTERN PetscErrorCode PCSetUp(PC);
48 
49 PETSC_EXTERN PetscErrorCode PCSetKSPNestLevel(PC, PetscInt);
50 PETSC_EXTERN PetscErrorCode PCGetKSPNestLevel(PC, PetscInt *);
51 
52 PETSC_EXTERN PetscErrorCode PCSetFailedReason(PC, PCFailedReason);
53 PETSC_EXTERN PetscErrorCode PCGetFailedReason(PC, PCFailedReason *);
54 PETSC_DEPRECATED_FUNCTION(3, 11, 0, "PCGetFailedReason()", ) static inline PetscErrorCode PCGetSetUpFailedReason(PC pc, PCFailedReason *reason)
55 {
56   return PCGetFailedReason(pc, reason);
57 }
58 PETSC_EXTERN PetscErrorCode PCReduceFailedReason(PC);
59 
60 PETSC_EXTERN PetscErrorCode PCSetUpOnBlocks(PC);
61 PETSC_EXTERN PetscErrorCode PCApply(PC, Vec, Vec);
62 PETSC_EXTERN PetscErrorCode PCMatApply(PC, Mat, Mat);
63 PETSC_EXTERN PetscErrorCode PCApplySymmetricLeft(PC, Vec, Vec);
64 PETSC_EXTERN PetscErrorCode PCApplySymmetricRight(PC, Vec, Vec);
65 PETSC_EXTERN PetscErrorCode PCApplyBAorAB(PC, PCSide, Vec, Vec, Vec);
66 PETSC_EXTERN PetscErrorCode PCApplyTranspose(PC, Vec, Vec);
67 PETSC_EXTERN PetscErrorCode PCMatApplyTranspose(PC, Mat, Mat);
68 PETSC_EXTERN PetscErrorCode PCApplyTransposeExists(PC, PetscBool *);
69 PETSC_EXTERN PetscErrorCode PCApplyBAorABTranspose(PC, PCSide, Vec, Vec, Vec);
70 PETSC_EXTERN PetscErrorCode PCSetReusePreconditioner(PC, PetscBool);
71 PETSC_EXTERN PetscErrorCode PCGetReusePreconditioner(PC, PetscBool *);
72 PETSC_EXTERN PetscErrorCode PCSetErrorIfFailure(PC, PetscBool);
73 
74 #define PC_FILE_CLASSID 1211222
75 
76 PETSC_EXTERN PetscErrorCode PCApplyRichardson(PC, Vec, Vec, Vec, PetscReal, PetscReal, PetscReal, PetscInt, PetscBool, PetscInt *, PCRichardsonConvergedReason *);
77 PETSC_EXTERN PetscErrorCode PCApplyRichardsonExists(PC, PetscBool *);
78 PETSC_EXTERN PetscErrorCode PCSetUseAmat(PC, PetscBool);
79 PETSC_EXTERN PetscErrorCode PCGetUseAmat(PC, PetscBool *);
80 
81 PETSC_EXTERN PetscErrorCode PCRegister(const char[], PetscErrorCode (*)(PC));
82 
83 PETSC_EXTERN PetscErrorCode PCReset(PC);
84 PETSC_EXTERN PetscErrorCode PCDestroy(PC *);
85 PETSC_EXTERN PetscErrorCode PCSetFromOptions(PC);
86 
87 PETSC_EXTERN PetscErrorCode PCFactorGetMatrix(PC, Mat *);
88 PETSC_EXTERN PetscErrorCode PCSetModifySubMatrices(PC, PetscErrorCode (*)(PC, PetscInt, const IS[], const IS[], Mat[], void *), void *);
89 PETSC_EXTERN PetscErrorCode PCModifySubMatrices(PC, PetscInt, const IS[], const IS[], Mat[], void *);
90 
91 PETSC_EXTERN PetscErrorCode PCSetOperators(PC, Mat, Mat);
92 PETSC_EXTERN PetscErrorCode PCGetOperators(PC, Mat *, Mat *);
93 PETSC_EXTERN PetscErrorCode PCGetOperatorsSet(PC, PetscBool *, PetscBool *);
94 
95 PETSC_EXTERN PetscErrorCode PCView(PC, PetscViewer);
96 PETSC_EXTERN PetscErrorCode PCLoad(PC, PetscViewer);
97 PETSC_EXTERN PetscErrorCode PCViewFromOptions(PC, PetscObject, const char[]);
98 
99 PETSC_EXTERN PetscErrorCode PCSetOptionsPrefix(PC, const char[]);
100 PETSC_EXTERN PetscErrorCode PCAppendOptionsPrefix(PC, const char[]);
101 PETSC_EXTERN PetscErrorCode PCGetOptionsPrefix(PC, const char *[]);
102 
103 PETSC_EXTERN PetscErrorCode PCComputeOperator(PC, MatType, Mat *);
104 PETSC_DEPRECATED_FUNCTION(3, 12, 0, "PCComputeOperator()", ) static inline PetscErrorCode PCComputeExplicitOperator(PC A, Mat *B)
105 {
106   return PCComputeOperator(A, PETSC_NULLPTR, B);
107 }
108 
109 /*
110       These are used to provide extra scaling of preconditioned
111    operator for time-stepping schemes like in SUNDIALS
112 */
113 PETSC_EXTERN PetscErrorCode PCGetDiagonalScale(PC, PetscBool *);
114 PETSC_EXTERN PetscErrorCode PCDiagonalScaleLeft(PC, Vec, Vec);
115 PETSC_EXTERN PetscErrorCode PCDiagonalScaleRight(PC, Vec, Vec);
116 PETSC_EXTERN PetscErrorCode PCSetDiagonalScale(PC, Vec);
117 
118 PETSC_EXTERN PetscErrorCode PCSetDM(PC, DM);
119 PETSC_EXTERN PetscErrorCode PCGetDM(PC, DM *);
120 
121 PETSC_EXTERN PetscErrorCode PCGetInterpolations(PC, PetscInt *, Mat *[]);
122 PETSC_EXTERN PetscErrorCode PCGetCoarseOperators(PC, PetscInt *, Mat *[]);
123 
124 PETSC_EXTERN PetscErrorCode PCSetCoordinates(PC, PetscInt, PetscInt, PetscReal[]);
125 
126 PETSC_EXTERN PetscErrorCode PCSetApplicationContext(PC, void *);
127 PETSC_EXTERN PetscErrorCode PCGetApplicationContext(PC, void *);
128 
129 /* ------------- options specific to particular preconditioners --------- */
130 
131 PETSC_EXTERN PetscErrorCode PCJacobiSetType(PC, PCJacobiType);
132 PETSC_EXTERN PetscErrorCode PCJacobiGetType(PC, PCJacobiType *);
133 PETSC_EXTERN PetscErrorCode PCJacobiSetUseAbs(PC, PetscBool);
134 PETSC_EXTERN PetscErrorCode PCJacobiGetUseAbs(PC, PetscBool *);
135 PETSC_EXTERN PetscErrorCode PCJacobiSetFixDiagonal(PC, PetscBool);
136 PETSC_EXTERN PetscErrorCode PCJacobiGetFixDiagonal(PC, PetscBool *);
137 PETSC_EXTERN PetscErrorCode PCJacobiGetDiagonal(PC, Vec, Vec);
138 PETSC_EXTERN PetscErrorCode PCJacobiSetRowl1Scale(PC, PetscReal);
139 PETSC_EXTERN PetscErrorCode PCJacobiGetRowl1Scale(PC, PetscReal *);
140 PETSC_EXTERN PetscErrorCode PCSORSetSymmetric(PC, MatSORType);
141 PETSC_EXTERN PetscErrorCode PCSORGetSymmetric(PC, MatSORType *);
142 PETSC_EXTERN PetscErrorCode PCSORSetOmega(PC, PetscReal);
143 PETSC_EXTERN PetscErrorCode PCSORGetOmega(PC, PetscReal *);
144 PETSC_EXTERN PetscErrorCode PCSORSetIterations(PC, PetscInt, PetscInt);
145 PETSC_EXTERN PetscErrorCode PCSORGetIterations(PC, PetscInt *, PetscInt *);
146 
147 PETSC_EXTERN PetscErrorCode PCEisenstatSetOmega(PC, PetscReal);
148 PETSC_EXTERN PetscErrorCode PCEisenstatGetOmega(PC, PetscReal *);
149 PETSC_EXTERN PetscErrorCode PCEisenstatSetNoDiagonalScaling(PC, PetscBool);
150 PETSC_EXTERN PetscErrorCode PCEisenstatGetNoDiagonalScaling(PC, PetscBool *);
151 
152 PETSC_EXTERN PetscErrorCode PCBJacobiSetTotalBlocks(PC, PetscInt, const PetscInt[]);
153 PETSC_EXTERN PetscErrorCode PCBJacobiGetTotalBlocks(PC, PetscInt *, const PetscInt *[]);
154 PETSC_EXTERN PetscErrorCode PCBJacobiSetLocalBlocks(PC, PetscInt, const PetscInt[]);
155 PETSC_EXTERN PetscErrorCode PCBJacobiGetLocalBlocks(PC, PetscInt *, const PetscInt *[]);
156 
157 PETSC_EXTERN PetscErrorCode PCShellSetApply(PC, PetscErrorCode (*)(PC, Vec, Vec));
158 PETSC_EXTERN PetscErrorCode PCShellSetMatApply(PC, PetscErrorCode (*)(PC, Mat, Mat));
159 PETSC_EXTERN PetscErrorCode PCShellSetApplySymmetricLeft(PC, PetscErrorCode (*)(PC, Vec, Vec));
160 PETSC_EXTERN PetscErrorCode PCShellSetApplySymmetricRight(PC, PetscErrorCode (*)(PC, Vec, Vec));
161 PETSC_EXTERN PetscErrorCode PCShellSetApplyBA(PC, PetscErrorCode (*)(PC, PCSide, Vec, Vec, Vec));
162 PETSC_EXTERN PetscErrorCode PCShellSetApplyTranspose(PC, PetscErrorCode (*)(PC, Vec, Vec));
163 PETSC_EXTERN PetscErrorCode PCShellSetSetUp(PC, PetscErrorCode (*)(PC));
164 PETSC_EXTERN PetscErrorCode PCShellSetApplyRichardson(PC, PetscErrorCode (*)(PC, Vec, Vec, Vec, PetscReal, PetscReal, PetscReal, PetscInt, PetscBool, PetscInt *, PCRichardsonConvergedReason *));
165 PETSC_EXTERN PetscErrorCode PCShellSetView(PC, PetscErrorCode (*)(PC, PetscViewer));
166 PETSC_EXTERN PetscErrorCode PCShellSetDestroy(PC, PetscErrorCode (*)(PC));
167 PETSC_EXTERN PetscErrorCode PCShellSetContext(PC, void *);
168 PETSC_EXTERN PetscErrorCode PCShellGetContext(PC, void *);
169 PETSC_EXTERN PetscErrorCode PCShellSetName(PC, const char[]);
170 PETSC_EXTERN PetscErrorCode PCShellGetName(PC, const char *[]);
171 
172 PETSC_EXTERN PetscErrorCode PCFactorSetZeroPivot(PC, PetscReal);
173 
174 PETSC_EXTERN PetscErrorCode PCFactorSetShiftType(PC, MatFactorShiftType);
175 PETSC_EXTERN PetscErrorCode PCFactorSetShiftAmount(PC, PetscReal);
176 
177 PETSC_EXTERN PetscErrorCode PCFactorSetMatSolverType(PC, MatSolverType);
178 PETSC_EXTERN PetscErrorCode PCFactorGetMatSolverType(PC, MatSolverType *);
179 PETSC_EXTERN PetscErrorCode PCFactorSetUpMatSolverType(PC);
180 PETSC_DEPRECATED_FUNCTION(3, 9, 0, "PCFactorSetMatSolverType()", ) static inline PetscErrorCode PCFactorSetMatSolverPackage(PC pc, MatSolverType stype)
181 {
182   return PCFactorSetMatSolverType(pc, stype);
183 }
184 PETSC_DEPRECATED_FUNCTION(3, 9, 0, "PCFactorGetMatSolverType()", ) static inline PetscErrorCode PCFactorGetMatSolverPackage(PC pc, MatSolverType *stype)
185 {
186   return PCFactorGetMatSolverType(pc, stype);
187 }
188 PETSC_DEPRECATED_FUNCTION(3, 9, 0, "PCFactorSetUpMatSolverType()", ) static inline PetscErrorCode PCFactorSetUpMatSolverPackage(PC pc)
189 {
190   return PCFactorSetUpMatSolverType(pc);
191 }
192 
193 PETSC_EXTERN PetscErrorCode PCFactorSetFill(PC, PetscReal);
194 PETSC_EXTERN PetscErrorCode PCFactorSetColumnPivot(PC, PetscReal);
195 PETSC_EXTERN PetscErrorCode PCFactorReorderForNonzeroDiagonal(PC, PetscReal);
196 
197 PETSC_EXTERN PetscErrorCode PCFactorSetMatOrderingType(PC, MatOrderingType);
198 PETSC_EXTERN PetscErrorCode PCFactorSetReuseOrdering(PC, PetscBool);
199 PETSC_EXTERN PetscErrorCode PCFactorSetReuseFill(PC, PetscBool);
200 PETSC_EXTERN PetscErrorCode PCFactorSetUseInPlace(PC, PetscBool);
201 PETSC_EXTERN PetscErrorCode PCFactorGetUseInPlace(PC, PetscBool *);
202 PETSC_EXTERN PetscErrorCode PCFactorSetAllowDiagonalFill(PC, PetscBool);
203 PETSC_EXTERN PetscErrorCode PCFactorGetAllowDiagonalFill(PC, PetscBool *);
204 PETSC_EXTERN PetscErrorCode PCFactorSetPivotInBlocks(PC, PetscBool);
205 
206 PETSC_EXTERN PetscErrorCode PCFactorSetLevels(PC, PetscInt);
207 PETSC_EXTERN PetscErrorCode PCFactorGetLevels(PC, PetscInt *);
208 PETSC_EXTERN PetscErrorCode PCFactorSetDropTolerance(PC, PetscReal, PetscReal, PetscInt);
209 PETSC_EXTERN PetscErrorCode PCFactorGetZeroPivot(PC, PetscReal *);
210 PETSC_EXTERN PetscErrorCode PCFactorGetShiftAmount(PC, PetscReal *);
211 PETSC_EXTERN PetscErrorCode PCFactorGetShiftType(PC, MatFactorShiftType *);
212 
213 PETSC_EXTERN PetscErrorCode PCASMSetLocalSubdomains(PC, PetscInt, IS[], IS[]);
214 PETSC_EXTERN PetscErrorCode PCASMSetTotalSubdomains(PC, PetscInt, IS[], IS[]);
215 PETSC_EXTERN PetscErrorCode PCASMSetOverlap(PC, PetscInt);
216 PETSC_EXTERN PetscErrorCode PCASMSetDMSubdomains(PC, PetscBool);
217 PETSC_EXTERN PetscErrorCode PCASMGetDMSubdomains(PC, PetscBool *);
218 PETSC_EXTERN PetscErrorCode PCASMSetSortIndices(PC, PetscBool);
219 
220 PETSC_EXTERN PetscErrorCode PCASMSetType(PC, PCASMType);
221 PETSC_EXTERN PetscErrorCode PCASMGetType(PC, PCASMType *);
222 PETSC_EXTERN PetscErrorCode PCASMSetLocalType(PC, PCCompositeType);
223 PETSC_EXTERN PetscErrorCode PCASMGetLocalType(PC, PCCompositeType *);
224 PETSC_EXTERN PetscErrorCode PCASMCreateSubdomains(Mat, PetscInt, IS *[]);
225 PETSC_EXTERN PetscErrorCode PCASMDestroySubdomains(PetscInt, IS *[], IS *[]);
226 PETSC_EXTERN PetscErrorCode PCASMCreateSubdomains2D(PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt *, IS *[], IS *[]);
227 PETSC_EXTERN PetscErrorCode PCASMGetLocalSubdomains(PC, PetscInt *, IS *[], IS *[]);
228 PETSC_EXTERN PetscErrorCode PCASMGetLocalSubmatrices(PC, PetscInt *, Mat *[]);
229 PETSC_EXTERN PetscErrorCode PCASMGetSubMatType(PC, MatType *);
230 PETSC_EXTERN PetscErrorCode PCASMSetSubMatType(PC, MatType);
231 
232 PETSC_EXTERN PetscErrorCode PCGASMSetTotalSubdomains(PC, PetscInt);
233 PETSC_EXTERN PetscErrorCode PCGASMSetSubdomains(PC, PetscInt, IS[], IS[]);
234 PETSC_EXTERN PetscErrorCode PCGASMSetOverlap(PC, PetscInt);
235 PETSC_EXTERN PetscErrorCode PCGASMSetUseDMSubdomains(PC, PetscBool);
236 PETSC_EXTERN PetscErrorCode PCGASMGetUseDMSubdomains(PC, PetscBool *);
237 PETSC_EXTERN PetscErrorCode PCGASMSetSortIndices(PC, PetscBool);
238 
239 PETSC_EXTERN PetscErrorCode PCGASMSetType(PC, PCGASMType);
240 PETSC_EXTERN PetscErrorCode PCGASMCreateSubdomains(Mat, PetscInt, PetscInt *, IS *[]);
241 PETSC_EXTERN PetscErrorCode PCGASMDestroySubdomains(PetscInt, IS *[], IS *[]);
242 PETSC_EXTERN PetscErrorCode PCGASMCreateSubdomains2D(PC, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt *, IS *[], IS *[]);
243 PETSC_EXTERN PetscErrorCode PCGASMGetSubdomains(PC, PetscInt *, IS *[], IS *[]);
244 PETSC_EXTERN PetscErrorCode PCGASMGetSubmatrices(PC, PetscInt *, Mat *[]);
245 
246 PETSC_EXTERN PetscErrorCode PCCompositeSetType(PC, PCCompositeType);
247 PETSC_EXTERN PetscErrorCode PCCompositeGetType(PC, PCCompositeType *);
248 PETSC_EXTERN PetscErrorCode PCCompositeAddPCType(PC, PCType);
249 PETSC_EXTERN PetscErrorCode PCCompositeAddPC(PC, PC);
250 PETSC_EXTERN PetscErrorCode PCCompositeGetNumberPC(PC, PetscInt *);
251 PETSC_EXTERN PetscErrorCode PCCompositeGetPC(PC, PetscInt, PC *);
252 PETSC_EXTERN PetscErrorCode PCCompositeSpecialSetAlpha(PC, PetscScalar);
253 PETSC_EXTERN PetscErrorCode PCCompositeSpecialSetAlphaMat(PC, Mat);
254 
255 PETSC_EXTERN PetscErrorCode PCRedundantSetNumber(PC, PetscInt);
256 PETSC_EXTERN PetscErrorCode PCRedundantSetScatter(PC, VecScatter, VecScatter);
257 PETSC_EXTERN PetscErrorCode PCRedundantGetOperators(PC, Mat *, Mat *);
258 
259 PETSC_EXTERN PetscErrorCode PCSPAISetEpsilon(PC, PetscReal);
260 PETSC_EXTERN PetscErrorCode PCSPAISetNBSteps(PC, PetscInt);
261 PETSC_EXTERN PetscErrorCode PCSPAISetMax(PC, PetscInt);
262 PETSC_EXTERN PetscErrorCode PCSPAISetMaxNew(PC, PetscInt);
263 PETSC_EXTERN PetscErrorCode PCSPAISetBlockSize(PC, PetscInt);
264 PETSC_EXTERN PetscErrorCode PCSPAISetCacheSize(PC, PetscInt);
265 PETSC_EXTERN PetscErrorCode PCSPAISetVerbose(PC, PetscInt);
266 PETSC_EXTERN PetscErrorCode PCSPAISetSp(PC, PetscInt);
267 
268 PETSC_EXTERN PetscErrorCode PCHYPRESetType(PC, const char[]);
269 PETSC_EXTERN PetscErrorCode PCHYPREGetType(PC, const char *[]);
270 PETSC_EXTERN PetscErrorCode PCHYPRESetDiscreteGradient(PC, Mat);
271 PETSC_EXTERN PetscErrorCode PCHYPRESetDiscreteCurl(PC, Mat);
272 PETSC_EXTERN PetscErrorCode PCHYPRESetInterpolations(PC, PetscInt, Mat, Mat[], Mat, Mat[]);
273 PETSC_EXTERN PetscErrorCode PCHYPRESetEdgeConstantVectors(PC, Vec, Vec, Vec);
274 PETSC_EXTERN PetscErrorCode PCHYPREAMSSetInteriorNodes(PC, Vec);
275 PETSC_EXTERN PetscErrorCode PCHYPRESetAlphaPoissonMatrix(PC, Mat);
276 PETSC_EXTERN PetscErrorCode PCHYPRESetBetaPoissonMatrix(PC, Mat);
277 PETSC_EXTERN PetscErrorCode PCHYPREGetCFMarkers(PC pc, PetscInt *[], PetscBT *[]);
278 
279 PETSC_EXTERN PetscErrorCode PCFieldSplitSetFields(PC, const char[], PetscInt, const PetscInt *, const PetscInt *);
280 PETSC_EXTERN PetscErrorCode PCFieldSplitSetType(PC, PCCompositeType);
281 PETSC_EXTERN PetscErrorCode PCFieldSplitGetType(PC, PCCompositeType *);
282 PETSC_EXTERN PetscErrorCode PCFieldSplitSetBlockSize(PC, PetscInt);
283 PETSC_EXTERN PetscErrorCode PCFieldSplitSetIS(PC, const char[], IS);
284 PETSC_EXTERN PetscErrorCode PCFieldSplitGetIS(PC, const char[], IS *);
285 PETSC_EXTERN PetscErrorCode PCFieldSplitGetISByIndex(PC, PetscInt, IS *);
286 PETSC_EXTERN PetscErrorCode PCFieldSplitRestrictIS(PC, IS);
287 PETSC_EXTERN PetscErrorCode PCFieldSplitSetDMSplits(PC, PetscBool);
288 PETSC_EXTERN PetscErrorCode PCFieldSplitGetDMSplits(PC, PetscBool *);
289 PETSC_EXTERN PetscErrorCode PCFieldSplitSetDiagUseAmat(PC, PetscBool);
290 PETSC_EXTERN PetscErrorCode PCFieldSplitGetDiagUseAmat(PC, PetscBool *);
291 PETSC_EXTERN PetscErrorCode PCFieldSplitSetOffDiagUseAmat(PC, PetscBool);
292 PETSC_EXTERN PetscErrorCode PCFieldSplitGetOffDiagUseAmat(PC, PetscBool *);
293 
294 PETSC_EXTERN PETSC_DEPRECATED_FUNCTION(3, 5, 0, "PCFieldSplitSetSchurPre()", ) PetscErrorCode PCFieldSplitSchurPrecondition(PC, PCFieldSplitSchurPreType, Mat);
295 PETSC_EXTERN PetscErrorCode PCFieldSplitSetSchurPre(PC, PCFieldSplitSchurPreType, Mat);
296 PETSC_EXTERN PetscErrorCode PCFieldSplitGetSchurPre(PC, PCFieldSplitSchurPreType *, Mat *);
297 PETSC_EXTERN PetscErrorCode PCFieldSplitSetSchurFactType(PC, PCFieldSplitSchurFactType);
298 PETSC_EXTERN PetscErrorCode PCFieldSplitSetSchurScale(PC, PetscScalar);
299 PETSC_EXTERN PetscErrorCode PCFieldSplitGetSchurBlocks(PC, Mat *, Mat *, Mat *, Mat *);
300 PETSC_EXTERN PetscErrorCode PCFieldSplitSchurGetS(PC, Mat *);
301 PETSC_EXTERN PetscErrorCode PCFieldSplitSchurRestoreS(PC, Mat *);
302 PETSC_EXTERN PetscErrorCode PCFieldSplitGetDetectSaddlePoint(PC, PetscBool *);
303 PETSC_EXTERN PetscErrorCode PCFieldSplitSetDetectSaddlePoint(PC, PetscBool);
304 PETSC_EXTERN PetscErrorCode PCFieldSplitSetGKBTol(PC, PetscReal);
305 PETSC_EXTERN PetscErrorCode PCFieldSplitSetGKBNu(PC, PetscReal);
306 PETSC_EXTERN PetscErrorCode PCFieldSplitSetGKBMaxit(PC, PetscInt);
307 PETSC_EXTERN PetscErrorCode PCFieldSplitSetGKBDelay(PC, PetscInt);
308 
309 PETSC_EXTERN PetscErrorCode PCGalerkinSetRestriction(PC, Mat);
310 PETSC_EXTERN PetscErrorCode PCGalerkinSetInterpolation(PC, Mat);
311 PETSC_EXTERN PetscErrorCode PCGalerkinSetComputeSubmatrix(PC, PetscErrorCode (*)(PC, Mat, Mat, Mat *, void *), void *);
312 
313 PETSC_EXTERN PetscErrorCode PCPythonSetType(PC, const char[]);
314 PETSC_EXTERN PetscErrorCode PCPythonGetType(PC, const char *[]);
315 
316 PETSC_EXTERN PetscErrorCode PCPARMSSetGlobal(PC, PCPARMSGlobalType);
317 PETSC_EXTERN PetscErrorCode PCPARMSSetLocal(PC, PCPARMSLocalType);
318 PETSC_EXTERN PetscErrorCode PCPARMSSetSolveTolerances(PC, PetscReal, PetscInt);
319 PETSC_EXTERN PetscErrorCode PCPARMSSetSolveRestart(PC, PetscInt);
320 PETSC_EXTERN PetscErrorCode PCPARMSSetNonsymPerm(PC, PetscBool);
321 PETSC_EXTERN PetscErrorCode PCPARMSSetFill(PC, PetscInt, PetscInt, PetscInt);
322 
323 PETSC_EXTERN PetscErrorCode PCGAMGSetType(PC, PCGAMGType);
324 PETSC_EXTERN PetscErrorCode PCGAMGGetType(PC, PCGAMGType *);
325 PETSC_EXTERN PetscErrorCode PCGAMGSetProcEqLim(PC, PetscInt);
326 
327 PETSC_EXTERN PetscErrorCode PCGAMGSetRepartition(PC, PetscBool);
328 PETSC_EXTERN PetscErrorCode PCGAMGSetUseSAEstEig(PC, PetscBool);
329 PETSC_EXTERN PetscErrorCode PCGAMGSetRecomputeEstEig(PC, PetscBool);
330 PETSC_EXTERN PetscErrorCode PCGAMGSetEigenvalues(PC, PetscReal, PetscReal);
331 PETSC_EXTERN PetscErrorCode PCGAMGASMSetUseAggs(PC, PetscBool);
332 PETSC_EXTERN PetscErrorCode PCGAMGSetParallelCoarseGridSolve(PC, PetscBool);
333 PETSC_EXTERN PetscErrorCode PCGAMGSetCpuPinCoarseGrids(PC, PetscBool);
334 PETSC_EXTERN PetscErrorCode PCGAMGSetCoarseGridLayoutType(PC, PCGAMGLayoutType);
335 PETSC_EXTERN PetscErrorCode PCGAMGSetThreshold(PC, PetscReal[], PetscInt);
336 PETSC_EXTERN PetscErrorCode PCGAMGSetRankReductionFactors(PC, PetscInt[], PetscInt);
337 PETSC_EXTERN PetscErrorCode PCGAMGSetThresholdScale(PC, PetscReal);
338 PETSC_EXTERN PetscErrorCode PCGAMGSetCoarseEqLim(PC, PetscInt);
339 PETSC_EXTERN PetscErrorCode PCGAMGSetNlevels(PC, PetscInt);
340 PETSC_EXTERN PetscErrorCode PCGAMGSetNSmooths(PC, PetscInt);
341 PETSC_EXTERN PetscErrorCode PCGAMGSetAggressiveLevels(PC, PetscInt);
342 PETSC_EXTERN PetscErrorCode PCGAMGSetReuseInterpolation(PC, PetscBool);
343 PETSC_EXTERN PetscErrorCode PCGAMGFinalizePackage(void);
344 PETSC_EXTERN PetscErrorCode PCGAMGInitializePackage(void);
345 PETSC_EXTERN PetscErrorCode PCGAMGRegister(PCGAMGType, PetscErrorCode (*)(PC));
346 PETSC_EXTERN PetscErrorCode PCGAMGCreateGraph(PC, Mat, Mat *);
347 PETSC_EXTERN PetscErrorCode PCGAMGSetAggressiveSquareGraph(PC, PetscBool);
348 PETSC_EXTERN PetscErrorCode PCGAMGMISkSetMinDegreeOrdering(PC, PetscBool);
349 PETSC_EXTERN PetscErrorCode PCGAMGMISkSetAggressive(PC, PetscInt);
350 PETSC_EXTERN PetscErrorCode PCGAMGASMSetHEM(PC, PetscInt);
351 PETSC_EXTERN PetscErrorCode PCGAMGSetLowMemoryFilter(PC, PetscBool);
352 PETSC_EXTERN PetscErrorCode PCGAMGSetGraphSymmetrize(PC, PetscBool);
353 PETSC_EXTERN PetscErrorCode PCGAMGSetInjectionIndex(PC, PetscInt, PetscInt[]);
354 
355 PETSC_EXTERN PetscErrorCode PCGAMGClassicalSetType(PC, PCGAMGClassicalType);
356 PETSC_EXTERN PetscErrorCode PCGAMGClassicalGetType(PC, PCGAMGClassicalType *);
357 
358 PETSC_EXTERN PetscErrorCode PCBDDCSetDiscreteGradient(PC, Mat, PetscInt, PetscInt, PetscBool, PetscBool);
359 PETSC_EXTERN PetscErrorCode PCBDDCSetDivergenceMat(PC, Mat, PetscBool, IS);
360 PETSC_EXTERN PetscErrorCode PCBDDCSetChangeOfBasisMat(PC, Mat, PetscBool);
361 PETSC_EXTERN PetscErrorCode PCBDDCSetPrimalVerticesIS(PC, IS);
362 PETSC_EXTERN PetscErrorCode PCBDDCSetPrimalVerticesLocalIS(PC, IS);
363 PETSC_EXTERN PetscErrorCode PCBDDCGetPrimalVerticesIS(PC, IS *);
364 PETSC_EXTERN PetscErrorCode PCBDDCGetPrimalVerticesLocalIS(PC, IS *);
365 PETSC_EXTERN PetscErrorCode PCBDDCSetCoarseningRatio(PC, PetscInt);
366 PETSC_EXTERN PetscErrorCode PCBDDCSetLevels(PC, PetscInt);
367 PETSC_EXTERN PetscErrorCode PCBDDCSetDirichletBoundaries(PC, IS);
368 PETSC_EXTERN PetscErrorCode PCBDDCSetDirichletBoundariesLocal(PC, IS);
369 PETSC_EXTERN PetscErrorCode PCBDDCGetDirichletBoundaries(PC, IS *);
370 PETSC_EXTERN PetscErrorCode PCBDDCGetDirichletBoundariesLocal(PC, IS *);
371 PETSC_EXTERN PetscErrorCode PCBDDCSetInterfaceExtType(PC, PCBDDCInterfaceExtType);
372 PETSC_EXTERN PetscErrorCode PCBDDCSetNeumannBoundaries(PC, IS);
373 PETSC_EXTERN PetscErrorCode PCBDDCSetNeumannBoundariesLocal(PC, IS);
374 PETSC_EXTERN PetscErrorCode PCBDDCGetNeumannBoundaries(PC, IS *);
375 PETSC_EXTERN PetscErrorCode PCBDDCGetNeumannBoundariesLocal(PC, IS *);
376 PETSC_EXTERN PetscErrorCode PCBDDCSetDofsSplitting(PC, PetscInt, IS[]);
377 PETSC_EXTERN PetscErrorCode PCBDDCSetDofsSplittingLocal(PC, PetscInt, IS[]);
378 PETSC_EXTERN PetscErrorCode PCBDDCSetLocalAdjacencyGraph(PC, PetscInt, const PetscInt[], const PetscInt[], PetscCopyMode);
379 PETSC_EXTERN PetscErrorCode PCBDDCCreateFETIDPOperators(PC, PetscBool, const char *, Mat *, PC *);
380 PETSC_EXTERN PetscErrorCode PCBDDCMatFETIDPGetRHS(Mat, Vec, Vec);
381 PETSC_EXTERN PetscErrorCode PCBDDCMatFETIDPGetSolution(Mat, Vec, Vec);
382 PETSC_EXTERN PetscErrorCode PCBDDCFinalizePackage(void);
383 PETSC_EXTERN PetscErrorCode PCBDDCInitializePackage(void);
384 
385 PETSC_EXTERN PetscErrorCode PCISInitialize(PC);
386 PETSC_EXTERN PetscErrorCode PCISSetUp(PC, PetscBool, PetscBool);
387 PETSC_EXTERN PetscErrorCode PCISSetUseStiffnessScaling(PC, PetscBool);
388 PETSC_EXTERN PetscErrorCode PCISSetSubdomainScalingFactor(PC, PetscScalar);
389 PETSC_EXTERN PetscErrorCode PCISSetSubdomainDiagonalScaling(PC, Vec);
390 PETSC_EXTERN PetscErrorCode PCISScatterArrayNToVecB(PC, PetscScalar *, Vec, InsertMode, ScatterMode);
391 PETSC_EXTERN PetscErrorCode PCISApplySchur(PC, Vec, Vec, Vec, Vec, Vec);
392 PETSC_EXTERN PetscErrorCode PCISApplyInvSchur(PC, Vec, Vec, Vec, Vec);
393 PETSC_EXTERN PetscErrorCode PCISReset(PC);
394 
395 PETSC_EXTERN PetscInt       PetscMGLevelId;
396 PETSC_EXTERN PetscErrorCode PCMGSetType(PC, PCMGType);
397 PETSC_EXTERN PetscErrorCode PCMGGetType(PC, PCMGType *);
398 PETSC_EXTERN PetscErrorCode PCMGSetLevels(PC, PetscInt, MPI_Comm *);
399 PETSC_EXTERN PetscErrorCode PCMGGetLevels(PC, PetscInt *);
400 
401 PETSC_EXTERN PetscErrorCode PCMGSetDistinctSmoothUp(PC);
402 PETSC_EXTERN PetscErrorCode PCMGSetNumberSmooth(PC, PetscInt);
403 PETSC_EXTERN PetscErrorCode PCMGSetCycleType(PC, PCMGCycleType);
404 PETSC_EXTERN PetscErrorCode PCMGSetCycleTypeOnLevel(PC, PetscInt, PCMGCycleType);
405 PETSC_DEPRECATED_FUNCTION(3, 5, 0, "PCMGSetCycleTypeOnLevel()", ) static inline PetscErrorCode PCMGSetCyclesOnLevel(PC pc, PetscInt l, PetscInt t)
406 {
407   return PCMGSetCycleTypeOnLevel(pc, l, (PCMGCycleType)t);
408 }
409 PETSC_EXTERN PetscErrorCode PCMGMultiplicativeSetCycles(PC, PetscInt);
410 PETSC_EXTERN PetscErrorCode PCMGSetGalerkin(PC, PCMGGalerkinType);
411 PETSC_EXTERN PetscErrorCode PCMGGetGalerkin(PC, PCMGGalerkinType *);
412 PETSC_EXTERN PetscErrorCode PCMGSetAdaptCoarseSpaceType(PC, PCMGCoarseSpaceType);
413 PETSC_EXTERN PetscErrorCode PCMGGetAdaptCoarseSpaceType(PC, PCMGCoarseSpaceType *);
414 PETSC_EXTERN PetscErrorCode PCMGSetAdaptCR(PC, PetscBool);
415 PETSC_EXTERN PetscErrorCode PCMGGetAdaptCR(PC, PetscBool *);
416 /* MATT: Remove? */
417 PETSC_EXTERN PetscErrorCode PCMGSetAdaptInterpolation(PC, PetscBool);
418 PETSC_EXTERN PetscErrorCode PCMGGetAdaptInterpolation(PC, PetscBool *);
419 
420 PETSC_EXTERN PetscErrorCode PCMGSetRhs(PC, PetscInt, Vec);
421 PETSC_EXTERN PetscErrorCode PCMGSetX(PC, PetscInt, Vec);
422 PETSC_EXTERN PetscErrorCode PCMGSetR(PC, PetscInt, Vec);
423 
424 PETSC_EXTERN PetscErrorCode PCMGSetRestriction(PC, PetscInt, Mat);
425 PETSC_EXTERN PetscErrorCode PCMGGetRestriction(PC, PetscInt, Mat *);
426 PETSC_EXTERN PetscErrorCode PCMGSetInjection(PC, PetscInt, Mat);
427 PETSC_EXTERN PetscErrorCode PCMGGetInjection(PC, PetscInt, Mat *);
428 PETSC_EXTERN PetscErrorCode PCMGSetInterpolation(PC, PetscInt, Mat);
429 PETSC_EXTERN PetscErrorCode PCMGSetOperators(PC, PetscInt, Mat, Mat);
430 PETSC_EXTERN PetscErrorCode PCMGGetInterpolation(PC, PetscInt, Mat *);
431 PETSC_EXTERN PetscErrorCode PCMGSetRScale(PC, PetscInt, Vec);
432 PETSC_EXTERN PetscErrorCode PCMGGetRScale(PC, PetscInt, Vec *);
433 PETSC_EXTERN PetscErrorCode PCMGSetResidual(PC, PetscInt, PetscErrorCode (*)(Mat, Vec, Vec, Vec), Mat);
434 PETSC_EXTERN PetscErrorCode PCMGSetResidualTranspose(PC, PetscInt, PetscErrorCode (*)(Mat, Vec, Vec, Vec), Mat);
435 PETSC_EXTERN PetscErrorCode PCMGResidualDefault(Mat, Vec, Vec, Vec);
436 PETSC_EXTERN PetscErrorCode PCMGResidualTransposeDefault(Mat, Vec, Vec, Vec);
437 PETSC_EXTERN PetscErrorCode PCMGMatResidualDefault(Mat, Mat, Mat, Mat);
438 PETSC_EXTERN PetscErrorCode PCMGMatResidualTransposeDefault(Mat, Mat, Mat, Mat);
439 PETSC_EXTERN PetscErrorCode PCMGGalerkinSetMatProductAlgorithm(PC, const char[]);
440 PETSC_EXTERN PetscErrorCode PCMGGalerkinGetMatProductAlgorithm(PC, const char *[]);
441 PETSC_EXTERN PetscErrorCode PCMGGetGridComplexity(PC, PetscReal *, PetscReal *);
442 
443 PETSC_EXTERN PetscErrorCode PCHMGSetReuseInterpolation(PC, PetscBool);
444 PETSC_EXTERN PetscErrorCode PCHMGSetUseSubspaceCoarsening(PC, PetscBool);
445 PETSC_EXTERN PetscErrorCode PCHMGSetInnerPCType(PC, PCType);
446 PETSC_EXTERN PetscErrorCode PCHMGSetCoarseningComponent(PC, PetscInt);
447 PETSC_EXTERN PetscErrorCode PCHMGUseMatMAIJ(PC, PetscBool);
448 
449 PETSC_EXTERN PetscErrorCode PCTelescopeGetSubcommType(PC, PetscSubcommType *);
450 PETSC_EXTERN PetscErrorCode PCTelescopeSetSubcommType(PC, PetscSubcommType);
451 PETSC_EXTERN PetscErrorCode PCTelescopeGetReductionFactor(PC, PetscInt *);
452 PETSC_EXTERN PetscErrorCode PCTelescopeSetReductionFactor(PC, PetscInt);
453 PETSC_EXTERN PetscErrorCode PCTelescopeGetIgnoreDM(PC, PetscBool *);
454 PETSC_EXTERN PetscErrorCode PCTelescopeSetIgnoreDM(PC, PetscBool);
455 PETSC_EXTERN PetscErrorCode PCTelescopeGetUseCoarseDM(PC, PetscBool *);
456 PETSC_EXTERN PetscErrorCode PCTelescopeSetUseCoarseDM(PC, PetscBool);
457 PETSC_EXTERN PetscErrorCode PCTelescopeGetIgnoreKSPComputeOperators(PC, PetscBool *);
458 PETSC_EXTERN PetscErrorCode PCTelescopeSetIgnoreKSPComputeOperators(PC, PetscBool);
459 PETSC_EXTERN PetscErrorCode PCTelescopeGetDM(PC, DM *);
460 
461 PETSC_EXTERN PetscErrorCode PCPatchSetSaveOperators(PC, PetscBool);
462 PETSC_EXTERN PetscErrorCode PCPatchGetSaveOperators(PC, PetscBool *);
463 PETSC_EXTERN PetscErrorCode PCPatchSetPrecomputeElementTensors(PC, PetscBool);
464 PETSC_EXTERN PetscErrorCode PCPatchGetPrecomputeElementTensors(PC, PetscBool *);
465 PETSC_EXTERN PetscErrorCode PCPatchSetPartitionOfUnity(PC, PetscBool);
466 PETSC_EXTERN PetscErrorCode PCPatchGetPartitionOfUnity(PC, PetscBool *);
467 PETSC_EXTERN PetscErrorCode PCPatchSetSubMatType(PC, MatType);
468 PETSC_EXTERN PetscErrorCode PCPatchGetSubMatType(PC, MatType *);
469 PETSC_EXTERN PetscErrorCode PCPatchSetCellNumbering(PC, PetscSection);
470 PETSC_EXTERN PetscErrorCode PCPatchGetCellNumbering(PC, PetscSection *);
471 PETSC_EXTERN PetscErrorCode PCPatchSetConstructType(PC, PCPatchConstructType, PetscErrorCode (*)(PC, PetscInt *, IS **, IS *, void *), void *);
472 PETSC_EXTERN PetscErrorCode PCPatchGetConstructType(PC, PCPatchConstructType *, PetscErrorCode (**)(PC, PetscInt *, IS **, IS *, void *), void **);
473 PETSC_EXTERN PetscErrorCode PCPatchSetDiscretisationInfo(PC, PetscInt, DM *, PetscInt *, PetscInt *, const PetscInt **, const PetscInt *, PetscInt, const PetscInt *, PetscInt, const PetscInt *);
474 PETSC_EXTERN PetscErrorCode PCPatchSetComputeOperator(PC, PetscErrorCode (*)(PC, PetscInt, Vec, Mat, IS, PetscInt, const PetscInt *, const PetscInt *, void *), void *);
475 PETSC_EXTERN PetscErrorCode PCPatchSetComputeFunction(PC pc, PetscErrorCode (*func)(PC, PetscInt, Vec, Vec, IS, PetscInt, const PetscInt *, const PetscInt *, void *), void *ctx);
476 PETSC_EXTERN PetscErrorCode PCPatchSetComputeOperatorInteriorFacets(PC, PetscErrorCode (*)(PC, PetscInt, Vec, Mat, IS, PetscInt, const PetscInt *, const PetscInt *, void *), void *);
477 PETSC_EXTERN PetscErrorCode PCPatchSetComputeFunctionInteriorFacets(PC pc, PetscErrorCode (*func)(PC, PetscInt, Vec, Vec, IS, PetscInt, const PetscInt *, const PetscInt *, void *), void *ctx);
478 
479 PETSC_EXTERN PetscErrorCode PCLMVMSetMatLMVM(PC, Mat);
480 PETSC_EXTERN PetscErrorCode PCLMVMGetMatLMVM(PC, Mat *);
481 PETSC_EXTERN PetscErrorCode PCLMVMSetIS(PC, IS);
482 PETSC_EXTERN PetscErrorCode PCLMVMClearIS(PC);
483 PETSC_EXTERN PetscErrorCode PCLMVMSetUpdateVec(PC, Vec);
484 
485 PETSC_EXTERN PetscErrorCode PCExoticSetType(PC, PCExoticType);
486 
487 PETSC_EXTERN PetscErrorCode PCDeflationSetInitOnly(PC, PetscBool);
488 PETSC_EXTERN PetscErrorCode PCDeflationSetLevels(PC, PetscInt);
489 PETSC_EXTERN PetscErrorCode PCDeflationSetReductionFactor(PC, PetscInt);
490 PETSC_EXTERN PetscErrorCode PCDeflationSetCorrectionFactor(PC, PetscScalar);
491 PETSC_EXTERN PetscErrorCode PCDeflationSetSpaceToCompute(PC, PCDeflationSpaceType, PetscInt);
492 PETSC_EXTERN PetscErrorCode PCDeflationSetSpace(PC, Mat, PetscBool);
493 PETSC_EXTERN PetscErrorCode PCDeflationSetProjectionNullSpaceMat(PC, Mat);
494 PETSC_EXTERN PetscErrorCode PCDeflationSetCoarseMat(PC, Mat);
495 PETSC_EXTERN PetscErrorCode PCDeflationGetPC(PC, PC *);
496 
497 PETSC_EXTERN PetscErrorCode PCHPDDMSetAuxiliaryMat(PC, IS, Mat, PetscErrorCode (*)(Mat, PetscReal, Vec, Vec, PetscReal, IS, void *), void *);
498 PETSC_EXTERN PetscErrorCode PCHPDDMSetRHSMat(PC, Mat);
499 PETSC_EXTERN PetscErrorCode PCHPDDMHasNeumannMat(PC, PetscBool);
500 PETSC_EXTERN PetscErrorCode PCHPDDMSetCoarseCorrectionType(PC, PCHPDDMCoarseCorrectionType);
501 PETSC_EXTERN PetscErrorCode PCHPDDMGetCoarseCorrectionType(PC, PCHPDDMCoarseCorrectionType *);
502 PETSC_EXTERN PetscErrorCode PCHPDDMSetSTShareSubKSP(PC, PetscBool);
503 PETSC_EXTERN PetscErrorCode PCHPDDMGetSTShareSubKSP(PC, PetscBool *);
504 PETSC_EXTERN PetscErrorCode PCHPDDMSetDeflationMat(PC, IS, Mat);
505 PETSC_EXTERN PetscErrorCode PCHPDDMFinalizePackage(void);
506 PETSC_EXTERN PetscErrorCode PCHPDDMInitializePackage(void);
507 PETSC_EXTERN PetscErrorCode PCHPDDMGetComplexities(PC, PetscReal *, PetscReal *);
508 
509 PETSC_EXTERN PetscErrorCode PCAmgXGetResources(PC, void *);
510 
511 PETSC_EXTERN PetscErrorCode PCMatSetApplyOperation(PC, MatOperation);
512 PETSC_EXTERN PetscErrorCode PCMatGetApplyOperation(PC, MatOperation *);
513