xref: /petsc/include/petscts.h (revision 818ad0c158edc4bdac690c60e739f6fdbc74f38b)
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