xref: /petsc/include/petscsnes.h (revision 60907fce3023cb7a56394f34c7b040c9b38a8fc6)
1 /* $Id: snes.h,v 1.26 1995/07/17 20:43:13 bsmith Exp curfman $ */
2 
3 #if !defined(__SNES_PACKAGE)
4 #define __SNES_PACKAGE
5 #include "sles.h"
6 
7 typedef struct _SNES* SNES;
8 #define SNES_COOKIE PETSC_COOKIE+13
9 
10 typedef enum { SNES_EQ_NLS,
11                SNES_EQ_NTR,
12                SNES_EQ_NTR_DOG_LEG,
13                SNES_EQ_NTR2_LIN,
14                SNES_EQ_NTEST,
15                SNES_UM_NLS,
16                SNES_UM_NTR }
17   SNESMethod;
18 
19 #define SNES_NLS         SNES_EQ_NLS
20 #define SNES_NTR         SNES_EQ_NTR
21 #define SNES_NTR2_LIN    SNES_EQ_NTR2_LIN
22 #define SNES_NTR_DOG_LEG SNES_EQ_NTR_DOG_LEG
23 #define SNES_NTEST       SNES_EQ_NTEST
24 
25 typedef enum { SNES_EQ, SNES_UM } SNESType;
26 
27 extern int SNESCreate(MPI_Comm,SNES*);
28 extern int SNESSetMethod(SNES,SNESMethod);
29 extern int SNESSetMonitor(SNES,int(*)(SNES,int,double,void*),void *);
30 extern int SNESSetSolution(SNES,Vec,int(*)(SNES,Vec,void*),void *);
31 extern int SNESSetFunction(SNES,Vec,int(*)(SNES,Vec,Vec,void*),void *,int);
32 extern int SNESSetJacobian(SNES,Mat,Mat,int(*)(SNES,Vec,Mat*,Mat*,MatStructure*,void*),void *);
33 extern int SNESDestroy(SNES);
34 extern int SNESSetUp(SNES);
35 extern int SNESSolve(SNES,int*);
36 extern int SNESRegister(int,char*,int(*)(SNES));
37 extern int SNESRegisterAll();
38 extern int SNESGetSLES(SNES,SLES*);
39 extern int SNESNoLineSearch(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*);
40 extern int SNESCubicLineSearch(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*);
41 extern int SNESQuadraticLineSearch(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*);
42 extern int SNESSetLineSearchRoutine(SNES,int(*)(SNES,Vec,Vec,Vec,Vec,Vec,double,double*,double*,int*));
43 
44 extern int SNESGetSolution(SNES,Vec*);
45 extern int SNESGetSolutionUpdate(SNES,Vec*);
46 extern int SNESGetFunction(SNES,Vec*);
47 
48 extern int SNESPrintHelp(SNES);
49 extern int SNESView(SNES,Viewer);
50 extern int SNESSetFromOptions(SNES);
51 extern int SNESGetMethodName(SNESMethod,char **);
52 extern int SNESDefaultMonitor(SNES,int,double,void *);
53 extern int SNESDefaultSMonitor(SNES,int,double,void *);
54 extern int SNESDefaultConverged(SNES,double,double,double,void*);
55 
56 extern int SNESSetSolutionTolerance(SNES,double);
57 extern int SNESSetAbsoluteTolerance(SNES,double);
58 extern int SNESSetRelativeTolerance(SNES,double);
59 extern int SNESSetTruncationTolerance(SNES,double);
60 extern int SNESSetMaxIterations(SNES,int);
61 extern int SNESSetMaxFunctionEvaluations(SNES,int);
62 extern int SNESGetIterationNumber(SNES,int*);
63 extern int SNESGetFunctionNorm(SNES,Scalar*);
64 extern int SNESGetNumberUnsuccessfulSteps(SNES,int*);
65 
66 #if defined(__DRAW_PACKAGE)
67 #define SNESLGMonitorCreate  KSPLGMonitorCreate
68 #define SNESLGMonitorDestroy KSPLGMonitorDestroy
69 #define SNESLGMonitor        ((int (*)(SNES,int,double,void*))KSPLGMonitor)
70 #endif
71 
72 extern int SNESComputeInitialGuess(SNES,Vec);
73 
74 extern int SNESDefaultComputeJacobian(SNES,Vec,Mat*,Mat*,MatStructure*,void*);
75 extern int SNESDefaultMatrixFreeComputeJacobian(SNES,Vec,Mat*,Mat*,
76                                                 MatStructure*,void*);
77 extern int SNESDefaultMatrixFreeMatCreate(SNES,Vec x,Mat*);
78 
79 extern int SNESComputeFunction(SNES,Vec,Vec);
80 extern int SNESComputeJacobian(SNES,Vec,Mat*,Mat*,MatStructure*);
81 extern int SNESDestroy(SNES);
82 
83 
84 /* Unconstrained minimization routines ... Some of these may change! */
85 
86 /* temporarily define this */
87 #define KSPQCG 2000
88 
89 extern int SNESSetHessian(SNES,Mat,Mat,int(*)(SNES,Vec,Mat*,Mat*,MatStructure*,void*),void *);
90 extern int SNESComputeHessian(SNES,Vec,Mat*,Mat*,MatStructure*,void*);
91 extern int SNESSetGradient(SNES,Vec,int(*)(SNES,Vec,Vec,void*),void*);
92 extern int SNESGetGradient(SNES,Vec*);
93 extern int SNESGetGradientNorm(SNES,Scalar*);
94 extern int SNESComputeGradient(SNES,Vec,Vec);
95 extern int SNESSetMinimizationFunction(SNES,int(*)(SNES,Vec,double*,void*),void*);
96 extern int SNESComputeMinimizationFunction(SNES,Vec,double*);
97 extern int SNESGetMinimizationFunction(SNES,double*);
98 extern int SNESSetMinFunctionTolerance(SNES,double);
99 
100 #endif
101 
102