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*/ 165*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPMonitorRegisterCreateFn(PetscViewer viewer, PetscViewerFormat format, PetscCtx 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*/ 220*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPPSolveFn(KSP ksp, Vec rhs, Vec x, PetscCtx ctx); 2214d4d2bdcSBarry Smith 222*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetPreSolve(KSP, KSPPSolveFn *, PetscCtx); 223*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetPostSolve(KSP, KSPPSolveFn *, PetscCtx); 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*/ 243*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPMonitorFn(KSP ksp, PetscInt it, PetscReal rnorm, PetscCtx ctx); 2444d4d2bdcSBarry Smith 245014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPMonitor(KSP, PetscInt, PetscReal); 246*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSet(KSP, KSPMonitorFn *, PetscCtx, PetscCtxDestroyFn *); 247014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPMonitorCancel(KSP); 248*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetMonitorContext(KSP, PetscCtxRt); 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*/ 385*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPFlexibleModifyPCFn(KSP ksp, PetscInt total_its, PetscInt local_its, PetscReal res_norm, PetscCtx ctx); 3864d4d2bdcSBarry Smith 387*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPFlexibleSetModifyPC(KSP, KSPFlexibleModifyPCFn *, PetscCtx, PetscCtxDestroyFn *); 388*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPPIPEGCRSetModifyPC(KSP, KSPFlexibleModifyPCFn *, PetscCtx, 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 *); 408*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGCRSetModifyPC(KSP, KSPFlexibleModifyPCFn *, PetscCtx, 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 464d55ab951SPierre Jolivet PETSC_EXTERN PetscErrorCode KSPHPDDMSetType(KSP, KSPHPDDMType); 465d55ab951SPierre Jolivet PETSC_EXTERN PetscErrorCode KSPHPDDMGetType(KSP, KSPHPDDMType *); 466e82af88dSprj- 467b49fd9e1SBarry Smith /*E 46816a05f60SBarry Smith KSPGMRESCGSRefinementType - How the classical (unmodified) Gram-Schmidt is performed in the GMRES solvers 469b49fd9e1SBarry Smith 470a4d1885cSBarry Smith Values: 471a4d1885cSBarry Smith + `KSP_GMRES_CGS_REFINE_NEVER` - one step of classical Gram-Schmidt 472a4d1885cSBarry Smith . `KSP_GMRES_CGS_REFINE_IFNEEDED` - a second step is performed if the first step does not satisfy some criteria 473a4d1885cSBarry Smith - `KSP_GMRES_CGS_REFINE_ALWAYS` - always perform two steps 474b49fd9e1SBarry Smith 47516a05f60SBarry Smith Level: advanced 47616a05f60SBarry Smith 47795bd0b28SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPGMRES`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 478a4d1885cSBarry Smith `KSPGMRESGetOrthogonalization()`, 479a4d1885cSBarry Smith `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSPGMRESModifiedGramSchmidtOrthogonalization()` 480b49fd9e1SBarry Smith E*/ 4819371c9d4SSatish Balay typedef enum { 4829371c9d4SSatish Balay KSP_GMRES_CGS_REFINE_NEVER, 4839371c9d4SSatish Balay KSP_GMRES_CGS_REFINE_IFNEEDED, 4849371c9d4SSatish Balay KSP_GMRES_CGS_REFINE_ALWAYS 4859371c9d4SSatish Balay } KSPGMRESCGSRefinementType; 4866a6fc655SJed Brown PETSC_EXTERN const char *const KSPGMRESCGSRefinementTypes[]; 48716a05f60SBarry Smith 4881f7e983dSSatish Balay /*MC 4891957e957SBarry Smith KSP_GMRES_CGS_REFINE_NEVER - Do the classical (unmodified) Gram-Schmidt process 4908c5b8ba0SBarry Smith 4918c5b8ba0SBarry Smith Level: advanced 4928c5b8ba0SBarry Smith 49387497f52SBarry Smith Note: 49487497f52SBarry Smith Possibly unstable, but the fastest to compute 4958c5b8ba0SBarry Smith 49695bd0b28SBarry Smith .seealso: [](ch_ksp), `KSPGMRES`, `KSPGMRESCGSRefinementType`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 497a4d1885cSBarry Smith `KSP`, `KSPGMRESGetOrthogonalization()`, 498db781477SPatrick Sanan `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSP_GMRES_CGS_REFINE_IFNEEDED`, `KSP_GMRES_CGS_REFINE_ALWAYS`, 499db781477SPatrick Sanan `KSPGMRESModifiedGramSchmidtOrthogonalization()` 5008c5b8ba0SBarry Smith M*/ 5018c5b8ba0SBarry Smith 5021f7e983dSSatish Balay /*MC 5038c5b8ba0SBarry Smith KSP_GMRES_CGS_REFINE_IFNEEDED - Do the classical (unmodified) Gram-Schmidt process and one step of 5048c5b8ba0SBarry Smith iterative refinement if an estimate of the orthogonality of the resulting vectors indicates 5058c5b8ba0SBarry Smith poor orthogonality. 5068c5b8ba0SBarry Smith 5078c5b8ba0SBarry Smith Level: advanced 5088c5b8ba0SBarry Smith 509a4d1885cSBarry Smith Note: 510a4d1885cSBarry Smith This is slower than `KSP_GMRES_CGS_REFINE_NEVER` because it requires an extra norm computation to 5118c5b8ba0SBarry Smith estimate the orthogonality but is more stable. 5128c5b8ba0SBarry Smith 51395bd0b28SBarry Smith .seealso: [](ch_ksp), `KSPGMRES`, `KSPGMRESCGSRefinementType`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 514a4d1885cSBarry Smith `KSP`, `KSPGMRESGetOrthogonalization()`, 515db781477SPatrick Sanan `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSP_GMRES_CGS_REFINE_NEVER`, `KSP_GMRES_CGS_REFINE_ALWAYS`, 516db781477SPatrick Sanan `KSPGMRESModifiedGramSchmidtOrthogonalization()` 5178c5b8ba0SBarry Smith M*/ 5188c5b8ba0SBarry Smith 5191f7e983dSSatish Balay /*MC 52016a05f60SBarry Smith KSP_GMRES_CGS_REFINE_ALWAYS - Do two steps of the classical (unmodified) Gram-Schmidt process. 5218c5b8ba0SBarry Smith 5228c5b8ba0SBarry Smith Level: advanced 5238c5b8ba0SBarry Smith 52487497f52SBarry Smith Notes: 52587497f52SBarry Smith This is roughly twice the cost of `KSP_GMRES_CGS_REFINE_NEVER` because it performs the process twice 52687497f52SBarry Smith but it saves the extra norm calculation needed by `KSP_GMRES_CGS_REFINE_IFNEEDED`. 5278c5b8ba0SBarry Smith 5288c5b8ba0SBarry Smith You should only use this if you absolutely know that the iterative refinement is needed. 5298c5b8ba0SBarry Smith 53095bd0b28SBarry Smith .seealso: [](ch_ksp), `KSPGMRES`, `KSPGMRESCGSRefinementType`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESSetOrthogonalization()`, 531a4d1885cSBarry Smith `KSP`, `KSPGMRESGetOrthogonalization()`, 532db781477SPatrick Sanan `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSP_GMRES_CGS_REFINE_IFNEEDED`, `KSP_GMRES_CGS_REFINE_ALWAYS`, 533db781477SPatrick Sanan `KSPGMRESModifiedGramSchmidtOrthogonalization()` 5348c5b8ba0SBarry Smith M*/ 5358c5b8ba0SBarry Smith 536014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESSetCGSRefinementType(KSP, KSPGMRESCGSRefinementType); 537014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGMRESGetCGSRefinementType(KSP, KSPGMRESCGSRefinementType *); 53808480c60SBarry Smith 5394d4d2bdcSBarry Smith PETSC_EXTERN KSPFlexibleModifyPCFn KSPFGMRESModifyPCNoChange; 5404d4d2bdcSBarry Smith PETSC_EXTERN KSPFlexibleModifyPCFn KSPFGMRESModifyPCKSP; 541*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPFGMRESSetModifyPC(KSP, KSPFlexibleModifyPCFn *, PetscCtx, PetscCtxDestroyFn *); 542c38d4ed2SBarry Smith 543014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPQCGSetTrustRegionRadius(KSP, PetscReal); 544014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPQCGGetQuadratic(KSP, PetscReal *); 545014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPQCGGetTrialStepNorm(KSP, PetscReal *); 546121fd945SKris Buschelman 547014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetXRes(KSP, PetscReal); 548014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetPol(KSP, PetscBool); 549014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetEll(KSP, PetscInt); 550e4b508b2SJed Brown PETSC_EXTERN PetscErrorCode KSPBCGSLSetUsePseudoinverse(KSP, PetscBool); 551d9492815SBarry Smith 552014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetFromOptions(KSP); 55387d6299eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPResetFromOptions(KSP); 5542eac72dbSBarry Smith 555*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSetFromOptions(KSP, const char[], const char[], PetscCtx); 5564d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidual; 55752e0830fSMatthew Knepley PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualView; 55852e0830fSMatthew Knepley PETSC_DEPRECATED_FUNCTION(3, 23, 0, "KSPMonitorResidualDraw()", ) static inline PetscErrorCode KSPMonitorResidualDraw(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 55952e0830fSMatthew Knepley { 56052e0830fSMatthew Knepley return KSPMonitorResidualView(ksp, n, rnorm, vf); 56152e0830fSMatthew Knepley } 5624d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualDrawLG; 563*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorResidualDrawLGCreate(PetscViewer, PetscViewerFormat, PetscCtx, PetscViewerAndFormat **); 5644d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualShort; 5654d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorResidualRange; 5664d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidual; 56752e0830fSMatthew Knepley PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidualView; 56852e0830fSMatthew Knepley PETSC_DEPRECATED_FUNCTION(3, 23, 0, "KSPMonitorTrueResidualDraw()", ) static inline PetscErrorCode KSPMonitorTrueResidualDraw(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 56952e0830fSMatthew Knepley { 57052e0830fSMatthew Knepley return KSPMonitorTrueResidualView(ksp, n, rnorm, vf); 57152e0830fSMatthew Knepley } 5724d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidualDrawLG; 573*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorTrueResidualDrawLGCreate(PetscViewer, PetscViewerFormat, PetscCtx, PetscViewerAndFormat **); 5744d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorTrueResidualMax; 5754d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorError; 5764d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorErrorDraw; 5774d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorErrorDrawLG; 578*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorErrorDrawLGCreate(PetscViewer, PetscViewerFormat, PetscCtx, PetscViewerAndFormat **); 5794d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSolution; 5804d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSolutionDraw; 5814d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSolutionDrawLG; 582*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSolutionDrawLGCreate(PetscViewer, PetscViewerFormat, PetscCtx, PetscViewerAndFormat **); 5834d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPMonitorSingularValue; 584*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSingularValueCreate(PetscViewer, PetscViewerFormat, PetscCtx, PetscViewerAndFormat **); 585edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPMonitorResidual()", ) static inline PetscErrorCode KSPMonitorDefault(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 586d71ae5a4SJacob Faibussowitsch { 5879371c9d4SSatish Balay return KSPMonitorResidual(ksp, n, rnorm, vf); 5889371c9d4SSatish Balay } 589edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPMonitorTrueResidual()", ) static inline PetscErrorCode KSPMonitorTrueResidualNorm(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 590d71ae5a4SJacob Faibussowitsch { 5919371c9d4SSatish Balay return KSPMonitorTrueResidual(ksp, n, rnorm, vf); 5929371c9d4SSatish Balay } 593edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 15, 0, "KSPMonitorTrueResidualMax()", ) static inline PetscErrorCode KSPMonitorTrueResidualMaxNorm(KSP ksp, PetscInt n, PetscReal rnorm, PetscViewerAndFormat *vf) 594d71ae5a4SJacob Faibussowitsch { 5959371c9d4SSatish Balay return KSPMonitorTrueResidualMax(ksp, n, rnorm, vf); 5969371c9d4SSatish Balay } 597798534f6SMatthew G. Knepley 598798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPGMRESMonitorKrylov(KSP, PetscInt, PetscReal, void *); 599*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicTolerance(KSP, PetscInt, PetscReal, PetscCtx); 600*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicToleranceDestroy(PetscCtxRt); 601341b8579SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicToleranceCreate(void *); 602341b8579SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorDynamicToleranceSetCoefficient(void *, PetscReal); 603e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSAWs(KSP, PetscInt, PetscReal, void *); 604e04113cfSBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSAWsCreate(KSP, void **); 605*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPMonitorSAWsDestroy(PetscCtxRt); 60684cb2905SBarry Smith 607014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPUnwindPreconditioner(KSP, Vec, Vec); 608014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPInitialResidual(KSP, Vec, Vec, Vec, Vec, Vec); 609c01c455dSBarry Smith 61023ee1639SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetOperators(KSP, Mat, Mat); 61123ee1639SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetOperators(KSP, Mat *, Mat *); 612014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetOperatorsSet(KSP, PetscBool *, PetscBool *); 613014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetOptionsPrefix(KSP, const char[]); 614014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPAppendOptionsPrefix(KSP, const char[]); 615014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetOptionsPrefix(KSP, const char *[]); 6161eb62cbbSBarry Smith 617014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDiagonalScale(KSP, PetscBool); 618014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetDiagonalScale(KSP, PetscBool *); 619014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDiagonalScaleFix(KSP, PetscBool); 620014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetDiagonalScaleFix(KSP, PetscBool *); 6211f7f0c4fSBarry Smith 6224d4d2bdcSBarry Smith /*S 6234d4d2bdcSBarry Smith KSPConvergedReasonViewFn - A prototype of a function used with `KSPConvergedReasonViewSet()` 6244d4d2bdcSBarry Smith 6254d4d2bdcSBarry Smith Calling Sequence: 6264d4d2bdcSBarry Smith + ksp - the `KSP` object whose `KSPConvergedReason` is to be viewed 6274d4d2bdcSBarry Smith - ctx - context used by the function, set with `KSPConvergedReasonViewSet()` 6284d4d2bdcSBarry Smith 6294d4d2bdcSBarry Smith Level: beginner 6304d4d2bdcSBarry Smith 6314d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPConvergedReasonView()`, `KSPConvergedReasonViewSet()`, `KSPConvergedReasonViewFromOptions()`, `KSPView()` 6324d4d2bdcSBarry Smith S*/ 633*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPConvergedReasonViewFn(KSP ksp, PetscCtx ctx); 6344d4d2bdcSBarry Smith 635014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPView(KSP, PetscViewer); 63655849f57SBarry Smith PETSC_EXTERN PetscErrorCode KSPLoad(KSP, PetscViewer); 637fe2efc57SMark PETSC_EXTERN PetscErrorCode KSPViewFromOptions(KSP, PetscObject, const char[]); 63819a666eeSBarry Smith PETSC_EXTERN PetscErrorCode KSPConvergedReasonView(KSP, PetscViewer); 6394d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPConvergedReasonViewSet(KSP, KSPConvergedReasonViewFn *, void *, PetscCtxDestroyFn *); 6401b2b9847SBarry Smith PETSC_EXTERN PetscErrorCode KSPConvergedReasonViewFromOptions(KSP); 641c4421ceaSFande Kong PETSC_EXTERN PetscErrorCode KSPConvergedReasonViewCancel(KSP); 64294a4d4ebSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPConvergedRateView(KSP, PetscViewer); 6431b2b9847SBarry Smith 644edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 14, 0, "KSPConvergedReasonView()", ) static inline PetscErrorCode KSPReasonView(KSP ksp, PetscViewer v) 645d71ae5a4SJacob Faibussowitsch { 6469371c9d4SSatish Balay return KSPConvergedReasonView(ksp, v); 6479371c9d4SSatish Balay } 648edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 14, 0, "KSPConvergedReasonViewFromOptions()", ) static inline PetscErrorCode KSPReasonViewFromOptions(KSP ksp) 649d71ae5a4SJacob Faibussowitsch { 6509371c9d4SSatish Balay return KSPConvergedReasonViewFromOptions(ksp); 6519371c9d4SSatish Balay } 65255849f57SBarry Smith 65355849f57SBarry Smith #define KSP_FILE_CLASSID 1211223 6541eb62cbbSBarry Smith 655dcc87044SVaclav Hapla PETSC_EXTERN PetscErrorCode KSPLSQRSetExactMatNorm(KSP, PetscBool); 6560e827bf4SVaclav Hapla PETSC_EXTERN PetscErrorCode KSPLSQRSetComputeStandardErrorVec(KSP, PetscBool); 657014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPLSQRGetStandardErrorVec(KSP, Vec *); 658884807c7SVaclav Hapla PETSC_EXTERN PetscErrorCode KSPLSQRGetNorms(KSP, PetscReal *, PetscReal *); 6594d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPLSQRMonitorResidual; 6604d4d2bdcSBarry Smith PETSC_EXTERN KSPMonitorRegisterFn KSPLSQRMonitorResidualDrawLG; 661798534f6SMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPLSQRMonitorResidualDrawLGCreate(PetscViewer, PetscViewerFormat, void *, PetscViewerAndFormat **); 662db9b2ab1SHong Zhang 663014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCRedundantGetKSP(PC, KSP *); 664014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCRedistributeGetKSP(PC, KSP *); 66568ddcbeaSBarry Smith PETSC_EXTERN PetscErrorCode PCTelescopeGetKSP(PC, KSP *); 6669f0612e4SBarry Smith PETSC_EXTERN PetscErrorCode PCMPIGetKSP(PC, KSP *); 66783ab6a24SBarry Smith 66828ce4d24SBarry Smith /*E 669a4d1885cSBarry Smith KSPNormType - Norm calculated by the `KSP` and passed in the Krylov convergence 6708a4b9c5cSBarry Smith test routines. 6718a4b9c5cSBarry Smith 672a4d1885cSBarry Smith Values: 673a4d1885cSBarry Smith + `KSP_NORM_DEFAULT` - use the default for the current `KSPType` 674a4d1885cSBarry Smith . `KSP_NORM_NONE` - use no norm calculation 675a4d1885cSBarry Smith . `KSP_NORM_PRECONDITIONED` - use the preconditioned residual norm 676a4d1885cSBarry Smith . `KSP_NORM_UNPRECONDITIONED` - use the unpreconditioned residual norm 677a4d1885cSBarry Smith - `KSP_NORM_NATURAL` - use the natural norm (the norm induced by the linear operator) 678a4d1885cSBarry Smith 6798a4b9c5cSBarry Smith Level: advanced 6808a4b9c5cSBarry Smith 681a4d1885cSBarry Smith Note: 682a3f661c8SBarry Smith Each solver only supports a subset of these and some may support different ones 68316a05f60SBarry Smith depending on whether left or right preconditioning is used, see `KSPSetPCSide()` 684a3f661c8SBarry Smith 6851cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `PCSide`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPSetNormType()`, 68695bd0b28SBarry Smith `KSPSetConvergenceTest()`, `KSPSetPCSide()`, `KSP_NORM_DEFAULT`, `KSP_NORM_NONE`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_UNPRECONDITIONED`, `KSP_NORM_NATURAL` 6878a4b9c5cSBarry Smith E*/ 6889371c9d4SSatish Balay typedef enum { 6899371c9d4SSatish Balay KSP_NORM_DEFAULT = -1, 6909371c9d4SSatish Balay KSP_NORM_NONE = 0, 6919371c9d4SSatish Balay KSP_NORM_PRECONDITIONED = 1, 6929371c9d4SSatish Balay KSP_NORM_UNPRECONDITIONED = 2, 6939371c9d4SSatish Balay KSP_NORM_NATURAL = 3 6949371c9d4SSatish Balay } KSPNormType; 6959e568555SJed Brown #define KSP_NORM_MAX (KSP_NORM_NATURAL + 1) 696014dd563SJed Brown PETSC_EXTERN const char *const *const KSPNormTypes; 697a21b2a99SBarry Smith 6981f7e983dSSatish Balay /*MC 6999793b452SBarry Smith KSP_NORM_NONE - Do not compute a norm during the Krylov process. This will 7008c5b8ba0SBarry Smith possibly save some computation but means the convergence test cannot 7018c5b8ba0SBarry Smith be based on a norm of a residual etc. 7028c5b8ba0SBarry Smith 7038c5b8ba0SBarry Smith Level: advanced 7048c5b8ba0SBarry Smith 705a4d1885cSBarry Smith Note: 706a4d1885cSBarry Smith Some Krylov methods need to compute a residual norm (such as `KPSGMRES`) and then this option is ignored 7078c5b8ba0SBarry Smith 7081cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_UNPRECONDITIONED`, `KSP_NORM_NATURAL` 7098c5b8ba0SBarry Smith M*/ 7108c5b8ba0SBarry Smith 7111f7e983dSSatish Balay /*MC 7121957e957SBarry Smith KSP_NORM_PRECONDITIONED - Compute the norm of the preconditioned residual B*(b - A*x), if left preconditioning, and pass that to the 7138c5b8ba0SBarry Smith convergence test routine. 7148c5b8ba0SBarry Smith 7158c5b8ba0SBarry Smith Level: advanced 7168c5b8ba0SBarry Smith 7171cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_NONE`, `KSP_NORM_UNPRECONDITIONED`, `KSP_NORM_NATURAL`, `KSPSetConvergenceTest()` 7188c5b8ba0SBarry Smith M*/ 7198c5b8ba0SBarry Smith 7201f7e983dSSatish Balay /*MC 721ce9499c7SBarry Smith KSP_NORM_UNPRECONDITIONED - Compute the norm of the true residual (b - A*x) and pass that to the 7228c5b8ba0SBarry Smith convergence test routine. 7238c5b8ba0SBarry Smith 7248c5b8ba0SBarry Smith Level: advanced 7258c5b8ba0SBarry Smith 7261cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_NONE`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_NATURAL`, `KSPSetConvergenceTest()` 7278c5b8ba0SBarry Smith M*/ 7288c5b8ba0SBarry Smith 7291f7e983dSSatish Balay /*MC 730ce9499c7SBarry Smith KSP_NORM_NATURAL - Compute the 'natural norm' of residual sqrt((b - A*x)*B*(b - A*x)) and pass that to the 73187497f52SBarry Smith convergence test routine. This is only supported by `KSPCG`, `KSPCR`, `KSPCGNE`, `KSPCGS`, `KSPFCG`, `KSPPIPEFCG`, `KSPPIPEGCR` 7328c5b8ba0SBarry Smith 7338c5b8ba0SBarry Smith Level: advanced 7348c5b8ba0SBarry Smith 7351cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP`, `KSPSetNormType()`, `KSP_NORM_NONE`, `KSP_NORM_PRECONDITIONED`, `KSP_NORM_UNPRECONDITIONED`, `KSPSetConvergenceTest()` 7368c5b8ba0SBarry Smith M*/ 7378c5b8ba0SBarry Smith 738014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetNormType(KSP, KSPNormType); 739014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetNormType(KSP, KSPNormType *); 740ce78bad3SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetSupportedNorm(KSP, KSPNormType, PCSide, PetscInt); 741014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetCheckNormIteration(KSP, PetscInt); 742014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetLagNorm(KSP, PetscBool); 7438a4b9c5cSBarry Smith 744edd03b47SJacob Faibussowitsch #define KSP_CONVERGED_CG_NEG_CURVE_DEPRECATED KSP_CONVERGED_CG_NEG_CURVE PETSC_DEPRECATED_ENUM(3, 19, 0, "KSP_CONVERGED_NEG_CURVE", ) 745edd03b47SJacob Faibussowitsch #define KSP_CONVERGED_CG_CONSTRAINED_DEPRECATED KSP_CONVERGED_CG_CONSTRAINED PETSC_DEPRECATED_ENUM(3, 19, 0, "KSP_CONVERGED_STEP_LENGTH", ) 746b5c1ed96SAlexander #define KSP_CONVERGED_RTOL_NORMAL_DEPRECATED KSP_CONVERGED_RTOL_NORMAL PETSC_DEPRECATED_ENUM(3, 24, 0, "KSP_CONVERGED_RTOL_NORMAL_EQUATIONS", ) 747b5c1ed96SAlexander #define KSP_CONVERGED_ATOL_NORMAL_DEPRECATED KSP_CONVERGED_ATOL_NORMAL PETSC_DEPRECATED_ENUM(3, 24, 0, "KSP_CONVERGED_ATOL_NORMAL_EQUATIONS", ) 7488a4b9c5cSBarry Smith /*E 749a4d1885cSBarry Smith KSPConvergedReason - reason a Krylov method was determined to have converged or diverged 75028ce4d24SBarry Smith 751a4d1885cSBarry Smith Values: 75278daaec8SBarry Smith + `KSP_CONVERGED_RTOL_NORMAL_EQUATIONS` - requested decrease in the residual of the normal equations, for `KSPLSQR` 75378daaec8SBarry Smith . `KSP_CONVERGED_ATOL_NORMAL_EQUATIONS` - requested absolute value in the residual of the normal equations, for `KSPLSQR` 754a4d1885cSBarry Smith . `KSP_CONVERGED_RTOL` - requested decrease in the residual 755a4d1885cSBarry Smith . `KSP_CONVERGED_ATOL` - requested absolute value in the residual 756a4d1885cSBarry Smith . `KSP_CONVERGED_ITS` - requested number of iterations 7574a221d59SStefano Zampini . `KSP_CONVERGED_NEG_CURVE` - see note below 758a4d1885cSBarry Smith . `KSP_CONVERGED_STEP_LENGTH` - see note below 7596e7835fbSStefano Zampini . `KSP_CONVERGED_HAPPY_BREAKDOWN` - happy breakdown (meaning early convergence of the `KSPType` occurred). 760cc8c0b42SAlex Lindsay . `KSP_CONVERGED_USER` - the user has indicated convergence for an arbitrary reason 76178daaec8SBarry Smith . `KSP_DIVERGED_NULL` - breakdown when solving the Hessenberg system within `KSPGMRES` 762a4d1885cSBarry Smith . `KSP_DIVERGED_ITS` - requested number of iterations 76378daaec8SBarry Smith . `KSP_DIVERGED_DTOL` - large increase in the residual norm indicating the solution is diverging 764a4d1885cSBarry Smith . `KSP_DIVERGED_BREAKDOWN` - breakdown in the Krylov method 7658f47816eSPierre Jolivet . `KSP_DIVERGED_BREAKDOWN_BICG` - breakdown in the `KSPBCGS` Krylov method 766a4d1885cSBarry Smith . `KSP_DIVERGED_NONSYMMETRIC` - the operator or preonditioner was not symmetric for a `KSPType` that requires symmetry 76778daaec8SBarry Smith . `KSP_DIVERGED_INDEFINITE_PC` - the preconditioner was indefinite for a `KSPType` that requires it be definite, such as `KSPCG` 768a4d1885cSBarry Smith . `KSP_DIVERGED_NANORINF` - a not a number of infinity was detected in a vector during the computation 76978daaec8SBarry Smith . `KSP_DIVERGED_INDEFINITE_MAT` - the operator was indefinite for a `KSPType` that requires it be definite, such as `KSPCG` 770cc8c0b42SAlex Lindsay . `KSP_DIVERGED_PC_FAILED` - the action of the preconditioner failed for some reason 771cc8c0b42SAlex Lindsay - `KSP_DIVERGED_USER` - the user has indicated divergence for an arbitrary reason 772a4d1885cSBarry Smith 77316a05f60SBarry Smith Level: beginner 77416a05f60SBarry Smith 775a4d1885cSBarry Smith Note: 7766e7835fbSStefano Zampini The values `KSP_CONVERGED_NEG_CURVE`, and `KSP_CONVERGED_STEP_LENGTH` are returned only by `KSPCG`, `KSPMINRES` and by 7776e7835fbSStefano Zampini the special `KSPNASH`, `KSPSTCG`, and `KSPGLTR` solvers which are used by the `SNESNEWTONTR` (trust region) solver. 77828ce4d24SBarry Smith 77995bd0b28SBarry Smith Developer Note: 78087497f52SBarry Smith The string versions of these are `KSPConvergedReasons`; if you change 7814d0a8057SBarry Smith any of the values here also change them that array of names. 78286c02ca4SBarry Smith 7831cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPSetTolerances()`, `KSPConvergedReasonView()` 78428ce4d24SBarry Smith E*/ 785d15094e1SBarry Smith typedef enum { /* converged */ 78678daaec8SBarry Smith KSP_CONVERGED_RTOL_NORMAL_DEPRECATED = 1, 78778daaec8SBarry Smith KSP_CONVERGED_RTOL_NORMAL_EQUATIONS = 1, 78878daaec8SBarry Smith KSP_CONVERGED_ATOL_NORMAL_DEPRECATED = 9, 78978daaec8SBarry Smith KSP_CONVERGED_ATOL_NORMAL_EQUATIONS = 9, 790d15094e1SBarry Smith KSP_CONVERGED_RTOL = 2, 791d15094e1SBarry Smith KSP_CONVERGED_ATOL = 3, 792b335793eSSatish Balay KSP_CONVERGED_ITS = 4, 7934a221d59SStefano Zampini KSP_CONVERGED_NEG_CURVE = 5, 7944a221d59SStefano Zampini KSP_CONVERGED_CG_NEG_CURVE_DEPRECATED = 5, 7954a221d59SStefano Zampini KSP_CONVERGED_CG_CONSTRAINED_DEPRECATED = 6, 7964a221d59SStefano Zampini KSP_CONVERGED_STEP_LENGTH = 6, 7974a221d59SStefano Zampini KSP_CONVERGED_HAPPY_BREAKDOWN = 7, 798cc8c0b42SAlex Lindsay KSP_CONVERGED_USER = 8, 799d15094e1SBarry Smith /* diverged */ 800b3cc6726SBarry Smith KSP_DIVERGED_NULL = -2, 801d15094e1SBarry Smith KSP_DIVERGED_ITS = -3, 802d15094e1SBarry Smith KSP_DIVERGED_DTOL = -4, 803d15094e1SBarry Smith KSP_DIVERGED_BREAKDOWN = -5, 804b4ac9ba4SBarry Smith KSP_DIVERGED_BREAKDOWN_BICG = -6, 805b4ac9ba4SBarry Smith KSP_DIVERGED_NONSYMMETRIC = -7, 806b4ac9ba4SBarry Smith KSP_DIVERGED_INDEFINITE_PC = -8, 8074d51c080SBarry Smith KSP_DIVERGED_NANORINF = -9, 8086aee1118SBarry Smith KSP_DIVERGED_INDEFINITE_MAT = -10, 809c0decd05SBarry Smith KSP_DIVERGED_PC_FAILED = -11, 810aa4d2078SSatish Balay KSP_DIVERGED_PCSETUP_FAILED_DEPRECATED = -11, 811cc8c0b42SAlex Lindsay KSP_DIVERGED_USER = -12, 812d15094e1SBarry Smith 8139371c9d4SSatish Balay KSP_CONVERGED_ITERATING = 0 8149371c9d4SSatish Balay } KSPConvergedReason; 815014dd563SJed Brown PETSC_EXTERN const char *const *KSPConvergedReasons; 816d15094e1SBarry Smith 817c838673bSBarry Smith /*MC 818af27ebaaSBarry Smith KSP_CONVERGED_RTOL - $||r|| \le rtol*||b||$ or $rtol*||b - A*x_0||$ if `KSPConvergedDefaultSetUIRNorm()` was called 819c838673bSBarry Smith 820c838673bSBarry Smith Level: beginner 821c838673bSBarry Smith 82295bd0b28SBarry Smith Notes: 82387497f52SBarry Smith See `KSPNormType` and `KSPSetNormType()` for possible norms that may be used. By default 824c838673bSBarry Smith for left preconditioning it is the 2-norm of the preconditioned residual, and the 825c838673bSBarry Smith 2-norm of the residual for right preconditioning 826c838673bSBarry Smith 82787497f52SBarry Smith See also `KSP_CONVERGED_ATOL` which may apply before this tolerance. 828f9fed41fSBarry Smith 8291cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP_CONVERGED_ATOL`, `KSP_DIVERGED_DTOL`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 830c838673bSBarry Smith M*/ 831c838673bSBarry Smith 832c838673bSBarry Smith /*MC 833af27ebaaSBarry Smith KSP_CONVERGED_ATOL - $||r|| \le atol$ 834c838673bSBarry Smith 835c838673bSBarry Smith Level: beginner 836c838673bSBarry Smith 83795bd0b28SBarry Smith Notes: 83887497f52SBarry Smith See `KSPNormType` and `KSPSetNormType()` for possible norms that may be used. By default 839c838673bSBarry Smith for left preconditioning it is the 2-norm of the preconditioned residual, and the 840c838673bSBarry Smith 2-norm of the residual for right preconditioning 841c838673bSBarry Smith 84287497f52SBarry Smith See also `KSP_CONVERGED_RTOL` which may apply before this tolerance. 843c838673bSBarry Smith 8441cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPNormType`, `KSP_CONVERGED_RTOL`, `KSP_DIVERGED_DTOL`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 845c838673bSBarry Smith M*/ 846c838673bSBarry Smith 847c838673bSBarry Smith /*MC 848af27ebaaSBarry Smith KSP_DIVERGED_DTOL - $||r|| \ge dtol*||b||$ 849c838673bSBarry Smith 850c838673bSBarry Smith Level: beginner 851c838673bSBarry Smith 85295bd0b28SBarry Smith Note: 85387497f52SBarry Smith See `KSPNormType` and `KSPSetNormType()` for possible norms that may be used. By default 854c838673bSBarry Smith for left preconditioning it is the 2-norm of the preconditioned residual, and the 855c838673bSBarry Smith 2-norm of the residual for right preconditioning 856c838673bSBarry Smith 8570241b274SPierre Jolivet .seealso: [](ch_ksp), `KSPNormType`, `KSP_CONVERGED_ATOL`, `KSP_CONVERGED_RTOL`, `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 858c838673bSBarry Smith M*/ 859c838673bSBarry Smith 860c838673bSBarry Smith /*MC 861c838673bSBarry Smith KSP_DIVERGED_ITS - Ran out of iterations before any convergence criteria was 862c838673bSBarry Smith reached 863c838673bSBarry Smith 864c838673bSBarry Smith Level: beginner 865c838673bSBarry Smith 8661cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 867c838673bSBarry Smith M*/ 868c838673bSBarry Smith 869c838673bSBarry Smith /*MC 87087497f52SBarry Smith KSP_CONVERGED_ITS - Used by the `KSPPREONLY` solver after the single iteration of 87187497f52SBarry Smith the preconditioner is applied. Also used when the `KSPConvergedSkip()` convergence 872af27ebaaSBarry Smith test routine is set in `KSP`. 873c838673bSBarry Smith 874c838673bSBarry Smith Level: beginner 875c838673bSBarry Smith 8761cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 877c838673bSBarry Smith M*/ 878c838673bSBarry Smith 879c838673bSBarry Smith /*MC 880c838673bSBarry Smith KSP_DIVERGED_BREAKDOWN - A breakdown in the Krylov method was detected so the 8811de96524SPierre Jolivet method could not continue to enlarge the Krylov space. Could be due to a singular matrix or 88287497f52SBarry Smith preconditioner. In `KSPHPDDM`, this is also returned when some search directions within a block 88346091a0eSPierre Jolivet are collinear. 884c838673bSBarry Smith 885c838673bSBarry Smith Level: beginner 886c838673bSBarry Smith 8871cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 888c838673bSBarry Smith M*/ 889c838673bSBarry Smith 890c838673bSBarry Smith /*MC 89187497f52SBarry Smith KSP_DIVERGED_BREAKDOWN_BICG - A breakdown in the `KSPBICG` method was detected so the 892c838673bSBarry Smith method could not continue to enlarge the Krylov space. 893c838673bSBarry Smith 894c838673bSBarry Smith Level: beginner 895c838673bSBarry Smith 8961cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 897c838673bSBarry Smith M*/ 898c838673bSBarry Smith 899c838673bSBarry Smith /*MC 900c838673bSBarry Smith KSP_DIVERGED_NONSYMMETRIC - It appears the operator or preconditioner is not 90187497f52SBarry Smith symmetric and this Krylov method (`KSPCG`, `KSPMINRES`, `KSPCR`) requires symmetry 902c838673bSBarry Smith 903c838673bSBarry Smith Level: beginner 904c838673bSBarry Smith 9051cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 906c838673bSBarry Smith M*/ 907c838673bSBarry Smith 908c838673bSBarry Smith /*MC 909c838673bSBarry Smith KSP_DIVERGED_INDEFINITE_PC - It appears the preconditioner is indefinite (has both 91087497f52SBarry Smith positive and negative eigenvalues) and this Krylov method (`KSPCG`) requires it to 9110b4b7b1cSBarry Smith be symmetric positive definite (SPD). 912c838673bSBarry Smith 913c838673bSBarry Smith Level: beginner 914c838673bSBarry Smith 91587497f52SBarry Smith Note: 916a4d1885cSBarry Smith This can happen with the `PCICC` preconditioner, use the options database option `-pc_factor_shift_positive_definite` to force 91787497f52SBarry Smith the `PCICC` preconditioner to generate a positive definite preconditioner 918c838673bSBarry Smith 9191cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 920c838673bSBarry Smith M*/ 921c838673bSBarry Smith 922c838673bSBarry Smith /*MC 923c0decd05SBarry Smith KSP_DIVERGED_PC_FAILED - It was not possible to build or use the requested preconditioner. This is usually due to a 9249fc87aa7SBarry Smith zero pivot in a factorization. It can also result from a failure in a subpreconditioner inside a nested preconditioner 92587497f52SBarry Smith such as `PCFIELDSPLIT`. 9269fc87aa7SBarry Smith 9279fc87aa7SBarry Smith Level: beginner 9289fc87aa7SBarry Smith 929a4d1885cSBarry Smith Note: 930a4d1885cSBarry Smith Run with `-ksp_error_if_not_converged` to stop the program when the error is detected and print an error message with details. 9319fc87aa7SBarry Smith 9321cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 9339fc87aa7SBarry Smith M*/ 9349fc87aa7SBarry Smith 9359fc87aa7SBarry Smith /*MC 936a4d1885cSBarry Smith KSP_CONVERGED_ITERATING - This flag is returned if `KSPGetConvergedReason()` is called 937a4d1885cSBarry Smith while `KSPSolve()` is still running. 938c838673bSBarry Smith 939c838673bSBarry Smith Level: beginner 940c838673bSBarry Smith 9411cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPSolve()`, `KSPGetConvergedReason()`, `KSPConvergedReason`, `KSPSetTolerances()` 942c838673bSBarry Smith M*/ 943c838673bSBarry Smith 9444d4d2bdcSBarry Smith /*S 9454d4d2bdcSBarry Smith KSPConvergenceTestFn - A prototype of a function used with `KSPSetConvergenceTest()` 9464d4d2bdcSBarry Smith 9474d4d2bdcSBarry Smith Calling Sequence: 9484d4d2bdcSBarry Smith + ksp - iterative solver obtained from `KSPCreate()` 9494d4d2bdcSBarry Smith . it - iteration number 9504d4d2bdcSBarry Smith . rnorm - (estimated) 2-norm of (preconditioned) residual 9514d4d2bdcSBarry Smith . reason - the reason why it has converged or diverged 9524d4d2bdcSBarry Smith - ctx - optional convergence context, as set by `KSPSetConvergenceTest()` 9534d4d2bdcSBarry Smith 9544d4d2bdcSBarry Smith Level: beginner 9554d4d2bdcSBarry Smith 9564d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetConvergenceTest()`, `KSPGetConvergenceTest()` 9574d4d2bdcSBarry Smith S*/ 958*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPConvergenceTestFn(KSP ksp, PetscInt it, PetscReal rnorm, KSPConvergedReason *reason, PetscCtx ctx); 9594d4d2bdcSBarry Smith 9604d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPSetConvergenceTest(KSP, KSPConvergenceTestFn *, void *, PetscCtxDestroyFn *); 961*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetConvergenceTest(KSP, KSPConvergenceTestFn **, PetscCtxRt, PetscCtxDestroyFn **); 962*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetAndClearConvergenceTest(KSP, KSPConvergenceTestFn **, PetscCtxRt, PetscCtxDestroyFn **); 963*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetConvergenceContext(KSP, PetscCtxRt); 9644d4d2bdcSBarry Smith PETSC_EXTERN KSPConvergenceTestFn KSPConvergedDefault; 9654d4d2bdcSBarry Smith PETSC_EXTERN KSPConvergenceTestFn KSPLSQRConvergedDefault; 9664d4d2bdcSBarry Smith PETSC_EXTERN PetscCtxDestroyFn KSPConvergedDefaultDestroy; 9678de4e6dcSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedDefaultCreate(void **); 9688de4e6dcSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedDefaultSetUIRNorm(KSP); 9698de4e6dcSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedDefaultSetUMIRNorm(KSP); 97054b05d9cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPConvergedDefaultSetConvergedMaxits(KSP, PetscBool); 9710059c7bdSJed Brown PETSC_EXTERN PetscErrorCode KSPConvergedSkip(KSP, PetscInt, PetscReal, KSPConvergedReason *, void *); 972014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetConvergedReason(KSP, KSPConvergedReason *); 9734d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode KSPGetConvergedReasonString(KSP, const char *[]); 97494a4d4ebSMatthew G. Knepley PETSC_EXTERN PetscErrorCode KSPComputeConvergenceRate(KSP, PetscReal *, PetscReal *, PetscReal *, PetscReal *); 9752a28d964SStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetConvergedNegativeCurvature(KSP, PetscBool); 9762a28d964SStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetConvergedNegativeCurvature(KSP, PetscBool *); 977abef13c0SSatish Balay 978edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefault()", ) static inline void KSPDefaultConverged(void) 979d71ae5a4SJacob Faibussowitsch { /* never called */ 9809371c9d4SSatish Balay } 9818ea1b3e6SJed Brown #define KSPDefaultConverged (KSPDefaultConverged, KSPConvergedDefault) 982edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultDestroy()", ) static inline void KSPDefaultConvergedDestroy(void) 983d71ae5a4SJacob Faibussowitsch { /* never called */ 9849371c9d4SSatish Balay } 9858ea1b3e6SJed Brown #define KSPDefaultConvergedDestroy (KSPDefaultConvergedDestroy, KSPConvergedDefaultDestroy) 986edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultCreate()", ) static inline void KSPDefaultConvergedCreate(void) 987d71ae5a4SJacob Faibussowitsch { /* never called */ 9889371c9d4SSatish Balay } 9898ea1b3e6SJed Brown #define KSPDefaultConvergedCreate (KSPDefaultConvergedCreate, KSPConvergedDefaultCreate) 990edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultSetUIRNorm()", ) static inline void KSPDefaultConvergedSetUIRNorm(void) 991d71ae5a4SJacob Faibussowitsch { /* never called */ 9929371c9d4SSatish Balay } 9938ea1b3e6SJed Brown #define KSPDefaultConvergedSetUIRNorm (KSPDefaultConvergedSetUIRNorm, KSPConvergedDefaultSetUIRNorm) 994edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedDefaultSetUMIRNorm()", ) static inline void KSPDefaultConvergedSetUMIRNorm(void) 995d71ae5a4SJacob Faibussowitsch { /* never called */ 9969371c9d4SSatish Balay } 9978ea1b3e6SJed Brown #define KSPDefaultConvergedSetUMIRNorm (KSPDefaultConvergedSetUMIRNorm, KSPConvergedDefaultSetUMIRNorm) 998edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 5, 0, "KSPConvergedSkip()", ) static inline void KSPSkipConverged(void) 999d71ae5a4SJacob Faibussowitsch { /* never called */ 10009371c9d4SSatish Balay } 10018ea1b3e6SJed Brown #define KSPSkipConverged (KSPSkipConverged, KSPConvergedSkip) 10028ea1b3e6SJed Brown 10030bacdadaSStefano Zampini PETSC_EXTERN PetscErrorCode KSPComputeOperator(KSP, MatType, Mat *); 1004edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 12, 0, "KSPComputeOperator()", ) static inline PetscErrorCode KSPComputeExplicitOperator(KSP A, Mat *B) 1005d71ae5a4SJacob Faibussowitsch { 1006f22e26b7SPierre Jolivet return KSPComputeOperator(A, PETSC_NULLPTR, B); 10079371c9d4SSatish Balay } 1008d4fbbf0eSBarry Smith 100928ce4d24SBarry Smith /*E 1010a4d1885cSBarry Smith KSPCGType - Determines what type of `KSPCG` to use 101128ce4d24SBarry Smith 1012a4d1885cSBarry Smith Values: 1013a4d1885cSBarry Smith + `KSP_CG_SYMMETRIC` - the matrix is complex symmetric 1014a4d1885cSBarry Smith - `KSP_CG_HERMITIAN` - the matrix is complex Hermitian 1015a4d1885cSBarry Smith 101616a05f60SBarry Smith Level: beginner 101716a05f60SBarry Smith 10181cc06b55SBarry Smith .seealso: [](ch_ksp), `KSPCG`, `KSP`, `KSPCGSetType()` 101928ce4d24SBarry Smith E*/ 10209371c9d4SSatish Balay typedef enum { 10219371c9d4SSatish Balay KSP_CG_SYMMETRIC = 0, 10229371c9d4SSatish Balay KSP_CG_HERMITIAN = 1 10239371c9d4SSatish Balay } KSPCGType; 10246a6fc655SJed Brown PETSC_EXTERN const char *const KSPCGTypes[]; 102528ce4d24SBarry Smith 1026014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPCGSetType(KSP, KSPCGType); 1027014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPCGUseSingleReduction(KSP, PetscBool); 10288031f4adStmunson 1029dad1adc6STodd Munson PETSC_EXTERN PetscErrorCode KSPCGSetRadius(KSP, PetscReal); 1030fb01098fSStefano Zampini PETSC_EXTERN PetscErrorCode KSPCGSetObjectiveTarget(KSP, PetscReal); 1031dad1adc6STodd Munson PETSC_EXTERN PetscErrorCode KSPCGGetNormD(KSP, PetscReal *); 1032dad1adc6STodd Munson PETSC_EXTERN PetscErrorCode KSPCGGetObjFcn(KSP, PetscReal *); 1033fcae7a14Stmunson 103405de396fSBarry Smith PETSC_EXTERN PetscErrorCode KSPGLTRGetMinEig(KSP, PetscReal *); 103505de396fSBarry Smith PETSC_EXTERN PetscErrorCode KSPGLTRGetLambda(KSP, PetscReal *); 1036edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 12, 0, "KSPGLTRGetMinEig()", ) static inline PetscErrorCode KSPCGGLTRGetMinEig(KSP ksp, PetscReal *x) 1037d71ae5a4SJacob Faibussowitsch { 10389371c9d4SSatish Balay return KSPGLTRGetMinEig(ksp, x); 10399371c9d4SSatish Balay } 1040edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 12, 0, "KSPGLTRGetLambda()", ) static inline PetscErrorCode KSPCGGLTRGetLambda(KSP ksp, PetscReal *x) 1041d71ae5a4SJacob Faibussowitsch { 10429371c9d4SSatish Balay return KSPGLTRGetLambda(ksp, x); 10439371c9d4SSatish Balay } 10448031f4adStmunson 1045014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPPythonSetType(KSP, const char[]); 1046ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode KSPPythonGetType(KSP, const char *[]); 10471d6018f0SLisandro Dalcin 1048014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCPreSolve(PC, KSP); 1049014dd563SJed Brown PETSC_EXTERN PetscErrorCode PCPostSolve(PC, KSP); 10503369ce9aSBarry Smith 1051014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPMonitorLGRange(KSP, PetscInt, PetscReal, void *); 10522f2e5d10SKris Buschelman 10534d4d2bdcSBarry Smith /*S 10544d4d2bdcSBarry Smith PCShellPSolveFn - A function prototype for functions provided to `PCShellSetPreSolve()` and `PCShellSetPostSolve()` 10554d4d2bdcSBarry Smith 10564d4d2bdcSBarry Smith Calling Sequence: 10574d4d2bdcSBarry Smith + pc - the preconditioner `PC` context 10584d4d2bdcSBarry Smith . ksp - the `KSP` context 10594d4d2bdcSBarry Smith . xin - input vector 10604d4d2bdcSBarry Smith - xout - output vector 10614d4d2bdcSBarry Smith 10624d4d2bdcSBarry Smith Level: intermediate 10634d4d2bdcSBarry Smith 10644d4d2bdcSBarry Smith .seealso: [](ch_snes), `KSPPSolveFn`, `KSP`, `PCShellSetPreSolve()`, `PCShellSetPostSolve()` 10654d4d2bdcSBarry Smith S*/ 10664d4d2bdcSBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode PCShellPSolveFn(PC pc, KSP ksp, Vec xim, Vec xout); 10674d4d2bdcSBarry Smith 10684d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCShellSetPreSolve(PC, PCShellPSolveFn *); 10694d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode PCShellSetPostSolve(PC, PCShellPSolveFn *); 107003919abeSBarry Smith 1071ba36735cSStefano Zampini /*S 1072a4d1885cSBarry Smith KSPGuess - Abstract PETSc object that manages all initial guess generation methods for Krylov methods. 1073f8a50e2bSBarry Smith 1074a4d1885cSBarry Smith Level: intermediate 1075f8a50e2bSBarry Smith 10760b4b7b1cSBarry Smith Note: 10770b4b7b1cSBarry Smith These methods generate initial guesses based on a series of previous, related, linear solves. For example, 10780b4b7b1cSBarry Smith in implicit time-stepping with `TS`. 10790b4b7b1cSBarry Smith 10809168452cSPierre Jolivet .seealso: [](ch_ksp), `KSPCreate()`, `KSPGuessSetType()`, `KSPGuessType` 1081ba36735cSStefano Zampini S*/ 1082ba36735cSStefano Zampini typedef struct _p_KSPGuess *KSPGuess; 108316a05f60SBarry Smith 1084ba36735cSStefano Zampini /*J 108587497f52SBarry Smith KSPGuessType - String with the name of a PETSc initial guess approach for Krylov methods. 1086ba36735cSStefano Zampini 1087a4d1885cSBarry Smith Values: 1088a4d1885cSBarry Smith + `KSPGUESSFISCHER` - methodology developed by Paul Fischer 10890b4b7b1cSBarry Smith - `KSPGUESSPOD` - methodology based on proper orthogonal decomposition (POD) 1090a4d1885cSBarry Smith 109116a05f60SBarry Smith Level: intermediate 109216a05f60SBarry Smith 10931cc06b55SBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPGuess` 1094ba36735cSStefano Zampini J*/ 1095ba36735cSStefano Zampini typedef const char *KSPGuessType; 1096ba36735cSStefano Zampini #define KSPGUESSFISCHER "fischer" 1097ba36735cSStefano Zampini #define KSPGUESSPOD "pod" 1098a4d1885cSBarry Smith 10991d36bdfdSBarry Smith PETSC_EXTERN PetscErrorCode KSPGuessRegister(const char[], PetscErrorCode (*)(KSPGuess)); 1100ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetGuess(KSP, KSPGuess); 1101ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetGuess(KSP, KSPGuess *); 1102ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessView(KSPGuess, PetscViewer); 1103ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessDestroy(KSPGuess *); 1104ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessCreate(MPI_Comm, KSPGuess *); 1105ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessSetType(KSPGuess, KSPGuessType); 1106ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessGetType(KSPGuess, KSPGuessType *); 11078410009bSDavid Wells PETSC_EXTERN PetscErrorCode KSPGuessSetTolerance(KSPGuess, PetscReal); 1108ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessSetUp(KSPGuess); 1109ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessUpdate(KSPGuess, Vec, Vec); 1110ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessFormGuess(KSPGuess, Vec, Vec); 1111ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessSetFromOptions(KSPGuess); 1112ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGuessFischerSetModel(KSPGuess, PetscInt, PetscInt); 1113014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetUseFischerGuess(KSP, PetscInt, PetscInt); 1114ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPSetInitialGuessKnoll(KSP, PetscBool); 1115ba36735cSStefano Zampini PETSC_EXTERN PetscErrorCode KSPGetInitialGuessKnoll(KSP, PetscBool *); 1116f8a50e2bSBarry Smith 1117470b340bSDmitry Karpeev /*E 11187addb90fSBarry Smith MatSchurComplementAinvType - Determines how to approximate the inverse of the (0,0) block in Schur complement matrix assembly routines 1119470b340bSDmitry Karpeev 1120470b340bSDmitry Karpeev Level: intermediate 1121470b340bSDmitry Karpeev 1122a4d1885cSBarry Smith .seealso: `MatSchurComplementGetAinvType()`, `MatSchurComplementSetAinvType()`, `MatSchurComplementGetPmat()`, `MatGetSchurComplement()`, 11230b4b7b1cSBarry Smith `MatCreateSchurComplementPmat()`, `MatCreateSchurComplement()` 1124470b340bSDmitry Karpeev E*/ 11259371c9d4SSatish Balay typedef enum { 11269371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_DIAG, 11279371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_LUMP, 11289371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_BLOCK_DIAG, 11299371c9d4SSatish Balay MAT_SCHUR_COMPLEMENT_AINV_FULL 11309371c9d4SSatish Balay } MatSchurComplementAinvType; 1131470b340bSDmitry Karpeev PETSC_EXTERN const char *const MatSchurComplementAinvTypes[]; 1132470b340bSDmitry Karpeev 1133014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSchurComplement(Mat, Mat, Mat, Mat, Mat, Mat *); 1134014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSchurComplementGetKSP(Mat, KSP *); 1135d2768c1eSMatthew G Knepley PETSC_EXTERN PetscErrorCode MatSchurComplementSetKSP(Mat, KSP); 1136bee83525SDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementSetSubMatrices(Mat, Mat, Mat, Mat, Mat, Mat); 1137aa6c7ce3SBarry Smith PETSC_EXTERN PetscErrorCode MatSchurComplementUpdateSubMatrices(Mat, Mat, Mat, Mat, Mat, Mat); 1138bee83525SDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementGetSubMatrices(Mat, Mat *, Mat *, Mat *, Mat *, Mat *); 1139470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementSetAinvType(Mat, MatSchurComplementAinvType); 1140470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementGetAinvType(Mat, MatSchurComplementAinvType *); 11415bf40c1dSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSchurComplementGetPmat(Mat, MatReuse, Mat *); 11425a1c817aSMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatSchurComplementComputeExplicitOperator(Mat, Mat *); 1143470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatGetSchurComplement(Mat, IS, IS, IS, IS, MatReuse, Mat *, MatSchurComplementAinvType, MatReuse, Mat *); 1144470b340bSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatCreateSchurComplementPmat(Mat, Mat, Mat, Mat, MatSchurComplementAinvType, MatReuse, Mat *); 11453f22127dSBarry Smith 114678e4361aSAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMDFP(MPI_Comm, PetscInt, PetscInt, Mat *); 114778e4361aSAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMBFGS(MPI_Comm, PetscInt, PetscInt, Mat *); 1148bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatCreateLMVMDBFGS(MPI_Comm, PetscInt, PetscInt, Mat *); 1149bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatCreateLMVMDDFP(MPI_Comm, PetscInt, PetscInt, Mat *); 1150bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatCreateLMVMDQN(MPI_Comm, PetscInt, PetscInt, Mat *); 115178e4361aSAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMSR1(MPI_Comm, PetscInt, PetscInt, Mat *); 1152864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1153864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMBadBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1154864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMSymBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1155864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMSymBadBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1156864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatCreateLMVMDiagBroyden(MPI_Comm, PetscInt, PetscInt, Mat *); 1157cd929ea3SAlp Dener 1158cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMUpdate(Mat, Vec, Vec); 1159b2d8c577SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMIsAllocated(Mat, PetscBool *); 1160cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMAllocate(Mat, Vec, Vec); 1161cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMReset(Mat, PetscBool); 1162e0ed867bSAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMResetShift(Mat); 11630ad3a497SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMClearJ0(Mat); 1164cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0(Mat, Mat); 1165cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0Scale(Mat, PetscReal); 1166cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0Diag(Mat, Vec); 1167cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0PC(Mat, PC); 1168cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetJ0KSP(Mat, KSP); 11692d5e3849SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMApplyJ0Fwd(Mat, Vec, Vec); 1170cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMApplyJ0Inv(Mat, Vec, Vec); 11711ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMGetLastUpdate(Mat, Vec *, Vec *); 1172cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetJ0(Mat, Mat *); 1173cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetJ0PC(Mat, PC *); 1174cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetJ0KSP(Mat, KSP *); 117592f76d53SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSetHistorySize(Mat, PetscInt); 1176bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatLMVMGetHistorySize(Mat, PetscInt *); 1177cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetUpdateCount(Mat, PetscInt *); 1178cd929ea3SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMGetRejectCount(Mat, PetscInt *); 1179864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenSetDelta(Mat, PetscScalar); 1180e96a0efeSStefano Zampini 1181bbb72809SHansol Suh /*E 11821ca5963aSToby Isaac MatLMVMMultAlgorithm - The type of algorithm used for matrix-vector products and solves used internally by a `MatLMVM` matrix 11831ca5963aSToby Isaac 11841ca5963aSToby Isaac Values: 11851ca5963aSToby Isaac + `MAT_LMVM_MULT_RECURSIVE` - Use recursive formulas for products and solves 11861ca5963aSToby Isaac . `MAT_LMVM_MULT_DENSE` - Use dense formulas for products and solves when possible 11871ca5963aSToby 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 11881ca5963aSToby Isaac 11891ca5963aSToby Isaac Level: advanced 11901ca5963aSToby Isaac 11911ca5963aSToby Isaac Options Database Keys: 11921ca5963aSToby Isaac . -mat_lmvm_mult_algorithm - the algorithm to use for multiplication (recursive, dense, compact_dense) 11931ca5963aSToby Isaac 11941ca5963aSToby Isaac .seealso: [](ch_matrices), `MatLMVM`, `MatLMVMSetMultAlgorithm()`, `MatLMVMGetMultAlgorithm()` 11951ca5963aSToby Isaac E*/ 11961ca5963aSToby Isaac typedef enum { 11971ca5963aSToby Isaac MAT_LMVM_MULT_RECURSIVE, 11981ca5963aSToby Isaac MAT_LMVM_MULT_DENSE, 11991ca5963aSToby Isaac MAT_LMVM_MULT_COMPACT_DENSE, 12001ca5963aSToby Isaac } MatLMVMMultAlgorithm; 12011ca5963aSToby Isaac 12021ca5963aSToby Isaac PETSC_EXTERN const char *const MatLMVMMultAlgorithms[]; 12031ca5963aSToby Isaac 12041ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSetMultAlgorithm(Mat, MatLMVMMultAlgorithm); 12051ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMGetMultAlgorithm(Mat, MatLMVMMultAlgorithm *); 12061ca5963aSToby Isaac 12071ca5963aSToby Isaac /*E 12081ca5963aSToby Isaac MatLMVMSymBroydenScaleType - Rescaling type for the initial Hessian of a symmetric Broyden matrix. 1209bbb72809SHansol Suh 1210bbb72809SHansol Suh Values: 1211b6982945SToby Isaac + `MAT_LMVM_SYMBROYDEN_SCALE_NONE` - no rescaling 1212b6982945SToby Isaac . `MAT_LMVM_SYMBROYDEN_SCALE_SCALAR` - scalar rescaling 1213b6982945SToby Isaac . `MAT_LMVM_SYMBROYDEN_SCALE_DIAGONAL` - diagonal rescaling 1214b6982945SToby Isaac . `MAT_LMVM_SYMBROYDEN_SCALE_USER` - same as `MAT_LMVM_SYMBROYDN_SCALE_NONE` 1215b6982945SToby Isaac - `MAT_LMVM_SYMBROYDEN_SCALE_DECIDE` - let PETSc decide rescaling 1216bbb72809SHansol Suh 1217bbb72809SHansol Suh Level: intermediate 1218bbb72809SHansol Suh 1219bbb72809SHansol Suh .seealso: [](ch_matrices), `MatLMVM`, `MatLMVMSymBroydenSetScaleType()` 1220bbb72809SHansol Suh E*/ 1221e96a0efeSStefano Zampini typedef enum { 1222e96a0efeSStefano Zampini MAT_LMVM_SYMBROYDEN_SCALE_NONE = 0, 1223e96a0efeSStefano Zampini MAT_LMVM_SYMBROYDEN_SCALE_SCALAR = 1, 1224e96a0efeSStefano Zampini MAT_LMVM_SYMBROYDEN_SCALE_DIAGONAL = 2, 1225b6982945SToby Isaac MAT_LMVM_SYMBROYDEN_SCALE_USER = 3, 1226b6982945SToby Isaac MAT_LMVM_SYMBROYDEN_SCALE_DECIDE = 4 1227e96a0efeSStefano Zampini } MatLMVMSymBroydenScaleType; 1228e96a0efeSStefano Zampini PETSC_EXTERN const char *const MatLMVMSymBroydenScaleTypes[]; 1229e96a0efeSStefano Zampini 1230864588a7SAlp Dener PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenSetScaleType(Mat, MatLMVMSymBroydenScaleType); 12311ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenGetPhi(Mat, PetscReal *); 12321ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBroydenSetPhi(Mat, PetscReal); 12331ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBadBroydenGetPsi(Mat, PetscReal *); 12341ca5963aSToby Isaac PETSC_EXTERN PetscErrorCode MatLMVMSymBadBroydenSetPsi(Mat, PetscReal); 1235cd929ea3SAlp Dener 1236bbb72809SHansol Suh /*E 12370b4b7b1cSBarry Smith MatLMVMDenseType - Memory storage strategy for dense variants of `MATLMVM`. 1238bbb72809SHansol Suh 1239bbb72809SHansol Suh Values: 1240bbb72809SHansol Suh + `MAT_LMVM_DENSE_REORDER` - reorders memory to minimize kernel launch 1241bbb72809SHansol Suh - `MAT_LMVM_DENSE_INPLACE` - computes inplace to minimize memory movement 1242bbb72809SHansol Suh 1243bbb72809SHansol Suh Level: intermediate 1244bbb72809SHansol Suh 1245bbb72809SHansol Suh .seealso: [](ch_matrices), `MatLMVM`, `MatLMVMDenseSetType()` 1246bbb72809SHansol Suh E*/ 1247bbb72809SHansol Suh typedef enum { 1248bbb72809SHansol Suh MAT_LMVM_DENSE_REORDER, 1249bbb72809SHansol Suh MAT_LMVM_DENSE_INPLACE 1250bbb72809SHansol Suh } MatLMVMDenseType; 1251bbb72809SHansol Suh PETSC_EXTERN const char *const MatLMVMDenseTypes[]; 1252bbb72809SHansol Suh 1253bbb72809SHansol Suh PETSC_EXTERN PetscErrorCode MatLMVMDenseSetType(Mat, MatLMVMDenseType); 1254bbb72809SHansol Suh 1255014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDM(KSP, DM); 1256014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPSetDMActive(KSP, PetscBool); 1257014dd563SJed Brown PETSC_EXTERN PetscErrorCode KSPGetDM(KSP, DM *); 1258*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetApplicationContext(KSP, PetscCtx); 1259*2a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode KSPGetApplicationContext(KSP, PetscCtxRt); 12607b578ef6SBarry Smith 12617b578ef6SBarry Smith /*S 12628434afd1SBarry Smith KSPComputeRHSFn - A prototype of a `KSP` evaluation function that would be passed to `KSPSetComputeRHS()` 12637b578ef6SBarry Smith 12647b578ef6SBarry Smith Calling Sequence: 12657b578ef6SBarry Smith + ksp - `ksp` context 12667b578ef6SBarry Smith . b - output vector 12677b578ef6SBarry Smith - ctx - [optional] user-defined function context 12687b578ef6SBarry Smith 12697b578ef6SBarry Smith Level: beginner 12707b578ef6SBarry Smith 12714d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetComputeRHS()`, `SNESGetFunction()`, `KSPComputeInitialGuessFn`, `KSPComputeOperatorsFn` 12727b578ef6SBarry Smith S*/ 1273*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPComputeRHSFn(KSP ksp, Vec b, PetscCtx ctx); 12747b578ef6SBarry Smith 12758434afd1SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetComputeRHS(KSP, KSPComputeRHSFn *, void *); 12767b578ef6SBarry Smith 12777b578ef6SBarry Smith /*S 12788434afd1SBarry Smith KSPComputeOperatorsFn - A prototype of a `KSP` evaluation function that would be passed to `KSPSetComputeOperators()` 12797b578ef6SBarry Smith 12807b578ef6SBarry Smith Calling Sequence: 12817b578ef6SBarry Smith + ksp - `KSP` context 12827b578ef6SBarry Smith . A - the operator that defines the linear system 12837b578ef6SBarry Smith . P - an operator from which to build the preconditioner (often the same as `A`) 12847b578ef6SBarry Smith - ctx - [optional] user-defined function context 12857b578ef6SBarry Smith 12867b578ef6SBarry Smith Level: beginner 12877b578ef6SBarry Smith 12884d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetComputeRHS()`, `SNESGetFunction()`, `KSPComputeRHSFn`, `KSPComputeInitialGuessFn` 12897b578ef6SBarry Smith S*/ 1290*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPComputeOperatorsFn(KSP ksp, Mat A, Mat P, PetscCtx ctx); 12917b578ef6SBarry Smith 12928434afd1SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetComputeOperators(KSP, KSPComputeOperatorsFn, void *); 12937b578ef6SBarry Smith 12947b578ef6SBarry Smith /*S 12958434afd1SBarry Smith KSPComputeInitialGuessFn - A prototype of a `KSP` evaluation function that would be passed to `KSPSetComputeInitialGuess()` 12967b578ef6SBarry Smith 12977b578ef6SBarry Smith Calling Sequence: 12987b578ef6SBarry Smith + ksp - `ksp` context 12997b578ef6SBarry Smith . x - output vector 13007b578ef6SBarry Smith - ctx - [optional] user-defined function context 13017b578ef6SBarry Smith 13027b578ef6SBarry Smith Level: beginner 13037b578ef6SBarry Smith 13044d4d2bdcSBarry Smith .seealso: [](ch_ksp), `KSP`, `KSPSetComputeInitialGuess()`, `SNESGetFunction()`, `KSPComputeRHSFn`, `KSPComputeOperatorsFn` 13057b578ef6SBarry Smith S*/ 1306*2a8381b2SBarry Smith PETSC_EXTERN_TYPEDEF typedef PetscErrorCode KSPComputeInitialGuessFn(KSP ksp, Vec x, PetscCtx ctx); 13077b578ef6SBarry Smith 13088434afd1SBarry Smith PETSC_EXTERN PetscErrorCode KSPSetComputeInitialGuess(KSP, KSPComputeInitialGuessFn *, void *); 13098434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPSetComputeOperators(DM, KSPComputeOperatorsFn *, void *); 13108434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPGetComputeOperators(DM, KSPComputeOperatorsFn **, void *); 13118434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPSetComputeRHS(DM, KSPComputeRHSFn *, void *); 13128434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPGetComputeRHS(DM, KSPComputeRHSFn **, void *); 13138434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPSetComputeInitialGuess(DM, KSPComputeInitialGuessFn *, void *); 13148434afd1SBarry Smith PETSC_EXTERN PetscErrorCode DMKSPGetComputeInitialGuess(DM, KSPComputeInitialGuessFn **, void *); 13156c699258SBarry Smith 131602b02e71SToby Isaac PETSC_EXTERN PetscErrorCode DMGlobalToLocalSolve(DM, Vec, Vec); 13171898fd5cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmProjectFields(DM, DM, PetscInt, const char *[], Vec[], ScatterMode); 13181898fd5cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmProjectGradientFields(DM, DM, PetscInt, const char *[], Vec[], ScatterMode); 1319557cf195SMatthew G. Knepley 13202b3cbbdaSStefano Zampini PETSC_EXTERN PetscErrorCode DMAdaptInterpolator(DM, DM, Mat, KSP, Mat, Mat, Mat *, void *); 13212b3cbbdaSStefano Zampini PETSC_EXTERN PetscErrorCode DMCheckInterpolator(DM, Mat, Mat, Mat, PetscReal); 13224bf303faSJacob Faibussowitsch 13234bf303faSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PCBJKOKKOSSetKSP(PC, KSP); 13244bf303faSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PCBJKOKKOSGetKSP(PC, KSP *); 13255d83a8b1SBarry Smith 13265d83a8b1SBarry Smith PETSC_EXTERN PetscErrorCode DMCopyDMKSP(DM, DM); 13274d4d2bdcSBarry Smith 13284d4d2bdcSBarry Smith #include <petscdstypes.h> 13294d4d2bdcSBarry Smith PETSC_EXTERN PetscErrorCode DMProjectField(DM, PetscReal, Vec, PetscPointFn **, InsertMode, Vec); 1330