Actual source code: gltrimpl.h
1: /*****************************************************************************/
2: /* Context for using preconditioned conjugate gradient method to minimized a */
3: /* quadratic function subject to a trust region constraint. If the matrix */
4: /* is indefinite, a direction of negative curvature may be encountered. If */
5: /* a direction of negative curvature is found, we continue to build the */
6: /* tridiagonal Lanczos matrix for a fixed number of iterations. After this */
7: /* matrix is computed, we compute a global solution to solve the trust- */
8: /* region problem with the tridiagonal approximation by using a variant of */
9: /* the More'-Sorenson algorithm. The direction is then constructed from */
10: /* this solution. */
11: /* */
12: /* This method is described in: */
13: /* N. Gould, S. Lucidi, M. Roma, and Ph. Toint, "Solving the Trust-Region */
14: /* Subproblem using the Lanczos Method", SIAM Journal on Optimization, */
15: /* 9, pages 504-525, 1999. */
16: /*****************************************************************************/
18: #pragma once
20: #include <petsc/private/kspimpl.h>
22: typedef struct {
23: PetscReal *diag; /* Diagonal part of Lanczos matrix */
24: PetscReal *offd; /* Off-diagonal part of Lanczos matrix */
25: PetscReal *alpha; /* Record of alpha values from CG */
26: PetscReal *beta; /* Record of beta values from CG */
27: PetscReal *norm_r; /* Record of residual values from CG */
29: PetscReal *rwork; /* Real workspace for solver computations */
30: PetscBLASInt *iwork; /* Integer workspace for solver computations */
32: PetscReal radius;
33: PetscReal norm_d;
34: PetscReal e_min;
35: PetscReal o_fcn;
36: PetscReal lambda;
38: PetscReal init_pert; /* Initial perturbation for solve */
39: PetscReal eigen_tol; /* Tolerance used when computing eigenvalue */
40: PetscReal newton_tol; /* Tolerance used for newton method */
42: PetscInt alloced; /* Size of workspace vectors allocated */
43: PetscInt init_alloc; /* Initial size for workspace vectors */
45: PetscInt max_lanczos_its; /* Maximum lanczos iterations */
46: PetscInt max_newton_its; /* Maximum newton iterations */
47: PetscInt dtype; /* Method used to measure the norm of step */
48: } KSPCG_GLTR;