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