xref: /petsc/include/petscksp.h (revision 88d459dfb11b274ecd1d5bb99c83d4bd989a5877)
1*88d459dfSBarry Smith /* $Id: ksp.h,v 1.68 1998/05/13 16:41:25 bsmith Exp bsmith $ */
2f26ada1bSBarry Smith /*
3f26ada1bSBarry Smith    Defines the interface functions for the Krylov subspace accelerators.
4f26ada1bSBarry Smith */
5*88d459dfSBarry Smith #ifndef __KSP_H
6*88d459dfSBarry 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"
2882bf6240SBarry Smith typedef char * KSPType;
292eac72dbSBarry Smith 
306b5873e3SBarry Smith extern int KSPCreate(MPI_Comm,KSP *);
314b0e389bSBarry Smith extern int KSPSetType(KSP,KSPType);
328ed539a5SBarry Smith extern int KSPSetUp(KSP);
338ed539a5SBarry Smith extern int KSPSolve(KSP,int *);
348ed539a5SBarry Smith extern int KSPDestroy(KSP);
352eac72dbSBarry Smith 
3682bf6240SBarry Smith extern DLList KSPList;
3782bf6240SBarry Smith extern int KSPRegisterAll(char *);
38cf256101SBarry Smith extern int KSPRegisterDestroy(void);
392eac72dbSBarry Smith 
406df38c32SLois Curfman McInnes extern int KSPRegister_Private(char*,char*,char*,int(*)(KSP));
416df38c32SLois Curfman McInnes #if defined(USE_DYNAMIC_LIBRARIES)
426df38c32SLois Curfman McInnes #define KSPRegister(a,b,c,d) KSPRegister_Private(a,b,c,0)
436df38c32SLois Curfman McInnes #else
446df38c32SLois Curfman McInnes #define KSPRegister(a,b,c,d) KSPRegister_Private(a,b,c,d)
456df38c32SLois Curfman McInnes #endif
4682bf6240SBarry Smith 
4782bf6240SBarry Smith extern int KSPGetType(KSP, KSPType *);
48aad2872bSLois Curfman McInnes extern int KSPSetPreconditionerSide(KSP,PCSide);
49aad2872bSLois Curfman McInnes extern int KSPGetPreconditionerSide(KSP,PCSide*);
50ae622e99SLois Curfman McInnes extern int KSPGetTolerances(KSP,double*,double*,double*,int*);
51f9a5357eSLois Curfman McInnes extern int KSPSetTolerances(KSP,double,double,double,int);
52d4fbbf0eSBarry Smith extern int KSPSetComputeResidual(KSP,PetscTruth);
538ed539a5SBarry Smith extern int KSPSetUsePreconditionedResidual(KSP);
54c39b5c85SLois Curfman McInnes extern int KSPSetInitialGuessNonzero(KSP);
5590f02eecSBarry Smith extern int KSPSetComputeEigenvalues(KSP);
56d4fbbf0eSBarry Smith extern int KSPSetComputeSingularValues(KSP);
578ed539a5SBarry Smith extern int KSPSetRhs(KSP,Vec);
588ed539a5SBarry Smith extern int KSPGetRhs(KSP,Vec *);
598ed539a5SBarry Smith extern int KSPSetSolution(KSP,Vec);
608ed539a5SBarry Smith extern int KSPGetSolution(KSP,Vec *);
6125fce39dSBarry Smith extern int KSPGetResidualNorm(KSP,double*);
622eac72dbSBarry Smith 
6377c4ece6SBarry Smith extern int KSPSetPC(KSP,PC);
6477c4ece6SBarry Smith extern int KSPGetPC(KSP,PC*);
65aabeff55SBarry Smith 
66fcb7de8cSBarry Smith extern int KSPSetAvoidNorms(KSP);
67fcb7de8cSBarry Smith 
688ed539a5SBarry Smith extern int KSPSetMonitor(KSP,int (*)(KSP,int,double, void*), void *);
695cd90555SBarry Smith extern int KSPClearMonitor(KSP);
708ed539a5SBarry Smith extern int KSPGetMonitorContext(KSP,void **);
718ed539a5SBarry Smith extern int KSPSetResidualHistory(KSP, double *,int);
724b0e389bSBarry Smith 
738ed539a5SBarry Smith extern int KSPSetConvergenceTest(KSP,int (*)(KSP,int,double, void*), void *);
748ed539a5SBarry Smith extern int KSPGetConvergenceContext(KSP,void **);
752eac72dbSBarry Smith 
768ed539a5SBarry Smith extern int KSPBuildSolution(KSP, Vec,Vec *);
778ed539a5SBarry Smith extern int KSPBuildResidual(KSP, Vec, Vec,Vec *);
782eac72dbSBarry Smith 
798ed539a5SBarry Smith extern int KSPRichardsonSetScale(KSP , double);
808ed539a5SBarry Smith extern int KSPChebychevSetEigenvalues(KSP , double, double);
81d4fbbf0eSBarry Smith extern int KSPComputeExtremeSingularValues(KSP, double*,double*);
82*88d459dfSBarry Smith extern int KSPComputeEigenvalues(KSP,int,double*,double*,int *);
83d4fbbf0eSBarry Smith extern int KSPComputeEigenvaluesExplicitly(KSP,int,double*,double*);
844b0e389bSBarry Smith 
858ed539a5SBarry Smith extern int KSPGMRESSetRestart(KSP, int);
86b4fd4287SBarry Smith extern int KSPGMRESSetPreAllocateVectors(KSP);
8777c4ece6SBarry Smith extern int KSPGMRESSetOrthogonalization(KSP,int (*)(KSP,int));
88bcd2baecSBarry Smith extern int KSPGMRESUnmodifiedGramSchmidtOrthogonalization(KSP,int);
89bcd2baecSBarry Smith extern int KSPGMRESModifiedGramSchmidtOrthogonalization(KSP,int);
90bcd2baecSBarry Smith extern int KSPGMRESIROrthogonalization(KSP,int);
91eed86810SBarry Smith extern int KSPGMRESDGKSOrthogonalization(KSP,int);
9208480c60SBarry Smith 
938ed539a5SBarry Smith extern int KSPSetFromOptions(KSP);
94639f9d9dSBarry Smith extern int KSPAddOptionsChecker(int (*)(KSP));
952eac72dbSBarry Smith 
968f4c8dbaSBarry Smith extern int KSPSingularValueMonitor(KSP,int,double, void * );
978ed539a5SBarry Smith extern int KSPDefaultMonitor(KSP,int,double, void *);
98af6b99e9SBarry Smith extern int KSPTrueMonitor(KSP,int,double, void *);
998c48e012SBarry Smith extern int KSPDefaultSMonitor(KSP,int,double, void *);
10084cb2905SBarry Smith 
1018ed539a5SBarry Smith extern int KSPDefaultConverged(KSP,int,double, void *);
10215bae2deSBarry Smith extern int KSPSkipConverged(KSP,int,double, void *);
1032eac72dbSBarry Smith 
104c01c455dSBarry Smith extern int KSPResidual(KSP,Vec,Vec,Vec,Vec,Vec,Vec);
10577c4ece6SBarry Smith extern int KSPUnwindPreconditioner(KSP,Vec,Vec);
106c01c455dSBarry Smith extern int KSPDefaultBuildSolution(KSP,Vec,Vec*);
107c01c455dSBarry Smith extern int KSPDefaultBuildResidual(KSP,Vec,Vec,Vec *);
108c01c455dSBarry Smith 
1098ed539a5SBarry Smith extern int KSPPrintHelp(KSP);
1108ed539a5SBarry Smith 
1111eb62cbbSBarry Smith extern int KSPSetOptionsPrefix(KSP,char*);
1120985bb82SSatish Balay extern int KSPAppendOptionsPrefix(KSP,char*);
1130985bb82SSatish Balay extern int KSPGetOptionsPrefix(KSP,char**);
1141eb62cbbSBarry Smith 
1158ed539a5SBarry Smith extern int KSPView(KSP,Viewer);
1161eb62cbbSBarry Smith 
117d4fbbf0eSBarry Smith extern int KSPComputeExplicitOperator(KSP,Mat *);
118d4fbbf0eSBarry Smith 
1196d4a8577SBarry Smith typedef enum {KSP_CG_SYMMETRIC=1, KSP_CG_HERMITIAN=2} KSPCGType;
1206d4a8577SBarry Smith extern int KSPCGSetType(KSP,KSPCGType);
121e559a7feSLois Curfman McInnes 
1223369ce9aSBarry Smith extern int PCPreSolve(PC,KSP);
1233369ce9aSBarry Smith extern int PCPostSolve(PC,KSP);
1243369ce9aSBarry Smith 
125d7e8b826SBarry Smith extern int KSPLGMonitorCreate(char*,char*,int,int,int,int,DrawLG*);
1261eb62cbbSBarry Smith extern int KSPLGMonitor(KSP,int,double,void*);
127d7e8b826SBarry Smith extern int KSPLGMonitorDestroy(DrawLG);
1283b2fbd54SBarry Smith extern int KSPLGTrueMonitorCreate(MPI_Comm,char*,char*,int,int,int,int,DrawLG*);
129af6b99e9SBarry Smith extern int KSPLGTrueMonitor(KSP,int,double,void*);
130af6b99e9SBarry Smith extern int KSPLGTrueMonitorDestroy(DrawLG);
1311eb62cbbSBarry Smith 
1322eac72dbSBarry Smith #endif
1332eac72dbSBarry Smith 
1342eac72dbSBarry Smith 
135