Actual source code: lsparams.c

      1: #define PETSCSNES_DLL

     3:  #include src/snes/impls/ls/ls.h

      7: /*@C
      8:    SNESLineSearchSetParams - Sets the parameters associated with the line search
      9:    routine in the Newton-based method SNESLS.

     11:    Collective on SNES

     13:    Input Parameters:
     14: +  snes    - The nonlinear context obtained from SNESCreate()
     15: .  alpha   - The scalar such that .5*f_{n+1} . f_{n+1} <= .5*f_n . f_n - alpha |f_n . J . f_n|
     16: .  maxstep - The maximum norm of the update vector
     17: -  steptol - The minimum norm fraction of the original step after scaling

     19:    Level: intermediate

     21:    Note:
     22:    Pass in PETSC_DEFAULT for any parameter you do not wish to change.

     24:    We are finding the zero of f() so the one dimensional minimization problem we are
     25:    solving in the line search is minimize .5*f(x_n + lambda*step_direction) . f(x_n + lambda*step_direction)

     27:    Contributed by: Mathew Knepley

     29: .keywords: SNES, nonlinear, set, line search params

     31: .seealso: SNESLineSearchGetParams(), SNESLineSearchSet()
     32: @*/
     33: PetscErrorCode PETSCSNES_DLLEXPORT SNESLineSearchSetParams(SNES snes,PetscReal alpha,PetscReal maxstep,PetscReal steptol)
     34: {
     35:   SNES_LS *ls;

     40:   ls = (SNES_LS*)snes->data;
     41:   if (alpha   >= 0.0) ls->alpha   = alpha;
     42:   if (maxstep >= 0.0) ls->maxstep = maxstep;
     43:   if (steptol >= 0.0) ls->steptol = steptol;
     44:   return(0);
     45: }

     49: /*@C
     50:    SNESLineSearchGetParams - Gets the parameters associated with the line search
     51:      routine in the Newton-based method SNESLS.

     53:    Not collective, but any processor will return the same values

     55:    Input Parameters:
     56: +  snes    - The nonlinear context obtained from SNESCreate()
     57: .  alpha   - The scalar such that .5*f_{n+1} . f_{n+1} <= .5*f_n . f_n - alpha |f_n . J . f_n|
     58: .  maxstep - The maximum norm of the update vector
     59: -  steptol - The minimum norm fraction of the original step after scaling

     61:    Level: intermediate

     63:    Note:
     64:     To not get a certain parameter, pass in PETSC_NULL

     66:    We are finding the zero of f() so the one dimensional minimization problem we are
     67:    solving in the line search is minimize .5*f(x_n + lambda*step_direction) . f(x_n + lambda*step_direction)

     69:    Contributed by: Mathew Knepley

     71: .keywords: SNES, nonlinear, set, line search parameters

     73: .seealso: SNESLineSearchSetParams(), SNESLineSearchSet()
     74: @*/
     75: PetscErrorCode PETSCSNES_DLLEXPORT SNESLineSearchGetParams(SNES snes,PetscReal *alpha,PetscReal *maxstep,PetscReal *steptol)
     76: {
     77:   SNES_LS *ls;

     82:   ls = (SNES_LS*)snes->data;
     83:   if (alpha) {
     85:     *alpha   = ls->alpha;
     86:   }
     87:   if (maxstep) {
     89:     *maxstep = ls->maxstep;
     90:   }
     91:   if (steptol) {
     93:     *steptol = ls->steptol;
     94:   }
     95:   return(0);
     96: }