Actual source code: petscksp.h
1: /* $Id: petscksp.h,v 1.100 2001/03/22 20:31:17 bsmith Exp $ */
2: /*
3: Defines the interface functions for the Krylov subspace accelerators.
4: */
5: #ifndef __PETSCKSP_H
7: #include "petscpc.h"
9: #define KSP_COOKIE PETSC_COOKIE+8
11: /*S
12: KSP - Abstract PETSc object that manages all Krylov methods
14: Level: beginner
16: Concepts: Krylov methods
18: .seealso: KSPCreate(), KSPSetType(), KSPType, SNES, TS, PC, SLES
19: S*/
20: typedef struct _p_KSP* KSP;
22: /*E
23: KSPType - String with the name of a PETSc Krylov method or the creation function
24: with an optional dynamic library name, for example
25: http://www.mcs.anl.gov/petsc/lib.a:mykspcreate()
27: Level: beginner
29: .seealso: KSPSetType(), KSP
30: E*/
31: #define KSPRICHARDSON "richardson"
32: #define KSPCHEBYCHEV "chebychev"
33: #define KSPCG "cg"
34: #define KSPGMRES "gmres"
35: #define KSPTCQMR "tcqmr"
36: #define KSPBCGS "bcgs"
37: #define KSPCGS "cgs"
38: #define KSPTFQMR "tfqmr"
39: #define KSPCR "cr"
40: #define KSPLSQR "lsqr"
41: #define KSPPREONLY "preonly"
42: #define KSPQCG "qcg"
43: #define KSPBICG "bicg"
44: #define KSPFGMRES "fgmres"
45: #define KSPMINRES "minres"
46: #define KSPSYMMLQ "symmlq"
47: typedef char * KSPType;
49: EXTERN int KSPCreate(MPI_Comm,KSP *);
50: EXTERN int KSPSetType(KSP,KSPType);
51: EXTERN int KSPSetUp(KSP);
52: EXTERN int KSPSolve(KSP,int *);
53: EXTERN int KSPSolveTranspose(KSP,int *);
54: EXTERN int KSPDestroy(KSP);
56: extern PetscFList KSPList;
57: EXTERN int KSPRegisterAll(char *);
58: EXTERN int KSPRegisterDestroy(void);
60: EXTERN int KSPRegister(char*,char*,char*,int(*)(KSP));
61: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
62: #define KSPRegisterDynamic(a,b,c,d) KSPRegister(a,b,c,0)
63: #else
64: #define KSPRegisterDynamic(a,b,c,d) KSPRegister(a,b,c,d)
65: #endif
67: EXTERN int KSPGetType(KSP,KSPType *);
68: EXTERN int KSPSetPreconditionerSide(KSP,PCSide);
69: EXTERN int KSPGetPreconditionerSide(KSP,PCSide*);
70: EXTERN int KSPGetTolerances(KSP,double*,double*,double*,int*);
71: EXTERN int KSPSetTolerances(KSP,double,double,double,int);
72: EXTERN int KSPSetComputeResidual(KSP,PetscTruth);
73: EXTERN int KSPSetUsePreconditionedResidual(KSP);
74: EXTERN int KSPSetInitialGuessNonzero(KSP);
75: EXTERN int KSPGetInitialGuessNonzero(KSP,PetscTruth *);
76: EXTERN int KSPSetComputeEigenvalues(KSP);
77: EXTERN int KSPSetComputeSingularValues(KSP);
78: EXTERN int KSPSetRhs(KSP,Vec);
79: EXTERN int KSPGetRhs(KSP,Vec *);
80: EXTERN int KSPSetSolution(KSP,Vec);
81: EXTERN int KSPGetSolution(KSP,Vec *);
82: EXTERN int KSPGetResidualNorm(KSP,double*);
83: EXTERN int KSPGetIterationNumber(KSP,int*);
85: EXTERN int KSPSetPC(KSP,PC);
86: EXTERN int KSPGetPC(KSP,PC*);
88: EXTERN int KSPSetAvoidNorms(KSP);
90: EXTERN int KSPSetMonitor(KSP,int (*)(KSP,int,double,void*),void *,int (*)(void*));
91: EXTERN int KSPClearMonitor(KSP);
92: EXTERN int KSPGetMonitorContext(KSP,void **);
93: EXTERN int KSPGetResidualHistory(KSP,double **,int *);
94: EXTERN int KSPSetResidualHistory(KSP,double *,int,PetscTruth);
97: EXTERN int KSPBuildSolution(KSP,Vec,Vec *);
98: EXTERN int KSPBuildResidual(KSP,Vec,Vec,Vec *);
100: EXTERN int KSPRichardsonSetScale(KSP,double);
101: EXTERN int KSPChebychevSetEigenvalues(KSP,double,double);
102: EXTERN int KSPComputeExtremeSingularValues(KSP,double*,double*);
103: EXTERN int KSPComputeEigenvalues(KSP,int,double*,double*,int *);
104: EXTERN int KSPComputeEigenvaluesExplicitly(KSP,int,double*,double*);
106: EXTERN int KSPGMRESSetRestart(KSP,int);
107: EXTERN int KSPGMRESSetHapTol(KSP,double);
108: EXTERN int KSPGMRESSetPreAllocateVectors(KSP);
109: EXTERN int KSPGMRESSetOrthogonalization(KSP,int (*)(KSP,int));
110: EXTERN int KSPGMRESUnmodifiedGramSchmidtOrthogonalization(KSP,int);
111: EXTERN int KSPGMRESModifiedGramSchmidtOrthogonalization(KSP,int);
112: EXTERN int KSPGMRESIROrthogonalization(KSP,int);
114: EXTERN int KSPFGMRESModifyPCNoChange(KSP,int,int,double,void*);
115: EXTERN int KSPFGMRESModifyPCSLES(KSP,int,int,double,void*);
116: EXTERN int KSPFGMRESSetModifyPC(KSP,int (*)(KSP,int,int,double,void*),void*,int(*)(void*));
118: EXTERN int KSPSetFromOptions(KSP);
119: EXTERN int KSPSetTypeFromOptions(KSP);
120: EXTERN int KSPAddOptionsChecker(int (*)(KSP));
122: EXTERN int KSPSingularValueMonitor(KSP,int,double,void *);
123: EXTERN int KSPDefaultMonitor(KSP,int,double,void *);
124: EXTERN int KSPTrueMonitor(KSP,int,double,void *);
125: EXTERN int KSPDefaultSMonitor(KSP,int,double,void *);
126: EXTERN int KSPVecViewMonitor(KSP,int,double,void *);
127: EXTERN int KSPGMRESKrylovMonitor(KSP,int,double,void *);
129: EXTERN int KSPUnwindPreconditioner(KSP,Vec,Vec);
130: EXTERN int KSPDefaultBuildSolution(KSP,Vec,Vec*);
131: EXTERN int KSPDefaultBuildResidual(KSP,Vec,Vec,Vec *);
133: EXTERN int KSPSetOptionsPrefix(KSP,char*);
134: EXTERN int KSPAppendOptionsPrefix(KSP,char*);
135: EXTERN int KSPGetOptionsPrefix(KSP,char**);
137: EXTERN int KSPView(KSP,PetscViewer);
139: /*E
140: KSPConvergedReason - reason a Krylov method was said to
141: have converged or diverged
143: Level: beginner
145: Notes: this must match finclude/petscksp.h
147: .seealso: SLESSolve(), KSPSolve(), KSPGetConvergedReason()
148: E*/
149: typedef enum {/* converged */
150: KSP_CONVERGED_RTOL = 2,
151: KSP_CONVERGED_ATOL = 3,
152: KSP_CONVERGED_ITS = 4,
153: KSP_CONVERGED_QCG_NEG_CURVE = 5,
154: KSP_CONVERGED_QCG_CONSTRAINED = 6,
155: KSP_CONVERGED_STEP_LENGTH = 7,
156: /* diverged */
157: KSP_DIVERGED_ITS = -3,
158: KSP_DIVERGED_DTOL = -4,
159: KSP_DIVERGED_BREAKDOWN = -5,
160: KSP_DIVERGED_BREAKDOWN_BICG = -6,
161: KSP_DIVERGED_NONSYMMETRIC = -7,
162: KSP_DIVERGED_INDEFINITE_PC = -8,
163:
164: KSP_CONVERGED_ITERATING = 0} KSPConvergedReason;
166: EXTERN int KSPSetConvergenceTest(KSP,int (*)(KSP,int,double,KSPConvergedReason*,void*),void *);
167: EXTERN int KSPGetConvergenceContext(KSP,void **);
168: EXTERN int KSPDefaultConverged(KSP,int,double,KSPConvergedReason*,void *);
169: EXTERN int KSPSkipConverged(KSP,int,double,KSPConvergedReason*,void *);
170: EXTERN int KSPGetConvergedReason(KSP,KSPConvergedReason *);
172: EXTERN int KSPComputeExplicitOperator(KSP,Mat *);
174: /*E
175: KSPCGType - Determines what type of CG to use
177: Level: beginner
179: .seealso: KSPCGSetType()
180: E*/
181: typedef enum {KSP_CG_SYMMETRIC=1,KSP_CG_HERMITIAN=2} KSPCGType;
183: EXTERN int KSPCGSetType(KSP,KSPCGType);
185: EXTERN int PCPreSolve(PC,KSP);
186: EXTERN int PCPostSolve(PC,KSP);
188: EXTERN int KSPLGMonitorCreate(char*,char*,int,int,int,int,PetscDrawLG*);
189: EXTERN int KSPLGMonitor(KSP,int,double,void*);
190: EXTERN int KSPLGMonitorDestroy(PetscDrawLG);
191: EXTERN int KSPLGTrueMonitorCreate(MPI_Comm,char*,char*,int,int,int,int,PetscDrawLG*);
192: EXTERN int KSPLGTrueMonitor(KSP,int,double,void*);
193: EXTERN int KSPLGTrueMonitorDestroy(PetscDrawLG);
195: #endif