1f26ada1bSBarry Smith /* 2f26ada1bSBarry Smith Defines the interface functions for the Krylov subspace accelerators. 3f26ada1bSBarry Smith */ 4a4963045SJacob Faibussowitsch #pragma once 5ac09b921SBarry Smith 62c8e378dSBarry Smith #include <petscpc.h> 72eac72dbSBarry Smith 8ac09b921SBarry Smith /* SUBMANSEC = KSP */ 9ac09b921SBarry Smith 10607a6623SBarry Smith PETSC_EXTERN PetscErrorCode KSPInitializePackage(void); 114bf303faSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode KSPFinalizePackage(void); 121dbb0a54SBarry Smith 1328ce4d24SBarry Smith /*S 140b4b7b1cSBarry Smith KSP - Abstract PETSc object that manages the linear solves in PETSc (even those such as direct factorization-based solvers that 150b4b7b1cSBarry Smith do not use Krylov accelerators). 1628ce4d24SBarry Smith 1728ce4d24SBarry Smith Level: beginner 1828ce4d24SBarry Smith 190b4b7b1cSBarry Smith Notes: 20a4d1885cSBarry Smith When a direct solver is used, but no Krylov solver is used, the `KSP` object is still used but with a 2116a05f60SBarry Smith `KSPType` of `KSPPREONLY` (or equivalently `KSPNONE`), meaning that only application of the preconditioner is used as the linear solver. 228f6c3df8SBarry Smith 230b4b7b1cSBarry Smith Use `KSPSetType()` or the options database key `-ksp_type` to set the specific Krylov solver algorithm to use with a given `KSP` object 240b4b7b1cSBarry Smith 250b4b7b1cSBarry Smith The `PC` object is used to control preconditioners in PETSc. 260b4b7b1cSBarry Smith 27789736e1SBarry Smith `KSP` can also be used to solve some least squares problems (over or under-determined linear systems), using, for example, `KSPLSQR`, see `PETSCREGRESSORLINEAR` 28789736e1SBarry Smith for additional methods that can be used to solve least squares problems and other linear regressions). 29789736e1SBarry Smith 301cc06b55SBarry Smith .seealso: [](doc_linsolve), [](ch_ksp), `KSPCreate()`, `KSPSetType()`, `KSPType`, `SNES`, `TS`, `PC`, `KSP`, `KSPDestroy()`, `KSPCG`, `KSPGMRES` 3128ce4d24SBarry Smith S*/ 32e2a1c21fSSatish Balay typedef struct _p_KSP *KSP; 332eac72dbSBarry Smith 3476bdecfbSBarry Smith /*J 350b4b7b1cSBarry Smith KSPType - String with the name of a PETSc Krylov method. These are all the Krylov solvers that PETSc provides. 3628ce4d24SBarry Smith 3728ce4d24SBarry Smith Level: beginner 3828ce4d24SBarry Smith 391cc06b55SBarry Smith .seealso: [](doc_linsolve), [](ch_ksp), `KSPSetType()`, `KSP`, `KSPRegister()`, `KSPCreate()`, `KSPSetFromOptions()` 4076bdecfbSBarry Smith J*/ 4119fd82e9SBarry Smith typedef const char *KSPType; 4282bf6240SBarry Smith #define KSPRICHARDSON "richardson" 436c9de887SHong Zhang #define KSPCHEBYSHEV "chebyshev" 4482bf6240SBarry Smith #define KSPCG "cg" 452c8fc646SJed Brown #define KSPGROPPCG "groppcg" 462c8fc646SJed Brown #define KSPPIPECG "pipecg" 47901ccb91SSiegfried Cools #define KSPPIPECGRR "pipecgrr" 48265663fdSSiegfried Cools #define KSPPIPELCG "pipelcg" 49b21a8899STyler Chen #define KSPPIPEPRCG "pipeprcg" 50325e8391SManasi #define KSPPIPECG2 "pipecg2" 51df2a969aSvictorle #define KSPCGNE "cgne" 5205de396fSBarry Smith #define KSPNASH "nash" 5305de396fSBarry Smith #define KSPSTCG "stcg" 5405de396fSBarry Smith #define KSPGLTR "gltr" 55edd03b47SJacob Faibussowitsch #define KSPCGNASH PETSC_DEPRECATED_MACRO(3, 11, 0, "KSPNASH", ) "nash" 56edd03b47SJacob Faibussowitsch #define KSPCGSTCG PETSC_DEPRECATED_MACRO(3, 11, 0, "KSPSTCG", ) "stcg" 57edd03b47SJacob Faibussowitsch #define KSPCGGLTR PETSC_DEPRECATED_MACRO(3, 11, 0, "KSPSGLTR", ) "gltr" 58640f4f53SPatrick Sanan #define KSPFCG "fcg" 59390d8e47SPatrick Sanan #define KSPPIPEFCG "pipefcg" 6082bf6240SBarry Smith #define KSPGMRES "gmres" 61483d6965SPatrick Sanan #define KSPPIPEFGMRES "pipefgmres" 629dcbbd2bSBarry Smith #define KSPFGMRES "fgmres" 639dcbbd2bSBarry Smith #define KSPLGMRES "lgmres" 644f8e6cd9SSatish Balay #define KSPDGMRES "dgmres" 6561b468f9SJed Brown #define KSPPGMRES "pgmres" 6682bf6240SBarry Smith #define KSPTCQMR "tcqmr" 6782bf6240SBarry Smith #define KSPBCGS "bcgs" 68e1c61ce8SBarry Smith #define KSPIBCGS "ibcgs" 69345ecf0bSXiangmin Jiao #define KSPQMRCGS "qmrcgs" 7018ac38e6SHong Zhang #define KSPFBCGS "fbcgs" 71c2b71004SHong Zhang #define KSPFBCGSR "fbcgsr" 72f0037002Svictorle #define KSPBCGSL "bcgsl" 73f154af2dSSiegfried Cools #define KSPPIPEBCGS "pipebcgs" 7482bf6240SBarry Smith #define KSPCGS "cgs" 7582bf6240SBarry Smith #define KSPTFQMR "tfqmr" 7682bf6240SBarry Smith #define KSPCR "cr" 772c8fc646SJed Brown #define KSPPIPECR "pipecr" 7882bf6240SBarry Smith #define KSPLSQR "lsqr" 7982bf6240SBarry Smith #define KSPPREONLY "preonly" 803c2be86cSBarry Smith #define KSPNONE "none" 8182bf6240SBarry Smith #define KSPQCG "qcg" 82c9cf9b11SBarry Smith #define KSPBICG "bicg" 83b4ac9ba4SBarry Smith #define KSPMINRES "minres" 8401c5daebSSatish Balay #define KSPSYMMLQ "symmlq" 8521356919SSatish Balay #define KSPLCD "lcd" 861d6018f0SLisandro Dalcin #define KSPPYTHON "python" 8758ad63f4SBarry Smith #define KSPGCR "gcr" 88fad47a0aSPatrick Sanan #define KSPPIPEGCR "pipegcr" 89e4d80e07Szianekhodja #define KSPTSIRM "tsirm" 90e4d80e07Szianekhodja #define KSPCGLS "cgls" 91329cd39dSStefano Zampini #define KSPFETIDP "fetidp" 9238cfc46eSPierre Jolivet #define KSPHPDDM "hpddm" 932eac72dbSBarry Smith 948ba1e511SMatthew Knepley /* Logging support */ 95014dd563SJed Brown PETSC_EXTERN PetscClassId KSP_CLASSID; 96ba36735cSStefano Zampini PETSC_EXTERN PetscClassId KSPGUESS_CLASSID; 975358d0d4SBarry Smith PETSC_EXTERN PetscClassId DMKSP_CLASSID; 988ba1e511SMatthew Knepley 99014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPCreate(MPI_Comm, KSP *); 10019fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetType(KSP, KSPType); 101c60c7ad4SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetType(KSP, KSPType *); 102014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetUp(KSP); 103014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetUpOnBlocks(KSP); 104014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSolve(KSP, Vec, Vec); 105014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSolveTranspose(KSP, Vec, Vec); 10675f8e9bdSHong Zhang PETSC_EXTERN PetscErrorCode KSPSetUseExplicitTranspose(KSP, PetscBool); 1075ea7661aSPierre Jolivet PETSC_EXTERN PetscErrorCode KSPMatSolve(KSP, Mat, Mat); 108bbbebc2cSPierre Jolivet PETSC_EXTERN PetscErrorCode KSPMatSolveTranspose(KSP, Mat, Mat); 1093e00ce70SStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetMatSolveBatchSize(KSP, PetscInt); 110edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPSetMatSolveBatchSize()", ) static inline PetscErrorCode KSPSetMatSolveBlockSize(KSP ksp, PetscInt n) 111d71ae5a4SJacob Faibussowitsch { 1129371c9d4SSatish Balay return KSPSetMatSolveBatchSize(ksp, n); 1139371c9d4SSatish Balay } 1143e00ce70SStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetMatSolveBatchSize(KSP, PetscInt *); 115edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPGetMatSolveBatchSize()", ) static inline PetscErrorCode KSPGetMatSolveBlockSize(KSP ksp, PetscInt *n) 116d71ae5a4SJacob Faibussowitsch { 1179371c9d4SSatish Balay return KSPGetMatSolveBatchSize(ksp, n); 1189371c9d4SSatish Balay } 119014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPReset(KSP); 120ef17e8b6SStefano Zampini PETSC_EXTERN PetscErrorCode KSPResetViewers(KSP); 121014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPDestroy(KSP *); 12223ee1639SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetReusePreconditioner(KSP, PetscBool); 1237d85ae06SStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetReusePreconditioner(KSP, PetscBool *); 12425c41539SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetSkipPCSetFromOptions(KSP, PetscBool); 125c0decd05SBarry Smith PETSC_EXTERN PetscErrorCode KSPCheckSolve(KSP, PC, Vec); 1262eac72dbSBarry Smith 127140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList KSPList; 128ba36735cSStefano Zampini PETSC_EXTERN PetscFunctionList KSPGuessList; 129798534f6SMatthew G. Knepley PETSC_EXTERN PetscFunctionList KSPMonitorList; 130798534f6SMatthew G. Knepley PETSC_EXTERN PetscFunctionList KSPMonitorCreateList; 131798534f6SMatthew G. Knepley PETSC_EXTERN PetscFunctionList KSPMonitorDestroyList; 132bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode KSPRegister(const char[], PetscErrorCode (*)(KSP)); 1334d4d2bdcSBarry Smith 1344d4d2bdcSBarry Smith /*S 1354d4d2bdcSBarry Smith KSPMonitorRegisterFn - A function prototype for functions provided to `KSPMonitorRegister()` 1364d4d2bdcSBarry Smith 1374d4d2bdcSBarry Smith Calling Sequence: 1384d4d2bdcSBarry Smith + ksp - iterative solver obtained from `KSPCreate()` 1394d4d2bdcSBarry Smith . it - iteration number 1404d4d2bdcSBarry Smith . rnorm - (estimated) 2-norm of (preconditioned) residual 1414d4d2bdcSBarry Smith - ctx - `PetscViewerAndFormat` object 1424d4d2bdcSBarry Smith 1434d4d2bdcSBarry Smith Level: beginner 1444d4d2bdcSBarry Smith 1454d4d2bdcSBarry Smith Note: 1464d4d2bdcSBarry Smith This is a `KSPMonitorFn` specialized for a context of `PetscViewerAndFormat` 1474d4d2bdcSBarry Smith 1484d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSP`, `KSPMonitorSet()`, `KSPMonitorRegister()`, `KSPMonitorFn`, `KSPMonitorRegisterCreateFn`, `KSPMonitorRegisterDestroyFn` 1494d4d2bdcSBarry Smith S*/ 1504d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPMonitorRegisterFn(KSP ksp, PetscInt it, PetscReal rnorm, PetscViewerAndFormat *ctx); 1514d4d2bdcSBarry Smith 1524d4d2bdcSBarry Smith /*S 1534d4d2bdcSBarry Smith KSPMonitorRegisterCreateFn - A function prototype for functions that do the creation when provided to `KSPMonitorRegister()` 1544d4d2bdcSBarry Smith 1554d4d2bdcSBarry Smith Calling Sequence: 1564d4d2bdcSBarry Smith + viewer - the viewer to be used with the `KSPMonitorRegisterFn` 1574d4d2bdcSBarry Smith . format - the format of the viewer 1584d4d2bdcSBarry Smith . ctx - a context for the monitor 1594d4d2bdcSBarry Smith - result - a `PetscViewerAndFormat` object 1604d4d2bdcSBarry Smith 1614d4d2bdcSBarry Smith Level: beginner 1624d4d2bdcSBarry Smith 1634d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSPMonitorRegisterFn`, `KSP`, `KSPMonitorSet()`, `KSPMonitorRegister()`, `KSPMonitorFn`, `KSPMonitorRegisterDestroyFn` 1644d4d2bdcSBarry Smith S*/ 1654d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPMonitorRegisterCreateFn(PetscViewer viewer, PetscViewerFormat format, void *ctx, PetscViewerAndFormat **result); 1664d4d2bdcSBarry Smith 1674d4d2bdcSBarry Smith /*S 1684d4d2bdcSBarry Smith KSPMonitorRegisterDestroyFn - A function prototype for functions that do the after use destruction when provided to `KSPMonitorRegister()` 1694d4d2bdcSBarry Smith 1704d4d2bdcSBarry Smith Calling Sequence: 1714d4d2bdcSBarry Smith . vf - a `PetscViewerAndFormat` object to be destroyed, including any context 1724d4d2bdcSBarry Smith 1734d4d2bdcSBarry Smith Level: beginner 1744d4d2bdcSBarry Smith 1754d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSPMonitorRegisterFn`, `KSP`, `KSPMonitorSet()`, `KSPMonitorRegister()`, `KSPMonitorFn`, `KSPMonitorRegisterCreateFn` 1764d4d2bdcSBarry Smith S*/ 1774d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPMonitorRegisterDestroyFn(PetscViewerAndFormat **result); 1784d4d2bdcSBarry Smith 1794d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorRegister(const char[], PetscViewerType, PetscViewerFormat, KSPMonitorRegisterFn *, KSPMonitorRegisterCreateFn *, KSPMonitorRegisterDestroyFn *); 18030de9b25SBarry Smith 181014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetPCSide(KSP, PCSide); 182014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetPCSide(KSP, PCSide *); 183014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetTolerances(KSP, PetscReal, PetscReal, PetscReal, PetscInt); 184c60c7ad4SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetTolerances(KSP, PetscReal *, PetscReal *, PetscReal *, PetscInt *); 18525c92fe2SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetMinimumIterations(KSP, PetscInt); 18625c92fe2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetMinimumIterations(KSP, PetscInt *); 187014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetInitialGuessNonzero(KSP, PetscBool); 188014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetInitialGuessNonzero(KSP, PetscBool *); 189014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetErrorIfNotConverged(KSP, PetscBool); 190014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetErrorIfNotConverged(KSP, PetscBool *); 191014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetComputeEigenvalues(KSP, PetscBool); 1927d7fa35eSSylvain Mercier PETSC_EXTERN PetscErrorCode KSPSetComputeRitz(KSP, PetscBool); 193c60c7ad4SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetComputeEigenvalues(KSP, PetscBool *); 194014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetComputeSingularValues(KSP, PetscBool); 195c60c7ad4SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetComputeSingularValues(KSP, PetscBool *); 196014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetRhs(KSP, Vec *); 197014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetSolution(KSP, Vec *); 198014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetResidualNorm(KSP, PetscReal *); 199014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetIterationNumber(KSP, PetscInt *); 200734794cfSBarry Smith PETSC_EXTERN PetscErrorCode KSPGetTotalIterations(KSP, PetscInt *); 2012a7a6963SBarry Smith PETSC_EXTERN PetscErrorCode KSPCreateVecs(KSP, PetscInt, Vec **, PetscInt, Vec **); 202edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 6, 0, "KSPCreateVecs()", ) static inline PetscErrorCode KSPGetVecs(KSP ksp, PetscInt n, Vec **x, PetscInt m, Vec **y) 203d71ae5a4SJacob Faibussowitsch { 2049371c9d4SSatish Balay return KSPCreateVecs(ksp, n, x, m, y); 2059371c9d4SSatish Balay } 2062eac72dbSBarry Smith 2074d4d2bdcSBarry Smith /*S 2084d4d2bdcSBarry Smith KSPPSolveFn - A function prototype for functions provided to `KSPSetPreSolve()` and `KSPSetPostSolve()` 2094d4d2bdcSBarry Smith 2104d4d2bdcSBarry Smith Calling Sequence: 2114d4d2bdcSBarry Smith + ksp - the `KSP` context 2124d4d2bdcSBarry Smith . rhs - the right-hand side vector 2134d4d2bdcSBarry Smith . x - the solution vector 2144d4d2bdcSBarry Smith - ctx - optional context that was provided with `KSPSetPreSolve()` or `KSPSetPostSolve()` 2154d4d2bdcSBarry Smith 2164d4d2bdcSBarry Smith Level: intermediate 2174d4d2bdcSBarry Smith 2184d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSP`, `KSPSetPreSolve()`, `KSPSetPostSolve()`, `PCShellPSolveFn` 2194d4d2bdcSBarry Smith S*/ 2204d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPPSolveFn(KSP ksp, Vec rhs, Vec x, void *ctx); 2214d4d2bdcSBarry Smith 2224d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPSetPreSolve(KSP, KSPPSolveFn *, void *); 2234d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPSetPostSolve(KSP, KSPPSolveFn *, void *); 224d4211eb9SBarry Smith 225014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetPC(KSP, PC); 226014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetPC(KSP, PC *); 2273821be0aSBarry Smith PETSC_EXTERN PetscErrorCode KSPSetNestLevel(KSP, PetscInt); 2283821be0aSBarry Smith PETSC_EXTERN PetscErrorCode KSPGetNestLevel(KSP, PetscInt *); 229aabeff55SBarry Smith 2304d4d2bdcSBarry Smith /*S 2314d4d2bdcSBarry Smith KSPMonitorFn - A function prototype for functions provided to `KSPMonitorSet()` 2324d4d2bdcSBarry Smith 2334d4d2bdcSBarry Smith Calling Sequence: 2344d4d2bdcSBarry Smith + ksp - iterative solver obtained from `KSPCreate()` 2354d4d2bdcSBarry Smith . it - iteration number 2364d4d2bdcSBarry Smith . rnorm - (estimated) 2-norm of (preconditioned) residual 2374d4d2bdcSBarry Smith - ctx - optional monitoring context, as provided with `KSPMonitorSet()` 2384d4d2bdcSBarry Smith 2394d4d2bdcSBarry Smith Level: beginner 2404d4d2bdcSBarry Smith 2414d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSP`, `KSPMonitorSet()` 2424d4d2bdcSBarry Smith S*/ 2434d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPMonitorFn(KSP ksp, PetscInt it, PetscReal rnorm, void *ctx); 2444d4d2bdcSBarry Smith 245014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPMonitor(KSP, PetscInt, PetscReal); 2464d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSet(KSP, KSPMonitorFn *, void *, PetscCtxDestroyFn *); 247014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPMonitorCancel(KSP); 2483ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetMonitorContext(KSP, void *); 24994a4d4ebSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPGetResidualHistory(KSP, const PetscReal *[], PetscInt *); 2506497c311SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetResidualHistory(KSP, PetscReal[], PetscCount, PetscBool); 25194a4d4ebSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPGetErrorHistory(KSP, const PetscReal *[], PetscInt *); 2526497c311SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetErrorHistory(KSP, PetscReal[], PetscCount, PetscBool); 2534b0e389bSBarry Smith 254fa0ddf94SBarry Smith PETSC_EXTERN PetscErrorCode KSPBuildSolutionDefault(KSP, Vec, Vec *); 255fa0ddf94SBarry Smith PETSC_EXTERN PetscErrorCode KSPBuildResidualDefault(KSP, Vec, Vec, Vec *); 256fa0ddf94SBarry Smith PETSC_EXTERN PetscErrorCode KSPDestroyDefault(KSP); 257fa0ddf94SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetWorkVecs(KSP, PetscInt); 258fa0ddf94SBarry Smith 259014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCKSPGetKSP(PC, KSP *); 260cfebe74eSStefano Zampini PETSC_EXTERN PetscErrorCode PCKSPSetKSP(PC, KSP); 261014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCBJacobiGetSubKSP(PC, PetscInt *, PetscInt *, KSP *[]); 262014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCASMGetSubKSP(PC, PetscInt *, PetscInt *, KSP *[]); 263014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCGASMGetSubKSP(PC, PetscInt *, PetscInt *, KSP *[]); 264fb80e629SPablo Brubeck PETSC_EXTERN PetscErrorCode PCPatchGetSubKSP(PC, PetscInt *, KSP *[]); 265014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCFieldSplitGetSubKSP(PC, PetscInt *, KSP *[]); 266285fb4e2SStefano Zampini PETSC_EXTERN PetscErrorCode PCFieldSplitSchurGetSubKSP(PC, PetscInt *, KSP *[]); 267b4876bcbSBarry Smith PETSC_EXTERN PetscErrorCode PCMGGetSmoother(PC, PetscInt, KSP *); 268b4876bcbSBarry Smith PETSC_EXTERN PetscErrorCode PCMGGetSmootherDown(PC, PetscInt, KSP *); 269b4876bcbSBarry Smith PETSC_EXTERN PetscErrorCode PCMGGetSmootherUp(PC, PetscInt, KSP *); 270b4876bcbSBarry Smith PETSC_EXTERN PetscErrorCode PCMGGetCoarseSolve(PC, KSP *); 271014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCGalerkinGetKSP(PC, KSP *); 2724a99276eSJakub Kruzik PETSC_EXTERN PetscErrorCode PCDeflationGetCoarseKSP(PC, KSP *); 2734d4d2bdcSBarry Smith 2744d4d2bdcSBarry Smith /*S 2754d4d2bdcSBarry Smith PCMGCoarseSpaceConstructorFn - A function prototype for functions registered with `PCMGRegisterCoarseSpaceConstructor()` 2764d4d2bdcSBarry Smith 2774d4d2bdcSBarry Smith Calling Sequence: 2784d4d2bdcSBarry Smith + pc - The `PC` object 2794d4d2bdcSBarry Smith . l - The multigrid level, 0 is the coarse level 2804d4d2bdcSBarry Smith . dm - The `DM` for this level 2814d4d2bdcSBarry Smith . smooth - The level smoother 2824d4d2bdcSBarry Smith . Nc - The size of the coarse space 2834d4d2bdcSBarry Smith . initGuess - Basis for an initial guess for the space 2844d4d2bdcSBarry Smith - coarseSp - A basis for the computed coarse space 2854d4d2bdcSBarry Smith 2864d4d2bdcSBarry Smith Level: beginner 2874d4d2bdcSBarry Smith 2884d4d2bdcSBarry Smith .seealso: [](ch_ksp), `PCMGRegisterCoarseSpaceConstructor()`, `PCMGGetCoarseSpaceConstructor()` 2894d4d2bdcSBarry Smith S*/ 2904d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode PCMGCoarseSpaceConstructorFn(PC pc, PetscInt l, DM dm, KSP smooth, PetscInt Nc, Mat initGuess, Mat *coarseSp); 2914d4d2bdcSBarry Smith 292f3b08a26SMatthew G. Knepley PETSC_EXTERN PetscFunctionList PCMGCoarseList; 2934d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCMGRegisterCoarseSpaceConstructor(const char[], PCMGCoarseSpaceConstructorFn *); 2944d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCMGGetCoarseSpaceConstructor(const char[], PCMGCoarseSpaceConstructorFn **); 295f3b08a26SMatthew G. Knepley 296014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBuildSolution(KSP, Vec, Vec *); 297014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBuildResidual(KSP, Vec, Vec, Vec *); 2982eac72dbSBarry Smith 299f2edd1f0SMalachi Phillips /*E 30095bd0b28SBarry Smith KSPChebyshevKind - Which kind of Chebyshev polynomial to use with `KSPCHEBYSHEV` 301f2edd1f0SMalachi Phillips 302f2edd1f0SMalachi Phillips Values: 303f2edd1f0SMalachi Phillips + `KSP_CHEBYSHEV_FIRST` - "classic" first-kind Chebyshev polynomial 304f2edd1f0SMalachi Phillips . `KSP_CHEBYSHEV_FOURTH` - fourth-kind Chebyshev polynomial 305f2edd1f0SMalachi Phillips - `KSP_CHEBYSHEV_OPT_FOURTH` - optimized fourth-kind Chebyshev polynomial 306f2edd1f0SMalachi Phillips 307f2edd1f0SMalachi Phillips Level: intermediate 308f2edd1f0SMalachi Phillips 3091cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPCHEBYSHEV`, `KSPChebyshevSetKind()`, `KSPChebyshevGetKind()` 310f2edd1f0SMalachi Phillips E*/ 311f2edd1f0SMalachi Phillips typedef enum { 312f2edd1f0SMalachi Phillips KSP_CHEBYSHEV_FIRST, 313f2edd1f0SMalachi Phillips KSP_CHEBYSHEV_FOURTH, 314f2edd1f0SMalachi Phillips KSP_CHEBYSHEV_OPT_FOURTH 315f2edd1f0SMalachi Phillips } KSPChebyshevKind; 316f2edd1f0SMalachi Phillips 317014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPRichardsonSetScale(KSP, PetscReal); 318014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPRichardsonSetSelfScale(KSP, PetscBool); 319014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPChebyshevSetEigenvalues(KSP, PetscReal, PetscReal); 32058450487SBarry Smith PETSC_EXTERN PetscErrorCode KSPChebyshevEstEigSet(KSP, PetscReal, PetscReal, PetscReal, PetscReal); 321b65fd476SMark Adams PETSC_EXTERN PetscErrorCode KSPChebyshevEstEigSetUseNoisy(KSP, PetscBool); 322f2edd1f0SMalachi Phillips PETSC_EXTERN PetscErrorCode KSPChebyshevSetKind(KSP, KSPChebyshevKind); 32316a05f60SBarry Smith PETSC_EXTERN PetscErrorCode KSPChebyshevGetKind(KSP, KSPChebyshevKind *); 32458450487SBarry Smith PETSC_EXTERN PetscErrorCode KSPChebyshevEstEigGetKSP(KSP, KSP *); 325014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPComputeExtremeSingularValues(KSP, PetscReal *, PetscReal *); 326d38fc84dSBarry Smith PETSC_EXTERN PetscErrorCode KSPComputeEigenvalues(KSP, PetscInt, PetscReal[], PetscReal[], PetscInt *); 327d38fc84dSBarry Smith PETSC_EXTERN PetscErrorCode KSPComputeEigenvaluesExplicitly(KSP, PetscInt, PetscReal[], PetscReal[]); 3287d7fa35eSSylvain Mercier PETSC_EXTERN PetscErrorCode KSPComputeRitz(KSP, PetscBool, PetscBool, PetscInt *, Vec[], PetscReal[], PetscReal[]); 3294b0e389bSBarry Smith 330640f4f53SPatrick Sanan /*E 331640f4f53SPatrick Sanan 33206137d0aSPatrick Sanan KSPFCDTruncationType - Define how stored directions are used to orthogonalize in flexible conjugate directions (FCD) methods 333640f4f53SPatrick Sanan 33467b8a455SSatish Balay Values: 335a1cb98faSBarry Smith + `KSP_FCD_TRUNC_TYPE_STANDARD` - uses all (up to mmax) stored directions 336a1cb98faSBarry Smith - `KSP_FCD_TRUNC_TYPE_NOTAY` - uses the last max(1,mod(i,mmax)) stored directions at iteration i=0,1.. 337640f4f53SPatrick Sanan 3382b26979fSBarry Smith Level: intermediate 339640f4f53SPatrick Sanan 3401cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPFCG`, `KSPPIPEFCG`, `KSPPIPEGCR`, `KSPFCGSetTruncationType()`, `KSPFCGGetTruncationType()` 341640f4f53SPatrick Sanan E*/ 3429371c9d4SSatish Balay typedef enum { 3439371c9d4SSatish Balay KSP_FCD_TRUNC_TYPE_STANDARD, 3449371c9d4SSatish Balay KSP_FCD_TRUNC_TYPE_NOTAY 3459371c9d4SSatish Balay } KSPFCDTruncationType; 34606137d0aSPatrick Sanan PETSC_EXTERN const char *const KSPFCDTruncationTypes[]; 347640f4f53SPatrick Sanan 348640f4f53SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPFCGSetMmax(KSP, PetscInt); 349640f4f53SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPFCGGetMmax(KSP, PetscInt *); 350640f4f53SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPFCGSetNprealloc(KSP, PetscInt); 351640f4f53SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPFCGGetNprealloc(KSP, PetscInt *); 35206137d0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPFCGSetTruncationType(KSP, KSPFCDTruncationType); 35306137d0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPFCGGetTruncationType(KSP, KSPFCDTruncationType *); 354640f4f53SPatrick Sanan 355390d8e47SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFCGSetMmax(KSP, PetscInt); 356390d8e47SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFCGGetMmax(KSP, PetscInt *); 357390d8e47SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFCGSetNprealloc(KSP, PetscInt); 358390d8e47SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFCGGetNprealloc(KSP, PetscInt *); 359390d8e47SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFCGSetTruncationType(KSP, KSPFCDTruncationType); 360390d8e47SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFCGGetTruncationType(KSP, KSPFCDTruncationType *); 361390d8e47SPatrick Sanan 362fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRSetMmax(KSP, PetscInt); 363fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRGetMmax(KSP, PetscInt *); 364fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRSetNprealloc(KSP, PetscInt); 365fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRGetNprealloc(KSP, PetscInt *); 366fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRSetTruncationType(KSP, KSPFCDTruncationType); 367fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRGetTruncationType(KSP, KSPFCDTruncationType *); 368fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRSetUnrollW(KSP, PetscBool); 369fad47a0aSPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEGCRGetUnrollW(KSP, PetscBool *); 3704d4d2bdcSBarry Smith 3714d4d2bdcSBarry Smith /*S 3724d4d2bdcSBarry Smith KSPFlexibleModifyPCFn - A prototype of a function used to modify the preconditioner during the use of flexible `KSP` methods, such as `KSPFGMRES` 3734d4d2bdcSBarry Smith 3744d4d2bdcSBarry Smith Calling Sequence: 3754d4d2bdcSBarry Smith + ksp - the `KSP` context being used. 3764d4d2bdcSBarry Smith . total_its - the total number of iterations that have occurred. 3774d4d2bdcSBarry Smith . local_its - the number of iterations since last restart if applicable 3784d4d2bdcSBarry Smith . res_norm - the current residual norm 3794d4d2bdcSBarry Smith - ctx - optional context variable set with `KSPFlexibleSetModifyPC()`, `KSPPIPEGCRSetModifyPC()`, `KSPGCRSetModifyPC()`, `KSPFGMRESSetModifyPC()` 3804d4d2bdcSBarry Smith 3814d4d2bdcSBarry Smith Level: beginner 3824d4d2bdcSBarry Smith 3834d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPFlexibleSetModifyPC()`, `KSPPIPEGCRSetModifyPC()`, `KSPGCRSetModifyPC()`, `KSPFGMRESSetModifyPC()` 3844d4d2bdcSBarry Smith S*/ 3854d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPFlexibleModifyPCFn(KSP ksp, PetscInt total_its, PetscInt local_its, PetscReal res_norm, void *ctx); 3864d4d2bdcSBarry Smith 3874d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPFlexibleSetModifyPC(KSP, KSPFlexibleModifyPCFn *, void *, PetscCtxDestroyFn *); 3884d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPPIPEGCRSetModifyPC(KSP, KSPFlexibleModifyPCFn *, void *, PetscCtxDestroyFn *); 38983f0b094SBarry Smith 390014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESSetRestart(KSP, PetscInt); 391014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESGetRestart(KSP, PetscInt *); 392014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESSetHapTol(KSP, PetscReal); 393e3729115SFande Kong PETSC_EXTERN PetscErrorCode KSPGMRESSetBreakdownTolerance(KSP, PetscReal); 3949f236934SBarry Smith 395014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESSetPreAllocateVectors(KSP); 396014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESSetOrthogonalization(KSP, PetscErrorCode (*)(KSP, PetscInt)); 397014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESGetOrthogonalization(KSP, PetscErrorCode (**)(KSP, PetscInt)); 398014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESModifiedGramSchmidtOrthogonalization(KSP, PetscInt); 399014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESClassicalGramSchmidtOrthogonalization(KSP, PetscInt); 4001d73ed98SBarry Smith 401014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPLGMRESSetAugDim(KSP, PetscInt); 402014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPLGMRESSetConstant(KSP); 4031d73ed98SBarry Smith 404483d6965SPatrick Sanan PETSC_EXTERN PetscErrorCode KSPPIPEFGMRESSetShift(KSP, PetscScalar); 405483d6965SPatrick Sanan 406014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGCRSetRestart(KSP, PetscInt); 407014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGCRGetRestart(KSP, PetscInt *); 4084d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPGCRSetModifyPC(KSP, KSPFlexibleModifyPCFn *, void *, PetscCtxDestroyFn *); 40958ad63f4SBarry Smith 410f87a0b54SStefano Zampini PETSC_EXTERN PetscErrorCode KSPMINRESSetRadius(KSP, PetscReal); 411f87a0b54SStefano Zampini PETSC_EXTERN PetscErrorCode KSPMINRESGetUseQLP(KSP, PetscBool *); 412f87a0b54SStefano Zampini PETSC_EXTERN PetscErrorCode KSPMINRESSetUseQLP(KSP, PetscBool); 413f87a0b54SStefano Zampini 41404d8bde8SStefano Zampini PETSC_EXTERN PetscErrorCode KSPFETIDPGetInnerBDDC(KSP, PC *); 41504d8bde8SStefano Zampini PETSC_EXTERN PetscErrorCode KSPFETIDPSetInnerBDDC(KSP, PC); 41604d8bde8SStefano Zampini PETSC_EXTERN PetscErrorCode KSPFETIDPGetInnerKSP(KSP, KSP *); 417568c15deSstefano_zampini PETSC_EXTERN PetscErrorCode KSPFETIDPSetPressureOperator(KSP, Mat); 418e82af88dSprj- 4196cac28cbSPierre Jolivet PETSC_EXTERN PetscErrorCode KSPHPDDMSetDeflationMat(KSP, Mat); 4206cac28cbSPierre Jolivet PETSC_EXTERN PetscErrorCode KSPHPDDMGetDeflationMat(KSP, Mat *); 4216cac28cbSPierre Jolivet #if PetscDefined(HAVE_HPDDM) 422edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 18, 0, "KSPHPDDMSetDeflationMat()", ) static inline PetscErrorCode KSPHPDDMSetDeflationSpace(KSP ksp, Mat U) 423d71ae5a4SJacob Faibussowitsch { 4249371c9d4SSatish Balay return KSPHPDDMSetDeflationMat(ksp, U); 4259371c9d4SSatish Balay } 426edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 18, 0, "KSPHPDDMGetDeflationMat()", ) static inline PetscErrorCode KSPHPDDMGetDeflationSpace(KSP ksp, Mat *U) 427d71ae5a4SJacob Faibussowitsch { 4289371c9d4SSatish Balay return KSPHPDDMGetDeflationMat(ksp, U); 4299371c9d4SSatish Balay } 4306cac28cbSPierre Jolivet #endif 431edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 14, 0, "KSPMatSolve()", ) static inline PetscErrorCode KSPHPDDMMatSolve(KSP ksp, Mat B, Mat X) 432d71ae5a4SJacob Faibussowitsch { 4339371c9d4SSatish Balay return KSPMatSolve(ksp, B, X); 4349371c9d4SSatish Balay } 435d55ab951SPierre Jolivet /*E 43687497f52SBarry Smith KSPHPDDMType - Type of Krylov method used by `KSPHPDDM` 437d55ab951SPierre Jolivet 438d55ab951SPierre Jolivet Values: 439a4d1885cSBarry Smith + `KSP_HPDDM_TYPE_GMRES` (default) - Generalized Minimal Residual method 440a4d1885cSBarry Smith . `KSP_HPDDM_TYPE_BGMRES` - block GMRES 441a4d1885cSBarry Smith . `KSP_HPDDM_TYPE_CG` - Conjugate Gradient 442a4d1885cSBarry Smith . `KSP_HPDDM_TYPE_BCG` - block CG 443a4d1885cSBarry Smith . `KSP_HPDDM_TYPE_GCRODR` - Generalized Conjugate Residual method with inner Orthogonalization and Deflated Restarting 444a4d1885cSBarry Smith . `KSP_HPDDM_TYPE_BGCRODR` - block GCRODR 445a4d1885cSBarry Smith . `KSP_HPDDM_TYPE_BFBCG` - breakdown-free BCG 446a4d1885cSBarry Smith - `KSP_HPDDM_TYPE_PREONLY` - apply the preconditioner only 447d55ab951SPierre Jolivet 44816a05f60SBarry Smith Level: intermediate 44916a05f60SBarry Smith 4501cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPHPDDM`, `KSPHPDDMSetType()` 451d55ab951SPierre Jolivet E*/ 452d55ab951SPierre Jolivet typedef enum { 453d55ab951SPierre Jolivet KSP_HPDDM_TYPE_GMRES = 0, 454d55ab951SPierre Jolivet KSP_HPDDM_TYPE_BGMRES = 1, 455d55ab951SPierre Jolivet KSP_HPDDM_TYPE_CG = 2, 456d55ab951SPierre Jolivet KSP_HPDDM_TYPE_BCG = 3, 457d55ab951SPierre Jolivet KSP_HPDDM_TYPE_GCRODR = 4, 458d55ab951SPierre Jolivet KSP_HPDDM_TYPE_BGCRODR = 5, 459d55ab951SPierre Jolivet KSP_HPDDM_TYPE_BFBCG = 6, 460d55ab951SPierre Jolivet KSP_HPDDM_TYPE_PREONLY = 7 461d55ab951SPierre Jolivet } KSPHPDDMType; 462d55ab951SPierre Jolivet PETSC_EXTERN const char *const KSPHPDDMTypes[]; 463a4d1885cSBarry Smith 4642dd49c90SPierre Jolivet /*E 46587497f52SBarry Smith KSPHPDDMPrecision - Precision of Krylov bases used by `KSPHPDDM` 4662dd49c90SPierre Jolivet 4672dd49c90SPierre Jolivet Values: 468a4d1885cSBarry Smith + `KSP_HPDDM_PRECISION_HALF` - default when PETSc is configured `--with-precision=__fp16` 469a4d1885cSBarry Smith . `KSP_HPDDM_PRECISION_SINGLE` - default when PETSc is configured `--with-precision=single` 470a4d1885cSBarry Smith . `KSP_HPDDM_PRECISION_DOUBLE` - default when PETSc is configured `--with-precision=double` 471a4d1885cSBarry Smith - `KSP_HPDDM_PRECISION_QUADRUPLE` - default when PETSc is configured `--with-precision=__float128` 4722dd49c90SPierre Jolivet 47316a05f60SBarry Smith Level: intermediate 47416a05f60SBarry Smith 4751cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPHPDDM` 4762dd49c90SPierre Jolivet E*/ 4772dd49c90SPierre Jolivet typedef enum { 4782dd49c90SPierre Jolivet KSP_HPDDM_PRECISION_HALF = 0, 4792dd49c90SPierre Jolivet KSP_HPDDM_PRECISION_SINGLE = 1, 4802dd49c90SPierre Jolivet KSP_HPDDM_PRECISION_DOUBLE = 2, 4812dd49c90SPierre Jolivet KSP_HPDDM_PRECISION_QUADRUPLE = 3 4822dd49c90SPierre Jolivet } KSPHPDDMPrecision; 483d55ab951SPierre Jolivet PETSC_EXTERN PetscErrorCode KSPHPDDMSetType(KSP, KSPHPDDMType); 484d55ab951SPierre Jolivet PETSC_EXTERN PetscErrorCode KSPHPDDMGetType(KSP, KSPHPDDMType *); 485e82af88dSprj- 486b49fd9e1SBarry Smith /*E 48716a05f60SBarry Smith KSPGMRESCGSRefinementType - How the classical (unmodified) Gram-Schmidt is performed in the GMRES solvers 488b49fd9e1SBarry Smith 489a4d1885cSBarry Smith Values: 490a4d1885cSBarry Smith + `KSP_GMRES_CGS_REFINE_NEVER` - one step of classical Gram-Schmidt 491a4d1885cSBarry Smith . `KSP_GMRES_CGS_REFINE_IFNEEDED` - a second step is performed if the first step does not satisfy some criteria 492a4d1885cSBarry Smith - `KSP_GMRES_CGS_REFINE_ALWAYS` - always perform two steps 493b49fd9e1SBarry Smith 49416a05f60SBarry Smith Level: advanced 49516a05f60SBarry Smith 49695bd0b28SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPGMRES`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 497a4d1885cSBarry Smith `KSPGMRESGetOrthogonalization()`, 498a4d1885cSBarry Smith `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSPGMRESModifiedGramSchmidtOrthogonalization()` 499b49fd9e1SBarry Smith E*/ 5009371c9d4SSatish Balay typedef enum { 5019371c9d4SSatish Balay KSP_GMRES_CGS_REFINE_NEVER, 5029371c9d4SSatish Balay KSP_GMRES_CGS_REFINE_IFNEEDED, 5039371c9d4SSatish Balay KSP_GMRES_CGS_REFINE_ALWAYS 5049371c9d4SSatish Balay } KSPGMRESCGSRefinementType; 5056a6fc655SJed Brown PETSC_EXTERN const char *const KSPGMRESCGSRefinementTypes[]; 50616a05f60SBarry Smith 5071f7e983dSSatish Balay /*MC 5081957e957SBarry Smith KSP_GMRES_CGS_REFINE_NEVER - Do the classical (unmodified) Gram-Schmidt process 5098c5b8ba0SBarry Smith 5108c5b8ba0SBarry Smith Level: advanced 5118c5b8ba0SBarry Smith 51287497f52SBarry Smith Note: 51387497f52SBarry Smith Possibly unstable, but the fastest to compute 5148c5b8ba0SBarry Smith 51595bd0b28SBarry Smith .seealso: [](ch_ksp), `KSPGMRES`, `KSPGMRESCGSRefinementType`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 516a4d1885cSBarry Smith `KSP`, `KSPGMRESGetOrthogonalization()`, 517db781477SPatrick Sanan `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSP_GMRES_CGS_REFINE_IFNEEDED`, `KSP_GMRES_CGS_REFINE_ALWAYS`, 518db781477SPatrick Sanan `KSPGMRESModifiedGramSchmidtOrthogonalization()` 5198c5b8ba0SBarry Smith M*/ 5208c5b8ba0SBarry Smith 5211f7e983dSSatish Balay /*MC 5228c5b8ba0SBarry Smith KSP_GMRES_CGS_REFINE_IFNEEDED - Do the classical (unmodified) Gram-Schmidt process and one step of 5238c5b8ba0SBarry Smith iterative refinement if an estimate of the orthogonality of the resulting vectors indicates 5248c5b8ba0SBarry Smith poor orthogonality. 5258c5b8ba0SBarry Smith 5268c5b8ba0SBarry Smith Level: advanced 5278c5b8ba0SBarry Smith 528a4d1885cSBarry Smith Note: 529a4d1885cSBarry Smith This is slower than `KSP_GMRES_CGS_REFINE_NEVER` because it requires an extra norm computation to 5308c5b8ba0SBarry Smith estimate the orthogonality but is more stable. 5318c5b8ba0SBarry Smith 53295bd0b28SBarry Smith .seealso: [](ch_ksp), `KSPGMRES`, `KSPGMRESCGSRefinementType`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 533a4d1885cSBarry Smith `KSP`, `KSPGMRESGetOrthogonalization()`, 534db781477SPatrick Sanan `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSP_GMRES_CGS_REFINE_NEVER`, `KSP_GMRES_CGS_REFINE_ALWAYS`, 535db781477SPatrick Sanan `KSPGMRESModifiedGramSchmidtOrthogonalization()` 5368c5b8ba0SBarry Smith M*/ 5378c5b8ba0SBarry Smith 5381f7e983dSSatish Balay /*MC 53916a05f60SBarry Smith KSP_GMRES_CGS_REFINE_ALWAYS - Do two steps of the classical (unmodified) Gram-Schmidt process. 5408c5b8ba0SBarry Smith 5418c5b8ba0SBarry Smith Level: advanced 5428c5b8ba0SBarry Smith 54387497f52SBarry Smith Notes: 54487497f52SBarry Smith This is roughly twice the cost of `KSP_GMRES_CGS_REFINE_NEVER` because it performs the process twice 54587497f52SBarry Smith but it saves the extra norm calculation needed by `KSP_GMRES_CGS_REFINE_IFNEEDED`. 5468c5b8ba0SBarry Smith 5478c5b8ba0SBarry Smith You should only use this if you absolutely know that the iterative refinement is needed. 5488c5b8ba0SBarry Smith 54995bd0b28SBarry Smith .seealso: [](ch_ksp), `KSPGMRES`, `KSPGMRESCGSRefinementType`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 550a4d1885cSBarry Smith `KSP`, `KSPGMRESGetOrthogonalization()`, 551db781477SPatrick Sanan `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSP_GMRES_CGS_REFINE_IFNEEDED`, `KSP_GMRES_CGS_REFINE_ALWAYS`, 552db781477SPatrick Sanan `KSPGMRESModifiedGramSchmidtOrthogonalization()` 5538c5b8ba0SBarry Smith M*/ 5548c5b8ba0SBarry Smith 555014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESSetCGSRefinementType(KSP, KSPGMRESCGSRefinementType); 556014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESGetCGSRefinementType(KSP, KSPGMRESCGSRefinementType *); 55708480c60SBarry Smith 5584d4d2bdcSBarry Smith PETSC_EXTERN KSPFlexibleModifyPCFn KSPFGMRESModifyPCNoChange; 5594d4d2bdcSBarry Smith PETSC_EXTERN KSPFlexibleModifyPCFn KSPFGMRESModifyPCKSP; 5604d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPFGMRESSetModifyPC(KSP, KSPFlexibleModifyPCFn *, void *, PetscCtxDestroyFn *); 561c38d4ed2SBarry Smith 562014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPQCGSetTrustRegionRadius(KSP, PetscReal); 563014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPQCGGetQuadratic(KSP, PetscReal *); 564014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPQCGGetTrialStepNorm(KSP, PetscReal *); 565121fd945SKris Buschelman 566014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetXRes(KSP, PetscReal); 567014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetPol(KSP, PetscBool); 568014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetEll(KSP, PetscInt); 569e4b508b2SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetUsePseudoinverse(KSP, PetscBool); 570d9492815SBarry Smith 571014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetFromOptions(KSP); 57287d6299eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPResetFromOptions(KSP); 5732eac72dbSBarry Smith 574798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPMonitorSetFromOptions(KSP, const char[], const char[], void *); 5754d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidual; 576*52e0830fSMatthew Knepley PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualView; 577*52e0830fSMatthew Knepley PETSC_DEPRECATED_FUNCTION(3, 23, 0, "KSPMonitorResidualDraw()", ) static inline PetscErrorCode KSPMonitorResidualDraw(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 578*52e0830fSMatthew Knepley { 579*52e0830fSMatthew Knepley return KSPMonitorResidualView(ksp, n, rnorm, vf); 580*52e0830fSMatthew Knepley } 5814d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualDrawLG; 582798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPMonitorResidualDrawLGCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 5834d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualShort; 5844d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualRange; 5854d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidual; 586*52e0830fSMatthew Knepley PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidualView; 587*52e0830fSMatthew Knepley PETSC_DEPRECATED_FUNCTION(3, 23, 0, "KSPMonitorTrueResidualDraw()", ) static inline PetscErrorCode KSPMonitorTrueResidualDraw(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 588*52e0830fSMatthew Knepley { 589*52e0830fSMatthew Knepley return KSPMonitorTrueResidualView(ksp, n, rnorm, vf); 590*52e0830fSMatthew Knepley } 5914d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidualDrawLG; 592798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPMonitorTrueResidualDrawLGCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 5934d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidualMax; 5944d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorError; 5954d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorErrorDraw; 5964d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorErrorDrawLG; 597798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPMonitorErrorDrawLGCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 5984d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSolution; 5994d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSolutionDraw; 6004d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSolutionDrawLG; 601798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPMonitorSolutionDrawLGCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 6024d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSingularValue; 603798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPMonitorSingularValueCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 604edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPMonitorResidual()", ) static inline PetscErrorCode KSPMonitorDefault(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 605d71ae5a4SJacob Faibussowitsch { 6069371c9d4SSatish Balay return KSPMonitorResidual(ksp, n, rnorm, vf); 6079371c9d4SSatish Balay } 608edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPMonitorTrueResidual()", ) static inline PetscErrorCode KSPMonitorTrueResidualNorm(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 609d71ae5a4SJacob Faibussowitsch { 6109371c9d4SSatish Balay return KSPMonitorTrueResidual(ksp, n, rnorm, vf); 6119371c9d4SSatish Balay } 612edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPMonitorTrueResidualMax()", ) static inline PetscErrorCode KSPMonitorTrueResidualMaxNorm(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 613d71ae5a4SJacob Faibussowitsch { 6149371c9d4SSatish Balay return KSPMonitorTrueResidualMax(ksp, n, rnorm, vf); 6159371c9d4SSatish Balay } 616798534f6SMatthew G. Knepley 617798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPGMRESMonitorKrylov(KSP, PetscInt, PetscReal, void *); 618341b8579SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicTolerance(KSP, PetscInt, PetscReal, void *); 619341b8579SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicToleranceDestroy(void **); 620341b8579SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicToleranceCreate(void *); 621341b8579SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicToleranceSetCoefficient(void *, PetscReal); 622e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSAWs(KSP, PetscInt, PetscReal, void *); 623e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSAWsCreate(KSP, void **); 624e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSAWsDestroy(void **); 62584cb2905SBarry Smith 626014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPUnwindPreconditioner(KSP, Vec, Vec); 627014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPInitialResidual(KSP, Vec, Vec, Vec, Vec, Vec); 628c01c455dSBarry Smith 62923ee1639SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetOperators(KSP, Mat, Mat); 63023ee1639SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetOperators(KSP, Mat *, Mat *); 631014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetOperatorsSet(KSP, PetscBool *, PetscBool *); 632014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetOptionsPrefix(KSP, const char[]); 633014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPAppendOptionsPrefix(KSP, const char[]); 634014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetOptionsPrefix(KSP, const char *[]); 6351eb62cbbSBarry Smith 636014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDiagonalScale(KSP, PetscBool); 637014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetDiagonalScale(KSP, PetscBool *); 638014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDiagonalScaleFix(KSP, PetscBool); 639014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetDiagonalScaleFix(KSP, PetscBool *); 6401f7f0c4fSBarry Smith 6414d4d2bdcSBarry Smith /*S 6424d4d2bdcSBarry Smith KSPConvergedReasonViewFn - A prototype of a function used with `KSPConvergedReasonViewSet()` 6434d4d2bdcSBarry Smith 6444d4d2bdcSBarry Smith Calling Sequence: 6454d4d2bdcSBarry Smith + ksp - the `KSP` object whose `KSPConvergedReason` is to be viewed 6464d4d2bdcSBarry Smith - ctx - context used by the function, set with `KSPConvergedReasonViewSet()` 6474d4d2bdcSBarry Smith 6484d4d2bdcSBarry Smith Level: beginner 6494d4d2bdcSBarry Smith 6504d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPConvergedReasonView()`, `KSPConvergedReasonViewSet()`, `KSPConvergedReasonViewFromOptions()`, `KSPView()` 6514d4d2bdcSBarry Smith S*/ 6524d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPConvergedReasonViewFn(KSP ksp, void *ctx); 6534d4d2bdcSBarry Smith 654014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPView(KSP, PetscViewer); 65555849f57SBarry Smith PETSC_EXTERN PetscErrorCode KSPLoad(KSP, PetscViewer); 656fe2efc57SMark PETSC_EXTERN PetscErrorCode KSPViewFromOptions(KSP, PetscObject, const char[]); 65719a666eeSBarry Smith PETSC_EXTERN PetscErrorCode KSPConvergedReasonView(KSP, PetscViewer); 6584d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPConvergedReasonViewSet(KSP, KSPConvergedReasonViewFn *, void *, PetscCtxDestroyFn *); 6591b2b9847SBarry Smith PETSC_EXTERN PetscErrorCode KSPConvergedReasonViewFromOptions(KSP); 660c4421ceaSFande Kong PETSC_EXTERN PetscErrorCode KSPConvergedReasonViewCancel(KSP); 66194a4d4ebSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPConvergedRateView(KSP, PetscViewer); 6621b2b9847SBarry Smith 663edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 14, 0, "KSPConvergedReasonView()", ) static inline PetscErrorCode KSPReasonView(KSP ksp, PetscViewer v) 664d71ae5a4SJacob Faibussowitsch { 6659371c9d4SSatish Balay return KSPConvergedReasonView(ksp, v); 6669371c9d4SSatish Balay } 667edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 14, 0, "KSPConvergedReasonViewFromOptions()", ) static inline PetscErrorCode KSPReasonViewFromOptions(KSP ksp) 668d71ae5a4SJacob Faibussowitsch { 6699371c9d4SSatish Balay return KSPConvergedReasonViewFromOptions(ksp); 6709371c9d4SSatish Balay } 67155849f57SBarry Smith 67255849f57SBarry Smith #define KSP_FILE_CLASSID 1211223 6731eb62cbbSBarry Smith 674dcc87044SVaclav Hapla PETSC_EXTERN PetscErrorCode KSPLSQRSetExactMatNorm(KSP, PetscBool); 6750e827bf4SVaclav Hapla PETSC_EXTERN PetscErrorCode KSPLSQRSetComputeStandardErrorVec(KSP, PetscBool); 676014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPLSQRGetStandardErrorVec(KSP, Vec *); 677884807c7SVaclav Hapla PETSC_EXTERN PetscErrorCode KSPLSQRGetNorms(KSP, PetscReal *, PetscReal *); 6784d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPLSQRMonitorResidual; 6794d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPLSQRMonitorResidualDrawLG; 680798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPLSQRMonitorResidualDrawLGCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 681db9b2ab1SHong Zhang 682014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCRedundantGetKSP(PC, KSP *); 683014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCRedistributeGetKSP(PC, KSP *); 68468ddcbeaSBarry Smith PETSC_EXTERN PetscErrorCode PCTelescopeGetKSP(PC, KSP *); 6859f0612e4SBarry Smith PETSC_EXTERN PetscErrorCode PCMPIGetKSP(PC, KSP *); 68683ab6a24SBarry Smith 68728ce4d24SBarry Smith /*E 688a4d1885cSBarry Smith KSPNormType - Norm calculated by the `KSP` and passed in the Krylov convergence 6898a4b9c5cSBarry Smith test routines. 6908a4b9c5cSBarry Smith 691a4d1885cSBarry Smith Values: 692a4d1885cSBarry Smith + `KSP_NORM_DEFAULT` - use the default for the current `KSPType` 693a4d1885cSBarry Smith . `KSP_NORM_NONE` - use no norm calculation 694a4d1885cSBarry Smith . `KSP_NORM_PRECONDITIONED` - use the preconditioned residual norm 695a4d1885cSBarry Smith . `KSP_NORM_UNPRECONDITIONED` - use the unpreconditioned residual norm 696a4d1885cSBarry Smith - `KSP_NORM_NATURAL` - use the natural norm (the norm induced by the linear operator) 697a4d1885cSBarry Smith 6988a4b9c5cSBarry Smith Level: advanced 6998a4b9c5cSBarry Smith 700a4d1885cSBarry Smith Note: 701a3f661c8SBarry Smith Each solver only supports a subset of these and some may support different ones 70216a05f60SBarry Smith depending on whether left or right preconditioning is used, see `KSPSetPCSide()` 703a3f661c8SBarry Smith 7041cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `PCSide`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPSetNormType()`, 70595bd0b28SBarry Smith `KSPSetConvergenceTest()`, `KSPSetPCSide()`, `KSP_NORM_DEFAULT`, `KSP_NORM_NONE`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_UNPRECONDITIONED`, `KSP_NORM_NATURAL` 7068a4b9c5cSBarry Smith E*/ 7079371c9d4SSatish Balay typedef enum { 7089371c9d4SSatish Balay KSP_NORM_DEFAULT = -1, 7099371c9d4SSatish Balay KSP_NORM_NONE = 0, 7109371c9d4SSatish Balay KSP_NORM_PRECONDITIONED = 1, 7119371c9d4SSatish Balay KSP_NORM_UNPRECONDITIONED = 2, 7129371c9d4SSatish Balay KSP_NORM_NATURAL = 3 7139371c9d4SSatish Balay } KSPNormType; 7149e568555SJed Brown #define KSP_NORM_MAX (KSP_NORM_NATURAL + 1) 715014dd563SJed Brown PETSC_EXTERN const char *const *const KSPNormTypes; 716a21b2a99SBarry Smith 7171f7e983dSSatish Balay /*MC 7189793b452SBarry Smith KSP_NORM_NONE - Do not compute a norm during the Krylov process. This will 7198c5b8ba0SBarry Smith possibly save some computation but means the convergence test cannot 7208c5b8ba0SBarry Smith be based on a norm of a residual etc. 7218c5b8ba0SBarry Smith 7228c5b8ba0SBarry Smith Level: advanced 7238c5b8ba0SBarry Smith 724a4d1885cSBarry Smith Note: 725a4d1885cSBarry Smith Some Krylov methods need to compute a residual norm (such as `KPSGMRES`) and then this option is ignored 7268c5b8ba0SBarry Smith 7271cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_UNPRECONDITIONED`, `KSP_NORM_NATURAL` 7288c5b8ba0SBarry Smith M*/ 7298c5b8ba0SBarry Smith 7301f7e983dSSatish Balay /*MC 7311957e957SBarry Smith KSP_NORM_PRECONDITIONED - Compute the norm of the preconditioned residual B*(b - A*x), if left preconditioning, and pass that to the 7328c5b8ba0SBarry Smith convergence test routine. 7338c5b8ba0SBarry Smith 7348c5b8ba0SBarry Smith Level: advanced 7358c5b8ba0SBarry Smith 7361cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_NONE`, `KSP_NORM_UNPRECONDITIONED`, `KSP_NORM_NATURAL`, `KSPSetConvergenceTest()` 7378c5b8ba0SBarry Smith M*/ 7388c5b8ba0SBarry Smith 7391f7e983dSSatish Balay /*MC 740ce9499c7SBarry Smith KSP_NORM_UNPRECONDITIONED - Compute the norm of the true residual (b - A*x) and pass that to the 7418c5b8ba0SBarry Smith convergence test routine. 7428c5b8ba0SBarry Smith 7438c5b8ba0SBarry Smith Level: advanced 7448c5b8ba0SBarry Smith 7451cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_NONE`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_NATURAL`, `KSPSetConvergenceTest()` 7468c5b8ba0SBarry Smith M*/ 7478c5b8ba0SBarry Smith 7481f7e983dSSatish Balay /*MC 749ce9499c7SBarry Smith KSP_NORM_NATURAL - Compute the 'natural norm' of residual sqrt((b - A*x)*B*(b - A*x)) and pass that to the 75087497f52SBarry Smith convergence test routine. This is only supported by `KSPCG`, `KSPCR`, `KSPCGNE`, `KSPCGS`, `KSPFCG`, `KSPPIPEFCG`, `KSPPIPEGCR` 7518c5b8ba0SBarry Smith 7528c5b8ba0SBarry Smith Level: advanced 7538c5b8ba0SBarry Smith 7541cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_NONE`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_UNPRECONDITIONED`, `KSPSetConvergenceTest()` 7558c5b8ba0SBarry Smith M*/ 7568c5b8ba0SBarry Smith 757014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetNormType(KSP, KSPNormType); 758014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetNormType(KSP, KSPNormType *); 759ce78bad3SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetSupportedNorm(KSP, KSPNormType, PCSide, PetscInt); 760014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetCheckNormIteration(KSP, PetscInt); 761014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetLagNorm(KSP, PetscBool); 7628a4b9c5cSBarry Smith 763edd03b47SJacob Faibussowitsch #define KSP_CONVERGED_CG_NEG_CURVE_DEPRECATED KSP_CONVERGED_CG_NEG_CURVE PETSC_DEPRECATED_ENUM(3, 19, 0, "KSP_CONVERGED_NEG_CURVE", ) 764edd03b47SJacob Faibussowitsch #define KSP_CONVERGED_CG_CONSTRAINED_DEPRECATED KSP_CONVERGED_CG_CONSTRAINED PETSC_DEPRECATED_ENUM(3, 19, 0, "KSP_CONVERGED_STEP_LENGTH", ) 765b5c1ed96SAlexander #define KSP_CONVERGED_RTOL_NORMAL_DEPRECATED KSP_CONVERGED_RTOL_NORMAL PETSC_DEPRECATED_ENUM(3, 24, 0, "KSP_CONVERGED_RTOL_NORMAL_EQUATIONS", ) 766b5c1ed96SAlexander #define KSP_CONVERGED_ATOL_NORMAL_DEPRECATED KSP_CONVERGED_ATOL_NORMAL PETSC_DEPRECATED_ENUM(3, 24, 0, "KSP_CONVERGED_ATOL_NORMAL_EQUATIONS", ) 7678a4b9c5cSBarry Smith /*E 768a4d1885cSBarry Smith KSPConvergedReason - reason a Krylov method was determined to have converged or diverged 76928ce4d24SBarry Smith 770a4d1885cSBarry Smith Values: 77178daaec8SBarry Smith + `KSP_CONVERGED_RTOL_NORMAL_EQUATIONS` - requested decrease in the residual of the normal equations, for `KSPLSQR` 77278daaec8SBarry Smith . `KSP_CONVERGED_ATOL_NORMAL_EQUATIONS` - requested absolute value in the residual of the normal equations, for `KSPLSQR` 773a4d1885cSBarry Smith . `KSP_CONVERGED_RTOL` - requested decrease in the residual 774a4d1885cSBarry Smith . `KSP_CONVERGED_ATOL` - requested absolute value in the residual 775a4d1885cSBarry Smith . `KSP_CONVERGED_ITS` - requested number of iterations 7764a221d59SStefano Zampini . `KSP_CONVERGED_NEG_CURVE` - see note below 777a4d1885cSBarry Smith . `KSP_CONVERGED_STEP_LENGTH` - see note below 7786e7835fbSStefano Zampini . `KSP_CONVERGED_HAPPY_BREAKDOWN` - happy breakdown (meaning early convergence of the `KSPType` occurred). 779cc8c0b42SAlex Lindsay . `KSP_CONVERGED_USER` - the user has indicated convergence for an arbitrary reason 78078daaec8SBarry Smith . `KSP_DIVERGED_NULL` - breakdown when solving the Hessenberg system within `KSPGMRES` 781a4d1885cSBarry Smith . `KSP_DIVERGED_ITS` - requested number of iterations 78278daaec8SBarry Smith . `KSP_DIVERGED_DTOL` - large increase in the residual norm indicating the solution is diverging 783a4d1885cSBarry Smith . `KSP_DIVERGED_BREAKDOWN` - breakdown in the Krylov method 7848f47816eSPierre Jolivet . `KSP_DIVERGED_BREAKDOWN_BICG` - breakdown in the `KSPBCGS` Krylov method 785a4d1885cSBarry Smith . `KSP_DIVERGED_NONSYMMETRIC` - the operator or preonditioner was not symmetric for a `KSPType` that requires symmetry 78678daaec8SBarry Smith . `KSP_DIVERGED_INDEFINITE_PC` - the preconditioner was indefinite for a `KSPType` that requires it be definite, such as `KSPCG` 787a4d1885cSBarry Smith . `KSP_DIVERGED_NANORINF` - a not a number of infinity was detected in a vector during the computation 78878daaec8SBarry Smith . `KSP_DIVERGED_INDEFINITE_MAT` - the operator was indefinite for a `KSPType` that requires it be definite, such as `KSPCG` 789cc8c0b42SAlex Lindsay . `KSP_DIVERGED_PC_FAILED` - the action of the preconditioner failed for some reason 790cc8c0b42SAlex Lindsay - `KSP_DIVERGED_USER` - the user has indicated divergence for an arbitrary reason 791a4d1885cSBarry Smith 79216a05f60SBarry Smith Level: beginner 79316a05f60SBarry Smith 794a4d1885cSBarry Smith Note: 7956e7835fbSStefano Zampini The values `KSP_CONVERGED_NEG_CURVE`, and `KSP_CONVERGED_STEP_LENGTH` are returned only by `KSPCG`, `KSPMINRES` and by 7966e7835fbSStefano Zampini the special `KSPNASH`, `KSPSTCG`, and `KSPGLTR` solvers which are used by the `SNESNEWTONTR` (trust region) solver. 79728ce4d24SBarry Smith 79895bd0b28SBarry Smith Developer Note: 79987497f52SBarry Smith The string versions of these are `KSPConvergedReasons`; if you change 8004d0a8057SBarry Smith any of the values here also change them that array of names. 80186c02ca4SBarry Smith 8021cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPSetTolerances()`, `KSPConvergedReasonView()` 80328ce4d24SBarry Smith E*/ 804d15094e1SBarry Smith typedef enum { /* converged */ 80578daaec8SBarry Smith KSP_CONVERGED_RTOL_NORMAL_DEPRECATED = 1, 80678daaec8SBarry Smith KSP_CONVERGED_RTOL_NORMAL_EQUATIONS = 1, 80778daaec8SBarry Smith KSP_CONVERGED_ATOL_NORMAL_DEPRECATED = 9, 80878daaec8SBarry Smith KSP_CONVERGED_ATOL_NORMAL_EQUATIONS = 9, 809d15094e1SBarry Smith KSP_CONVERGED_RTOL = 2, 810d15094e1SBarry Smith KSP_CONVERGED_ATOL = 3, 811b335793eSSatish Balay KSP_CONVERGED_ITS = 4, 8124a221d59SStefano Zampini KSP_CONVERGED_NEG_CURVE = 5, 8134a221d59SStefano Zampini KSP_CONVERGED_CG_NEG_CURVE_DEPRECATED = 5, 8144a221d59SStefano Zampini KSP_CONVERGED_CG_CONSTRAINED_DEPRECATED = 6, 8154a221d59SStefano Zampini KSP_CONVERGED_STEP_LENGTH = 6, 8164a221d59SStefano Zampini KSP_CONVERGED_HAPPY_BREAKDOWN = 7, 817cc8c0b42SAlex Lindsay KSP_CONVERGED_USER = 8, 818d15094e1SBarry Smith /* diverged */ 819b3cc6726SBarry Smith KSP_DIVERGED_NULL = -2, 820d15094e1SBarry Smith KSP_DIVERGED_ITS = -3, 821d15094e1SBarry Smith KSP_DIVERGED_DTOL = -4, 822d15094e1SBarry Smith KSP_DIVERGED_BREAKDOWN = -5, 823b4ac9ba4SBarry Smith KSP_DIVERGED_BREAKDOWN_BICG = -6, 824b4ac9ba4SBarry Smith KSP_DIVERGED_NONSYMMETRIC = -7, 825b4ac9ba4SBarry Smith KSP_DIVERGED_INDEFINITE_PC = -8, 8264d51c080SBarry Smith KSP_DIVERGED_NANORINF = -9, 8276aee1118SBarry Smith KSP_DIVERGED_INDEFINITE_MAT = -10, 828c0decd05SBarry Smith KSP_DIVERGED_PC_FAILED = -11, 829aa4d2078SSatish Balay KSP_DIVERGED_PCSETUP_FAILED_DEPRECATED = -11, 830cc8c0b42SAlex Lindsay KSP_DIVERGED_USER = -12, 831d15094e1SBarry Smith 8329371c9d4SSatish Balay KSP_CONVERGED_ITERATING = 0 8339371c9d4SSatish Balay } KSPConvergedReason; 834014dd563SJed Brown PETSC_EXTERN const char *const *KSPConvergedReasons; 835d15094e1SBarry Smith 836c838673bSBarry Smith /*MC 837af27ebaaSBarry Smith KSP_CONVERGED_RTOL - $||r|| \le rtol*||b||$ or $rtol*||b - A*x_0||$ if `KSPConvergedDefaultSetUIRNorm()` was called 838c838673bSBarry Smith 839c838673bSBarry Smith Level: beginner 840c838673bSBarry Smith 84195bd0b28SBarry Smith Notes: 84287497f52SBarry Smith See `KSPNormType` and `KSPSetNormType()` for possible norms that may be used. By default 843c838673bSBarry Smith for left preconditioning it is the 2-norm of the preconditioned residual, and the 844c838673bSBarry Smith 2-norm of the residual for right preconditioning 845c838673bSBarry Smith 84687497f52SBarry Smith See also `KSP_CONVERGED_ATOL` which may apply before this tolerance. 847f9fed41fSBarry Smith 8481cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP_CONVERGED_ATOL`, `KSP_DIVERGED_DTOL`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 849c838673bSBarry Smith M*/ 850c838673bSBarry Smith 851c838673bSBarry Smith /*MC 852af27ebaaSBarry Smith KSP_CONVERGED_ATOL - $||r|| \le atol$ 853c838673bSBarry Smith 854c838673bSBarry Smith Level: beginner 855c838673bSBarry Smith 85695bd0b28SBarry Smith Notes: 85787497f52SBarry Smith See `KSPNormType` and `KSPSetNormType()` for possible norms that may be used. By default 858c838673bSBarry Smith for left preconditioning it is the 2-norm of the preconditioned residual, and the 859c838673bSBarry Smith 2-norm of the residual for right preconditioning 860c838673bSBarry Smith 86187497f52SBarry Smith See also `KSP_CONVERGED_RTOL` which may apply before this tolerance. 862c838673bSBarry Smith 8631cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP_CONVERGED_RTOL`, `KSP_DIVERGED_DTOL`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 864c838673bSBarry Smith M*/ 865c838673bSBarry Smith 866c838673bSBarry Smith /*MC 867af27ebaaSBarry Smith KSP_DIVERGED_DTOL - $||r|| \ge dtol*||b||$ 868c838673bSBarry Smith 869c838673bSBarry Smith Level: beginner 870c838673bSBarry Smith 87195bd0b28SBarry Smith Note: 87287497f52SBarry Smith See `KSPNormType` and `KSPSetNormType()` for possible norms that may be used. By default 873c838673bSBarry Smith for left preconditioning it is the 2-norm of the preconditioned residual, and the 874c838673bSBarry Smith 2-norm of the residual for right preconditioning 875c838673bSBarry Smith 8760241b274SPierre Jolivet .seealso: [](ch_ksp), `KSPNormType`, `KSP_CONVERGED_ATOL`, `KSP_CONVERGED_RTOL`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 877c838673bSBarry Smith M*/ 878c838673bSBarry Smith 879c838673bSBarry Smith /*MC 880c838673bSBarry Smith KSP_DIVERGED_ITS - Ran out of iterations before any convergence criteria was 881c838673bSBarry Smith reached 882c838673bSBarry Smith 883c838673bSBarry Smith Level: beginner 884c838673bSBarry Smith 8851cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 886c838673bSBarry Smith M*/ 887c838673bSBarry Smith 888c838673bSBarry Smith /*MC 88987497f52SBarry Smith KSP_CONVERGED_ITS - Used by the `KSPPREONLY` solver after the single iteration of 89087497f52SBarry Smith the preconditioner is applied. Also used when the `KSPConvergedSkip()` convergence 891af27ebaaSBarry Smith test routine is set in `KSP`. 892c838673bSBarry Smith 893c838673bSBarry Smith Level: beginner 894c838673bSBarry Smith 8951cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 896c838673bSBarry Smith M*/ 897c838673bSBarry Smith 898c838673bSBarry Smith /*MC 899c838673bSBarry Smith KSP_DIVERGED_BREAKDOWN - A breakdown in the Krylov method was detected so the 9001de96524SPierre Jolivet method could not continue to enlarge the Krylov space. Could be due to a singular matrix or 90187497f52SBarry Smith preconditioner. In `KSPHPDDM`, this is also returned when some search directions within a block 90246091a0eSPierre Jolivet are collinear. 903c838673bSBarry Smith 904c838673bSBarry Smith Level: beginner 905c838673bSBarry Smith 9061cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 907c838673bSBarry Smith M*/ 908c838673bSBarry Smith 909c838673bSBarry Smith /*MC 91087497f52SBarry Smith KSP_DIVERGED_BREAKDOWN_BICG - A breakdown in the `KSPBICG` method was detected so the 911c838673bSBarry Smith method could not continue to enlarge the Krylov space. 912c838673bSBarry Smith 913c838673bSBarry Smith Level: beginner 914c838673bSBarry Smith 9151cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 916c838673bSBarry Smith M*/ 917c838673bSBarry Smith 918c838673bSBarry Smith /*MC 919c838673bSBarry Smith KSP_DIVERGED_NONSYMMETRIC - It appears the operator or preconditioner is not 92087497f52SBarry Smith symmetric and this Krylov method (`KSPCG`, `KSPMINRES`, `KSPCR`) requires symmetry 921c838673bSBarry Smith 922c838673bSBarry Smith Level: beginner 923c838673bSBarry Smith 9241cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 925c838673bSBarry Smith M*/ 926c838673bSBarry Smith 927c838673bSBarry Smith /*MC 928c838673bSBarry Smith KSP_DIVERGED_INDEFINITE_PC - It appears the preconditioner is indefinite (has both 92987497f52SBarry Smith positive and negative eigenvalues) and this Krylov method (`KSPCG`) requires it to 9300b4b7b1cSBarry Smith be symmetric positive definite (SPD). 931c838673bSBarry Smith 932c838673bSBarry Smith Level: beginner 933c838673bSBarry Smith 93487497f52SBarry Smith Note: 935a4d1885cSBarry Smith This can happen with the `PCICC` preconditioner, use the options database option `-pc_factor_shift_positive_definite` to force 93687497f52SBarry Smith the `PCICC` preconditioner to generate a positive definite preconditioner 937c838673bSBarry Smith 9381cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 939c838673bSBarry Smith M*/ 940c838673bSBarry Smith 941c838673bSBarry Smith /*MC 942c0decd05SBarry Smith KSP_DIVERGED_PC_FAILED - It was not possible to build or use the requested preconditioner. This is usually due to a 9439fc87aa7SBarry Smith zero pivot in a factorization. It can also result from a failure in a subpreconditioner inside a nested preconditioner 94487497f52SBarry Smith such as `PCFIELDSPLIT`. 9459fc87aa7SBarry Smith 9469fc87aa7SBarry Smith Level: beginner 9479fc87aa7SBarry Smith 948a4d1885cSBarry Smith Note: 949a4d1885cSBarry Smith Run with `-ksp_error_if_not_converged` to stop the program when the error is detected and print an error message with details. 9509fc87aa7SBarry Smith 9511cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 9529fc87aa7SBarry Smith M*/ 9539fc87aa7SBarry Smith 9549fc87aa7SBarry Smith /*MC 955a4d1885cSBarry Smith KSP_CONVERGED_ITERATING - This flag is returned if `KSPGetConvergedReason()` is called 956a4d1885cSBarry Smith while `KSPSolve()` is still running. 957c838673bSBarry Smith 958c838673bSBarry Smith Level: beginner 959c838673bSBarry Smith 9601cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 961c838673bSBarry Smith M*/ 962c838673bSBarry Smith 9634d4d2bdcSBarry Smith /*S 9644d4d2bdcSBarry Smith KSPConvergenceTestFn - A prototype of a function used with `KSPSetConvergenceTest()` 9654d4d2bdcSBarry Smith 9664d4d2bdcSBarry Smith Calling Sequence: 9674d4d2bdcSBarry Smith + ksp - iterative solver obtained from `KSPCreate()` 9684d4d2bdcSBarry Smith . it - iteration number 9694d4d2bdcSBarry Smith . rnorm - (estimated) 2-norm of (preconditioned) residual 9704d4d2bdcSBarry Smith . reason - the reason why it has converged or diverged 9714d4d2bdcSBarry Smith - ctx - optional convergence context, as set by `KSPSetConvergenceTest()` 9724d4d2bdcSBarry Smith 9734d4d2bdcSBarry Smith Level: beginner 9744d4d2bdcSBarry Smith 9754d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetConvergenceTest()`, `KSPGetConvergenceTest()` 9764d4d2bdcSBarry Smith S*/ 9774d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPConvergenceTestFn(KSP ksp, PetscInt it, PetscReal rnorm, KSPConvergedReason *reason, void *ctx); 9784d4d2bdcSBarry Smith 9794d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPSetConvergenceTest(KSP, KSPConvergenceTestFn *, void *, PetscCtxDestroyFn *); 9804d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPGetConvergenceTest(KSP, KSPConvergenceTestFn **, void **, PetscCtxDestroyFn **); 9814d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPGetAndClearConvergenceTest(KSP, KSPConvergenceTestFn **, void **, PetscCtxDestroyFn **); 9823ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetConvergenceContext(KSP, void *); 9834d4d2bdcSBarry Smith PETSC_EXTERN KSPConvergenceTestFn KSPConvergedDefault; 9844d4d2bdcSBarry Smith PETSC_EXTERN KSPConvergenceTestFn KSPLSQRConvergedDefault; 9854d4d2bdcSBarry Smith PETSC_EXTERN PetscCtxDestroyFn KSPConvergedDefaultDestroy; 9868de4e6dcSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedDefaultCreate(void **); 9878de4e6dcSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedDefaultSetUIRNorm(KSP); 9888de4e6dcSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedDefaultSetUMIRNorm(KSP); 98954b05d9cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPConvergedDefaultSetConvergedMaxits(KSP, PetscBool); 9900059c7bdSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedSkip(KSP, PetscInt, PetscReal, KSPConvergedReason *, void *); 991014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetConvergedReason(KSP, KSPConvergedReason *); 9924d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPGetConvergedReasonString(KSP, const char *[]); 99394a4d4ebSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPComputeConvergenceRate(KSP, PetscReal *, PetscReal *, PetscReal *, PetscReal *); 9942a28d964SStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetConvergedNegativeCurvature(KSP, PetscBool); 9952a28d964SStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetConvergedNegativeCurvature(KSP, PetscBool *); 996abef13c0SSatish Balay 997edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefault()", ) static inline void KSPDefaultConverged(void) 998d71ae5a4SJacob Faibussowitsch { /* never called */ 9999371c9d4SSatish Balay } 10008ea1b3e6SJed Brown #define KSPDefaultConverged (KSPDefaultConverged, KSPConvergedDefault) 1001edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultDestroy()", ) static inline void KSPDefaultConvergedDestroy(void) 1002d71ae5a4SJacob Faibussowitsch { /* never called */ 10039371c9d4SSatish Balay } 10048ea1b3e6SJed Brown #define KSPDefaultConvergedDestroy (KSPDefaultConvergedDestroy, KSPConvergedDefaultDestroy) 1005edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultCreate()", ) static inline void KSPDefaultConvergedCreate(void) 1006d71ae5a4SJacob Faibussowitsch { /* never called */ 10079371c9d4SSatish Balay } 10088ea1b3e6SJed Brown #define KSPDefaultConvergedCreate (KSPDefaultConvergedCreate, KSPConvergedDefaultCreate) 1009edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultSetUIRNorm()", ) static inline void KSPDefaultConvergedSetUIRNorm(void) 1010d71ae5a4SJacob Faibussowitsch { /* never called */ 10119371c9d4SSatish Balay } 10128ea1b3e6SJed Brown #define KSPDefaultConvergedSetUIRNorm (KSPDefaultConvergedSetUIRNorm, KSPConvergedDefaultSetUIRNorm) 1013edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultSetUMIRNorm()", ) static inline void KSPDefaultConvergedSetUMIRNorm(void) 1014d71ae5a4SJacob Faibussowitsch { /* never called */ 10159371c9d4SSatish Balay } 10168ea1b3e6SJed Brown #define KSPDefaultConvergedSetUMIRNorm (KSPDefaultConvergedSetUMIRNorm, KSPConvergedDefaultSetUMIRNorm) 1017edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedSkip()", ) static inline void KSPSkipConverged(void) 1018d71ae5a4SJacob Faibussowitsch { /* never called */ 10199371c9d4SSatish Balay } 10208ea1b3e6SJed Brown #define KSPSkipConverged (KSPSkipConverged, KSPConvergedSkip) 10218ea1b3e6SJed Brown 10220bacdadaSStefano Zampini PETSC_EXTERN PetscErrorCode KSPComputeOperator(KSP, MatType, Mat *); 1023edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 12, 0, "KSPComputeOperator()", ) static inline PetscErrorCode KSPComputeExplicitOperator(KSP A, Mat *B) 1024d71ae5a4SJacob Faibussowitsch { 1025f22e26b7SPierre Jolivet return KSPComputeOperator(A, PETSC_NULLPTR, B); 10269371c9d4SSatish Balay } 1027d4fbbf0eSBarry Smith 102828ce4d24SBarry Smith /*E 1029a4d1885cSBarry Smith KSPCGType - Determines what type of `KSPCG` to use 103028ce4d24SBarry Smith 1031a4d1885cSBarry Smith Values: 1032a4d1885cSBarry Smith + `KSP_CG_SYMMETRIC` - the matrix is complex symmetric 1033a4d1885cSBarry Smith - `KSP_CG_HERMITIAN` - the matrix is complex Hermitian 1034a4d1885cSBarry Smith 103516a05f60SBarry Smith Level: beginner 103616a05f60SBarry Smith 10371cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPCG`, `KSP`, `KSPCGSetType()` 103828ce4d24SBarry Smith E*/ 10399371c9d4SSatish Balay typedef enum { 10409371c9d4SSatish Balay KSP_CG_SYMMETRIC = 0, 10419371c9d4SSatish Balay KSP_CG_HERMITIAN = 1 10429371c9d4SSatish Balay } KSPCGType; 10436a6fc655SJed Brown PETSC_EXTERN const char *const KSPCGTypes[]; 104428ce4d24SBarry Smith 1045014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPCGSetType(KSP, KSPCGType); 1046014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPCGUseSingleReduction(KSP, PetscBool); 10478031f4adStmunson 1048dad1adc6STodd Munson PETSC_EXTERN PetscErrorCode KSPCGSetRadius(KSP, PetscReal); 1049fb01098fSStefano Zampini PETSC_EXTERN PetscErrorCode KSPCGSetObjectiveTarget(KSP, PetscReal); 1050dad1adc6STodd Munson PETSC_EXTERN PetscErrorCode KSPCGGetNormD(KSP, PetscReal *); 1051dad1adc6STodd Munson PETSC_EXTERN PetscErrorCode KSPCGGetObjFcn(KSP, PetscReal *); 1052fcae7a14Stmunson 105305de396fSBarry Smith PETSC_EXTERN PetscErrorCode KSPGLTRGetMinEig(KSP, PetscReal *); 105405de396fSBarry Smith PETSC_EXTERN PetscErrorCode KSPGLTRGetLambda(KSP, PetscReal *); 1055edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 12, 0, "KSPGLTRGetMinEig()", ) static inline PetscErrorCode KSPCGGLTRGetMinEig(KSP ksp, PetscReal *x) 1056d71ae5a4SJacob Faibussowitsch { 10579371c9d4SSatish Balay return KSPGLTRGetMinEig(ksp, x); 10589371c9d4SSatish Balay } 1059edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 12, 0, "KSPGLTRGetLambda()", ) static inline PetscErrorCode KSPCGGLTRGetLambda(KSP ksp, PetscReal *x) 1060d71ae5a4SJacob Faibussowitsch { 10619371c9d4SSatish Balay return KSPGLTRGetLambda(ksp, x); 10629371c9d4SSatish Balay } 10638031f4adStmunson 1064014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPPythonSetType(KSP, const char[]); 1065ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode KSPPythonGetType(KSP, const char *[]); 10661d6018f0SLisandro Dalcin 1067f560b561SHong Zhang PETSC_EXTERN PetscErrorCode PCSetPreSolve(PC, PetscErrorCode (*)(PC, KSP)); 10684d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCSetPostSolve(PC, PetscErrorCode (*)(PC, KSP)); 1069014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCPreSolve(PC, KSP); 1070014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCPostSolve(PC, KSP); 10713369ce9aSBarry Smith 1072014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPMonitorLGRange(KSP, PetscInt, PetscReal, void *); 10732f2e5d10SKris Buschelman 10744d4d2bdcSBarry Smith /*S 10754d4d2bdcSBarry Smith PCShellPSolveFn - A function prototype for functions provided to `PCShellSetPreSolve()` and `PCShellSetPostSolve()` 10764d4d2bdcSBarry Smith 10774d4d2bdcSBarry Smith Calling Sequence: 10784d4d2bdcSBarry Smith + pc - the preconditioner `PC` context 10794d4d2bdcSBarry Smith . ksp - the `KSP` context 10804d4d2bdcSBarry Smith . xin - input vector 10814d4d2bdcSBarry Smith - xout - output vector 10824d4d2bdcSBarry Smith 10834d4d2bdcSBarry Smith Level: intermediate 10844d4d2bdcSBarry Smith 10854d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSPPSolveFn`, `KSP`, `PCShellSetPreSolve()`, `PCShellSetPostSolve()` 10864d4d2bdcSBarry Smith S*/ 10874d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode PCShellPSolveFn(PC pc, KSP ksp, Vec xim, Vec xout); 10884d4d2bdcSBarry Smith 10894d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCShellSetPreSolve(PC, PCShellPSolveFn *); 10904d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCShellSetPostSolve(PC, PCShellPSolveFn *); 109103919abeSBarry Smith 1092ba36735cSStefano Zampini /*S 1093a4d1885cSBarry Smith KSPGuess - Abstract PETSc object that manages all initial guess generation methods for Krylov methods. 1094f8a50e2bSBarry Smith 1095a4d1885cSBarry Smith Level: intermediate 1096f8a50e2bSBarry Smith 10970b4b7b1cSBarry Smith Note: 10980b4b7b1cSBarry Smith These methods generate initial guesses based on a series of previous, related, linear solves. For example, 10990b4b7b1cSBarry Smith in implicit time-stepping with `TS`. 11000b4b7b1cSBarry Smith 11019168452cSPierre Jolivet .seealso: [](ch_ksp), `KSPCreate()`, `KSPGuessSetType()`, `KSPGuessType` 1102ba36735cSStefano Zampini S*/ 1103ba36735cSStefano Zampini typedef struct _p_KSPGuess *KSPGuess; 110416a05f60SBarry Smith 1105ba36735cSStefano Zampini /*J 110687497f52SBarry Smith KSPGuessType - String with the name of a PETSc initial guess approach for Krylov methods. 1107ba36735cSStefano Zampini 1108a4d1885cSBarry Smith Values: 1109a4d1885cSBarry Smith + `KSPGUESSFISCHER` - methodology developed by Paul Fischer 11100b4b7b1cSBarry Smith - `KSPGUESSPOD` - methodology based on proper orthogonal decomposition (POD) 1111a4d1885cSBarry Smith 111216a05f60SBarry Smith Level: intermediate 111316a05f60SBarry Smith 11141cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPGuess` 1115ba36735cSStefano Zampini J*/ 1116ba36735cSStefano Zampini typedef const char *KSPGuessType; 1117ba36735cSStefano Zampini #define KSPGUESSFISCHER "fischer" 1118ba36735cSStefano Zampini #define KSPGUESSPOD "pod" 1119a4d1885cSBarry Smith 11201d36bdfdSBarry Smith PETSC_EXTERN PetscErrorCode KSPGuessRegister(const char[], PetscErrorCode (*)(KSPGuess)); 1121ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetGuess(KSP, KSPGuess); 1122ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetGuess(KSP, KSPGuess *); 1123ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessView(KSPGuess, PetscViewer); 1124ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessDestroy(KSPGuess *); 1125ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessCreate(MPI_Comm, KSPGuess *); 1126ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessSetType(KSPGuess, KSPGuessType); 1127ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessGetType(KSPGuess, KSPGuessType *); 11288410009bSDavid Wells PETSC_EXTERN PetscErrorCode KSPGuessSetTolerance(KSPGuess, PetscReal); 1129ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessSetUp(KSPGuess); 1130ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessUpdate(KSPGuess, Vec, Vec); 1131ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessFormGuess(KSPGuess, Vec, Vec); 1132ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessSetFromOptions(KSPGuess); 1133ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessFischerSetModel(KSPGuess, PetscInt, PetscInt); 1134014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetUseFischerGuess(KSP, PetscInt, PetscInt); 1135ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetInitialGuessKnoll(KSP, PetscBool); 1136ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetInitialGuessKnoll(KSP, PetscBool *); 1137f8a50e2bSBarry Smith 1138470b340bSDmitry Karpeev /*E 11397addb90fSBarry Smith MatSchurComplementAinvType - Determines how to approximate the inverse of the (0,0) block in Schur complement matrix assembly routines 1140470b340bSDmitry Karpeev 1141470b340bSDmitry Karpeev Level: intermediate 1142470b340bSDmitry Karpeev 1143a4d1885cSBarry Smith .seealso: `MatSchurComplementGetAinvType()`, `MatSchurComplementSetAinvType()`, `MatSchurComplementGetPmat()`, `MatGetSchurComplement()`, 11440b4b7b1cSBarry Smith `MatCreateSchurComplementPmat()`, `MatCreateSchurComplement()` 1145470b340bSDmitry Karpeev E*/ 11469371c9d4SSatish Balay typedef enum { 11479371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_DIAG, 11489371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_LUMP, 11499371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_BLOCK_DIAG, 11509371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_FULL 11519371c9d4SSatish Balay } MatSchurComplementAinvType; 1152470b340bSDmitry Karpeev PETSC_EXTERN const char *const MatSchurComplementAinvTypes[]; 1153470b340bSDmitry Karpeev 1154014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSchurComplement(Mat, Mat, Mat, Mat, Mat, Mat *); 1155014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSchurComplementGetKSP(Mat, KSP *); 1156d2768c1eSMatthew G Knepley PETSC_EXTERN PetscErrorCode MatSchurComplementSetKSP(Mat, KSP); 1157bee83525SDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementSetSubMatrices(Mat, Mat, Mat, Mat, Mat, Mat); 1158aa6c7ce3SBarry Smith PETSC_EXTERN PetscErrorCode MatSchurComplementUpdateSubMatrices(Mat, Mat, Mat, Mat, Mat, Mat); 1159bee83525SDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementGetSubMatrices(Mat, Mat *, Mat *, Mat *, Mat *, Mat *); 1160470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementSetAinvType(Mat, MatSchurComplementAinvType); 1161470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementGetAinvType(Mat, MatSchurComplementAinvType *); 11625bf40c1dSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementGetPmat(Mat, MatReuse, Mat *); 11635a1c817aSMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatSchurComplementComputeExplicitOperator(Mat, Mat *); 1164470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatGetSchurComplement(Mat, IS, IS, IS, IS, MatReuse, Mat *, MatSchurComplementAinvType, MatReuse, Mat *); 1165470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatCreateSchurComplementPmat(Mat, Mat, Mat, Mat, MatSchurComplementAinvType, MatReuse, Mat *); 11663f22127dSBarry Smith 116778e4361aSAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMDFP(MPI_Comm, PetscInt, PetscInt, Mat *); 116878e4361aSAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMBFGS(MPI_Comm, PetscInt, PetscInt, Mat *); 1169bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatCreateLMVMDBFGS(MPI_Comm, PetscInt, PetscInt, Mat *); 1170bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatCreateLMVMDDFP(MPI_Comm, PetscInt, PetscInt, Mat *); 1171bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatCreateLMVMDQN(MPI_Comm, PetscInt, PetscInt, Mat *); 117278e4361aSAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMSR1(MPI_Comm, PetscInt, PetscInt, Mat *); 1173864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1174864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMBadBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1175864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMSymBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1176864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMSymBadBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1177864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMDiagBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1178cd929ea3SAlp Dener 1179cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMUpdate(Mat, Vec, Vec); 1180b2d8c577SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMIsAllocated(Mat, PetscBool *); 1181cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMAllocate(Mat, Vec, Vec); 1182cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMReset(Mat, PetscBool); 1183e0ed867bSAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMResetShift(Mat); 11840ad3a497SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMClearJ0(Mat); 1185cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0(Mat, Mat); 1186cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0Scale(Mat, PetscReal); 1187cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0Diag(Mat, Vec); 1188cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0PC(Mat, PC); 1189cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0KSP(Mat, KSP); 11902d5e3849SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMApplyJ0Fwd(Mat, Vec, Vec); 1191cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMApplyJ0Inv(Mat, Vec, Vec); 11921ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMGetLastUpdate(Mat, Vec *, Vec *); 1193cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetJ0(Mat, Mat *); 1194cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetJ0PC(Mat, PC *); 1195cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetJ0KSP(Mat, KSP *); 119692f76d53SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetHistorySize(Mat, PetscInt); 1197bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatLMVMGetHistorySize(Mat, PetscInt *); 1198cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetUpdateCount(Mat, PetscInt *); 1199cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetRejectCount(Mat, PetscInt *); 1200864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenSetDelta(Mat, PetscScalar); 1201e96a0efeSStefano Zampini 1202bbb72809SHansol Suh /*E 12031ca5963aSToby Isaac MatLMVMMultAlgorithm - The type of algorithm used for matrix-vector products and solves used internally by a `MatLMVM` matrix 12041ca5963aSToby Isaac 12051ca5963aSToby Isaac Values: 12061ca5963aSToby Isaac + `MAT_LMVM_MULT_RECURSIVE` - Use recursive formulas for products and solves 12071ca5963aSToby Isaac . `MAT_LMVM_MULT_DENSE` - Use dense formulas for products and solves when possible 12081ca5963aSToby Isaac - `MAT_LMVM_MULT_COMPACT_DENSE` - The same as `MATLMVM_MULT_DENSE`, but go further and ensure products and solves are computed in compact low-rank update form 12091ca5963aSToby Isaac 12101ca5963aSToby Isaac Level: advanced 12111ca5963aSToby Isaac 12121ca5963aSToby Isaac Options Database Keys: 12131ca5963aSToby Isaac . -mat_lmvm_mult_algorithm - the algorithm to use for multiplication (recursive, dense, compact_dense) 12141ca5963aSToby Isaac 12151ca5963aSToby Isaac .seealso: [](ch_matrices), `MatLMVM`, `MatLMVMSetMultAlgorithm()`, `MatLMVMGetMultAlgorithm()` 12161ca5963aSToby Isaac E*/ 12171ca5963aSToby Isaac typedef enum { 12181ca5963aSToby Isaac MAT_LMVM_MULT_RECURSIVE, 12191ca5963aSToby Isaac MAT_LMVM_MULT_DENSE, 12201ca5963aSToby Isaac MAT_LMVM_MULT_COMPACT_DENSE, 12211ca5963aSToby Isaac } MatLMVMMultAlgorithm; 12221ca5963aSToby Isaac 12231ca5963aSToby Isaac PETSC_EXTERN const char *const MatLMVMMultAlgorithms[]; 12241ca5963aSToby Isaac 12251ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSetMultAlgorithm(Mat, MatLMVMMultAlgorithm); 12261ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMGetMultAlgorithm(Mat, MatLMVMMultAlgorithm *); 12271ca5963aSToby Isaac 12281ca5963aSToby Isaac /*E 12291ca5963aSToby Isaac MatLMVMSymBroydenScaleType - Rescaling type for the initial Hessian of a symmetric Broyden matrix. 1230bbb72809SHansol Suh 1231bbb72809SHansol Suh Values: 1232b6982945SToby Isaac + `MAT_LMVM_SYMBROYDEN_SCALE_NONE` - no rescaling 1233b6982945SToby Isaac . `MAT_LMVM_SYMBROYDEN_SCALE_SCALAR` - scalar rescaling 1234b6982945SToby Isaac . `MAT_LMVM_SYMBROYDEN_SCALE_DIAGONAL` - diagonal rescaling 1235b6982945SToby Isaac . `MAT_LMVM_SYMBROYDEN_SCALE_USER` - same as `MAT_LMVM_SYMBROYDN_SCALE_NONE` 1236b6982945SToby Isaac - `MAT_LMVM_SYMBROYDEN_SCALE_DECIDE` - let PETSc decide rescaling 1237bbb72809SHansol Suh 1238bbb72809SHansol Suh Level: intermediate 1239bbb72809SHansol Suh 1240bbb72809SHansol Suh .seealso: [](ch_matrices), `MatLMVM`, `MatLMVMSymBroydenSetScaleType()` 1241bbb72809SHansol Suh E*/ 1242e96a0efeSStefano Zampini typedef enum { 1243e96a0efeSStefano Zampini MAT_LMVM_SYMBROYDEN_SCALE_NONE = 0, 1244e96a0efeSStefano Zampini MAT_LMVM_SYMBROYDEN_SCALE_SCALAR = 1, 1245e96a0efeSStefano Zampini MAT_LMVM_SYMBROYDEN_SCALE_DIAGONAL = 2, 1246b6982945SToby Isaac MAT_LMVM_SYMBROYDEN_SCALE_USER = 3, 1247b6982945SToby Isaac MAT_LMVM_SYMBROYDEN_SCALE_DECIDE = 4 1248e96a0efeSStefano Zampini } MatLMVMSymBroydenScaleType; 1249e96a0efeSStefano Zampini PETSC_EXTERN const char *const MatLMVMSymBroydenScaleTypes[]; 1250e96a0efeSStefano Zampini 1251864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenSetScaleType(Mat, MatLMVMSymBroydenScaleType); 12521ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenGetPhi(Mat, PetscReal *); 12531ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenSetPhi(Mat, PetscReal); 12541ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBadBroydenGetPsi(Mat, PetscReal *); 12551ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBadBroydenSetPsi(Mat, PetscReal); 1256cd929ea3SAlp Dener 1257bbb72809SHansol Suh /*E 12580b4b7b1cSBarry Smith MatLMVMDenseType - Memory storage strategy for dense variants of `MATLMVM`. 1259bbb72809SHansol Suh 1260bbb72809SHansol Suh Values: 1261bbb72809SHansol Suh + `MAT_LMVM_DENSE_REORDER` - reorders memory to minimize kernel launch 1262bbb72809SHansol Suh - `MAT_LMVM_DENSE_INPLACE` - computes inplace to minimize memory movement 1263bbb72809SHansol Suh 1264bbb72809SHansol Suh Level: intermediate 1265bbb72809SHansol Suh 1266bbb72809SHansol Suh .seealso: [](ch_matrices), `MatLMVM`, `MatLMVMDenseSetType()` 1267bbb72809SHansol Suh E*/ 1268bbb72809SHansol Suh typedef enum { 1269bbb72809SHansol Suh MAT_LMVM_DENSE_REORDER, 1270bbb72809SHansol Suh MAT_LMVM_DENSE_INPLACE 1271bbb72809SHansol Suh } MatLMVMDenseType; 1272bbb72809SHansol Suh PETSC_EXTERN const char *const MatLMVMDenseTypes[]; 1273bbb72809SHansol Suh 1274bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatLMVMDenseSetType(Mat, MatLMVMDenseType); 1275bbb72809SHansol Suh 1276014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDM(KSP, DM); 1277014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDMActive(KSP, PetscBool); 1278014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetDM(KSP, DM *); 1279014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetApplicationContext(KSP, void *); 1280014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetApplicationContext(KSP, void *); 12817b578ef6SBarry Smith 12827b578ef6SBarry Smith /*S 12838434afd1SBarry Smith KSPComputeRHSFn - A prototype of a `KSP` evaluation function that would be passed to `KSPSetComputeRHS()` 12847b578ef6SBarry Smith 12857b578ef6SBarry Smith Calling Sequence: 12867b578ef6SBarry Smith + ksp - `ksp` context 12877b578ef6SBarry Smith . b - output vector 12887b578ef6SBarry Smith - ctx - [optional] user-defined function context 12897b578ef6SBarry Smith 12907b578ef6SBarry Smith Level: beginner 12917b578ef6SBarry Smith 12924d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetComputeRHS()`, `SNESGetFunction()`, `KSPComputeInitialGuessFn`, `KSPComputeOperatorsFn` 12937b578ef6SBarry Smith S*/ 12944d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPComputeRHSFn(KSP ksp, Vec b, void *ctx); 12957b578ef6SBarry Smith 12968434afd1SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetComputeRHS(KSP, KSPComputeRHSFn *, void *); 12977b578ef6SBarry Smith 12987b578ef6SBarry Smith /*S 12998434afd1SBarry Smith KSPComputeOperatorsFn - A prototype of a `KSP` evaluation function that would be passed to `KSPSetComputeOperators()` 13007b578ef6SBarry Smith 13017b578ef6SBarry Smith Calling Sequence: 13027b578ef6SBarry Smith + ksp - `KSP` context 13037b578ef6SBarry Smith . A - the operator that defines the linear system 13047b578ef6SBarry Smith . P - an operator from which to build the preconditioner (often the same as `A`) 13057b578ef6SBarry Smith - ctx - [optional] user-defined function context 13067b578ef6SBarry Smith 13077b578ef6SBarry Smith Level: beginner 13087b578ef6SBarry Smith 13094d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetComputeRHS()`, `SNESGetFunction()`, `KSPComputeRHSFn`, `KSPComputeInitialGuessFn` 13107b578ef6SBarry Smith S*/ 13114d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPComputeOperatorsFn(KSP ksp, Mat A, Mat P, void *ctx); 13127b578ef6SBarry Smith 13138434afd1SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetComputeOperators(KSP, KSPComputeOperatorsFn, void *); 13147b578ef6SBarry Smith 13157b578ef6SBarry Smith /*S 13168434afd1SBarry Smith KSPComputeInitialGuessFn - A prototype of a `KSP` evaluation function that would be passed to `KSPSetComputeInitialGuess()` 13177b578ef6SBarry Smith 13187b578ef6SBarry Smith Calling Sequence: 13197b578ef6SBarry Smith + ksp - `ksp` context 13207b578ef6SBarry Smith . x - output vector 13217b578ef6SBarry Smith - ctx - [optional] user-defined function context 13227b578ef6SBarry Smith 13237b578ef6SBarry Smith Level: beginner 13247b578ef6SBarry Smith 13254d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetComputeInitialGuess()`, `SNESGetFunction()`, `KSPComputeRHSFn`, `KSPComputeOperatorsFn` 13267b578ef6SBarry Smith S*/ 13274d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPComputeInitialGuessFn(KSP ksp, Vec x, void *ctx); 13287b578ef6SBarry Smith 13298434afd1SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetComputeInitialGuess(KSP, KSPComputeInitialGuessFn *, void *); 13308434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPSetComputeOperators(DM, KSPComputeOperatorsFn *, void *); 13318434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPGetComputeOperators(DM, KSPComputeOperatorsFn **, void *); 13328434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPSetComputeRHS(DM, KSPComputeRHSFn *, void *); 13338434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPGetComputeRHS(DM, KSPComputeRHSFn **, void *); 13348434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPSetComputeInitialGuess(DM, KSPComputeInitialGuessFn *, void *); 13358434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPGetComputeInitialGuess(DM, KSPComputeInitialGuessFn **, void *); 13366c699258SBarry Smith 133702b02e71SToby Isaac PETSC_EXTERN PetscErrorCode DMGlobalToLocalSolve(DM, Vec, Vec); 13381898fd5cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmProjectFields(DM, DM, PetscInt, const char *[], Vec[], ScatterMode); 13391898fd5cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmProjectGradientFields(DM, DM, PetscInt, const char *[], Vec[], ScatterMode); 1340557cf195SMatthew G. Knepley 13412b3cbbdaSStefano Zampini PETSC_EXTERN PetscErrorCode DMAdaptInterpolator(DM, DM, Mat, KSP, Mat, Mat, Mat *, void *); 13422b3cbbdaSStefano Zampini PETSC_EXTERN PetscErrorCode DMCheckInterpolator(DM, Mat, Mat, Mat, PetscReal); 13434bf303faSJacob Faibussowitsch 13444bf303faSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PCBJKOKKOSSetKSP(PC, KSP); 13454bf303faSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PCBJKOKKOSGetKSP(PC, KSP *); 13465d83a8b1SBarry Smith 13475d83a8b1SBarry Smith PETSC_EXTERN PetscErrorCode DMCopyDMKSP(DM, DM); 13484d4d2bdcSBarry Smith 13494d4d2bdcSBarry Smith #include <petscdstypes.h> 13504d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode DMProjectField(DM, PetscReal, Vec, PetscPointFn **, InsertMode, Vec); 1351