From 6f93b6f1ce82055cc5690928170f0e180419ab48 Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Tue, 31 Mar 2015 10:20:54 +0200 Subject: [PATCH] Split Minimize Energy in simulation object into two functions (Steepest descent and LBFGS) Now it's possible to get the info back, whether steepest descent has converged to the desired tolerance. Unfortunately this is not possible for LBFGS. This is due to the implementation in OpenMM... --- modules/mol/mm/examples/gb_example.py | 2 +- .../mm/examples/gb_example_writing_trajectory.py | 2 +- modules/mol/mm/pymod/export_simulation.cc | 3 ++- modules/mol/mm/src/simulation.cc | 14 ++++++-------- modules/mol/mm/src/simulation.hh | 4 +++- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/mol/mm/examples/gb_example.py b/modules/mol/mm/examples/gb_example.py index cad4e5e1d..24be5a298 100644 --- a/modules/mol/mm/examples/gb_example.py +++ b/modules/mol/mm/examples/gb_example.py @@ -39,7 +39,7 @@ settings.platform = mm.Platform.CPU settings.nonbonded_method = mm.NonbondedMethod.CutoffNonPeriodic sim = mm.Simulation(prot,settings) -sim.MinimizeEnergy(type = "lbfgs",tolerance = 1.0, max_iterations = 200) +sim.ApplyLBFGS(tolerance = 1.0, max_iterations = 200) sim.UpdatePositions() ent = sim.GetEntity() diff --git a/modules/mol/mm/examples/gb_example_writing_trajectory.py b/modules/mol/mm/examples/gb_example_writing_trajectory.py index a6a18cd5e..74e77ce41 100644 --- a/modules/mol/mm/examples/gb_example_writing_trajectory.py +++ b/modules/mol/mm/examples/gb_example_writing_trajectory.py @@ -14,7 +14,7 @@ settings.platform = Platform.CPU sim = Simulation(prot,settings) #minimize it -sim.MinimizeEnergy(type = "steep",tolerance = 1.0, max_iterations = 200) +sim.ApplySD(tolerance = 1.0, max_iterations = 200) #create a trajectory observer and register it to the simulation observer = TrajWriter(10,"gb_example_traj.pdb","gb_example_traj.dcd") diff --git a/modules/mol/mm/pymod/export_simulation.cc b/modules/mol/mm/pymod/export_simulation.cc index 1b358eed0..edeee9faa 100644 --- a/modules/mol/mm/pymod/export_simulation.cc +++ b/modules/mol/mm/pymod/export_simulation.cc @@ -59,7 +59,8 @@ void export_Simulation() .def("SetPositions",&ost::mol::mm::Simulation::SetPositions,(arg("positions"),arg("in_angstrom")=true)) .def("SetVelocities",&ost::mol::mm::Simulation::SetVelocities) .def("GetEntity",&ost::mol::mm::Simulation::GetEntity) - .def("MinimizeEnergy",&ost::mol::mm::Simulation::MinimizeEnergy, (arg("type")="steep",arg("tolerance")=1.0,arg("max_iterations")=1000)) + .def("ApplySD",&ost::mol::mm::Simulation::ApplySD, (arg("tolerance")=100.0,arg("max_iterations")=1000)) + .def("ApplyLBFGS",&ost::mol::mm::Simulation::ApplyLBFGS,(arg("tolerance")=1.0,arg("max_iterations")=1000)) .def("GetEnergy",&ost::mol::mm::Simulation::GetEnergy) .def("GetPotentialEnergy",&ost::mol::mm::Simulation::GetPotentialEnergy) .def("GetKineticEnergy",&ost::mol::mm::Simulation::GetKineticEnergy) diff --git a/modules/mol/mm/src/simulation.cc b/modules/mol/mm/src/simulation.cc index d338b52e2..4e0fcece9 100644 --- a/modules/mol/mm/src/simulation.cc +++ b/modules/mol/mm/src/simulation.cc @@ -388,14 +388,12 @@ void Simulation::UpdatePositions(bool enforce_periodic_box){ } } -void Simulation::MinimizeEnergy(const String& type, Real tolerance, int max_iterations){ - if(type == "lbfgs") OpenMM::LocalEnergyMinimizer::minimize(*context_, tolerance, max_iterations); - else if(type == "steep") Steep::Minimize(*context_,tolerance, max_iterations); - else{ - std::stringstream ss; - ss << "Unknown minimization function type \""<< type <<"\" observed"; - throw ost::Error(ss.str()); - } +bool Simulation::ApplySD(Real tolerance, int max_iterations){ + return Steep::Minimize(*context_,tolerance, max_iterations); +} + +void Simulation::ApplyLBFGS(Real tolerance, int max_iterations){ + OpenMM::LocalEnergyMinimizer::minimize(*context_, tolerance, max_iterations); } void Simulation::Steps(int steps){ diff --git a/modules/mol/mm/src/simulation.hh b/modules/mol/mm/src/simulation.hh index e1344c842..899699525 100644 --- a/modules/mol/mm/src/simulation.hh +++ b/modules/mol/mm/src/simulation.hh @@ -64,7 +64,9 @@ public: void UpdatePositions(bool enforce_periodic_box = false); - void MinimizeEnergy(const String& type = "steep", Real tolerance = 1.0, int max_iterations = 1000); + bool ApplySD(Real tolerance = 100, int max_iterations = 1000); + + void ApplyLBFGS(Real tolerance = 1, int max_iterations = 1000); Real GetEnergy(); -- GitLab