1*5e1affc2SSatish Balay /* 2*5e1affc2SSatish Balay Context for conjugate gradient method (unconstrained minimization) 3*5e1affc2SSatish Balay */ 4*5e1affc2SSatish Balay 5*5e1affc2SSatish Balay 6*5e1affc2SSatish Balay #ifndef __TAO_CG_H 7*5e1affc2SSatish Balay #define __TAO_CG_H 8*5e1affc2SSatish Balay 9*5e1affc2SSatish Balay #include "tao-private/taosolver_impl.h" 10*5e1affc2SSatish Balay 11*5e1affc2SSatish Balay typedef struct { 12*5e1affc2SSatish Balay Vec G_old; 13*5e1affc2SSatish Balay Vec X_old; 14*5e1affc2SSatish Balay Vec W; /* work vector */ 15*5e1affc2SSatish Balay 16*5e1affc2SSatish Balay PetscReal eta; /* Restart tolerance */ 17*5e1affc2SSatish Balay PetscReal delta_max; /* Minimum value for scaling */ 18*5e1affc2SSatish Balay PetscReal delta_min; /* Maximum value for scaling */ 19*5e1affc2SSatish Balay 20*5e1affc2SSatish Balay 21*5e1affc2SSatish Balay /* The algorithm restarts when the gradient at the current point g_k, 22*5e1affc2SSatish Balay and the gradient of the previous point, g_{k-1}, satisfy the 23*5e1affc2SSatish Balay following inequality: 24*5e1affc2SSatish Balay 25*5e1affc2SSatish Balay abs(inner(g_k, g_{k-1})) > eta * norm(g_k, 2)^2. */ 26*5e1affc2SSatish Balay 27*5e1affc2SSatish Balay PetscInt ngradsteps; /* Number of gradient steps */ 28*5e1affc2SSatish Balay PetscInt nresetsteps; /* Number of reset steps */ 29*5e1affc2SSatish Balay 30*5e1affc2SSatish Balay PetscInt cg_type; /* Formula to use */ 31*5e1affc2SSatish Balay } TAO_CG; 32*5e1affc2SSatish Balay 33*5e1affc2SSatish Balay #endif /* ifndef __TAO_CG_H */ 34*5e1affc2SSatish Balay 35*5e1affc2SSatish Balay 36