Actual source code: vissimpl.h

  1: /*
  2:    Private context for semismooth newton method with line search for solving
  3:    system of mixed complementarity equations
  4:  */

  6: #pragma once

  8: #include <petsc/private/snesimpl.h>

 10: #define PetscScalarNorm(a, b) (PetscSqrtScalar((a) * (a) + (b) * (b)))

 12: typedef struct {
 13:   Vec         phi;     /* pointer to semismooth function */
 14:   PetscReal   phinorm; /* 2-norm of the semismooth function */
 15:   PetscReal   merit;   /* Merit function */
 16:   Vec         dpsi;    /* Merit function gradient */
 17:   Vec         Da;      /* B sub-differential work vector (diag perturbation) */
 18:   Vec         Db;      /* B sub-differential work vector (row scaling) */
 19:   Vec         z;       /* B subdifferential work vector */
 20:   Vec         t;       /* B subdifferential work vector */
 21:   PetscScalar norm_d;  /* two norm of the descent direction */

 23:   /* Copy of user supplied function evaluation routine  */
 24:   PetscErrorCode (*computeuserfunction)(SNES, Vec, Vec, void *);
 25:   /* user supplied function for checking redundant equations for SNESSolveVI_RS2 */
 26:   PetscErrorCode (*checkredundancy)(SNES, IS, IS *, void *);
 27: } SNES_VINEWTONSSLS;