1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574
|
<center><a href="https://gitlab.com/petsc/petsc/-/blob/966382dc56242773704ef5f5cee7aa2db3ebc577/include/petscpctypes.h">Actual source code: petscpctypes.h</a></center><br>
<html>
<head>
<title></title>
<meta name="generator" content="c2html 0.9.6">
<meta name="date" content="2025-04-30T18:14:50+00:00">
</head>
<body bgcolor="#FFFFFF">
<pre width=80>
<a name="line1"> 1: </a><font color="#A020F0">#pragma once</font>
<a name="line3"> 3: </a><font color="#B22222">/* MANSEC = <a href="../manualpages/KSP/KSP.html">KSP</a> */</font>
<a name="line4"> 4: </a><font color="#B22222">/* SUBMANSEC = <a href="../manualpages/PC/PC.html">PC</a> */</font>
<a name="line6"> 6: </a><font color="#B22222">/*S</font>
<a name="line7"> 7: </a><font color="#B22222"> <a href="../manualpages/PC/PC.html">PC</a> - Abstract PETSc object that manages all preconditioners including direct solvers such as `<a href="../manualpages/PC/PCLU.html">PCLU</a>`</font>
<a name="line9"> 9: </a><font color="#B22222"> Level: beginner</font>
<a name="line11"> 11: </a><font color="#B22222">.seealso: [](doc_linsolve), [](sec_pc), `<a href="../manualpages/PC/PCCreate.html">PCCreate</a>()`, `<a href="../manualpages/PC/PCSetType.html">PCSetType</a>()`, `<a href="../manualpages/PC/PCType.html">PCType</a>`</font>
<a name="line12"> 12: </a><font color="#B22222">S*/</font>
<a name="line13"> 13: </a><font color="#4169E1">typedef struct _p_PC *<a href="../manualpages/PC/PC.html">PC</a>;</font>
<a name="line15"> 15: </a><font color="#B22222">/*J</font>
<a name="line16"> 16: </a><font color="#B22222"> <a href="../manualpages/PC/PCType.html">PCType</a> - String with the name of a PETSc preconditioner. These are all the preconditioners and direct solvers that PETSc provides.</font>
<a name="line18"> 18: </a><font color="#B22222"> Level: beginner</font>
<a name="line20"> 20: </a><font color="#B22222"> Notes:</font>
<a name="line21"> 21: </a><font color="#B22222"> Use `<a href="../manualpages/PC/PCSetType.html">PCSetType</a>()` or the options database key `-pc_type` to set the preconditioner to use with a given `<a href="../manualpages/PC/PC.html">PC</a>` object</font>
<a name="line23"> 23: </a><font color="#B22222"> `<a href="../manualpages/PC/PCRegister.html">PCRegister</a>()` is used to register preconditioners that are then accessible via `<a href="../manualpages/PC/PCSetType.html">PCSetType</a>()`</font>
<a name="line25"> 25: </a><font color="#B22222">.seealso: [](doc_linsolve), [](sec_pc), `<a href="../manualpages/PC/PCSetType.html">PCSetType</a>()`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCCreate.html">PCCreate</a>()`, `<a href="../manualpages/PC/PCRegister.html">PCRegister</a>()`, `<a href="../manualpages/PC/PCSetFromOptions.html">PCSetFromOptions</a>()`, `<a href="../manualpages/PC/PCLU.html">PCLU</a>`, `<a href="../manualpages/PC/PCJACOBI.html">PCJACOBI</a>`, `<a href="../manualpages/PC/PCBJACOBI.html">PCBJACOBI</a>`</font>
<a name="line26"> 26: </a><font color="#B22222">J*/</font>
<a name="line27"> 27: </a><font color="#4169E1">typedef const char *<a href="../manualpages/PC/PCType.html">PCType</a>;</font>
<a name="line28"> 28: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCNONE.html">PCNONE</a> </font><font color="#666666">"none"</font><font color="#228B22"></font></strong>
<a name="line29"> 29: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCJACOBI.html">PCJACOBI</a> </font><font color="#666666">"jacobi"</font><font color="#228B22"></font></strong>
<a name="line30"> 30: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSOR.html">PCSOR</a> </font><font color="#666666">"sor"</font><font color="#228B22"></font></strong>
<a name="line31"> 31: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCLU.html">PCLU</a> </font><font color="#666666">"lu"</font><font color="#228B22"></font></strong>
<a name="line32"> 32: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCQR.html">PCQR</a> </font><font color="#666666">"qr"</font><font color="#228B22"></font></strong>
<a name="line33"> 33: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSHELL.html">PCSHELL</a> </font><font color="#666666">"shell"</font><font color="#228B22"></font></strong>
<a name="line34"> 34: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCAMGX.html">PCAMGX</a> </font><font color="#666666">"amgx"</font><font color="#228B22"></font></strong>
<a name="line35"> 35: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCBJACOBI.html">PCBJACOBI</a> </font><font color="#666666">"bjacobi"</font><font color="#228B22"></font></strong>
<a name="line36"> 36: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCMG.html">PCMG</a> </font><font color="#666666">"mg"</font><font color="#228B22"></font></strong>
<a name="line37"> 37: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCEISENSTAT.html">PCEISENSTAT</a> </font><font color="#666666">"eisenstat"</font><font color="#228B22"></font></strong>
<a name="line38"> 38: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCILU.html">PCILU</a> </font><font color="#666666">"ilu"</font><font color="#228B22"></font></strong>
<a name="line39"> 39: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCICC.html">PCICC</a> </font><font color="#666666">"icc"</font><font color="#228B22"></font></strong>
<a name="line40"> 40: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCASM.html">PCASM</a> </font><font color="#666666">"asm"</font><font color="#228B22"></font></strong>
<a name="line41"> 41: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCGASM.html">PCGASM</a> </font><font color="#666666">"gasm"</font><font color="#228B22"></font></strong>
<a name="line42"> 42: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCKSP.html">PCKSP</a> </font><font color="#666666">"ksp"</font><font color="#228B22"></font></strong>
<a name="line43"> 43: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCBJKOKKOS.html">PCBJKOKKOS</a> </font><font color="#666666">"bjkokkos"</font><font color="#228B22"></font></strong>
<a name="line44"> 44: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCCOMPOSITE.html">PCCOMPOSITE</a> </font><font color="#666666">"composite"</font><font color="#228B22"></font></strong>
<a name="line45"> 45: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCREDUNDANT.html">PCREDUNDANT</a> </font><font color="#666666">"redundant"</font><font color="#228B22"></font></strong>
<a name="line46"> 46: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSPAI.html">PCSPAI</a> </font><font color="#666666">"spai"</font><font color="#228B22"></font></strong>
<a name="line47"> 47: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCNN.html">PCNN</a> </font><font color="#666666">"nn"</font><font color="#228B22"></font></strong>
<a name="line48"> 48: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCCHOLESKY.html">PCCHOLESKY</a> </font><font color="#666666">"cholesky"</font><font color="#228B22"></font></strong>
<a name="line49"> 49: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCPBJACOBI.html">PCPBJACOBI</a> </font><font color="#666666">"pbjacobi"</font><font color="#228B22"></font></strong>
<a name="line50"> 50: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCVPBJACOBI.html">PCVPBJACOBI</a> </font><font color="#666666">"vpbjacobi"</font><font color="#228B22"></font></strong>
<a name="line51"> 51: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCMAT.html">PCMAT</a> </font><font color="#666666">"mat"</font><font color="#228B22"></font></strong>
<a name="line52"> 52: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCHYPRE.html">PCHYPRE</a> </font><font color="#666666">"hypre"</font><font color="#228B22"></font></strong>
<a name="line53"> 53: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCPARMS.html">PCPARMS</a> </font><font color="#666666">"parms"</font><font color="#228B22"></font></strong>
<a name="line54"> 54: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a> </font><font color="#666666">"fieldsplit"</font><font color="#228B22"></font></strong>
<a name="line55"> 55: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCTFS.html">PCTFS</a> </font><font color="#666666">"tfs"</font><font color="#228B22"></font></strong>
<a name="line56"> 56: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCML.html">PCML</a> </font><font color="#666666">"ml"</font><font color="#228B22"></font></strong>
<a name="line57"> 57: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCGALERKIN.html">PCGALERKIN</a> </font><font color="#666666">"galerkin"</font><font color="#228B22"></font></strong>
<a name="line58"> 58: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCEXOTIC.html">PCEXOTIC</a> </font><font color="#666666">"exotic"</font><font color="#228B22"></font></strong>
<a name="line59"> 59: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCCP.html">PCCP</a> </font><font color="#666666">"cp"</font><font color="#228B22"></font></strong>
<a name="line60"> 60: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCLSC.html">PCLSC</a> </font><font color="#666666">"lsc"</font><font color="#228B22"></font></strong>
<a name="line61"> 61: </a><strong><font color="#228B22">#define PCPYTHON </font><font color="#666666">"python"</font><font color="#228B22"></font></strong>
<a name="line62"> 62: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCPFMG.html">PCPFMG</a> </font><font color="#666666">"pfmg"</font><font color="#228B22"></font></strong>
<a name="line63"> 63: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSMG.html">PCSMG</a> </font><font color="#666666">"smg"</font><font color="#228B22"></font></strong>
<a name="line64"> 64: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSYSPFMG.html">PCSYSPFMG</a> </font><font color="#666666">"syspfmg"</font><font color="#228B22"></font></strong>
<a name="line65"> 65: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCREDISTRIBUTE.html">PCREDISTRIBUTE</a> </font><font color="#666666">"redistribute"</font><font color="#228B22"></font></strong>
<a name="line66"> 66: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSVD.html">PCSVD</a> </font><font color="#666666">"svd"</font><font color="#228B22"></font></strong>
<a name="line67"> 67: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCGAMG.html">PCGAMG</a> </font><font color="#666666">"gamg"</font><font color="#228B22"></font></strong>
<a name="line68"> 68: </a><strong><font color="#228B22">#define PCCHOWILUVIENNACL </font><font color="#666666">"chowiluviennacl"</font><font color="#228B22"></font></strong>
<a name="line69"> 69: </a><strong><font color="#228B22">#define PCROWSCALINGVIENNACL </font><font color="#666666">"rowscalingviennacl"</font><font color="#228B22"></font></strong>
<a name="line70"> 70: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCSAVIENNACL.html">PCSAVIENNACL</a> </font><font color="#666666">"saviennacl"</font><font color="#228B22"></font></strong>
<a name="line71"> 71: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCBDDC.html">PCBDDC</a> </font><font color="#666666">"bddc"</font><font color="#228B22"></font></strong>
<a name="line72"> 72: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCKACZMARZ.html">PCKACZMARZ</a> </font><font color="#666666">"kaczmarz"</font><font color="#228B22"></font></strong>
<a name="line73"> 73: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCTELESCOPE.html">PCTELESCOPE</a> </font><font color="#666666">"telescope"</font><font color="#228B22"></font></strong>
<a name="line74"> 74: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCPATCH.html">PCPATCH</a> </font><font color="#666666">"patch"</font><font color="#228B22"></font></strong>
<a name="line75"> 75: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCLMVM.html">PCLMVM</a> </font><font color="#666666">"lmvm"</font><font color="#228B22"></font></strong>
<a name="line76"> 76: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCHMG.html">PCHMG</a> </font><font color="#666666">"hmg"</font><font color="#228B22"></font></strong>
<a name="line77"> 77: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCDEFLATION.html">PCDEFLATION</a> </font><font color="#666666">"deflation"</font><font color="#228B22"></font></strong>
<a name="line78"> 78: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCHPDDM.html">PCHPDDM</a> </font><font color="#666666">"hpddm"</font><font color="#228B22"></font></strong>
<a name="line79"> 79: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCH2OPUS.html">PCH2OPUS</a> </font><font color="#666666">"h2opus"</font><font color="#228B22"></font></strong>
<a name="line80"> 80: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCMPI.html">PCMPI</a> </font><font color="#666666">"mpi"</font><font color="#228B22"></font></strong>
<a name="line82"> 82: </a><font color="#B22222">/*E</font>
<a name="line83"> 83: </a><font color="#B22222"> <a href="../manualpages/PC/PCSide.html">PCSide</a> - Determines if the preconditioner is to be applied to the left, right</font>
<a name="line84"> 84: </a><font color="#B22222"> or symmetrically around the operator in `<a href="../manualpages/KSP/KSPSolve.html">KSPSolve</a>()`.</font>
<a name="line86"> 86: </a><font color="#B22222"> Values:</font>
<a name="line87"> 87: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCSide.html">PC_LEFT</a>` - applied after the operator is applied</font>
<a name="line88"> 88: </a><font color="#B22222">. `<a href="../manualpages/PC/PCSide.html">PC_RIGHT</a>` - applied before the operator is applied</font>
<a name="line89"> 89: </a><font color="#B22222">- `<a href="../manualpages/PC/PCSide.html">PC_SYMMETRIC</a>` - a portion of the preconditioner is applied before the operator and the transpose of this portion is applied after the operator is applied.</font>
<a name="line91"> 91: </a><font color="#B22222"> Level: beginner</font>
<a name="line93"> 93: </a><font color="#B22222"> Note:</font>
<a name="line94"> 94: </a><font color="#B22222"> Certain `<a href="../manualpages/KSP/KSPType.html">KSPType</a>` support only a subset of `<a href="../manualpages/PC/PCSide.html">PCSide</a>` values</font>
<a name="line96"> 96: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/KSP/KSPSetPCSide.html">KSPSetPCSide</a>()`, `<a href="../manualpages/KSP/KSP.html">KSP</a>`, `<a href="../manualpages/KSP/KSPType.html">KSPType</a>`, `<a href="../manualpages/KSP/KSPGetPCSide.html">KSPGetPCSide</a>()`, `<a href="../manualpages/KSP/KSPSolve.html">KSPSolve</a>()`</font>
<a name="line97"> 97: </a><font color="#B22222">E*/</font>
<a name="line98"> 98: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line99"> 99: </a> <a href="../manualpages/PC/PCSide.html">PC_SIDE_DEFAULT</a> = -1,
<a name="line100">100: </a> <a href="../manualpages/PC/PCSide.html">PC_LEFT</a> = 0,
<a name="line101">101: </a> <a href="../manualpages/PC/PCSide.html">PC_RIGHT</a> = 1,
<a name="line102">102: </a> <a href="../manualpages/PC/PCSide.html">PC_SYMMETRIC</a> = 2
<a name="line103">103: </a>} <a href="../manualpages/PC/PCSide.html">PCSide</a>;
<a name="line104">104: </a><strong><font color="#228B22">#define PC_SIDE_MAX (<a href="../manualpages/PC/PCSide.html">PC_SYMMETRIC</a> + 1)</font></strong>
<a name="line106">106: </a><font color="#B22222">/*E</font>
<a name="line107">107: </a><font color="#B22222"> <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRichardsonConvergedReason</a> - reason a `<a href="../manualpages/PC/PCApplyRichardson.html">PCApplyRichardson</a>()` method terminated</font>
<a name="line109">109: </a><font color="#B22222"> Level: advanced</font>
<a name="line111">111: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/KSP/KSPRICHARDSON.html">KSPRICHARDSON</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCApplyRichardson.html">PCApplyRichardson</a>()`</font>
<a name="line112">112: </a><font color="#B22222">E*/</font>
<a name="line113">113: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line114">114: </a> <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRICHARDSON_NOT_SET</a> = 0,
<a name="line115">115: </a> <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRICHARDSON_CONVERGED_RTOL</a> = 2,
<a name="line116">116: </a> <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRICHARDSON_CONVERGED_ATOL</a> = 3,
<a name="line117">117: </a> <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRICHARDSON_CONVERGED_ITS</a> = 4,
<a name="line118">118: </a> <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRICHARDSON_DIVERGED_DTOL</a> = -4
<a name="line119">119: </a>} <a href="../manualpages/PC/PCRichardsonConvergedReason.html">PCRichardsonConvergedReason</a>;
<a name="line121">121: </a><font color="#B22222">/*E</font>
<a name="line122">122: </a><font color="#B22222"> <a href="../manualpages/PC/PCJacobiType.html">PCJacobiType</a> - Determines what elements of the matrix are used to form the Jacobi preconditioner, that is with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCJACOBI.html">PCJACOBI</a>`</font>
<a name="line124">124: </a><font color="#B22222"> Values:</font>
<a name="line125">125: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_DIAGONAL</a>` - use the diagonal entry, if it is zero use one</font>
<a name="line126">126: </a><font color="#B22222">. `<a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_ROWL1</a>` - add sum of absolute values in row i, j != i, to diag_ii</font>
<a name="line127">127: </a><font color="#B22222">. `<a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_ROWMAX</a>` - use the maximum absolute value in the row</font>
<a name="line128">128: </a><font color="#B22222">- `<a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_ROWSUM</a>` - use the sum of the values in the row (not the absolute values)</font>
<a name="line130">130: </a><font color="#B22222"> Level: intermediate</font>
<a name="line132">132: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCJACOBI.html">PCJACOBI</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line133">133: </a><font color="#B22222">E*/</font>
<a name="line134">134: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line135">135: </a> <a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_DIAGONAL</a>,
<a name="line136">136: </a> <a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_ROWL1</a>,
<a name="line137">137: </a> <a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_ROWMAX</a>,
<a name="line138">138: </a> <a href="../manualpages/PC/PCJacobiType.html">PC_JACOBI_ROWSUM</a>
<a name="line139">139: </a>} <a href="../manualpages/PC/PCJacobiType.html">PCJacobiType</a>;
<a name="line141">141: </a><font color="#B22222">/*E</font>
<a name="line142">142: </a><font color="#B22222"> <a href="../manualpages/PC/PCASMType.html">PCASMType</a> - Determines the type of additive Schwarz method, `<a href="../manualpages/PC/PCASM.html">PCASM</a>`, to use</font>
<a name="line144">144: </a><font color="#B22222"> Values:</font>
<a name="line145">145: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCASMType.html">PC_ASM_BASIC</a>` - Symmetric version where residuals from the ghost points are used</font>
<a name="line146">146: </a><font color="#B22222"> and computed values in ghost regions are added together.</font>
<a name="line147">147: </a><font color="#B22222"> Classical standard additive Schwarz as introduced in {cite}`dryja1987additive`.</font>
<a name="line148">148: </a><font color="#B22222">. `<a href="../manualpages/PC/PCASMType.html">PC_ASM_RESTRICT</a>` - Residuals from ghost points are used but computed values in ghost</font>
<a name="line149">149: </a><font color="#B22222"> region are discarded {cite}`cs99`. Default.</font>
<a name="line150">150: </a><font color="#B22222">. `<a href="../manualpages/PC/PCASMType.html">PC_ASM_INTERPOLATE</a>` - Residuals from ghost points are not used, computed values in ghost</font>
<a name="line151">151: </a><font color="#B22222"> region are added back in.</font>
<a name="line152">152: </a><font color="#B22222">- `<a href="../manualpages/PC/PCASMType.html">PC_ASM_NONE</a>` - Residuals from ghost points are not used, computed ghost values are</font>
<a name="line153">153: </a><font color="#B22222"> discarded. Not very good.</font>
<a name="line155">155: </a><font color="#B22222"> Level: beginner</font>
<a name="line157">157: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCASM.html">PCASM</a>`, `<a href="../manualpages/PC/PCASMSetType.html">PCASMSetType</a>()`, `<a href="../manualpages/PC/PCGASMType.html">PCGASMType</a>`</font>
<a name="line158">158: </a><font color="#B22222">E*/</font>
<a name="line159">159: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line160">160: </a> <a href="../manualpages/PC/PCASMType.html">PC_ASM_BASIC</a> = 3,
<a name="line161">161: </a> <a href="../manualpages/PC/PCASMType.html">PC_ASM_RESTRICT</a> = 1,
<a name="line162">162: </a> <a href="../manualpages/PC/PCASMType.html">PC_ASM_INTERPOLATE</a> = 2,
<a name="line163">163: </a> <a href="../manualpages/PC/PCASMType.html">PC_ASM_NONE</a> = 0
<a name="line164">164: </a>} <a href="../manualpages/PC/PCASMType.html">PCASMType</a>;
<a name="line166">166: </a><font color="#B22222">/*E</font>
<a name="line167">167: </a><font color="#B22222"> <a href="../manualpages/PC/PCGASMType.html">PCGASMType</a> - Determines the type of generalized additive Schwarz method to use (differs from `<a href="../manualpages/PC/PCASM.html">PCASM</a>` in allowing multiple processors per subdomain) with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCGASM.html">PCGASM</a>`</font>
<a name="line169">169: </a><font color="#B22222"> Values:</font>
<a name="line170">170: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCGASMType.html">PC_GASM_BASIC</a>` - Symmetric version where the full from the outer subdomain is used, and the resulting correction is applied</font>
<a name="line171">171: </a><font color="#B22222"> over the outer subdomains. As a result, points in the overlap will receive the sum of the corrections</font>
<a name="line172">172: </a><font color="#B22222"> from neighboring subdomains. Classical standard additive Schwarz {cite}`dryja1987additive`.</font>
<a name="line173">173: </a><font color="#B22222">. `<a href="../manualpages/PC/PCGASMType.html">PC_GASM_RESTRICT</a>` - Residual from the outer subdomain is used but the correction is restricted to the inner subdomain only</font>
<a name="line174">174: </a><font color="#B22222"> (i.e., zeroed out over the overlap portion of the outer subdomain before being applied). As a result,</font>
<a name="line175">175: </a><font color="#B22222"> each point will receive a correction only from the unique inner subdomain containing it (nonoverlapping covering</font>
<a name="line176">176: </a><font color="#B22222"> assumption) {cite}`cs99`. Default.</font>
<a name="line177">177: </a><font color="#B22222">. `<a href="../manualpages/PC/PCGASMType.html">PC_GASM_INTERPOLATE</a>` - Residual is zeroed out over the overlap portion of the outer subdomain, but the resulting correction is</font>
<a name="line178">178: </a><font color="#B22222"> applied over the outer subdomain. As a result, points in the overlap will receive the sum of the corrections</font>
<a name="line179">179: </a><font color="#B22222"> from neighboring subdomains.</font>
<a name="line180">180: </a><font color="#B22222">- `<a href="../manualpages/PC/PCGASMType.html">PC_GASM_NONE</a>` - Residuals and corrections are zeroed out outside the local subdomains. Not very good.</font>
<a name="line182">182: </a><font color="#B22222"> Level: beginner</font>
<a name="line184">184: </a><font color="#B22222"> Note:</font>
<a name="line185">185: </a><font color="#B22222"> Each subdomain has nested inner and outer parts. The inner subdomains are assumed to form a non-overlapping covering of the computational</font>
<a name="line186">186: </a><font color="#B22222"> domain, while the outer subdomains contain the inner subdomains and overlap with each other. The `<a href="../manualpages/PC/PCGASM.html">PCGASM</a>` preconditioner will compute</font>
<a name="line187">187: </a><font color="#B22222"> a subdomain correction over each *outer* subdomain from a residual computed there, but its different variants will differ in</font>
<a name="line188">188: </a><font color="#B22222"> (a) how the outer subdomain residual is computed, and (b) how the outer subdomain correction is computed.</font>
<a name="line190">190: </a><font color="#B22222"> Developer Note:</font>
<a name="line191">191: </a><font color="#B22222"> Perhaps better to remove this since it matches `<a href="../manualpages/PC/PCASMType.html">PCASMType</a>`</font>
<a name="line193">193: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCGASM.html">PCGASM</a>`, `<a href="../manualpages/PC/PCASM.html">PCASM</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCGASMSetType.html">PCGASMSetType</a>()`, `<a href="../manualpages/PC/PCASMType.html">PCASMType</a>`</font>
<a name="line194">194: </a><font color="#B22222">E*/</font>
<a name="line195">195: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line196">196: </a> <a href="../manualpages/PC/PCGASMType.html">PC_GASM_BASIC</a> = 3,
<a name="line197">197: </a> <a href="../manualpages/PC/PCGASMType.html">PC_GASM_RESTRICT</a> = 1,
<a name="line198">198: </a> <a href="../manualpages/PC/PCGASMType.html">PC_GASM_INTERPOLATE</a> = 2,
<a name="line199">199: </a> <a href="../manualpages/PC/PCGASMType.html">PC_GASM_NONE</a> = 0
<a name="line200">200: </a>} <a href="../manualpages/PC/PCGASMType.html">PCGASMType</a>;
<a name="line202">202: </a><font color="#B22222">/*E</font>
<a name="line203">203: </a><font color="#B22222"> <a href="../manualpages/PC/PCCompositeType.html">PCCompositeType</a> - Determines how two or more preconditioner are composed with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCCOMPOSITE.html">PCCOMPOSITE</a>`</font>
<a name="line205">205: </a><font color="#B22222"> Values:</font>
<a name="line206">206: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_ADDITIVE</a>` - results from application of all preconditioners are added together</font>
<a name="line207">207: </a><font color="#B22222">. `<a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_MULTIPLICATIVE</a>` - preconditioners are applied sequentially to the residual freshly</font>
<a name="line208">208: </a><font color="#B22222"> computed after the previous preconditioner application</font>
<a name="line209">209: </a><font color="#B22222">. `<a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE</a>` - preconditioners are applied sequentially to the residual freshly</font>
<a name="line210">210: </a><font color="#B22222"> computed from first preconditioner to last and then back (Use only for symmetric matrices and preconditioners)</font>
<a name="line211">211: </a><font color="#B22222">. `<a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_SPECIAL</a>` - This is very special for a matrix of the form $ \alpha I + R + S$</font>
<a name="line212">212: </a><font color="#B22222"> where the first preconditioner is built from $\alpha I + S$ and second from $\alpha I + R$</font>
<a name="line213">213: </a><font color="#B22222">. `<a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_SCHUR</a>` - composes the Schur complement of the matrix from two blocks, see `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`</font>
<a name="line214">214: </a><font color="#B22222">- `<a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_GKB</a>` - the generalized Golub-Kahan bidiagonalization preconditioner, see `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`</font>
<a name="line216">216: </a><font color="#B22222"> Level: beginner</font>
<a name="line218">218: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCCOMPOSITE.html">PCCOMPOSITE</a>`, `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCCompositeSetType.html">PCCompositeSetType</a>()`, `<a href="../manualpages/SNES/SNESCompositeType.html">SNESCompositeType</a>`, `<a href="../manualpages/PC/PCCompositeSpecialSetAlpha.html">PCCompositeSpecialSetAlpha</a>()`</font>
<a name="line219">219: </a><font color="#B22222">E*/</font>
<a name="line220">220: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line221">221: </a> <a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_ADDITIVE</a>,
<a name="line222">222: </a> <a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_MULTIPLICATIVE</a>,
<a name="line223">223: </a> <a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE</a>,
<a name="line224">224: </a> <a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_SPECIAL</a>,
<a name="line225">225: </a> <a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_SCHUR</a>,
<a name="line226">226: </a> <a href="../manualpages/PC/PCCompositeType.html">PC_COMPOSITE_GKB</a>
<a name="line227">227: </a>} <a href="../manualpages/PC/PCCompositeType.html">PCCompositeType</a>;
<a name="line229">229: </a><font color="#B22222">/*E</font>
<a name="line230">230: </a><font color="#B22222"> <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PCFieldSplitSchurPreType</a> - Determines how to precondition a Schur complement arising with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`</font>
<a name="line232">232: </a><font color="#B22222"> Values:</font>
<a name="line233">233: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_SELF</a>` - the preconditioner for the Schur complement is generated from the symbolic representation of the Schur complement matrix.</font>
<a name="line234">234: </a><font color="#B22222"> The only preconditioners that currently work with this symbolic representation matrix object are `<a href="../manualpages/PC/PCLSC.html">PCLSC</a>` and `<a href="../manualpages/PC/PCHPDDM.html">PCHPDDM</a>`</font>
<a name="line235">235: </a><font color="#B22222">. `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_SELFP</a>` - the preconditioning for the Schur complement is generated from an explicitly-assembled approximation $Sp = A11 - A10 diag(A00)^{-1} A01$.</font>
<a name="line236">236: </a><font color="#B22222"> This is only a good preconditioner when $diag(A00)$ is a good preconditioner for $A00$. Optionally, $A00$ can be</font>
<a name="line237">237: </a><font color="#B22222"> lumped before extracting the diagonal using the additional option `-fieldsplit_1_mat_schur_complement_ainv_type lump`</font>
<a name="line238">238: </a><font color="#B22222">. `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_A11</a>` - the preconditioner for the Schur complement is generated from $A11$, not the Schur complement matrix</font>
<a name="line239">239: </a><font color="#B22222">. `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_USER</a>` - the preconditioner for the Schur complement is generated from the user provided matrix (pre argument</font>
<a name="line240">240: </a><font color="#B22222"> to this function).</font>
<a name="line241">241: </a><font color="#B22222">- `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_FULL</a>` - the preconditioner for the Schur complement is generated from the exact Schur complement matrix representation</font>
<a name="line242">242: </a><font color="#B22222"> computed internally by `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>` (this is expensive) useful mostly as a test that the Schur complement approach can work for your problem</font>
<a name="line244">244: </a><font color="#B22222"> Level: intermediate</font>
<a name="line246">246: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`, `<a href="../manualpages/PC/PCFieldSplitSetSchurPre.html">PCFieldSplitSetSchurPre</a>()`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line247">247: </a><font color="#B22222">E*/</font>
<a name="line248">248: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line249">249: </a> <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_SELF</a>,
<a name="line250">250: </a> <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_SELFP</a>,
<a name="line251">251: </a> <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_A11</a>,
<a name="line252">252: </a> <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_USER</a>,
<a name="line253">253: </a> <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_FULL</a>
<a name="line254">254: </a>} <a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PCFieldSplitSchurPreType</a>;
<a name="line256">256: </a><font color="#B22222">/*E</font>
<a name="line257">257: </a><font color="#B22222"> <a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PCFieldSplitSchurFactType</a> - determines which off-diagonal parts of the approximate block factorization to use with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`</font>
<a name="line259">259: </a><font color="#B22222"> Values:</font>
<a name="line260">260: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_DIAG</a>` - the preconditioner is solving `D`</font>
<a name="line261">261: </a><font color="#B22222">. `<a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_LOWER</a>` - the preconditioner is solving `L D`</font>
<a name="line262">262: </a><font color="#B22222">. `<a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_UPPER</a>` - the preconditioner is solving `D U`</font>
<a name="line263">263: </a><font color="#B22222">- `<a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_FULL</a>` - the preconditioner is solving `L(D U)`</font>
<a name="line265">265: </a><font color="#B22222"> where the matrix is factorized as</font>
<a name="line266">266: </a><font color="#B22222">.vb</font>
<a name="line267">267: </a><font color="#B22222"> (A B) = (1 0) (A 0) (1 Ainv*B) = L D U</font>
<a name="line268">268: </a><font color="#B22222"> (C E) (C*Ainv 1) (0 S) (0 1)</font>
<a name="line269">269: </a><font color="#B22222">.ve</font>
<a name="line271">271: </a><font color="#B22222"> Level: intermediate</font>
<a name="line273">273: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`, `<a href="../manualpages/PC/PCFieldSplitSetSchurFactType.html">PCFieldSplitSetSchurFactType</a>()`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line274">274: </a><font color="#B22222">E*/</font>
<a name="line275">275: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line276">276: </a> <a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_DIAG</a>,
<a name="line277">277: </a> <a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_LOWER</a>,
<a name="line278">278: </a> <a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_UPPER</a>,
<a name="line279">279: </a> <a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PC_FIELDSPLIT_SCHUR_FACT_FULL</a>
<a name="line280">280: </a>} <a href="../manualpages/PC/PCFieldSplitSchurFactType.html">PCFieldSplitSchurFactType</a>;
<a name="line282">282: </a><font color="#B22222">/*E</font>
<a name="line283">283: </a><font color="#B22222"> <a href="../manualpages/PC/PCPARMSGlobalType.html">PCPARMSGlobalType</a> - Determines the global preconditioner method in `<a href="../manualpages/PC/PCPARMS.html">PCPARMS</a>`</font>
<a name="line285">285: </a><font color="#B22222"> Level: intermediate</font>
<a name="line287">287: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCPARMS.html">PCPARMS</a>`, `<a href="../manualpages/PC/PCPARMSSetGlobal.html">PCPARMSSetGlobal</a>()`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line288">288: </a><font color="#B22222">E*/</font>
<a name="line289">289: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line290">290: </a> <a href="../manualpages/PC/PCPARMSGlobalType.html">PC_PARMS_GLOBAL_RAS</a>,
<a name="line291">291: </a> <a href="../manualpages/PC/PCPARMSGlobalType.html">PC_PARMS_GLOBAL_SCHUR</a>,
<a name="line292">292: </a> <a href="../manualpages/PC/PCPARMSGlobalType.html">PC_PARMS_GLOBAL_BJ</a>
<a name="line293">293: </a>} <a href="../manualpages/PC/PCPARMSGlobalType.html">PCPARMSGlobalType</a>;
<a name="line295">295: </a><font color="#B22222">/*E</font>
<a name="line296">296: </a><font color="#B22222"> <a href="../manualpages/PC/PCPARMSLocalType.html">PCPARMSLocalType</a> - Determines the local preconditioner method in `<a href="../manualpages/PC/PCPARMS.html">PCPARMS</a>`</font>
<a name="line298">298: </a><font color="#B22222"> Level: intermediate</font>
<a name="line300">300: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCPARMS.html">PCPARMS</a>`, `<a href="../manualpages/PC/PCPARMSSetLocal.html">PCPARMSSetLocal</a>()`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line301">301: </a><font color="#B22222">E*/</font>
<a name="line302">302: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line303">303: </a> <a href="../manualpages/PC/PCPARMSLocalType.html">PC_PARMS_LOCAL_ILU0</a>,
<a name="line304">304: </a> <a href="../manualpages/PC/PCPARMSLocalType.html">PC_PARMS_LOCAL_ILUK</a>,
<a name="line305">305: </a> <a href="../manualpages/PC/PCPARMSLocalType.html">PC_PARMS_LOCAL_ILUT</a>,
<a name="line306">306: </a> <a href="../manualpages/PC/PCPARMSLocalType.html">PC_PARMS_LOCAL_ARMS</a>
<a name="line307">307: </a>} <a href="../manualpages/PC/PCPARMSLocalType.html">PCPARMSLocalType</a>;
<a name="line309">309: </a><font color="#B22222">/*J</font>
<a name="line310">310: </a><font color="#B22222"> <a href="../manualpages/PC/PCGAMGType.html">PCGAMGType</a> - type of generalized algebraic multigrid `<a href="../manualpages/PC/PCGAMG.html">PCGAMG</a>` method</font>
<a name="line312">312: </a><font color="#B22222"> Values:</font>
<a name="line313">313: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCGAMGAGG.html">PCGAMGAGG</a>` - (the default) smoothed aggregation algorithm, robust, very well tested</font>
<a name="line314">314: </a><font color="#B22222">. `PCGAMGGEO` - geometric coarsening, uses mesh generator to produce coarser meshes, limited to triangles, not supported, reference implementation (2D)</font>
<a name="line315">315: </a><font color="#B22222">- `PCGAMGCLASSICAL` - classical algebraic multigrid preconditioner, incomplete, not supported, reference implementation</font>
<a name="line317">317: </a><font color="#B22222"> Level: intermediate</font>
<a name="line319">319: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCGAMG.html">PCGAMG</a>`, `<a href="../manualpages/PC/PCMG.html">PCMG</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCSetType.html">PCSetType</a>()`, `<a href="../manualpages/PC/PCGAMGSetThreshold.html">PCGAMGSetThreshold</a>()`, `<a href="../manualpages/PC/PCGAMGSetThreshold.html">PCGAMGSetThreshold</a>()`, `<a href="../manualpages/PC/PCGAMGSetReuseInterpolation.html">PCGAMGSetReuseInterpolation</a>()`</font>
<a name="line320">320: </a><font color="#B22222">J*/</font>
<a name="line321">321: </a><font color="#4169E1">typedef const char *<a href="../manualpages/PC/PCGAMGType.html">PCGAMGType</a>;</font>
<a name="line322">322: </a><strong><font color="#228B22">#define <a href="../manualpages/PC/PCGAMGAGG.html">PCGAMGAGG</a> </font><font color="#666666">"agg"</font><font color="#228B22"></font></strong>
<a name="line323">323: </a><strong><font color="#228B22">#define PCGAMGGEO </font><font color="#666666">"geo"</font><font color="#228B22"></font></strong>
<a name="line324">324: </a><strong><font color="#228B22">#define PCGAMGCLASSICAL </font><font color="#666666">"classical"</font><font color="#228B22"></font></strong>
<a name="line326">326: </a><font color="#4169E1">typedef const char *PCGAMGClassicalType;</font>
<a name="line327">327: </a><strong><font color="#228B22">#define PCGAMGCLASSICALDIRECT </font><font color="#666666">"direct"</font><font color="#228B22"></font></strong>
<a name="line328">328: </a><strong><font color="#228B22">#define PCGAMGCLASSICALSTANDARD </font><font color="#666666">"standard"</font><font color="#228B22"></font></strong>
<a name="line330">330: </a><font color="#B22222">/*E</font>
<a name="line331">331: </a><font color="#B22222"> <a href="../manualpages/PC/PCMGType.html">PCMGType</a> - Determines the type of multigrid method that is run with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCMG.html">PCMG</a>`</font>
<a name="line333">333: </a><font color="#B22222"> Values:</font>
<a name="line334">334: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCMGType.html">PC_MG_MULTIPLICATIVE</a>` (default) - traditional V or W cycle as determined by `<a href="../manualpages/PC/PCMGSetCycleType.html">PCMGSetCycleType</a>()`</font>
<a name="line335">335: </a><font color="#B22222">. `<a href="../manualpages/PC/PCMGType.html">PC_MG_ADDITIVE</a>` - the additive multigrid preconditioner where all levels are</font>
<a name="line336">336: </a><font color="#B22222"> smoothed before updating the residual. This only uses the</font>
<a name="line337">337: </a><font color="#B22222"> down smoother, in the preconditioner the upper smoother is ignored</font>
<a name="line338">338: </a><font color="#B22222">. `<a href="../manualpages/PC/PCMGType.html">PC_MG_FULL</a>` - same as multiplicative except one also performs grid sequencing,</font>
<a name="line339">339: </a><font color="#B22222"> that is starts on the coarsest grid, performs a cycle, interpolates</font>
<a name="line340">340: </a><font color="#B22222"> to the next, performs a cycle etc. This is much like the F-cycle presented in "Multigrid" by Trottenberg, Oosterlee, Schuller page 49, but that</font>
<a name="line341">341: </a><font color="#B22222"> algorithm supports smoothing on before the restriction on each level in the initial restriction to the coarsest stage. In addition that algorithm</font>
<a name="line342">342: </a><font color="#B22222"> calls the V-cycle only on the coarser level and has a post-smoother instead.</font>
<a name="line343">343: </a><font color="#B22222">- `<a href="../manualpages/PC/PCMGType.html">PC_MG_KASKADE</a>` - Cascadic or Kaskadic multigrid, like full multigrid except one never goes back to a coarser level from a finer</font>
<a name="line345">345: </a><font color="#B22222"> Level: beginner</font>
<a name="line347">347: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCMG.html">PCMG</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCMGSetType.html">PCMGSetType</a>()`, `<a href="../manualpages/PC/PCMGSetCycleType.html">PCMGSetCycleType</a>()`, `<a href="../manualpages/PC/PCMGSetCycleTypeOnLevel.html">PCMGSetCycleTypeOnLevel</a>()`</font>
<a name="line348">348: </a><font color="#B22222">E*/</font>
<a name="line349">349: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line350">350: </a> <a href="../manualpages/PC/PCMGType.html">PC_MG_MULTIPLICATIVE</a>,
<a name="line351">351: </a> <a href="../manualpages/PC/PCMGType.html">PC_MG_ADDITIVE</a>,
<a name="line352">352: </a> <a href="../manualpages/PC/PCMGType.html">PC_MG_FULL</a>,
<a name="line353">353: </a> <a href="../manualpages/PC/PCMGType.html">PC_MG_KASKADE</a>
<a name="line354">354: </a>} <a href="../manualpages/PC/PCMGType.html">PCMGType</a>;
<a name="line355">355: </a><strong><font color="#228B22">#define PC_MG_CASCADE <a href="../manualpages/PC/PCMGType.html">PC_MG_KASKADE</a>;</font></strong>
<a name="line357">357: </a><font color="#B22222">/*E</font>
<a name="line358">358: </a><font color="#B22222"> <a href="../manualpages/PC/PCMGCycleType.html">PCMGCycleType</a> - Determines which of V-cycle or W-cycle to use with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCMG.html">PCMG</a>` or `<a href="../manualpages/PC/PCGAMG.html">PCGAMG</a>`</font>
<a name="line360">360: </a><font color="#B22222"> Values:</font>
<a name="line361">361: </a><font color="#B22222">+ `PC_MG_V_CYCLE` - use the V cycle</font>
<a name="line362">362: </a><font color="#B22222">- `PC_MG_W_CYCLE` - use the W cycle</font>
<a name="line364">364: </a><font color="#B22222"> Level: beginner</font>
<a name="line366">366: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCMG.html">PCMG</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCMGSetCycleType.html">PCMGSetCycleType</a>()`</font>
<a name="line367">367: </a><font color="#B22222">E*/</font>
<a name="line368">368: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line369">369: </a> <a href="../manualpages/PC/PCMGCycleType.html">PC_MG_CYCLE_V</a> = 1,
<a name="line370">370: </a> <a href="../manualpages/PC/PCMGCycleType.html">PC_MG_CYCLE_W</a> = 2
<a name="line371">371: </a>} <a href="../manualpages/PC/PCMGCycleType.html">PCMGCycleType</a>;
<a name="line373">373: </a><font color="#B22222">/*E</font>
<a name="line374">374: </a><font color="#B22222"> <a href="../manualpages/PC/PCMGalerkinType.html">PCMGalerkinType</a> - Determines if the coarse grid operators are computed via the Galerkin process with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCMG.html">PCMG</a>`</font>
<a name="line376">376: </a><font color="#B22222"> Values:</font>
<a name="line377">377: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_PMAT</a>` - computes the `pmat` (matrix from which the preconditioner is built) via the Galerkin process from the finest grid</font>
<a name="line378">378: </a><font color="#B22222">. `<a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_MAT</a>` - computes the `mat` (matrix used to apply the operator) via the Galerkin process from the finest grid</font>
<a name="line379">379: </a><font color="#B22222">. `<a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_BOTH</a>` - computes both the `mat` and `pmat` via the Galerkin process (if pmat == mat the construction is only done once</font>
<a name="line380">380: </a><font color="#B22222">- `<a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_NONE</a>` - neither operator is computed via the Galerkin process, the user must provide the operator</font>
<a name="line382">382: </a><font color="#B22222"> Level: beginner</font>
<a name="line384">384: </a><font color="#B22222"> Note:</font>
<a name="line385">385: </a><font color="#B22222"> Users should never set `<a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_EXTERNAL</a>`, it is used by `<a href="../manualpages/PC/PCHYPRE.html">PCHYPRE</a>` and `<a href="../manualpages/PC/PCML.html">PCML</a>`</font>
<a name="line387">387: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCMG.html">PCMG</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCMGSetCycleType.html">PCMGSetCycleType</a>()`</font>
<a name="line388">388: </a><font color="#B22222">E*/</font>
<a name="line389">389: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line390">390: </a> <a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_BOTH</a>,
<a name="line391">391: </a> <a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_PMAT</a>,
<a name="line392">392: </a> <a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_MAT</a>,
<a name="line393">393: </a> <a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_NONE</a>,
<a name="line394">394: </a> <a href="../manualpages/PC/PCMGalerkinType.html">PC_MG_GALERKIN_EXTERNAL</a>
<a name="line395">395: </a>} PCMGGalerkinType;
<a name="line397">397: </a><font color="#B22222">/*E</font>
<a name="line398">398: </a><font color="#B22222"> <a href="../manualpages/PC/PCExoticType.html">PCExoticType</a> - Determines which of the face-based or wirebasket-based coarse grid space to use with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCEXOTIC.html">PCEXOTIC</a>`</font>
<a name="line400">400: </a><font color="#B22222"> Level: beginner</font>
<a name="line402">402: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCExoticSetType.html">PCExoticSetType</a>()`, `<a href="../manualpages/PC/PCEXOTIC.html">PCEXOTIC</a>`</font>
<a name="line403">403: </a><font color="#B22222">E*/</font>
<a name="line404">404: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line405">405: </a> <a href="../manualpages/PC/PCExoticType.html">PC_EXOTIC_FACE</a>,
<a name="line406">406: </a> <a href="../manualpages/PC/PCExoticType.html">PC_EXOTIC_WIREBASKET</a>
<a name="line407">407: </a>} <a href="../manualpages/PC/PCExoticType.html">PCExoticType</a>;
<a name="line409">409: </a><font color="#B22222">/*E</font>
<a name="line410">410: </a><font color="#B22222"> <a href="../manualpages/PC/PCBDDCInterfaceExtType.html">PCBDDCInterfaceExtType</a> - Defines how interface balancing is extended into the interior of subdomains with the `<a href="../manualpages/PC/PCType.html">PCType</a>` of `<a href="../manualpages/PC/PCBDDC.html">PCBDDC</a>`</font>
<a name="line412">412: </a><font color="#B22222"> Values:</font>
<a name="line413">413: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCBDDCInterfaceExtType.html">PC_BDDC_INTERFACE_EXT_DIRICHLET</a>` - solves Dirichlet interior problem; this is the standard BDDC algorithm</font>
<a name="line414">414: </a><font color="#B22222">- `<a href="../manualpages/PC/PCBDDCInterfaceExtType.html">PC_BDDC_INTERFACE_EXT_LUMP</a>` - skips interior solve; sometimes called $M_1$ and associated with "lumped FETI-DP"</font>
<a name="line416">416: </a><font color="#B22222"> Level: intermediate</font>
<a name="line418">418: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCBDDC.html">PCBDDC</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line419">419: </a><font color="#B22222">E*/</font>
<a name="line420">420: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line421">421: </a> <a href="../manualpages/PC/PCBDDCInterfaceExtType.html">PC_BDDC_INTERFACE_EXT_DIRICHLET</a>,
<a name="line422">422: </a> <a href="../manualpages/PC/PCBDDCInterfaceExtType.html">PC_BDDC_INTERFACE_EXT_LUMP</a>
<a name="line423">423: </a>} <a href="../manualpages/PC/PCBDDCInterfaceExtType.html">PCBDDCInterfaceExtType</a>;
<a name="line425">425: </a><font color="#B22222">/*E</font>
<a name="line426">426: </a><font color="#B22222"> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMGCoarseSpaceType</a> - Function space for coarse space for adaptive interpolation</font>
<a name="line428">428: </a><font color="#B22222"> Level: beginner</font>
<a name="line430">430: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCMGSetAdaptCoarseSpaceType.html">PCMGSetAdaptCoarseSpaceType</a>()`, `<a href="../manualpages/PC/PCMG.html">PCMG</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line431">431: </a><font color="#B22222">E*/</font>
<a name="line432">432: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line433">433: </a> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMG_ADAPT_NONE</a>,
<a name="line434">434: </a> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMG_ADAPT_POLYNOMIAL</a>,
<a name="line435">435: </a> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMG_ADAPT_HARMONIC</a>,
<a name="line436">436: </a> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMG_ADAPT_EIGENVECTOR</a>,
<a name="line437">437: </a> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMG_ADAPT_GENERALIZED_EIGENVECTOR</a>,
<a name="line438">438: </a> <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMG_ADAPT_GDSW</a>
<a name="line439">439: </a>} <a href="../manualpages/PC/PCMGCoarseSpaceType.html">PCMGCoarseSpaceType</a>;
<a name="line441">441: </a><font color="#B22222">/*E</font>
<a name="line442">442: </a><font color="#B22222"> <a href="../manualpages/PC/PCPatchConstructType.html">PCPatchConstructType</a> - Determines the algorithm used to construct patches for the `<a href="../manualpages/PC/PCPATCH.html">PCPATCH</a>` preconditioner</font>
<a name="line444">444: </a><font color="#B22222"> Level: beginner</font>
<a name="line446">446: </a><font color="#B22222">.seealso: [](sec_pc), `PCPatchSetConstructType()`, `<a href="../manualpages/PC/PCPATCH.html">PCPATCH</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line447">447: </a><font color="#B22222">E*/</font>
<a name="line448">448: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line449">449: </a> <a href="../manualpages/PC/PCPatchConstructType.html">PC_PATCH_STAR</a>,
<a name="line450">450: </a> <a href="../manualpages/PC/PCPatchConstructType.html">PC_PATCH_VANKA</a>,
<a name="line451">451: </a> <a href="../manualpages/PC/PCPatchConstructType.html">PC_PATCH_PARDECOMP</a>,
<a name="line452">452: </a> <a href="../manualpages/PC/PCPatchConstructType.html">PC_PATCH_USER</a>,
<a name="line453">453: </a> <a href="../manualpages/PC/PCPatchConstructType.html">PC_PATCH_PYTHON</a>
<a name="line454">454: </a>} <a href="../manualpages/PC/PCPatchConstructType.html">PCPatchConstructType</a>;
<a name="line456">456: </a><font color="#B22222">/*E</font>
<a name="line457">457: </a><font color="#B22222"> <a href="../manualpages/PC/PCDeflationSpaceType.html">PCDeflationSpaceType</a> - Type of deflation used by `<a href="../manualpages/PC/PCType.html">PCType</a>` `<a href="../manualpages/PC/PCDEFLATION.html">PCDEFLATION</a>`</font>
<a name="line459">459: </a><font color="#B22222"> Values:</font>
<a name="line460">460: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_HAAR</a>` - directly assembled based on Haar (db2) wavelet with overflowed filter cuted-off</font>
<a name="line461">461: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB2</a>` - `<a href="../manualpages/Mat/MATCOMPOSITE.html">MATCOMPOSITE</a>` of 1-lvl matices based on db2 (2 coefficient Daubechies / Haar wavelet)</font>
<a name="line462">462: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB4</a>` - same as above, but with db4 (4 coefficient Daubechies)</font>
<a name="line463">463: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB8</a>` - same as above, but with db8 (8 coefficient Daubechies)</font>
<a name="line464">464: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB16</a>` - same as above, but with db16 (16 coefficient Daubechies)</font>
<a name="line465">465: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_BIORTH22</a>` - same as above, but with biorthogonal 2.2 (6 coefficients)</font>
<a name="line466">466: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_MEYER</a>` - same as above, but with Meyer/FIR (62 coefficients)</font>
<a name="line467">467: </a><font color="#B22222">. `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_AGGREGATION</a>` - aggregates local indices (given by operator matrix distribution) into a subdomain</font>
<a name="line468">468: </a><font color="#B22222">- `<a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_USER</a>` - indicates space set by user</font>
<a name="line470">470: </a><font color="#B22222"> Level: intermediate</font>
<a name="line472">472: </a><font color="#B22222"> Note:</font>
<a name="line473">473: </a><font color="#B22222"> Wavelet-based space (except Haar) can be used in multilevel deflation.</font>
<a name="line475">475: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCDeflationSetSpaceToCompute.html">PCDeflationSetSpaceToCompute</a>()`, `<a href="../manualpages/PC/PCDEFLATION.html">PCDEFLATION</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`</font>
<a name="line476">476: </a><font color="#B22222">E*/</font>
<a name="line477">477: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line478">478: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_HAAR</a>,
<a name="line479">479: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB2</a>,
<a name="line480">480: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB4</a>,
<a name="line481">481: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB8</a>,
<a name="line482">482: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_DB16</a>,
<a name="line483">483: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_BIORTH22</a>,
<a name="line484">484: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_MEYER</a>,
<a name="line485">485: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_AGGREGATION</a>,
<a name="line486">486: </a> <a href="../manualpages/PC/PCDeflationSpaceType.html">PC_DEFLATION_SPACE_USER</a>
<a name="line487">487: </a>} <a href="../manualpages/PC/PCDeflationSpaceType.html">PCDeflationSpaceType</a>;
<a name="line489">489: </a><font color="#B22222">/*E</font>
<a name="line490">490: </a><font color="#B22222"> <a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PCHPDDMCoarseCorrectionType</a> - Type of coarse correction used by `<a href="../manualpages/PC/PCType.html">PCType</a>` `<a href="../manualpages/PC/PCHPDDM.html">PCHPDDM</a>`</font>
<a name="line492">492: </a><font color="#B22222"> Values:</font>
<a name="line493">493: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_DEFLATED</a>` (default) - eq. (1) in `PCHPDDMShellApply()`</font>
<a name="line494">494: </a><font color="#B22222">. `<a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_ADDITIVE</a>` - eq. (2)</font>
<a name="line495">495: </a><font color="#B22222">. `<a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_BALANCED</a>` - eq. (3)</font>
<a name="line496">496: </a><font color="#B22222">- `<a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_NONE</a>` - no coarse correction (mostly useful for debugging)</font>
<a name="line498">498: </a><font color="#B22222"> Level: intermediate</font>
<a name="line500">500: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCHPDDM.html">PCHPDDM</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCSetType.html">PCSetType</a>()`, `PCHPDDMShellApply()`</font>
<a name="line501">501: </a><font color="#B22222">E*/</font>
<a name="line502">502: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line503">503: </a> <a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_DEFLATED</a>,
<a name="line504">504: </a> <a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_ADDITIVE</a>,
<a name="line505">505: </a> <a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_BALANCED</a>,
<a name="line506">506: </a> <a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PC_HPDDM_COARSE_CORRECTION_NONE</a>
<a name="line507">507: </a>} <a href="../manualpages/PC/PCHPDDMCoarseCorrectionType.html">PCHPDDMCoarseCorrectionType</a>;
<a name="line509">509: </a><font color="#B22222">/*E</font>
<a name="line510">510: </a><font color="#B22222"> <a href="../manualpages/PC/PCHPDDMSchurPreType.html">PCHPDDMSchurPreType</a> - Type of `<a href="../manualpages/PC/PCHPDDM.html">PCHPDDM</a>` preconditioner for a `<a href="../manualpages/KSP/MATSCHURCOMPLEMENT.html">MATSCHURCOMPLEMENT</a>` generated by `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>` with `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PCFieldSplitSchurPreType</a>` set to `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_SELF</a>`</font>
<a name="line512">512: </a><font color="#B22222"> Values:</font>
<a name="line513">513: </a><font color="#B22222">+ `<a href="../manualpages/PC/PCHPDDMSchurPreType.html">PC_HPDDM_SCHUR_PRE_LEAST_SQUARES</a>` (default) - only with a near-zero A11 block and A10 = A01^T; a preconditioner for solving A01^T A00^-1 A01 x = b</font>
<a name="line514">514: </a><font color="#B22222"> is built by approximating the Schur complement with (inv(sqrt(diag(A00))) A01)^T (inv(sqrt(diag(A00))) A01)</font>
<a name="line515">515: </a><font color="#B22222"> and by considering the associated linear least squares problem</font>
<a name="line516">516: </a><font color="#B22222">- `<a href="../manualpages/PC/PCHPDDMSchurPreType.html">PC_HPDDM_SCHUR_PRE_GENEO</a>` - only with A10 = A01^T, `<a href="../manualpages/PC/PCHPDDMSetAuxiliaryMat.html">PCHPDDMSetAuxiliaryMat</a>()` called on the `<a href="../manualpages/PC/PC.html">PC</a>` of the A00 block, and if A11 is nonzero,</font>
<a name="line517">517: </a><font color="#B22222"> then `<a href="../manualpages/PC/PCHPDDMSetAuxiliaryMat.html">PCHPDDMSetAuxiliaryMat</a>()` must be called on the associated `<a href="../manualpages/PC/PC.html">PC</a>` as well (it is built automatically for the</font>
<a name="line518">518: </a><font color="#B22222"> user otherwise); the Schur complement `<a href="../manualpages/PC/PC.html">PC</a>` is set internally to `<a href="../manualpages/PC/PCKSP.html">PCKSP</a>`, with the prefix `-fieldsplit_1_pc_hpddm_`;</font>
<a name="line519">519: </a><font color="#B22222"> the operator associated to the `<a href="../manualpages/PC/PC.html">PC</a>` is spectrally equivalent to the original Schur complement</font>
<a name="line521">521: </a><font color="#B22222"> Level: advanced</font>
<a name="line523">523: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCHPDDM.html">PCHPDDM</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCFIELDSPLIT.html">PCFIELDSPLIT</a>`, `<a href="../manualpages/PC/PCFieldSplitSchurPreType.html">PC_FIELDSPLIT_SCHUR_PRE_SELF</a>`, `<a href="../manualpages/PC/PCFieldSplitSetSchurPre.html">PCFieldSplitSetSchurPre</a>()`, `<a href="../manualpages/PC/PCHPDDMSetAuxiliaryMat.html">PCHPDDMSetAuxiliaryMat</a>()`</font>
<a name="line524">524: </a><font color="#B22222">E*/</font>
<a name="line525">525: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line526">526: </a> <a href="../manualpages/PC/PCHPDDMSchurPreType.html">PC_HPDDM_SCHUR_PRE_LEAST_SQUARES</a>,
<a name="line527">527: </a> <a href="../manualpages/PC/PCHPDDMSchurPreType.html">PC_HPDDM_SCHUR_PRE_GENEO</a>
<a name="line528">528: </a>} <a href="../manualpages/PC/PCHPDDMSchurPreType.html">PCHPDDMSchurPreType</a>;
<a name="line530">530: </a><font color="#B22222">/*E</font>
<a name="line531">531: </a><font color="#B22222"> <a href="../manualpages/PC/PCFailedReason.html">PCFailedReason</a> - indicates the type of `<a href="../manualpages/PC/PC.html">PC</a>` failure. That is why the construction of the preconditioner, `<a href="../manualpages/PC/PCSetUp.html">PCSetUp</a>()`, or its use, `<a href="../manualpages/PC/PCApply.html">PCApply</a>()`, failed</font>
<a name="line533">533: </a><font color="#B22222"> Level: beginner</font>
<a name="line535">535: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCGetFailedReason.html">PCGetFailedReason</a>()`, `<a href="../manualpages/PC/PCSetUp.html">PCSetUp</a>()`</font>
<a name="line536">536: </a><font color="#B22222">E*/</font>
<a name="line537">537: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line538">538: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_SETUP_ERROR</a> = -1,
<a name="line539">539: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_NOERROR</a> = 0,
<a name="line540">540: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_FACTOR_STRUCT_ZEROPIVOT</a> = 1,
<a name="line541">541: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_FACTOR_NUMERIC_ZEROPIVOT</a> = 2,
<a name="line542">542: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_FACTOR_OUTMEMORY</a> = 3,
<a name="line543">543: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_FACTOR_OTHER</a> = 4,
<a name="line544">544: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_INCONSISTENT_RHS</a> = 5,
<a name="line545">545: </a> <a href="../manualpages/PC/PCFailedReason.html">PC_SUBPC_ERROR</a> = 6
<a name="line546">546: </a>} <a href="../manualpages/PC/PCFailedReason.html">PCFailedReason</a>;
<a name="line548">548: </a><font color="#B22222">/*E</font>
<a name="line549">549: </a><font color="#B22222"> <a href="../manualpages/PC/PCGAMGLayoutType.html">PCGAMGLayoutType</a> - Layout for reduced grids for `<a href="../manualpages/PC/PCType.html">PCType</a>` `<a href="../manualpages/PC/PCGAMG.html">PCGAMG</a>`</font>
<a name="line551">551: </a><font color="#B22222"> Level: intermediate</font>
<a name="line553">553: </a><font color="#B22222">.seealso: [](sec_pc), `<a href="../manualpages/PC/PCGAMG.html">PCGAMG</a>`, `<a href="../manualpages/PC/PC.html">PC</a>`, `<a href="../manualpages/PC/PCGAMGSetCoarseGridLayoutType.html">PCGAMGSetCoarseGridLayoutType</a>()`</font>
<a name="line554">554: </a><font color="#B22222">E*/</font>
<a name="line555">555: </a><font color="#4169E1">typedef</font> <font color="#4169E1">enum</font> {
<a name="line556">556: </a> <a href="../manualpages/PC/PCGAMGLayoutType.html">PCGAMG_LAYOUT_COMPACT</a>,
<a name="line557">557: </a> <a href="../manualpages/PC/PCGAMGLayoutType.html">PCGAMG_LAYOUT_SPREAD</a>
<a name="line558">558: </a>} <a href="../manualpages/PC/PCGAMGLayoutType.html">PCGAMGLayoutType</a>;
</pre>
</body>
</html>
|