Actual source code: taolinesearchimpl.h
petsc-3.14.6 2021-03-30
1: #ifndef __TAOLINESEARCH_IMPL_H
3: #include <petscvec.h>
4: #include <petsc/private/petscimpl.h>
5: #include <petsctaolinesearch.h>
7: typedef struct _TaoLineSearchOps *TaoLineSearchOps;
8: struct _TaoLineSearchOps {
9: PetscErrorCode (*computeobjective)(TaoLineSearch, Vec, PetscReal*, void*);
10: PetscErrorCode (*computegradient)(TaoLineSearch, Vec, Vec, void*);
11: PetscErrorCode (*computeobjectiveandgradient)(TaoLineSearch, Vec, PetscReal *, Vec, void*);
12: PetscErrorCode (*computeobjectiveandgts)(TaoLineSearch, Vec, Vec, PetscReal*, PetscReal*,void*);
13: PetscErrorCode (*setup)(TaoLineSearch);
14: PetscErrorCode (*apply)(TaoLineSearch,Vec,PetscReal*,Vec,Vec);
15: PetscErrorCode (*view)(TaoLineSearch,PetscViewer);
16: PetscErrorCode (*setfromoptions)(PetscOptionItems*,TaoLineSearch);
17: PetscErrorCode (*reset)(TaoLineSearch);
18: PetscErrorCode (*destroy)(TaoLineSearch);
19: PetscErrorCode (*monitor)(TaoLineSearch);
20: };
22: struct _p_TaoLineSearch {
23: PETSCHEADER(struct _TaoLineSearchOps);
24: void *userctx_func;
25: void *userctx_grad;
26: void *userctx_funcgrad;
27: void *userctx_funcgts;
28: PetscBool usemonitor;
29: PetscViewer viewer;
31: PetscBool setupcalled;
32: PetscBool usegts;
33: PetscBool usetaoroutines;
34: PetscBool hasobjective;
35: PetscBool hasgradient;
36: PetscBool hasobjectiveandgradient;
37: void *data;
39: /* bounds used for some line searches */
40: Vec lower;
41: Vec upper;
42: PetscInt bounded;
44: Vec start_x;
45: Vec stepdirection;
46: PetscReal f_fullstep;
47: PetscReal new_f;
48: Vec new_x;
49: Vec new_g;
51: PetscReal step;
52: PetscReal initstep;
54: PetscInt max_funcs;
55: PetscInt nfeval;
56: PetscInt ngeval;
57: PetscInt nfgeval;
58: TaoLineSearchConvergedReason reason;
60: PetscReal rtol; /* relative tol for acceptable step (rtol>0) */
61: PetscReal ftol; /* tol for sufficient decr. condition (ftol>0) */
62: PetscReal gtol; /* tol for curvature condition (gtol>0)*/
63: PetscReal stepmin; /* lower bound for step */
64: PetscReal stepmax; /* upper bound for step */
66: Tao tao;
67: };
69: PETSC_EXTERN PetscLogEvent TAOLINESEARCH_Apply;
70: PETSC_EXTERN PetscLogEvent TAOLINESEARCH_Eval;
71: #endif