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