Skip to content
Snippets Groups Projects
Commit 6f93b6f1 authored by Studer Gabriel's avatar Studer Gabriel
Browse files

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...
parent 0fdb1271
No related branches found
No related tags found
No related merge requests found
...@@ -39,7 +39,7 @@ settings.platform = mm.Platform.CPU ...@@ -39,7 +39,7 @@ settings.platform = mm.Platform.CPU
settings.nonbonded_method = mm.NonbondedMethod.CutoffNonPeriodic settings.nonbonded_method = mm.NonbondedMethod.CutoffNonPeriodic
sim = mm.Simulation(prot,settings) 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() sim.UpdatePositions()
ent = sim.GetEntity() ent = sim.GetEntity()
......
...@@ -14,7 +14,7 @@ settings.platform = Platform.CPU ...@@ -14,7 +14,7 @@ settings.platform = Platform.CPU
sim = Simulation(prot,settings) sim = Simulation(prot,settings)
#minimize it #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 #create a trajectory observer and register it to the simulation
observer = TrajWriter(10,"gb_example_traj.pdb","gb_example_traj.dcd") observer = TrajWriter(10,"gb_example_traj.pdb","gb_example_traj.dcd")
......
...@@ -59,7 +59,8 @@ void export_Simulation() ...@@ -59,7 +59,8 @@ void export_Simulation()
.def("SetPositions",&ost::mol::mm::Simulation::SetPositions,(arg("positions"),arg("in_angstrom")=true)) .def("SetPositions",&ost::mol::mm::Simulation::SetPositions,(arg("positions"),arg("in_angstrom")=true))
.def("SetVelocities",&ost::mol::mm::Simulation::SetVelocities) .def("SetVelocities",&ost::mol::mm::Simulation::SetVelocities)
.def("GetEntity",&ost::mol::mm::Simulation::GetEntity) .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("GetEnergy",&ost::mol::mm::Simulation::GetEnergy)
.def("GetPotentialEnergy",&ost::mol::mm::Simulation::GetPotentialEnergy) .def("GetPotentialEnergy",&ost::mol::mm::Simulation::GetPotentialEnergy)
.def("GetKineticEnergy",&ost::mol::mm::Simulation::GetKineticEnergy) .def("GetKineticEnergy",&ost::mol::mm::Simulation::GetKineticEnergy)
......
...@@ -388,14 +388,12 @@ void Simulation::UpdatePositions(bool enforce_periodic_box){ ...@@ -388,14 +388,12 @@ void Simulation::UpdatePositions(bool enforce_periodic_box){
} }
} }
void Simulation::MinimizeEnergy(const String& type, Real tolerance, int max_iterations){ bool Simulation::ApplySD(Real tolerance, int max_iterations){
if(type == "lbfgs") OpenMM::LocalEnergyMinimizer::minimize(*context_, tolerance, max_iterations); return Steep::Minimize(*context_,tolerance, max_iterations);
else if(type == "steep") Steep::Minimize(*context_,tolerance, max_iterations); }
else{
std::stringstream ss; void Simulation::ApplyLBFGS(Real tolerance, int max_iterations){
ss << "Unknown minimization function type \""<< type <<"\" observed"; OpenMM::LocalEnergyMinimizer::minimize(*context_, tolerance, max_iterations);
throw ost::Error(ss.str());
}
} }
void Simulation::Steps(int steps){ void Simulation::Steps(int steps){
......
...@@ -64,7 +64,9 @@ public: ...@@ -64,7 +64,9 @@ public:
void UpdatePositions(bool enforce_periodic_box = false); 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(); Real GetEnergy();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment