1*f26ada1bSBarry Smith /* $Id: ksp.h,v 1.28 1995/11/09 22:33:28 bsmith Exp bsmith $ */ 2*f26ada1bSBarry Smith /* 3*f26ada1bSBarry Smith Defines the interface functions for the Krylov subspace accelerators. 4*f26ada1bSBarry 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 142eac72dbSBarry Smith typedef struct _KSP* KSP; 152eac72dbSBarry Smith 162eac72dbSBarry Smith /* Possible Krylov Space Methods */ 17*f26ada1bSBarry Smith typedef enum { KSPRICHARDSON, KSPCHEBYCHEV, KSPCG, KSPGMRES, KSPTCQMR, KSPBCGS, 18*f26ada1bSBarry Smith KSPCGS, KSPTFQMR, KSPCR, KSPLSQR, KSPPREONLY, KSPQCG} KSPMethod; 192eac72dbSBarry Smith 206b5873e3SBarry Smith extern int KSPCreate(MPI_Comm,KSP *); 21f8936d11SLois Curfman McInnes extern int KSPSetMethod(KSP,KSPMethod); 228ed539a5SBarry Smith extern int KSPSetUp(KSP); 238ed539a5SBarry Smith extern int KSPSolve(KSP,int *); 248ed539a5SBarry Smith extern int KSPDestroy(KSP); 252eac72dbSBarry Smith 268ed539a5SBarry Smith extern int KSPRegisterAll(); 27d6dfbf8fSBarry Smith extern int KSPRegisterDestroy(); 28f8936d11SLois Curfman McInnes extern int KSPRegister(KSPMethod,char *,int (*)(KSP)); 292eac72dbSBarry Smith 30f8936d11SLois Curfman McInnes extern int KSPGetMethodName(KSPMethod,char **); 318ed539a5SBarry Smith extern int KSPSetRightPreconditioner(KSP); 328ed539a5SBarry Smith extern int KSPGetPreconditionerSide(KSP,int *); 33f8936d11SLois Curfman McInnes extern int KSPGetMethodFromContext(KSP,KSPMethod *); 34ae622e99SLois Curfman McInnes extern int KSPGetTolerances(KSP,double*,double*,double*,int*); 35f9a5357eSLois Curfman McInnes extern int KSPSetTolerances(KSP,double,double,double,int); 36f8936d11SLois Curfman McInnes extern int KSPSetCalculateResidual(KSP,PetscTruth); 378ed539a5SBarry Smith extern int KSPSetUsePreconditionedResidual(KSP); 38c39b5c85SLois Curfman McInnes extern int KSPSetInitialGuessNonzero(KSP); 398ed539a5SBarry Smith extern int KSPSetCalculateEigenvalues(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 *); 442eac72dbSBarry Smith 45aabeff55SBarry Smith extern int KSPSetBinv(KSP,PC); 46aabeff55SBarry Smith extern int KSPGetBinv(KSP,PC*); 47aabeff55SBarry Smith 488ed539a5SBarry Smith extern int KSPSetMonitor(KSP,int (*)(KSP,int,double, void*), void *); 498ed539a5SBarry Smith extern int KSPGetMonitorContext(KSP,void **); 508ed539a5SBarry Smith extern int KSPSetResidualHistory(KSP, double *,int); 518ed539a5SBarry Smith extern int KSPSetConvergenceTest(KSP,int (*)(KSP,int,double, void*), void *); 528ed539a5SBarry Smith extern int KSPGetConvergenceContext(KSP,void **); 532eac72dbSBarry Smith 548ed539a5SBarry Smith extern int KSPBuildSolution(KSP, Vec,Vec *); 558ed539a5SBarry Smith extern int KSPBuildResidual(KSP, Vec, Vec,Vec *); 562eac72dbSBarry Smith 578ed539a5SBarry Smith extern int KSPRichardsonSetScale(KSP , double); 588ed539a5SBarry Smith extern int KSPChebychevSetEigenvalues(KSP , double, double); 5983f0b094SBarry Smith extern int KSPCGGetEigenvalues(KSP, int n,Scalar*,Scalar*); 608ed539a5SBarry Smith extern int KSPGMRESSetRestart(KSP, int); 6108480c60SBarry Smith 621b918aecSLois Curfman McInnes extern int KSPGMRESSetOrthogRoutine(KSP,int (*)(KSP,int)); 63cddf8d76SBarry Smith extern int KSPGMRESUnmodifiedOrthog(KSP,int); 64cddf8d76SBarry Smith extern int KSPGMRESBasicOrthog(KSP,int); 65cddf8d76SBarry Smith extern int KSPGMRESIROrthog(KSP,int); 6608480c60SBarry Smith 678ed539a5SBarry Smith extern int KSPSetFromOptions(KSP); 682eac72dbSBarry Smith 69c01c455dSBarry Smith extern int KSPCGDefaultMonitor(KSP,int,double, void * ); 70c01c455dSBarry Smith extern int KSPCGDefaultConverged(KSP,int,double, void *); 718ed539a5SBarry Smith extern int KSPDefaultMonitor(KSP,int,double, void *); 728c48e012SBarry Smith extern int KSPDefaultSMonitor(KSP,int,double, void *); 738ed539a5SBarry Smith extern int KSPDefaultConverged(KSP,int,double, void *); 742eac72dbSBarry Smith 75c01c455dSBarry Smith extern int KSPResidual(KSP,Vec,Vec,Vec,Vec,Vec,Vec); 76c01c455dSBarry Smith extern int KSPUnwindPre(KSP,Vec,Vec); 77c01c455dSBarry Smith extern int KSPDefaultBuildSolution(KSP,Vec,Vec*); 78c01c455dSBarry Smith extern int KSPDefaultBuildResidual(KSP,Vec,Vec,Vec *); 79c01c455dSBarry Smith 808ed539a5SBarry Smith extern int KSPPrintHelp(KSP); 818ed539a5SBarry Smith 821eb62cbbSBarry Smith extern int KSPSetOptionsPrefix(KSP,char*); 831eb62cbbSBarry Smith 848ed539a5SBarry Smith extern int KSPView(KSP,Viewer); 851eb62cbbSBarry Smith 861eb62cbbSBarry Smith #if defined(__DRAW_PACKAGE) 87d7e8b826SBarry Smith extern int KSPLGMonitorCreate(char*,char*,int,int,int,int,DrawLG*); 881eb62cbbSBarry Smith extern int KSPLGMonitor(KSP,int,double,void*); 89d7e8b826SBarry Smith extern int KSPLGMonitorDestroy(DrawLG); 901eb62cbbSBarry Smith #endif 911eb62cbbSBarry Smith 922eac72dbSBarry Smith #endif 932eac72dbSBarry Smith 942eac72dbSBarry Smith 95