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: };