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;