xref: /petsc/include/petscksp.h (revision b335793eb766dd55db1cd7698fae39aa2f83b0f0)
1*b335793eSSatish Balay /* $Id: ksp.h,v 1.86 1999/12/03 19:03:37 balay Exp balay $ */
2f26ada1bSBarry Smith /*
3f26ada1bSBarry Smith    Defines the interface functions for the Krylov subspace accelerators.
4f26ada1bSBarry Smith */
588d459dfSBarry Smith #ifndef __KSP_H
688d459dfSBarry Smith #define __KSP_H
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 
1682bf6240SBarry Smith #define KSPRICHARDSON "richardson"
1782bf6240SBarry Smith #define KSPCHEBYCHEV  "chebychev"
1882bf6240SBarry Smith #define KSPCG         "cg"
1982bf6240SBarry Smith #define KSPGMRES      "gmres"
2082bf6240SBarry Smith #define KSPTCQMR      "tcqmr"
2182bf6240SBarry Smith #define KSPBCGS       "bcgs"
2282bf6240SBarry Smith #define KSPCGS        "cgs"
2382bf6240SBarry Smith #define KSPTFQMR      "tfqmr"
2482bf6240SBarry Smith #define KSPCR         "cr"
2582bf6240SBarry Smith #define KSPLSQR       "lsqr"
2682bf6240SBarry Smith #define KSPPREONLY    "preonly"
2782bf6240SBarry Smith #define KSPQCG        "qcg"
28c9cf9b11SBarry Smith #define KSPBICG       "bicg"
29c38d4ed2SBarry Smith #define KSPFGMRES     "fgmres"
3082bf6240SBarry Smith typedef char * KSPType;
312eac72dbSBarry Smith 
326b5873e3SBarry Smith extern int KSPCreate(MPI_Comm,KSP *);
334b0e389bSBarry Smith extern int KSPSetType(KSP,KSPType);
348ed539a5SBarry Smith extern int KSPSetUp(KSP);
358ed539a5SBarry Smith extern int KSPSolve(KSP,int *);
367c922b88SBarry Smith extern int KSPSolveTranspose(KSP,int *);
378ed539a5SBarry Smith extern int KSPDestroy(KSP);
382eac72dbSBarry Smith 
39488ecbafSBarry Smith extern FList KSPList;
4082bf6240SBarry Smith extern int KSPRegisterAll(char *);
41cf256101SBarry Smith extern int KSPRegisterDestroy(void);
422eac72dbSBarry Smith 
43f1af5d2fSBarry Smith extern int KSPRegister(char*,char*,char*,int(*)(KSP));
44aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
45f1af5d2fSBarry Smith #define KSPRegisterDynamic(a,b,c,d) KSPRegister(a,b,c,0)
466df38c32SLois Curfman McInnes #else
47f1af5d2fSBarry Smith #define KSPRegisterDynamic(a,b,c,d) KSPRegister(a,b,c,d)
486df38c32SLois Curfman McInnes #endif
4982bf6240SBarry Smith 
5082bf6240SBarry Smith extern int KSPGetType(KSP, KSPType *);
51aad2872bSLois Curfman McInnes extern int KSPSetPreconditionerSide(KSP,PCSide);
52aad2872bSLois Curfman McInnes extern int KSPGetPreconditionerSide(KSP,PCSide*);
53ae622e99SLois Curfman McInnes extern int KSPGetTolerances(KSP,double*,double*,double*,int*);
54f9a5357eSLois Curfman McInnes extern int KSPSetTolerances(KSP,double,double,double,int);
55d4fbbf0eSBarry Smith extern int KSPSetComputeResidual(KSP,PetscTruth);
568ed539a5SBarry Smith extern int KSPSetUsePreconditionedResidual(KSP);
57c39b5c85SLois Curfman McInnes extern int KSPSetInitialGuessNonzero(KSP);
58af85ccbcSBarry Smith extern int KSPGetInitialGuessNonzero(KSP,PetscTruth *);
5990f02eecSBarry Smith extern int KSPSetComputeEigenvalues(KSP);
60d4fbbf0eSBarry Smith extern int KSPSetComputeSingularValues(KSP);
618ed539a5SBarry Smith extern int KSPSetRhs(KSP,Vec);
628ed539a5SBarry Smith extern int KSPGetRhs(KSP,Vec *);
638ed539a5SBarry Smith extern int KSPSetSolution(KSP,Vec);
648ed539a5SBarry Smith extern int KSPGetSolution(KSP,Vec *);
6525fce39dSBarry Smith extern int KSPGetResidualNorm(KSP,double*);
66597479d4SBarry Smith extern int KSPGetIterationNumber(KSP,int*);
672eac72dbSBarry Smith 
6877c4ece6SBarry Smith extern int KSPSetPC(KSP,PC);
6977c4ece6SBarry Smith extern int KSPGetPC(KSP,PC*);
70aabeff55SBarry Smith 
71fcb7de8cSBarry Smith extern int KSPSetAvoidNorms(KSP);
72fcb7de8cSBarry Smith 
73b8a78c4aSBarry Smith extern int KSPSetMonitor(KSP,int (*)(KSP,int,double, void*), void *,int (*)(void*));
745cd90555SBarry Smith extern int KSPClearMonitor(KSP);
758ed539a5SBarry Smith extern int KSPGetMonitorContext(KSP,void **);
760462333dSBarry Smith extern int KSPGetResidualHistory(KSP, double **, int *);
772c9e95e8SBarry Smith extern int KSPSetResidualHistory(KSP, double *,int,PetscTruth);
784b0e389bSBarry Smith 
792eac72dbSBarry Smith 
808ed539a5SBarry Smith extern int KSPBuildSolution(KSP, Vec,Vec *);
818ed539a5SBarry Smith extern int KSPBuildResidual(KSP, Vec, Vec,Vec *);
822eac72dbSBarry Smith 
838ed539a5SBarry Smith extern int KSPRichardsonSetScale(KSP , double);
848ed539a5SBarry Smith extern int KSPChebychevSetEigenvalues(KSP , double, double);
85d4fbbf0eSBarry Smith extern int KSPComputeExtremeSingularValues(KSP, double*,double*);
8688d459dfSBarry Smith extern int KSPComputeEigenvalues(KSP,int,double*,double*,int *);
87d4fbbf0eSBarry Smith extern int KSPComputeEigenvaluesExplicitly(KSP,int,double*,double*);
884b0e389bSBarry Smith 
898ed539a5SBarry Smith extern int KSPGMRESSetRestart(KSP, int);
90b4fd4287SBarry Smith extern int KSPGMRESSetPreAllocateVectors(KSP);
9177c4ece6SBarry Smith extern int KSPGMRESSetOrthogonalization(KSP,int (*)(KSP,int));
92bcd2baecSBarry Smith extern int KSPGMRESUnmodifiedGramSchmidtOrthogonalization(KSP,int);
93bcd2baecSBarry Smith extern int KSPGMRESModifiedGramSchmidtOrthogonalization(KSP,int);
94bcd2baecSBarry Smith extern int KSPGMRESIROrthogonalization(KSP,int);
95cb5b572fSBarry Smith extern int KSPGMRESPrestartSet(KSP,int);
9608480c60SBarry Smith 
97c38d4ed2SBarry Smith 
98c38d4ed2SBarry Smith extern int KSPFGMRESSetRestart( KSP, int);
99c38d4ed2SBarry Smith extern int KSPFGMRESSetPreAllocateVectors( KSP );
100c38d4ed2SBarry Smith extern int KSPFGMRESSetOrthogonalization( KSP, int (*)( KSP, int ) );
101c38d4ed2SBarry Smith extern int KSPFGMRESUnmodifiedGramSchmidtOrthogonalization( KSP, int );
102c38d4ed2SBarry Smith extern int KSPFGMRESModifiedGramSchmidtOrthogonalization( KSP, int );
103c38d4ed2SBarry Smith extern int KSPFGMRESIROrthogonalization( KSP, int );
104c38d4ed2SBarry Smith extern int KSPFGMRESPrestartSet( KSP, int );
105c38d4ed2SBarry Smith 
106c38d4ed2SBarry Smith extern int KSPFGMRESModifyPCNoChange( KSP, int, int, int, int, double );
107c38d4ed2SBarry Smith extern int KSPFGMRESModifyPCGMRESVariableEx( KSP, int, int, int, int, double );
108c38d4ed2SBarry Smith extern int KSPFGMRESModifyPCEx( KSP, int, int, int, int, double );
109c38d4ed2SBarry Smith extern int KSPFGMRESSetModifyPC(KSP,int (*)(KSP,int,int,int,int,double));
110c38d4ed2SBarry Smith 
1118ed539a5SBarry Smith extern int KSPSetFromOptions(KSP);
11215091d37SBarry Smith extern int KSPSetTypeFromOptions(KSP);
113639f9d9dSBarry Smith extern int KSPAddOptionsChecker(int (*)(KSP));
1142eac72dbSBarry Smith 
1158f4c8dbaSBarry Smith extern int KSPSingularValueMonitor(KSP,int,double, void * );
1168ed539a5SBarry Smith extern int KSPDefaultMonitor(KSP,int,double, void *);
117af6b99e9SBarry Smith extern int KSPTrueMonitor(KSP,int,double, void *);
1188c48e012SBarry Smith extern int KSPDefaultSMonitor(KSP,int,double, void *);
119a302ce19SBarry Smith extern int KSPVecViewMonitor(KSP,int,double,void *);
12021988a88SBarry Smith extern int KSPGMRESKrylovMonitor(KSP,int,double,void *);
12184cb2905SBarry Smith 
1222eac72dbSBarry Smith 
123c01c455dSBarry Smith extern int KSPResidual(KSP,Vec,Vec,Vec,Vec,Vec,Vec);
12477c4ece6SBarry Smith extern int KSPUnwindPreconditioner(KSP,Vec,Vec);
125c01c455dSBarry Smith extern int KSPDefaultBuildSolution(KSP,Vec,Vec*);
126c01c455dSBarry Smith extern int KSPDefaultBuildResidual(KSP,Vec,Vec,Vec *);
127c01c455dSBarry Smith 
1288ed539a5SBarry Smith extern int KSPPrintHelp(KSP);
1298ed539a5SBarry Smith 
1301eb62cbbSBarry Smith extern int KSPSetOptionsPrefix(KSP,char*);
1310985bb82SSatish Balay extern int KSPAppendOptionsPrefix(KSP,char*);
1320985bb82SSatish Balay extern int KSPGetOptionsPrefix(KSP,char**);
1331eb62cbbSBarry Smith 
1348ed539a5SBarry Smith extern int KSPView(KSP,Viewer);
1351eb62cbbSBarry Smith 
136d15094e1SBarry Smith typedef enum {/* converged */
137d15094e1SBarry Smith               KSP_CONVERGED_RTOL         =  2,
138d15094e1SBarry Smith               KSP_CONVERGED_ATOL         =  3,
139*b335793eSSatish Balay               KSP_CONVERGED_ITS          =  4,
140d15094e1SBarry Smith               /* diverged */
141d15094e1SBarry Smith               KSP_DIVERGED_ITS           = -3,
142d15094e1SBarry Smith               KSP_DIVERGED_DTOL          = -4,
143d15094e1SBarry Smith               KSP_DIVERGED_BREAKDOWN     = -5,
144d15094e1SBarry Smith 
145d15094e1SBarry Smith               KSP_CONVERGED_ITERATING    =  0} KSPConvergedReason;
146d15094e1SBarry Smith 
147abef13c0SSatish Balay extern int KSPSetConvergenceTest(KSP,int (*)(KSP,int,double, KSPConvergedReason*,void*), void *);
148abef13c0SSatish Balay extern int KSPGetConvergenceContext(KSP,void **);
149abef13c0SSatish Balay extern int KSPDefaultConverged(KSP,int,double, KSPConvergedReason*,void *);
150abef13c0SSatish Balay extern int KSPSkipConverged(KSP,int,double, KSPConvergedReason*,void *);
151abef13c0SSatish Balay 
152d4fbbf0eSBarry Smith extern int KSPComputeExplicitOperator(KSP,Mat *);
153d4fbbf0eSBarry Smith 
1546d4a8577SBarry Smith typedef enum {KSP_CG_SYMMETRIC=1, KSP_CG_HERMITIAN=2} KSPCGType;
1556d4a8577SBarry Smith extern int KSPCGSetType(KSP,KSPCGType);
156e559a7feSLois Curfman McInnes 
1573369ce9aSBarry Smith extern int PCPreSolve(PC,KSP);
1583369ce9aSBarry Smith extern int PCPostSolve(PC,KSP);
1593369ce9aSBarry Smith 
160d7e8b826SBarry Smith extern int KSPLGMonitorCreate(char*,char*,int,int,int,int,DrawLG*);
1611eb62cbbSBarry Smith extern int KSPLGMonitor(KSP,int,double,void*);
162d7e8b826SBarry Smith extern int KSPLGMonitorDestroy(DrawLG);
1633b2fbd54SBarry Smith extern int KSPLGTrueMonitorCreate(MPI_Comm,char*,char*,int,int,int,int,DrawLG*);
164af6b99e9SBarry Smith extern int KSPLGTrueMonitor(KSP,int,double,void*);
165af6b99e9SBarry Smith extern int KSPLGTrueMonitorDestroy(DrawLG);
1661eb62cbbSBarry Smith 
1672eac72dbSBarry Smith #endif
1682eac72dbSBarry Smith 
1692eac72dbSBarry Smith 
170