Actual source code: taolinesearchimpl.h

  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)(TaoLineSearch, PetscOptionItems *);
 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:   PetscBool 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