The functionality of OpenMM will (eventually) include everything that one would need to run modern molecular simulation.
-
Gideon Simpson
- Posts: 28
- Joined: Tue Sep 26, 2017 11:15 pm
Post
by Gideon Simpson » Tue Oct 29, 2019 6:33 pm
I was experimenting with a problem where I let my system run for some amount of time, call
Code: Select all
simulation.system.removeForce(idx)
where idx corresponds to the index of the force I want to remove, and then call
to run for some additional time. I am finding that the system continues to evolve as though the removed force were still present. Is that not what the removeForce method does? Or must something else be done?
-
Peter Eastman
- Posts: 2593
- Joined: Thu Aug 09, 2007 1:25 pm
Post
by Peter Eastman » Tue Oct 29, 2019 8:50 pm
When you create a Context, it copies out all the information about the System. From that point on, any changes to the System have no effect on the existing Context.
You can force it to pick up the changes by calling reinitialize() on the Context. That throws out all existing information and rebuilds its data structures from scratch, which means state information (positions, velocities, etc.) is lost. If you specify preserveState=True, it will try to preserve the state information by first creating a checkpoint, then trying to reload the checkpoint after the context is reinitialized. That will work as long as nothing has changed that alters the content of checkpoints. For removing a Force, that basically means the Force can't have defined any global parameters, since those get stored in checkpoints. Otherwise, you'll have to manually restore all relevant state information after reinitializing the context.
-
Gideon Simpson
- Posts: 28
- Joined: Tue Sep 26, 2017 11:15 pm
Post
by Gideon Simpson » Wed Oct 30, 2019 4:01 am
I'll give that a shot. Two follow up questions. Is this the intended use of removeForce? Is there a simpler/better way to accomplish what I'm trying to do?
-
Peter Eastman
- Posts: 2593
- Joined: Thu Aug 09, 2007 1:25 pm
Post
by Peter Eastman » Wed Oct 30, 2019 8:36 am
I'm not sure exactly what you're trying to do, so I don't know if there's a better way. But that sounds like one reasonable way of doing it.
-
Gideon Simpson
- Posts: 28
- Joined: Tue Sep 26, 2017 11:15 pm
Post
by Gideon Simpson » Wed Oct 30, 2019 11:31 am
What I'm trying to do is to simulate a system where I turn certain forces on/off at specific times.