From 0fdb12715f7d25f0cf2365e68558cd974cdf3eaa Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Tue, 31 Mar 2015 08:09:40 +0200 Subject: [PATCH] return whether tolerance has been reached or not --- modules/mol/mm/src/steep.cc | 13 ++++++++++--- modules/mol/mm/src/steep.hh | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/mol/mm/src/steep.cc b/modules/mol/mm/src/steep.cc index b33d5fb09..05c4d96d3 100644 --- a/modules/mol/mm/src/steep.cc +++ b/modules/mol/mm/src/steep.cc @@ -3,14 +3,17 @@ namespace ost{ namespace mol{ namespace mm{ -void Steep::Minimize(OpenMM::Context& context, double tolerance, uint max_iterations) { +bool Steep::Minimize(OpenMM::Context& context, double tolerance, uint max_iterations) { const OpenMM::System& system = context.getSystem(); if(system.getNumConstraints() > 0){ throw ost::Error("Cannot handle constraints in steepest descent, use lbgfs instead!"); } - if( tolerance < 0.0 ){ + if( tolerance <= 0.0 ){ throw ost::Error("tolerance value must be greater 0.0!"); //also important to avoid zero division error when calculating normalization factor for forces } + + bool converged = false; + OpenMM::State state = context.getState(OpenMM::State::Energy | OpenMM::State::Forces | OpenMM::State::Positions); std::vector<OpenMM::Vec3> positions = state.getPositions(); std::vector<OpenMM::Vec3> new_positions = positions; @@ -35,7 +38,10 @@ void Steep::Minimize(OpenMM::Context& context, double tolerance, uint max_iterat max_length = std::max(max_length,forces[*j].dot(forces[*j])); } max_length = sqrt(max_length); - if(max_length <= tolerance) break; + if(max_length <= tolerance){ + converged = true; + break; + } factor = 1.0/max_length; for(std::vector<uint>::iterator j = non_zero_mass_particles.begin(); j != non_zero_mass_particles.end(); ++j){ @@ -62,5 +68,6 @@ void Steep::Minimize(OpenMM::Context& context, double tolerance, uint max_iterat } } context.setPositions(positions); + return converged; } }}}//ns diff --git a/modules/mol/mm/src/steep.hh b/modules/mol/mm/src/steep.hh index 567f46583..c4fac4494 100644 --- a/modules/mol/mm/src/steep.hh +++ b/modules/mol/mm/src/steep.hh @@ -22,7 +22,7 @@ namespace ost { namespace mol { namespace mm{ class Steep { public: - static void Minimize(OpenMM::Context& context, double tolerance = 100, uint maxIterations = 1000); + static bool Minimize(OpenMM::Context& context, double tolerance = 100, uint maxIterations = 1000); }; }}} -- GitLab