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