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.
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;