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