How to prevent particles from moving#

MD simulations#

Omit the stationary particles from the filter (or filters) that you provide to your integration method (or methods) to prevent them from moving in MD simulations. For example:

import hoomd

simulation = hoomd.util.make_example_simulation()

# Select mobile particles with a filter.
stationary_particles = hoomd.filter.Tags([0])
mobile_particles = hoomd.filter.SetDifference(hoomd.filter.All(),
                                              stationary_particles)

# Integrate the equations of motion of the mobile particles.
langevin = hoomd.md.methods.Langevin(filter=mobile_particles, kT=1.5)
simulation.operations.integrator = hoomd.md.Integrator(dt=0.001,
                                                       methods=[langevin])

simulation.run(100)

HPMC simulations#

To prevent a subset of particles from moving in HPMC simulations:

  1. Use different types for stationary and mobile particles.

  2. Set the move sizes of the stationary type to 0.

  3. Set the shape of the stationary type accordingly.

For example:

import hoomd

# Step 1: Use different types for stationary and mobile particles.
simulation = hoomd.util.make_example_simulation(
    particle_types=['A', 'A_no_motion'])

hpmc_ellipsoid = hoomd.hpmc.integrate.Ellipsoid()
hpmc_ellipsoid.shape['A'] = dict(a=0.5, b=0.25, c=0.125)

# Step 2: Set the move sizes of the stationary type to 0.
hpmc_ellipsoid.d['A_no_motion'] = 0
hpmc_ellipsoid.a['A_no_motion'] = 0

# Step 3: Set the shape of the stationary type accordingly.
hpmc_ellipsoid.shape['A_no_motion'] = hpmc_ellipsoid.shape['A']

simulation.operations.integrator = hpmc_ellipsoid

simulation.run(100)