CompoundIntegrator¶
-
class
OpenMM::CompoundIntegrator¶ This class allows you to use multiple integration algorithms within a single simulation, switching back and forth between them. To use it, create whatever other Integrators you need, then add all of them to a
CustomIntegrator:CompoundIntegrator compoundIntegrator; compoundIntegrator.addIntegrator(new VerletIntegrator(0.001)); compoundIntegrator.addIntegrator(new LangevinIntegrator(300.0, 1.0, 0.001));
Next create a
Context, specifying theCompoundIntegratoras theIntegratorto use for theContext:Context context(system, compoundIntegrator);
Finally, call
setCurrentIntegrator()to set whichIntegratoris active. That one will be used for all calls tostep()until the next time you change it.compoundIntegrator.setCurrentIntegrator(0); compoundIntegrator.step(1000); // Take 1000 steps of Verlet dynamics compoundIntegrator.setCurrentIntegrator(1); compoundIntegrator.step(1000); // Take 1000 steps of Langevin dynamics
When switching between integrators, it is important to make sure they are compatible with each other, and that they will interpret the positions and velocities in the same way. Remember that leapfrog style integrators assume the positions and velocities are offset from each other by half a time step. When switching between a leapfrog and non-leapfrog integrator, you must first adjust the velocities to avoid introducing error. This is also true when switching between two leapfrog integrators that use different step sizes, since they will interpret the velocities as corresponding to different times.
Methods
CompoundIntegratorCreate a CompoundIntegrator.~CompoundIntegratorgetNumIntegratorsGet the number of Integrators that have been added to this CompoundIntegrator.addIntegratorAdd an Integratorto thisCompoundIntegrator.getIntegratorGet a reference to one of the Integrators that have been added to this CompoundIntegrator.getIntegratorGet a const reference to one of the Integrators that have been added to this CompoundIntegrator.getCurrentIntegratorGet the index of the current Integrator.setCurrentIntegratorSet the current Integrator.getStepSizeGet the size of each time step, in picoseconds. setStepSizeSet the size of each time step, in picoseconds. getConstraintToleranceGet the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. setConstraintToleranceSet the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. stepAdvance a simulation through time by taking a series of time steps. -
CompoundIntegrator()¶ Create a
CompoundIntegrator().
-
~CompoundIntegrator()¶
-
int
getNumIntegrators() const¶ Get the number of Integrators that have been added to this
CompoundIntegrator.
-
int
addIntegrator(Integrator *integrator)¶ Add an
Integratorto thisCompoundIntegrator. TheIntegratorobject should have been created on the heap with the “new” operator. TheCompoundIntegratortakes over ownership of it, and deletes it when theCompoundIntegratoritself is deleted. All Integrators must be added before theContextis created.Parameters: - integrator – the
Integratorto add
Returns: the index of the Integratorthat was added- integrator – the
-
Integrator &
getIntegrator(int index)¶ Get a reference to one of the Integrators that have been added to this
CompoundIntegrator.Parameters: - index – the index of the
Integratorto get
- index – the index of the
-
const Integrator &
getIntegrator(int index) const¶ Get a const reference to one of the Integrators that have been added to this
CompoundIntegrator.Parameters: - index – the index of the
Integratorto get
- index – the index of the
-
int
getCurrentIntegrator() const¶ Get the index of the current
Integrator.
-
void
setCurrentIntegrator(int index)¶ Set the current
Integrator.Parameters: - index – the index of the
Integratorto use
- index – the index of the
-
double
getStepSize() const¶ Get the size of each time step, in picoseconds. This method calls
getStepSize()on whicheverIntegratorhas been set as current.Returns: the step size, measured in ps
-
void
setStepSize(double size)¶ Set the size of each time step, in picoseconds. This method calls
setStepSize()on whicheverIntegratorhas been set as current.Parameters: - size – the step size, measured in ps
-
double
getConstraintTolerance() const¶ Get the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. This method calls
getConstraintTolerance()on whicheverIntegratorhas been set as current.
-
void
setConstraintTolerance(double tol)¶ Set the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. This method calls
setConstraintTolerance()on whicheverIntegratorhas been set as current.
-
void
step(int steps)¶ Advance a simulation through time by taking a series of time steps. This method calls
step()on whicheverIntegratorhas been set as current.Parameters: - steps – the number of time steps to take
-