xref: /petsc/src/tao/unconstrained/impls/cg/taocg.h (revision 9dd11ecf0918283bb567d8b33a92f53ac4ea7840)
15e1affc2SSatish Balay /*
25e1affc2SSatish Balay     Context for conjugate gradient method (unconstrained minimization)
35e1affc2SSatish Balay  */
45e1affc2SSatish Balay 
5*a4963045SJacob Faibussowitsch #pragma once
65e1affc2SSatish Balay 
7af0996ceSBarry Smith #include <petsc/private/taoimpl.h>
85e1affc2SSatish Balay 
95e1affc2SSatish Balay typedef struct {
105e1affc2SSatish Balay   Vec G_old;
115e1affc2SSatish Balay   Vec X_old;
125e1affc2SSatish Balay   Vec W; /*  work vector */
135e1affc2SSatish Balay 
145e1affc2SSatish Balay   PetscReal eta;       /*  Restart tolerance */
155e1affc2SSatish Balay   PetscReal delta_max; /*  Minimum value for scaling */
165e1affc2SSatish Balay   PetscReal delta_min; /*  Maximum value for scaling */
175e1affc2SSatish Balay 
185e1affc2SSatish Balay   /*  The algorithm restarts when the gradient at the current point g_k,
195e1affc2SSatish Balay        and the gradient of the previous point, g_{k-1}, satisfy the
205e1affc2SSatish Balay        following inequality:
215e1affc2SSatish Balay 
225e1affc2SSatish Balay             abs(inner(g_k, g_{k-1})) > eta * norm(g_k, 2)^2. */
235e1affc2SSatish Balay 
245e1affc2SSatish Balay   PetscInt ngradsteps;  /*  Number of gradient steps */
255e1affc2SSatish Balay   PetscInt nresetsteps; /*  Number of reset steps */
265e1affc2SSatish Balay 
275e1affc2SSatish Balay   PetscInt cg_type; /*  Formula to use */
285e1affc2SSatish Balay } TAO_CG;
29