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