add "transrot" style to fix move that allows to do translation and rotation at the same time
This commit is contained in:
@ -12,7 +12,7 @@ Syntax
|
||||
|
||||
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||
* move = style name of this fix command
|
||||
* style = *linear* or *wiggle* or *rotate* or *variable*
|
||||
* style = *linear* or *wiggle* or *rotate* or *transrot* or *variable*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -25,6 +25,11 @@ Syntax
|
||||
Px,Py,Pz = origin point of axis of rotation (distance units)
|
||||
Rx,Ry,Rz = axis of rotation vector
|
||||
period = period of rotation (time units)
|
||||
*transrot* args = Vx Vy Vz Px Py Pz Rx Ry Rz period
|
||||
Vx,Vy,Vz = components of velocity vector (velocity units)
|
||||
Px,Py,Pz = origin point of axis of rotation (distance units)
|
||||
Rx,Ry,Rz = axis of rotation vector
|
||||
period = period of rotation (time units)
|
||||
*variable* args = v_dx v_dy v_dz v_vx v_vy v_vz
|
||||
v_dx,v_dy,v_dz = 3 variable names that calculate x,y,z displacement as function of time, any component can be specified as NULL
|
||||
v_vx,v_vy,v_vz = 3 variable names that calculate x,y,z velocity as function of time, any component can be specified as NULL
|
||||
@ -44,6 +49,7 @@ Examples
|
||||
fix 1 boundary move wiggle 3.0 0.0 0.0 1.0 units box
|
||||
fix 2 boundary move rotate 0.0 0.0 0.0 0.0 0.0 1.0 5.0
|
||||
fix 2 boundary move variable v_myx v_myy NULL v_VX v_VY NULL
|
||||
fix 3 boundary move transrot 0.1 0.1 0.0 0.0 0.0 0.0 0.0 0.0 1.0 5.0 units box
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
@ -55,15 +61,17 @@ whose movement can influence nearby atoms.
|
||||
|
||||
.. note::
|
||||
|
||||
The atoms affected by this fix should not normally be time
|
||||
integrated by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`), since that will change their positions and
|
||||
velocities twice.
|
||||
The atoms affected by this fix should not normally be time integrated
|
||||
by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt
|
||||
<fix_nh>`), since that will change their positions and velocities
|
||||
twice.
|
||||
|
||||
.. note::
|
||||
|
||||
As atoms move due to this fix, they will pass through periodic
|
||||
boundaries and be remapped to the other side of the simulation box,
|
||||
just as they would during normal time integration (e.g. via the :doc:`fix nve <fix_nve>` command). It is up to you to decide whether
|
||||
just as they would during normal time integration (e.g. via the
|
||||
:doc:`fix nve <fix_nve>` command). It is up to you to decide whether
|
||||
periodic boundaries are appropriate with the kind of atom motion you
|
||||
are prescribing with this fix.
|
||||
|
||||
@ -73,11 +81,11 @@ whose movement can influence nearby atoms.
|
||||
position at the time the fix is specified. These initial coordinates
|
||||
are stored by the fix in "unwrapped" form, by using the image flags
|
||||
associated with each atom. See the :doc:`dump custom <dump>` command
|
||||
for a discussion of "unwrapped" coordinates. See the Atoms section of
|
||||
the :doc:`read_data <read_data>` command for a discussion of image flags
|
||||
and how they are set for each atom. You can reset the image flags
|
||||
(e.g. to 0) before invoking this fix by using the :doc:`set image <set>`
|
||||
command.
|
||||
for a discussion of "unwrapped" coordinates. See the Atoms section
|
||||
of the :doc:`read_data <read_data>` command for a discussion of image
|
||||
flags and how they are set for each atom. You can reset the image
|
||||
flags (e.g. to 0) before invoking this fix by using the :doc:`set
|
||||
image <set>` command.
|
||||
|
||||
----------
|
||||
|
||||
@ -118,13 +126,13 @@ notation as
|
||||
|
||||
where *X0* = (x0,y0,z0) is their position at the time the fix is
|
||||
specified, *A* is the specified amplitude vector with components
|
||||
(Ax,Ay,Az), *omega* is 2 PI / *period*, and *delta* is the time
|
||||
elapsed since the fix was specified. This style also sets the
|
||||
velocity of each atom to the time derivative of this expression. If
|
||||
any of the amplitude components is specified as NULL, then the
|
||||
position and velocity of that component is time integrated the same as
|
||||
the :doc:`fix nve <fix_nve>` command would perform, using the
|
||||
corresponding force component on the atom.
|
||||
(Ax,Ay,Az), *omega* is 2 PI / *period*, and *delta* is the time elapsed
|
||||
since the fix was specified. This style also sets the velocity of each
|
||||
atom to the time derivative of this expression. If any of the amplitude
|
||||
components is specified as NULL, then the position and velocity of that
|
||||
component is time integrated the same as the :doc:`fix nve <fix_nve>`
|
||||
command would perform, using the corresponding force component on the
|
||||
atom.
|
||||
|
||||
Note that the *wiggle* style is identical to using the *variable*
|
||||
style with :doc:`equal-style variables <variable>` that use the
|
||||
@ -139,21 +147,29 @@ swiggle() and cwiggle() functions. E.g.
|
||||
variable v equal v_omega*($A-cwiggle(0.0,$A,$T))
|
||||
fix 1 boundary move variable v_x NULL NULL v_v NULL NULL
|
||||
|
||||
The *rotate* style rotates atoms around a rotation axis *R* =
|
||||
(Rx,Ry,Rz) that goes through a point *P* = (Px,Py,Pz). The *period* of
|
||||
the rotation is also specified. The direction of rotation for the
|
||||
atoms around the rotation axis is consistent with the right-hand rule:
|
||||
if your right-hand thumb points along *R*, then your fingers wrap
|
||||
around the axis in the direction of rotation.
|
||||
The *rotate* style rotates atoms around a rotation axis *R* = (Rx,Ry,Rz)
|
||||
that goes through a point *P* = (Px,Py,Pz). The *period* of the
|
||||
rotation is also specified. The direction of rotation for the atoms
|
||||
around the rotation axis is consistent with the right-hand rule: if your
|
||||
right-hand thumb points along *R*, then your fingers wrap around the
|
||||
axis in the direction of rotation.
|
||||
|
||||
This style also sets the velocity of each atom to (omega cross Rperp)
|
||||
where omega is its angular velocity around the rotation axis and Rperp
|
||||
is a perpendicular vector from the rotation axis to the atom. If the
|
||||
defined :doc:`atom_style <atom_style>` assigns an angular velocity or
|
||||
angular momentum or orientation to each atom (:doc:`atom styles <atom_style>` sphere, ellipsoid, line, tri, body), then
|
||||
angular momentum or orientation to each atom (:doc:`atom styles
|
||||
<atom_style>` sphere, ellipsoid, line, tri, body), then
|
||||
those properties are also updated appropriately to correspond to the
|
||||
atom's motion and rotation over time.
|
||||
|
||||
The *transrot* style combines the effects of *rotate* and *linear* so
|
||||
that it is possible to prescribe a rotating group of atoms that also
|
||||
moves at a constant velocity. The arguments are for the translation
|
||||
first and then for the rotation. Since the rotation affects all
|
||||
coordinate components, it is not possible to set any of the
|
||||
translation vector components to NULL.
|
||||
|
||||
The *variable* style allows the position and velocity components of
|
||||
each atom to be set by formulas specified via the
|
||||
:doc:`variable <variable>` command. Each of the 6 variables is
|
||||
@ -165,10 +181,10 @@ Each variable must be of either the *equal* or *atom* style.
|
||||
a function of the timestep as well as of other simulation values.
|
||||
*Atom*\ -style variables compute a numeric quantity for each atom, that
|
||||
can be a function per-atom quantities, such as the atom's position, as
|
||||
well as of the timestep and other simulation values. Note that this
|
||||
fix stores the original coordinates of each atom (see note below) so
|
||||
that per-atom quantity can be used in an atom-style variable formula.
|
||||
See the :doc:`variable <variable>` command for details.
|
||||
well as of the timestep and other simulation values. Note that this fix
|
||||
stores the original coordinates of each atom (see note below) so that
|
||||
per-atom quantity can be used in an atom-style variable formula. See
|
||||
the :doc:`variable <variable>` command for details.
|
||||
|
||||
The first 3 variables (v_dx,v_dy,v_dz) specified for the *variable*
|
||||
style are used to calculate a displacement from the atom's original
|
||||
@ -206,8 +222,9 @@ spacings can be different in x,y,z.
|
||||
Restart, fix_modify, output, run start/stop, minimize info
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
This fix writes the original coordinates of moving atoms to :doc:`binary restart files <restart>`, as well as the initial timestep, so that
|
||||
the motion can be continuous in a restarted simulation. See the
|
||||
This fix writes the original coordinates of moving atoms to :doc:`binary
|
||||
restart files <restart>`, as well as the initial timestep, so that the
|
||||
motion can be continuous in a restarted simulation. See the
|
||||
:doc:`read_restart <read_restart>` command for info on how to re-specify
|
||||
a fix in an input script that reads a restart file, so that the
|
||||
operation of the fix continues in an uninterrupted fashion.
|
||||
@ -224,11 +241,12 @@ fix.
|
||||
|
||||
This fix produces a per-atom array which can be accessed by various
|
||||
:doc:`output commands <Howto_output>`. The number of columns for each
|
||||
atom is 3, and the columns store the original unwrapped x,y,z coords
|
||||
of each atom. The per-atom values can be accessed on any timestep.
|
||||
atom is 3, and the columns store the original unwrapped x,y,z coords of
|
||||
each atom. The per-atom values can be accessed on any timestep.
|
||||
|
||||
No parameter of this fix can be used with the *start/stop* keywords of
|
||||
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
|
||||
the :doc:`run <run>` command. This fix is not invoked during
|
||||
:doc:`energy minimization <minimize>`.
|
||||
|
||||
For :doc:`rRESPA time integration <run_style>`, this fix adjusts the
|
||||
position and velocity of atoms on the outermost rRESPA level.
|
||||
|
||||
848
src/fix_move.cpp
848
src/fix_move.cpp
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user