xref: /petsc/include/petscksp.h (revision 82bf6240e2c962f3f106f2e53a46e3db58a7d347)
1*82bf6240SBarry Smith /* $Id: ksp.h,v 1.62 1998/01/27 23:47:29 curfman 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 
16*82bf6240SBarry Smith #define KSPRICHARDSON "richardson"
17*82bf6240SBarry Smith #define KSPCHEBYCHEV  "chebychev"
18*82bf6240SBarry Smith #define KSPCG         "cg"
19*82bf6240SBarry Smith #define KSPGMRES      "gmres"
20*82bf6240SBarry Smith #define KSPTCQMR      "tcqmr"
21*82bf6240SBarry Smith #define KSPBCGS       "bcgs"
22*82bf6240SBarry Smith #define KSPCGS        "cgs"
23*82bf6240SBarry Smith #define KSPTFQMR      "tfqmr"
24*82bf6240SBarry Smith #define KSPCR         "cr"
25*82bf6240SBarry Smith #define KSPLSQR       "lsqr"
26*82bf6240SBarry Smith #define KSPPREONLY    "preonly"
27*82bf6240SBarry Smith #define KSPQCG        "qcg"
28*82bf6240SBarry Smith #define KSPTRLS       "trls"
29*82bf6240SBarry Smith typedef char * KSPType;
302eac72dbSBarry Smith 
316b5873e3SBarry Smith extern int KSPCreate(MPI_Comm,KSP *);
324b0e389bSBarry Smith extern int KSPSetType(KSP,KSPType);
338ed539a5SBarry Smith extern int KSPSetUp(KSP);
348ed539a5SBarry Smith extern int KSPSolve(KSP,int *);
358ed539a5SBarry Smith extern int KSPDestroy(KSP);
362eac72dbSBarry Smith 
37*82bf6240SBarry Smith extern DLList KSPList;
38*82bf6240SBarry Smith extern int KSPRegisterAll(char *);
39d6dfbf8fSBarry Smith extern int KSPRegisterDestroy();
402eac72dbSBarry Smith 
41*82bf6240SBarry Smith 
42*82bf6240SBarry Smith extern int KSPGetType(KSP, KSPType *);
43aad2872bSLois Curfman McInnes extern int KSPSetPreconditionerSide(KSP,PCSide);
44aad2872bSLois Curfman McInnes extern int KSPGetPreconditionerSide(KSP,PCSide*);
45ae622e99SLois Curfman McInnes extern int KSPGetTolerances(KSP,double*,double*,double*,int*);
46f9a5357eSLois Curfman McInnes extern int KSPSetTolerances(KSP,double,double,double,int);
47d4fbbf0eSBarry Smith extern int KSPSetComputeResidual(KSP,PetscTruth);
488ed539a5SBarry Smith extern int KSPSetUsePreconditionedResidual(KSP);
49c39b5c85SLois Curfman McInnes extern int KSPSetInitialGuessNonzero(KSP);
5090f02eecSBarry Smith extern int KSPSetComputeEigenvalues(KSP);
51d4fbbf0eSBarry Smith extern int KSPSetComputeSingularValues(KSP);
528ed539a5SBarry Smith extern int KSPSetRhs(KSP,Vec);
538ed539a5SBarry Smith extern int KSPGetRhs(KSP,Vec *);
548ed539a5SBarry Smith extern int KSPSetSolution(KSP,Vec);
558ed539a5SBarry Smith extern int KSPGetSolution(KSP,Vec *);
5625fce39dSBarry Smith extern int KSPGetResidualNorm(KSP,double*);
572eac72dbSBarry Smith 
5877c4ece6SBarry Smith extern int KSPSetPC(KSP,PC);
5977c4ece6SBarry Smith extern int KSPGetPC(KSP,PC*);
60aabeff55SBarry Smith 
618ed539a5SBarry Smith extern int KSPSetMonitor(KSP,int (*)(KSP,int,double, void*), void *);
628ed539a5SBarry Smith extern int KSPGetMonitorContext(KSP,void **);
638ed539a5SBarry Smith extern int KSPSetResidualHistory(KSP, double *,int);
644b0e389bSBarry Smith 
658ed539a5SBarry Smith extern int KSPSetConvergenceTest(KSP,int (*)(KSP,int,double, void*), void *);
668ed539a5SBarry Smith extern int KSPGetConvergenceContext(KSP,void **);
672eac72dbSBarry Smith 
688ed539a5SBarry Smith extern int KSPBuildSolution(KSP, Vec,Vec *);
698ed539a5SBarry Smith extern int KSPBuildResidual(KSP, Vec, Vec,Vec *);
702eac72dbSBarry Smith 
718ed539a5SBarry Smith extern int KSPRichardsonSetScale(KSP , double);
728ed539a5SBarry Smith extern int KSPChebychevSetEigenvalues(KSP , double, double);
73d4fbbf0eSBarry Smith extern int KSPComputeExtremeSingularValues(KSP, double*,double*);
74d4fbbf0eSBarry Smith extern int KSPComputeEigenvalues(KSP,int,double*,double*);
75d4fbbf0eSBarry Smith extern int KSPComputeEigenvaluesExplicitly(KSP,int,double*,double*);
764b0e389bSBarry Smith 
778ed539a5SBarry Smith extern int KSPGMRESSetRestart(KSP, int);
78b4fd4287SBarry Smith extern int KSPGMRESSetPreAllocateVectors(KSP);
7977c4ece6SBarry Smith extern int KSPGMRESSetOrthogonalization(KSP,int (*)(KSP,int));
80bcd2baecSBarry Smith extern int KSPGMRESUnmodifiedGramSchmidtOrthogonalization(KSP,int);
81bcd2baecSBarry Smith extern int KSPGMRESModifiedGramSchmidtOrthogonalization(KSP,int);
82bcd2baecSBarry Smith extern int KSPGMRESIROrthogonalization(KSP,int);
83eed86810SBarry Smith extern int KSPGMRESDGKSOrthogonalization(KSP,int);
8408480c60SBarry Smith 
858ed539a5SBarry Smith extern int KSPSetFromOptions(KSP);
86639f9d9dSBarry Smith extern int KSPAddOptionsChecker(int (*)(KSP));
872eac72dbSBarry Smith 
888f4c8dbaSBarry Smith extern int KSPSingularValueMonitor(KSP,int,double, void * );
898ed539a5SBarry Smith extern int KSPDefaultMonitor(KSP,int,double, void *);
90af6b99e9SBarry Smith extern int KSPTrueMonitor(KSP,int,double, void *);
918c48e012SBarry Smith extern int KSPDefaultSMonitor(KSP,int,double, void *);
9284cb2905SBarry Smith 
938ed539a5SBarry Smith extern int KSPDefaultConverged(KSP,int,double, void *);
942eac72dbSBarry Smith 
95c01c455dSBarry Smith extern int KSPResidual(KSP,Vec,Vec,Vec,Vec,Vec,Vec);
9677c4ece6SBarry Smith extern int KSPUnwindPreconditioner(KSP,Vec,Vec);
97c01c455dSBarry Smith extern int KSPDefaultBuildSolution(KSP,Vec,Vec*);
98c01c455dSBarry Smith extern int KSPDefaultBuildResidual(KSP,Vec,Vec,Vec *);
99c01c455dSBarry Smith 
1008ed539a5SBarry Smith extern int KSPPrintHelp(KSP);
1018ed539a5SBarry Smith 
1021eb62cbbSBarry Smith extern int KSPSetOptionsPrefix(KSP,char*);
1030985bb82SSatish Balay extern int KSPAppendOptionsPrefix(KSP,char*);
1040985bb82SSatish Balay extern int KSPGetOptionsPrefix(KSP,char**);
1051eb62cbbSBarry Smith 
1068ed539a5SBarry Smith extern int KSPView(KSP,Viewer);
1071eb62cbbSBarry Smith 
108d4fbbf0eSBarry Smith extern int KSPComputeExplicitOperator(KSP,Mat *);
109d4fbbf0eSBarry Smith 
1106d4a8577SBarry Smith typedef enum {KSP_CG_SYMMETRIC=1, KSP_CG_HERMITIAN=2} KSPCGType;
1116d4a8577SBarry Smith extern int KSPCGSetType(KSP,KSPCGType);
112e559a7feSLois Curfman McInnes 
1133369ce9aSBarry Smith extern int PCPreSolve(PC,KSP);
1143369ce9aSBarry Smith extern int PCPostSolve(PC,KSP);
1153369ce9aSBarry Smith 
116d7e8b826SBarry Smith extern int KSPLGMonitorCreate(char*,char*,int,int,int,int,DrawLG*);
1171eb62cbbSBarry Smith extern int KSPLGMonitor(KSP,int,double,void*);
118d7e8b826SBarry Smith extern int KSPLGMonitorDestroy(DrawLG);
1193b2fbd54SBarry Smith extern int KSPLGTrueMonitorCreate(MPI_Comm,char*,char*,int,int,int,int,DrawLG*);
120af6b99e9SBarry Smith extern int KSPLGTrueMonitor(KSP,int,double,void*);
121af6b99e9SBarry Smith extern int KSPLGTrueMonitorDestroy(DrawLG);
1221eb62cbbSBarry Smith 
1232eac72dbSBarry Smith #endif
1242eac72dbSBarry Smith 
1252eac72dbSBarry Smith 
126