1*818ad0c1SBarry Smith /* $Id: snes.h,v 1.38 1996/01/01 01:05:46 bsmith Exp $ */ 2*818ad0c1SBarry Smith /* 3*818ad0c1SBarry Smith User interface for the nonlinear solvers package. 4*818ad0c1SBarry Smith */ 5*818ad0c1SBarry Smith #if !defined(__SNES_PACKAGE) 6*818ad0c1SBarry Smith #define __SNES_PACKAGE 7*818ad0c1SBarry Smith #include "sles.h" 8*818ad0c1SBarry Smith 9*818ad0c1SBarry Smith typedef struct _SNES* SNES; 10*818ad0c1SBarry Smith #define SNES_COOKIE PETSC_COOKIE+13 11*818ad0c1SBarry Smith 12*818ad0c1SBarry Smith typedef enum { SNES_UNKNOWN_METHOD=-1, 13*818ad0c1SBarry Smith SNES_EQ_NLS, 14*818ad0c1SBarry Smith SNES_EQ_NTR, 15*818ad0c1SBarry Smith SNES_EQ_NTR_DOG_LEG, 16*818ad0c1SBarry Smith SNES_EQ_NTR2_LIN, 17*818ad0c1SBarry Smith SNES_EQ_NTEST, 18*818ad0c1SBarry Smith SNES_UM_NLS, 19*818ad0c1SBarry Smith SNES_UM_NTR 20*818ad0c1SBarry Smith } SNESType; 21*818ad0c1SBarry Smith 22*818ad0c1SBarry Smith typedef enum { SNES_NONLINEAR_EQUATIONS, SNES_UNCONSTRAINED_MINIMIZATION} 23*818ad0c1SBarry Smith SNESProblemType; 24*818ad0c1SBarry Smith extern int SNESCreate(MPI_Comm,SNESProblemType,SNES*); 25*818ad0c1SBarry Smith extern int SNESDestroy(SNES); 26*818ad0c1SBarry Smith extern int SNESSetType(SNES,SNESType); 27*818ad0c1SBarry Smith extern int SNESSetMonitor(SNES,int(*)(SNES,int,double,void*),void *); 28*818ad0c1SBarry Smith extern int SNESSetSolution(SNES,Vec,int(*)(SNES,Vec,void*),void *); 29*818ad0c1SBarry Smith typedef enum { POSITIVE_FUNCTION_VALUE, NEGATIVE_FUNCTION_VALUE} SNESFunctionSign; 30*818ad0c1SBarry Smith extern int SNESSetFunction(SNES,Vec,int(*)(SNES,Vec,Vec,void*),void *,SNESFunctionSign); 31*818ad0c1SBarry Smith extern int SNESSetJacobian(SNES,Mat,Mat,int(*)(SNES,Vec,Mat*,Mat*,MatStructure*,void*),void *); 32*818ad0c1SBarry Smith extern int SNESGetJacobian(SNES,Mat*,Mat*,void **); 33*818ad0c1SBarry Smith extern int SNESSetUp(SNES); 34*818ad0c1SBarry Smith extern int SNESSolve(SNES,int*); 35*818ad0c1SBarry Smith extern int SNESRegister(int,char*,int(*)(SNES)); 36*818ad0c1SBarry Smith extern int SNESRegisterDestroy(); 37*818ad0c1SBarry Smith extern int SNESRegisterAll(); 38*818ad0c1SBarry Smith extern int SNESGetSLES(SNES,SLES*); 39*818ad0c1SBarry Smith 40*818ad0c1SBarry Smith extern int SNESNoLineSearch(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*); 41*818ad0c1SBarry Smith extern int SNESCubicLineSearch(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*); 42*818ad0c1SBarry Smith extern int SNESQuadraticLineSearch(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*); 43*818ad0c1SBarry Smith extern int SNESSetLineSearchRoutine(SNES,int(*)(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*)); 44*818ad0c1SBarry Smith 45*818ad0c1SBarry Smith extern int SNESGetSolution(SNES,Vec*); 46*818ad0c1SBarry Smith extern int SNESGetSolutionUpdate(SNES,Vec*); 47*818ad0c1SBarry Smith extern int SNESGetFunction(SNES,Vec*); 48*818ad0c1SBarry Smith 49*818ad0c1SBarry Smith extern int SNESPrintHelp(SNES); 50*818ad0c1SBarry Smith extern int SNESView(SNES,Viewer); 51*818ad0c1SBarry Smith extern int SNESSetFromOptions(SNES); 52*818ad0c1SBarry Smith extern int SNESGetType(SNES,SNESType*,char**); 53*818ad0c1SBarry Smith extern int SNESDefaultMonitor(SNES,int,double,void *); 54*818ad0c1SBarry Smith extern int SNESDefaultSMonitor(SNES,int,double,void *); 55*818ad0c1SBarry Smith extern int SNESDefaultConverged(SNES,double,double,double,void*); 56*818ad0c1SBarry Smith extern int SNESTrustRegionDefaultConverged(SNES,double,double,double,void*); 57*818ad0c1SBarry Smith extern int SNESSetSolutionTolerance(SNES,double); 58*818ad0c1SBarry Smith extern int SNESSetAbsoluteTolerance(SNES,double); 59*818ad0c1SBarry Smith extern int SNESSetRelativeTolerance(SNES,double); 60*818ad0c1SBarry Smith extern int SNESSetTruncationTolerance(SNES,double); 61*818ad0c1SBarry Smith extern int SNESSetTrustRegionTolerance(SNES,double); 62*818ad0c1SBarry Smith extern int SNESSetMaxIterations(SNES,int); 63*818ad0c1SBarry Smith extern int SNESSetMaxFunctionEvaluations(SNES,int); 64*818ad0c1SBarry Smith extern int SNESGetIterationNumber(SNES,int*); 65*818ad0c1SBarry Smith extern int SNESGetFunctionNorm(SNES,Scalar*); 66*818ad0c1SBarry Smith extern int SNESGetNumberUnsuccessfulSteps(SNES,int*); 67*818ad0c1SBarry Smith extern int SNES_KSP_SetParametersEW(SNES,int,double,double,double,double,double,double); 68*818ad0c1SBarry Smith extern int SNES_KSP_SetConvergenceTestEW(SNES); 69*818ad0c1SBarry Smith 70*818ad0c1SBarry Smith #if defined(__DRAW_PACKAGE) 71*818ad0c1SBarry Smith #define SNESLGMonitorCreate KSPLGMonitorCreate 72*818ad0c1SBarry Smith #define SNESLGMonitorDestroy KSPLGMonitorDestroy 73*818ad0c1SBarry Smith #define SNESLGMonitor ((int (*)(SNES,int,double,void*))KSPLGMonitor) 74*818ad0c1SBarry Smith #endif 75*818ad0c1SBarry Smith 76*818ad0c1SBarry Smith extern int SNESComputeInitialGuess(SNES,Vec); 77*818ad0c1SBarry Smith 78*818ad0c1SBarry Smith extern int SNESDefaultComputeJacobian(SNES,Vec,Mat*,Mat*,MatStructure*,void*); 79*818ad0c1SBarry Smith extern int SNESDefaultMatrixFreeMatCreate(SNES,Vec x,Mat*); 80*818ad0c1SBarry Smith 81*818ad0c1SBarry Smith extern int SNESComputeFunction(SNES,Vec,Vec); 82*818ad0c1SBarry Smith extern int SNESDestroy(SNES); 83*818ad0c1SBarry Smith 84*818ad0c1SBarry Smith extern int SNESSetApplicationContext(SNES,void *); 85*818ad0c1SBarry Smith extern int SNESGetApplicationContext(SNES,void **); 86*818ad0c1SBarry Smith extern int SNESSetConvergenceTest(SNES,int (*)(SNES,double,double,double,void*),void*); 87*818ad0c1SBarry Smith 88*818ad0c1SBarry Smith /* Unconstrained minimization routines */ 89*818ad0c1SBarry Smith extern int SNESSetHessian(SNES,Mat,Mat,int(*)(SNES,Vec,Mat*,Mat*,MatStructure*,void*),void *); 90*818ad0c1SBarry Smith extern int SNESSetGradient(SNES,Vec,int(*)(SNES,Vec,Vec,void*),void*); 91*818ad0c1SBarry Smith extern int SNESGetGradient(SNES,Vec*); 92*818ad0c1SBarry Smith extern int SNESGetGradientNorm(SNES,Scalar*); 93*818ad0c1SBarry Smith extern int SNESComputeGradient(SNES,Vec,Vec); 94*818ad0c1SBarry Smith extern int SNESSetMinimizationFunction(SNES,int(*)(SNES,Vec,double*,void*),void*); 95*818ad0c1SBarry Smith extern int SNESComputeMinimizationFunction(SNES,Vec,double*); 96*818ad0c1SBarry Smith extern int SNESGetMinimizationFunction(SNES,double*); 97*818ad0c1SBarry Smith extern int SNESSetMinFunctionTolerance(SNES,double); 98*818ad0c1SBarry Smith extern int SNESGetLineSearchDampingParameter(SNES,double*); 99*818ad0c1SBarry Smith extern int SNESConverged_UMLS(SNES,double,double,double,void*); 100*818ad0c1SBarry Smith extern int SNESConverged_UMTR(SNES,double,double,double,void*); 101*818ad0c1SBarry Smith 102*818ad0c1SBarry Smith extern int SNESDefaultMatrixFreeMatAddNullSpace(Mat,int,int,Vec *); 103*818ad0c1SBarry Smith 104*818ad0c1SBarry Smith /* Should these 2 routines be private? */ 105*818ad0c1SBarry Smith extern int SNESComputeHessian(SNES,Vec,Mat*,Mat*,MatStructure*); 106*818ad0c1SBarry Smith extern int SNESComputeJacobian(SNES,Vec,Mat*,Mat*,MatStructure*); 107*818ad0c1SBarry Smith 108*818ad0c1SBarry Smith #endif 109*818ad0c1SBarry Smith 110