Syntax:
fix ID group-ID rigid keyword values
single values = none molecule values = none group values = list of group IDs
Examples:
fix 1 clump rigid single fix 1 polychains rigid molecule fix 2 fluid rigid group clump1 clump2 clump3
Description:
Treat one or more sets of atoms as an independent rigid body. This means that each timestep the total force and torque on each rigid body is computed and the coordinates and velocities of the atoms in each body are updated so that they move as a rigid body. This can be useful for freezing one or more portions of a large biomolecule, or for simulating a system of colloidal particles.
This fix updates the positions and velocities of the rigid atoms with a constant-energy time integration, so you should not update the same atoms via other fixes (e.g. nve, nvt, npt).
Each body must have two or more atoms. Which atoms are in which bodies can be defined via several options.
For option single the entire group of atoms is treated as one rigid body.
For option molecule, each set of atoms in the group with a different molecule ID is treated as a rigid body.
For option group, each of the listed groups is treated as a separate rigid body. Note that only atoms that are also in the fix group are included in each rigid body.
For computational efficiency, you should also turn off pairwise and bond interactions within each rigid body, as they no longer contribute to the motion. The neigh_modify exclude and delete_bonds commands are used to do this.
For computational efficiency, you should define one fix rigid which includes all the desired rigid bodies. LAMMPS will allow multiple rigid fixes to be defined, but it is more expensive.
This fix uses constant-energy integration, so you may need to impose additional constraints to control the temperature of an ensemble of rigid bodies. You can use fix langevin for this purpose to treat the system as effectively immersed in an implicit solvent, i.e. a Brownian dynamics model. Or you can thermostat additional atoms of an explicit solvent directly.
The degrees-of-freedom removed by rigid bodies are accounted for in temperature and pressure computations. Similarly, the rigid body contribution to the pressure of the system (virial) is also accounted for. For linear rigid bodies of three or more atoms, one additional degree-of-freedom must be subtracted manually using the compute_modify command. E.g. for a simulation of 10 such rigid bodies, use "compute_modify thermo_temp extra 13", after the thermo_style command, where 3 is the default setting and an additional 10 degrees-of-freedom are subtracted.
IMPORTANT NOTE: The periodic image flags of atoms in rigid bodies are modified when the center-of-mass of the rigid body moves across a periodic boundary. They are not incremented/decremented as they would be for non-rigid atoms. This change does not affect dynamics, but means that any diagnostic computation based on the atomic image flag values must be adjusted accordingly. For example, the fix msd will not compute the expected mean-squared displacement for such atoms, and the image flag values written to a dump file will be different than they would be if the atoms were not in a rigid body.
Restart, fix_modify, output, run start/stop, minimize info:
No information about this fix is written to binary restart files. None of the fix_modify options are relevant to this fix. No global scalar or vector or per-atom quantities are stored by this fix for access by various output commands. No parameter of this fix can be used with the start/stop keywords of the run command. This fix is not invoked during energy minimization.
Restrictions:
This fix performs an MPI_Allreduce each timestep that is proportional in length to the number of rigid bodies. Hence it will not scale well in parallel if large numbers of rigid bodies are simulated.
If the atoms in a single rigid body initially straddle a periodic boundary, the input data file must define the image flags for each atom correctly, so that LAMMPS can "unwrap" the atoms into a valid rigid body.
You should not use this fix if you just want to hold group of atoms stationary. A better way to do this is to not include those atoms in your time integration fix. E.g. use "fix 1 mobile nve" instead of "fix 1 all nve", where "mobile" is the group of atoms that you want to move.
Related commands:
delete_bonds, neigh_modify exclude
Default: none