lammps/doc/fix_rigid.txt

249 lines
11 KiB
Plaintext
Raw Normal View History

"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
fix rigid :h3
[Syntax:]
fix ID group-ID rigid bodystyle args keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
rigid = style name of this fix command :l
bodystyle = {single} or {molecule} or {group} :l
{single} args = none
{molecule} args = none
{group} args = N groupID1 groupID2 ...
N = # of groups
groupID1, groupID2, ... = list of N group IDs :pre
zero or more keyword/value pairs may be appended :l
keyword = {force} or {torque} :l
{force} values = M xflag yflag zflag
M = which rigid body from 1-Nbody (see asterisk form below)
xflag,yflag,zflag = off/on if component of center-of-mass force is active
{torque} values = M xflag yflag zflag
M = which rigid body from 1-Nbody (see asterisk form below)
xflag,yflag,zflag = off/on if component of center-of-mass torque is active :pre
:ule
[Examples:]
fix 1 clump rigid single
fix 1 clump rigid single force 1 off off on
fix 1 polychains rigid molecule
fix 1 polychains rigid molecule force 1*5 off off off force 6*10 off off on
fix 2 fluid rigid group 3 clump1 clump2 clump3
fix 2 fluid rigid group 3 clump1 clump2 clump3 torque * off off off :pre
[Description:]
Treat one or more sets of atoms as independent rigid bodies. This
means that each timestep the total force and torque on each rigid body
is computed as the sum of the forces and torques on its constituent
particles and the coordinates, velocities, and orientations of the
atoms in each body are updated so that the body moves and rotates as a
single entity.
Examples of large rigid bodies are a large colloidal particle, or
portions of a large biomolecule such as a protein.
Example of small rigid bodies are patchy nanoparticles, such as those
modeled in "this paper"_#Zhang by Sharon Glotzer's group, clumps of
granular particles, lipid molecules consiting of one or more point
dipoles connected to other spheroids or ellipsoids, and coarse-grain
models of nano or colloidal particles consisting of a small number of
constituent particles. Note that the "fix shake"_fix_shake.html
command can also be used to rigidify small molecules of 2, 3, or 4
atoms, e.g. water molecules. That fix treats the constituent atoms as
point masses.
The constituent particles within a rigid body can be point particles
(the default in LAMMPS) or finite-size particles, such as spheroids
and ellipsoids. See the "shape"_shape.html command and "atom_style
granular"_atom_style.html for more details on these kinds of
particles. Finite-size particles contribute differently to the moment
of inertia of a rigid body than do point particles. Finite-size
particles can also experience torque (e.g. due to "frictional granular
interactions"_pair_gran.html) and have an orientation. These
contributions are accounted for by the fix.
Forces between particles within a body do not contribute to the
external force or torque on the body. Thus for computational
efficiency, you may wish to turn off pairwise and bond interactions
between particles within each rigid body. The "neigh_modify
exclude"_neigh_modify.html and "delete_bonds"_delete_bonds.html
commands are used to do this. For finite-size particles this also
means the particles can be highly overlapped when creating the rigid
body.
IMPORTANT NOTE: This fix is overkill if you simply want to hold a
collection of atoms stationary or have them move with a constant
velocity. A simpler way to hold atoms stationary 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. You can move atoms with a constant velocity by
assigning them an initial velocity (via the "velocity"_velocity.html
command), setting the force on them to 0.0 (via the "fix
setforce"_fix_setforce.html command), and integrating them as usual
(e.g. via the "fix nve"_fix_nve.html command).
IMPORTANT NOTE: 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).
:line
Each body must have two or more atoms. An atom can belong to at most
one rigid body. Which atoms are in which bodies can be defined via
several options.
For bodystyle {single} the entire fix group of atoms is treated as one
rigid body.
For bodystyle {molecule}, each set of atoms in the fix group with a
different molecule ID is treated as a rigid body.
For bodystyle {group}, each of the listed groups is treated as a
separate rigid body. Only atoms that are also in the fix group are
included in each rigid body.
By default, each rigid body is acted on by other atoms which induce a
force and torque on its center of mass, causing it to translate and
rotate. Components of the center-of-mass force and torque can be
turned off by the {force} and {torque} keywords. This may be useful
if you wish a body to rotate but not translate, or vice versa. Note
that if you expect a rigid body not to move or rotate by using these
keywords, you must insure its initial center-of-mass translational or
angular velocity is 0.0.
An xflag, yflag, or zflag set to {off} means turn off the component of
force of torque in that dimension. A setting of {on} means turn on
the component, which is the default. Which rigid body(s) the settings
apply to is determined by the first argument of the {force} and
{torque} keywords. It can be an integer M from 1 to Nbody, where
Nbody is the number of rigid bodies defined. A wild-card asterisk can
be used in place of, or in conjunction with, the M argument to set the
flags for multiple rigid bodies. This takes the form "*" or "*n" or
"n*" or "m*n". If N = the number of rigid bodies, then an asterisk
with no numeric values means all bodies from 1 to N. A leading
asterisk means all bodies from 1 to n (inclusive). A trailing
asterisk means all bodies from n to N (inclusive). A middle asterisk
means all types from m to n (inclusive). Note that you can use the
{force} or {torque} keywords as many times as you like. If a
particular rigid body has its component flags set multiple times, the
settings from the final keyword are used.
For computational efficiency, you may wish to turn off pairwise and
bond interactions within each rigid body, as they no longer contribute
to the motion. The "neigh_modify exclude"_neigh_modify.html and
"delete_bonds"_delete_bonds.html 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"_fix_langevin.html for this
purpose to treat the system as effectively immersed in an implicit
solvent, e.g. a Brownian dynamics model. Or you can thermostat only
the non-rigid atoms that surround one or more rigid bodies
(i.e. explicit solvent) by appropriate choice of groups in the compute
and fix commands for temperature and thermostatting.
If you calculate a temperature for the rigid bodies, the
degrees-of-freedom removed by each rigid body are accounted for in the
temperature (and pressure) computation, but only if the temperature
group includes the entire rigid body. Rigid bodies in 3d have 6
degrees of freedom (3 translational, 3 rotational), except for dimers
which only have 5. Rigid bodies in 2d have 3 degrees of freedom.
IMPORTANT NOTE: Linear rigid bodies are ones consisting of point
particles in a straight line. Linear rigid bodies in 3d with three or
more atoms also have 5 degrees of freedom instead of 6, but LAMMPS
will not detect this. Thus you should use the
"compute_modify"_compute_modify.html command to subtract an additional
degree of freedom per rigid body. You may also wish to explicitly
subtract additional degrees-of-freedom if you use the {force} and
{torque} keywords to eliminate certain motions of the rigid body, as
LAMMPS does not do this automatically.
The rigid body contribution to the pressure of the system (virial) is
also accounted for by this fix.
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"_fix_msd.html will not compute the expected mean-squared
displacement for such atoms, and the image flag values written to a
"dump file"_dump.html will be different than they would be if the
atoms were not in a rigid body. It also means that if you have bonds
between a pair of rigid bodies and the bond straddles a periodic
boundary, you cannot use the "replicate"_replicate command to increase
the system size.
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options
are relevant to this fix.
This fix computes a global vector of quantities which can be accessed
by various "output commands"_Section_howto.html#4_15. For each rigid
body, 12 values are stored: the xyz coords of the center of mass
(COM), the xyz components of the COM velocity, the xyz components of
the force acting on the COM, and the xyz components of the torque
acting on the COM. The force and torque values in the vector are not
affected by the {force} and {torque} keywords in the fix rigid
command; they reflect values before any changes are made by those
keywords.
The total length of the vector is 12*Nbody where Nbody is the number
of rigid bodies defined by the fix. Thus the 15th value in the vector
would be the z-coord of the COM of the 2nd rigid body. LAMMPS chooses
the ordering of the rigid bodies internally. The ordering of the
rigid bodies is as follows. For the {single} keyword there is just
one rigid body. For the {molecule} keyword, the bodies are ordered by
ascending molecule ID. For the {group} keyword, the list of group IDs
determines the ordering of bodies. The vector values calculated by
this fix are "intensive", meaning they are independent of the number
of atoms in the simulation.
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[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.
[Related commands:]
"delete_bonds"_delete_bonds.html, "neigh_modify"_neigh_modify.html
exclude
[Default:]
The option defaults are force * on on on and torque * on on on meaning
all rigid bodies are acted on by center-of-mass force and torque.
:line
:link(Zhang)
[(Zhang)] Zhang, Glotzer, Nanoletters, 4, 1407-1413 (2004).