From 5839e3ce06dd0886e63fb2ed25fc211b6bd79c9f Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 30 Mar 2011 20:48:30 +0000 Subject: [PATCH] Added EMACH to quadratic linesearch criteria git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@5884 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/min_linesearch.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/min_linesearch.cpp b/src/min_linesearch.cpp index b526f7db99..0f7c261cb9 100644 --- a/src/min_linesearch.cpp +++ b/src/min_linesearch.cpp @@ -39,13 +39,13 @@ using namespace LAMMPS_NS; // ALPHA_REDUCE = reduction ratio, should be in range [0.5,1) // BACKTRACK_SLOPE, should be in range (0,0.5] // QUADRATIC_TOL = tolerance on alpha0, should be in range [0.1,1) -// IDEAL_TOL = ideal energy tolerance for backtracking +// EMACH = machine accuracy limit of energy changes (1.0e-8) // EPS_QUAD = tolerance for quadratic projection #define ALPHA_MAX 1.0 #define ALPHA_REDUCE 0.5 #define BACKTRACK_SLOPE 0.4 -#define IDEAL_TOL 1.0e-8 +#define EMACH 1.0e-8 #define QUADRATIC_TOL 0.1 #define EPS_QUAD 1.0e-28 @@ -278,7 +278,7 @@ int MinLineSearch::linemin_backtrack(double eoriginal, double &alpha) // backtracked all the way to 0.0 // reset to starting point, exit with error - if (alpha <= 0.0 || de_ideal >= -IDEAL_TOL) { + if (alpha <= 0.0 || de_ideal >= -EMACH) { ecurrent = alpha_step(0.0,0); return ZEROALPHA; } @@ -461,9 +461,9 @@ int MinLineSearch::linemin_quadratic(double eoriginal, double &alpha) relerr = fabs(1.0-(0.5*(alpha-alphaprev)*(fh+fhprev)+ecurrent)/engprev); alpha0 = alpha - (alpha-alphaprev)*fh/delfh; - if (relerr <= QUADRATIC_TOL && alpha0 > 0.0 && alpha0 < alphamax) { + if (relerr <= QUADRATIC_TOL && alpha0 > 0.0 && alpha0 < alphamax) { ecurrent = alpha_step(alpha0,1); - if (ecurrent < eoriginal) { + if (ecurrent - eoriginal < EMACH) { if (nextra_global) { int itmp = modify->min_reset_ref(); if (itmp) ecurrent = energy_force(1); @@ -498,7 +498,7 @@ int MinLineSearch::linemin_quadratic(double eoriginal, double &alpha) // backtracked all the way to 0.0 // reset to starting point, exit with error - if (alpha <= 0.0 || de_ideal >= -IDEAL_TOL) { + if (alpha <= 0.0 || de_ideal >= -EMACH) { ecurrent = alpha_step(0.0,0); return ZEROALPHA; }