OpenMM C++ API¶
The C++ API provides information about the classes and methods available in OpenMM for C++ developers. OpenMM uses an object-oriented API that makes all its functionality available through a small number of classes.
Core classes¶
OpenMM::System
¶
A System
specifies generic properties of the molecular system to be
simulated: the number of particles it contains, the mass of each one, the size
of the periodic box, and so on. The interactions between the particles are
specified through a set of Force objects that are added to the
System
. Force field specific parameters, such as particle charges, are
stored in these Force
objects, not as direct properties of the System
.
OpenMM::Context
¶
A Context
stores all of the state information for a simulation: particle
positions and velocities, as well as arbitrary parameters defined by the
Forces
in the System. It is possible to create multiple Contexts
for a
single System
, and thus have multiple simulations of that System
in
progress at the same time. Context
does not provide methods for accessing
state variables directly; they must be read via a State
object.
OpenMM::State
¶
A State
object must be constructed before data can be read from a
simulation. State variables are not accessible directly via a Context
in
order to make explicit the precise time that a variable reflects. A State
is created by calling a method on a Context
and stores only the information
requested at invocation.
OpenMM::Platform
¶
A Platform
is a single implementation of OpenMM at a low level. This allows
the same high level API documented here to be used on all sorts of compute
hardware, from GPUs to supercomputers. A Platform
implements some set of
kernels, which define which operations it supports. Writing a new Platform
allows OpenMM to be ported to new hardware or to be implemented in a new way
without rewriting the entire application.
Forces¶
Force
objects define the behavior of the particles in a System
. The
Force
class is actually slightly more general than its name suggests. A
Force
can, indeed, apply forces to particles, but it can also directly
modify particle positions and velocities in arbitrary ways. Some thermostats
and barostats, for example, can be implemented as Force
classes. Examples
of Force subclasses include HarmonicBondForce
, NonbondedForce
, and MonteCarloBarostat
.
Integrators¶
An Integrator
implements an algorithm for advancing the simulation through
time. They provide a Context
a means of stepping the simulation forward,
and must be coupled to a Context
to function. Examples of Integrator
subclasses include LangevinIntegrator
,
VerletIntegrator
, and BrownianIntegrator
.
Extras¶
OpenMM’s public API includes a few more classes that support the above.