Actual source code: linesearchimpl.h
  1: #pragma once
  3: #include <petscsnes.h>
  4: #include <petsc/private/petscimpl.h>
  6: PETSC_EXTERN PetscBool      SNESLineSearchRegisterAllCalled;
  7: PETSC_EXTERN PetscErrorCode SNESLineSearchRegisterAll(void);
  8: PETSC_EXTERN PetscLogEvent  SNESLINESEARCH_Apply;
 10: typedef struct _LineSearchOps *LineSearchOps;
 12: struct _LineSearchOps {
 13:   PetscErrorCode (*view)(SNESLineSearch, PetscViewer);
 14:   SNESLineSearchApplyFn *apply;
 15:   PetscErrorCode (*precheck)(SNESLineSearch, Vec, Vec, PetscBool *, void *);
 16:   SNESLineSearchVIProjectFn  *viproject;
 17:   SNESLineSearchVINormFn     *vinorm;
 18:   SNESLineSearchVIDirDerivFn *vidirderiv;
 19:   PetscErrorCode (*postcheck)(SNESLineSearch, Vec, Vec, Vec, PetscBool *, PetscBool *, void *);
 20:   PetscErrorCode (*setfromoptions)(SNESLineSearch, PetscOptionItems);
 21:   PetscErrorCode (*reset)(SNESLineSearch);
 22:   PetscErrorCode (*destroy)(SNESLineSearch);
 23:   PetscErrorCode (*setup)(SNESLineSearch);
 24:   PetscErrorCode (*snesfunc)(SNES, Vec, Vec);
 25: };
 27: #define MAXSNESLSMONITORS 5
 29: struct _p_LineSearch {
 30:   PETSCHEADER(struct _LineSearchOps);
 32:   SNES snes;
 34:   void *data;
 36:   PetscBool setupcalled;
 38:   Vec vec_sol;
 39:   Vec vec_sol_new;
 40:   Vec vec_func;
 41:   Vec vec_func_new;
 42:   Vec vec_update;
 44:   PetscInt nwork;
 45:   Vec     *work;
 47:   PetscReal lambda;
 49:   PetscBool            norms;
 50:   PetscReal            fnorm;
 51:   PetscReal            ynorm;
 52:   PetscReal            xnorm;
 53:   SNESLineSearchReason result;
 54:   PetscBool            keeplambda;
 56:   PetscReal damping;
 57:   PetscReal maxlambda;
 58:   PetscReal minlambda;
 59:   PetscInt  max_it;
 60:   PetscReal rtol;
 61:   PetscReal atol;
 62:   PetscReal ltol;
 63:   PetscInt  order;
 65:   PetscReal precheck_picard_angle;
 67:   void *precheckctx;
 68:   void *postcheckctx;
 70:   PetscViewer monitor;
 71:   PetscErrorCode (*monitorftns[MAXSNESLSMONITORS])(SNESLineSearch, void *); /* monitor routine */
 72:   PetscCtxDestroyFn *monitordestroy[MAXSNESLSMONITORS];                     /* monitor context destroy routine */
 73:   void              *monitorcontext[MAXSNESLSMONITORS];                     /* monitor context */
 74:   PetscInt           numbermonitors;                                        /* number of monitors */
 75: };