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