xref: /petsc/include/petscksp.h (revision 25fce39db763b96e86893f443c9c1d1d6cefe91b)
1*25fce39dSBarry Smith /* $Id: ksp.h,v 1.58 1997/08/07 14:43:40 bsmith Exp bsmith $ */
2f26ada1bSBarry Smith /*
3f26ada1bSBarry Smith    Defines the interface functions for the Krylov subspace accelerators.
4f26ada1bSBarry Smith */
52eac72dbSBarry Smith #ifndef __KSP_PACKAGE
62eac72dbSBarry Smith #define __KSP_PACKAGE
72eac72dbSBarry Smith #include "petsc.h"
82eac72dbSBarry Smith #include "vec.h"
9aabeff55SBarry Smith #include "mat.h"
10aabeff55SBarry Smith #include "pc.h"
112eac72dbSBarry Smith 
129e25ed09SBarry Smith #define KSP_COOKIE  PETSC_COOKIE+8
13f0479e8cSBarry Smith 
14e2a1c21fSSatish Balay typedef struct _p_KSP*     KSP;
152eac72dbSBarry Smith 
16f26ada1bSBarry Smith typedef enum { KSPRICHARDSON, KSPCHEBYCHEV, KSPCG, KSPGMRES, KSPTCQMR, KSPBCGS,
1784cb2905SBarry Smith                KSPCGS, KSPTFQMR, KSPCR, KSPLSQR, KSPPREONLY, KSPQCG, KSPNEW} KSPType;
182eac72dbSBarry Smith 
196b5873e3SBarry Smith extern int KSPCreate(MPI_Comm,KSP *);
204b0e389bSBarry Smith extern int KSPSetType(KSP,KSPType);
218ed539a5SBarry Smith extern int KSPSetUp(KSP);
228ed539a5SBarry Smith extern int KSPSolve(KSP,int *);
238ed539a5SBarry Smith extern int KSPDestroy(KSP);
242eac72dbSBarry Smith 
258ed539a5SBarry Smith extern int KSPRegisterAll();
26d6dfbf8fSBarry Smith extern int KSPRegisterDestroy();
2784cb2905SBarry Smith extern int KSPRegister(KSPType,KSPType*,char *,int (*)(KSP));
2884cb2905SBarry Smith extern int KSPRegisterAllCalled;
292eac72dbSBarry Smith 
304b0e389bSBarry Smith extern int KSPGetType(KSP, KSPType *,char **);
31aad2872bSLois Curfman McInnes extern int KSPSetPreconditionerSide(KSP,PCSide);
32aad2872bSLois Curfman McInnes extern int KSPGetPreconditionerSide(KSP,PCSide*);
33ae622e99SLois Curfman McInnes extern int KSPGetTolerances(KSP,double*,double*,double*,int*);
34f9a5357eSLois Curfman McInnes extern int KSPSetTolerances(KSP,double,double,double,int);
35d4fbbf0eSBarry Smith extern int KSPSetComputeResidual(KSP,PetscTruth);
368ed539a5SBarry Smith extern int KSPSetUsePreconditionedResidual(KSP);
37c39b5c85SLois Curfman McInnes extern int KSPSetInitialGuessNonzero(KSP);
3890f02eecSBarry Smith extern int KSPSetComputeEigenvalues(KSP);
39d4fbbf0eSBarry Smith extern int KSPSetComputeSingularValues(KSP);
408ed539a5SBarry Smith extern int KSPSetRhs(KSP,Vec);
418ed539a5SBarry Smith extern int KSPGetRhs(KSP,Vec *);
428ed539a5SBarry Smith extern int KSPSetSolution(KSP,Vec);
438ed539a5SBarry Smith extern int KSPGetSolution(KSP,Vec *);
44*25fce39dSBarry Smith extern int KSPGetResidualNorm(KSP,double*);
452eac72dbSBarry Smith 
4677c4ece6SBarry Smith extern int KSPSetPC(KSP,PC);
4777c4ece6SBarry Smith extern int KSPGetPC(KSP,PC*);
48aabeff55SBarry Smith 
498ed539a5SBarry Smith extern int KSPSetMonitor(KSP,int (*)(KSP,int,double, void*), void *);
508ed539a5SBarry Smith extern int KSPGetMonitorContext(KSP,void **);
518ed539a5SBarry Smith extern int KSPSetResidualHistory(KSP, double *,int);
524b0e389bSBarry Smith 
538ed539a5SBarry Smith extern int KSPSetConvergenceTest(KSP,int (*)(KSP,int,double, void*), void *);
548ed539a5SBarry Smith extern int KSPGetConvergenceContext(KSP,void **);
552eac72dbSBarry Smith 
568ed539a5SBarry Smith extern int KSPBuildSolution(KSP, Vec,Vec *);
578ed539a5SBarry Smith extern int KSPBuildResidual(KSP, Vec, Vec,Vec *);
582eac72dbSBarry Smith 
598ed539a5SBarry Smith extern int KSPRichardsonSetScale(KSP , double);
608ed539a5SBarry Smith extern int KSPChebychevSetEigenvalues(KSP , double, double);
61d4fbbf0eSBarry Smith extern int KSPComputeExtremeSingularValues(KSP, double*,double*);
62d4fbbf0eSBarry Smith extern int KSPComputeEigenvalues(KSP,int,double*,double*);
63d4fbbf0eSBarry Smith extern int KSPComputeEigenvaluesExplicitly(KSP,int,double*,double*);
644b0e389bSBarry Smith 
658ed539a5SBarry Smith extern int KSPGMRESSetRestart(KSP, int);
66b4fd4287SBarry Smith extern int KSPGMRESSetPreAllocateVectors(KSP);
6777c4ece6SBarry Smith extern int KSPGMRESSetOrthogonalization(KSP,int (*)(KSP,int));
68bcd2baecSBarry Smith extern int KSPGMRESUnmodifiedGramSchmidtOrthogonalization(KSP,int);
69bcd2baecSBarry Smith extern int KSPGMRESModifiedGramSchmidtOrthogonalization(KSP,int);
70bcd2baecSBarry Smith extern int KSPGMRESIROrthogonalization(KSP,int);
71eed86810SBarry Smith extern int KSPGMRESDGKSOrthogonalization(KSP,int);
7208480c60SBarry Smith 
738ed539a5SBarry Smith extern int KSPSetFromOptions(KSP);
74639f9d9dSBarry Smith extern int KSPAddOptionsChecker(int (*)(KSP));
752eac72dbSBarry Smith 
768f4c8dbaSBarry Smith extern int KSPSingularValueMonitor(KSP,int,double, void * );
778ed539a5SBarry Smith extern int KSPDefaultMonitor(KSP,int,double, void *);
78af6b99e9SBarry Smith extern int KSPTrueMonitor(KSP,int,double, void *);
798c48e012SBarry Smith extern int KSPDefaultSMonitor(KSP,int,double, void *);
8084cb2905SBarry Smith 
818ed539a5SBarry Smith extern int KSPDefaultConverged(KSP,int,double, void *);
822eac72dbSBarry Smith 
83c01c455dSBarry Smith extern int KSPResidual(KSP,Vec,Vec,Vec,Vec,Vec,Vec);
8477c4ece6SBarry Smith extern int KSPUnwindPreconditioner(KSP,Vec,Vec);
85c01c455dSBarry Smith extern int KSPDefaultBuildSolution(KSP,Vec,Vec*);
86c01c455dSBarry Smith extern int KSPDefaultBuildResidual(KSP,Vec,Vec,Vec *);
87c01c455dSBarry Smith 
888ed539a5SBarry Smith extern int KSPPrintHelp(KSP);
898ed539a5SBarry Smith 
901eb62cbbSBarry Smith extern int KSPSetOptionsPrefix(KSP,char*);
910985bb82SSatish Balay extern int KSPAppendOptionsPrefix(KSP,char*);
920985bb82SSatish Balay extern int KSPGetOptionsPrefix(KSP,char**);
931eb62cbbSBarry Smith 
948ed539a5SBarry Smith extern int KSPView(KSP,Viewer);
951eb62cbbSBarry Smith 
96d4fbbf0eSBarry Smith extern int KSPComputeExplicitOperator(KSP,Mat *);
97d4fbbf0eSBarry Smith 
986d4a8577SBarry Smith typedef enum {KSP_CG_SYMMETRIC=1, KSP_CG_HERMITIAN=2} KSPCGType;
996d4a8577SBarry Smith extern int KSPCGSetType(KSP,KSPCGType);
100e559a7feSLois Curfman McInnes 
1013369ce9aSBarry Smith extern int PCPreSolve(PC,KSP);
1023369ce9aSBarry Smith extern int PCPostSolve(PC,KSP);
1033369ce9aSBarry Smith 
104d7e8b826SBarry Smith extern int KSPLGMonitorCreate(char*,char*,int,int,int,int,DrawLG*);
1051eb62cbbSBarry Smith extern int KSPLGMonitor(KSP,int,double,void*);
106d7e8b826SBarry Smith extern int KSPLGMonitorDestroy(DrawLG);
1073b2fbd54SBarry Smith extern int KSPLGTrueMonitorCreate(MPI_Comm,char*,char*,int,int,int,int,DrawLG*);
108af6b99e9SBarry Smith extern int KSPLGTrueMonitor(KSP,int,double,void*);
109af6b99e9SBarry Smith extern int KSPLGTrueMonitorDestroy(DrawLG);
1101eb62cbbSBarry Smith 
1112eac72dbSBarry Smith #endif
1122eac72dbSBarry Smith 
1132eac72dbSBarry Smith 
114