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
|
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||||
* move = style name of this 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::
|
.. parsed-literal::
|
||||||
|
|
||||||
@ -25,6 +25,11 @@ Syntax
|
|||||||
Px,Py,Pz = origin point of axis of rotation (distance units)
|
Px,Py,Pz = origin point of axis of rotation (distance units)
|
||||||
Rx,Ry,Rz = axis of rotation vector
|
Rx,Ry,Rz = axis of rotation vector
|
||||||
period = period of rotation (time units)
|
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
|
*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_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
|
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 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 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 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
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
@ -55,15 +61,17 @@ whose movement can influence nearby atoms.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
The atoms affected by this fix should not normally be time
|
The atoms affected by this fix should not normally be time integrated
|
||||||
integrated by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`), since that will change their positions and
|
by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt
|
||||||
velocities twice.
|
<fix_nh>`), since that will change their positions and velocities
|
||||||
|
twice.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
As atoms move due to this fix, they will pass through periodic
|
As atoms move due to this fix, they will pass through periodic
|
||||||
boundaries and be remapped to the other side of the simulation box,
|
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
|
periodic boundaries are appropriate with the kind of atom motion you
|
||||||
are prescribing with this fix.
|
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
|
position at the time the fix is specified. These initial coordinates
|
||||||
are stored by the fix in "unwrapped" form, by using the image flags
|
are stored by the fix in "unwrapped" form, by using the image flags
|
||||||
associated with each atom. See the :doc:`dump custom <dump>` command
|
associated with each atom. See the :doc:`dump custom <dump>` command
|
||||||
for a discussion of "unwrapped" coordinates. See the Atoms section of
|
for a discussion of "unwrapped" coordinates. See the Atoms section
|
||||||
the :doc:`read_data <read_data>` command for a discussion of image flags
|
of the :doc:`read_data <read_data>` command for a discussion of image
|
||||||
and how they are set for each atom. You can reset the image flags
|
flags and how they are set for each atom. You can reset the image
|
||||||
(e.g. to 0) before invoking this fix by using the :doc:`set image <set>`
|
flags (e.g. to 0) before invoking this fix by using the :doc:`set
|
||||||
command.
|
image <set>` command.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -118,13 +126,13 @@ notation as
|
|||||||
|
|
||||||
where *X0* = (x0,y0,z0) is their position at the time the fix is
|
where *X0* = (x0,y0,z0) is their position at the time the fix is
|
||||||
specified, *A* is the specified amplitude vector with components
|
specified, *A* is the specified amplitude vector with components
|
||||||
(Ax,Ay,Az), *omega* is 2 PI / *period*, and *delta* is the time
|
(Ax,Ay,Az), *omega* is 2 PI / *period*, and *delta* is the time elapsed
|
||||||
elapsed since the fix was specified. This style also sets the
|
since the fix was specified. This style also sets the velocity of each
|
||||||
velocity of each atom to the time derivative of this expression. If
|
atom to the time derivative of this expression. If any of the amplitude
|
||||||
any of the amplitude components is specified as NULL, then the
|
components is specified as NULL, then the position and velocity of that
|
||||||
position and velocity of that component is time integrated the same as
|
component is time integrated the same as the :doc:`fix nve <fix_nve>`
|
||||||
the :doc:`fix nve <fix_nve>` command would perform, using the
|
command would perform, using the corresponding force component on the
|
||||||
corresponding force component on the atom.
|
atom.
|
||||||
|
|
||||||
Note that the *wiggle* style is identical to using the *variable*
|
Note that the *wiggle* style is identical to using the *variable*
|
||||||
style with :doc:`equal-style variables <variable>` that use the
|
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))
|
variable v equal v_omega*($A-cwiggle(0.0,$A,$T))
|
||||||
fix 1 boundary move variable v_x NULL NULL v_v NULL NULL
|
fix 1 boundary move variable v_x NULL NULL v_v NULL NULL
|
||||||
|
|
||||||
The *rotate* style rotates atoms around a rotation axis *R* =
|
The *rotate* style rotates atoms around a rotation axis *R* = (Rx,Ry,Rz)
|
||||||
(Rx,Ry,Rz) that goes through a point *P* = (Px,Py,Pz). The *period* of
|
that goes through a point *P* = (Px,Py,Pz). The *period* of the
|
||||||
the rotation is also specified. The direction of rotation for the
|
rotation is also specified. The direction of rotation for the atoms
|
||||||
atoms around the rotation axis is consistent with the right-hand rule:
|
around the rotation axis is consistent with the right-hand rule: if your
|
||||||
if your right-hand thumb points along *R*, then your fingers wrap
|
right-hand thumb points along *R*, then your fingers wrap around the
|
||||||
around the axis in the direction of rotation.
|
axis in the direction of rotation.
|
||||||
|
|
||||||
This style also sets the velocity of each atom to (omega cross Rperp)
|
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
|
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
|
is a perpendicular vector from the rotation axis to the atom. If the
|
||||||
defined :doc:`atom_style <atom_style>` assigns an angular velocity or
|
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
|
those properties are also updated appropriately to correspond to the
|
||||||
atom's motion and rotation over time.
|
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
|
The *variable* style allows the position and velocity components of
|
||||||
each atom to be set by formulas specified via the
|
each atom to be set by formulas specified via the
|
||||||
:doc:`variable <variable>` command. Each of the 6 variables is
|
: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.
|
a function of the timestep as well as of other simulation values.
|
||||||
*Atom*\ -style variables compute a numeric quantity for each atom, that
|
*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
|
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
|
well as of the timestep and other simulation values. Note that this fix
|
||||||
fix stores the original coordinates of each atom (see note below) so
|
stores the original coordinates of each atom (see note below) so that
|
||||||
that per-atom quantity can be used in an atom-style variable formula.
|
per-atom quantity can be used in an atom-style variable formula. See
|
||||||
See the :doc:`variable <variable>` command for details.
|
the :doc:`variable <variable>` command for details.
|
||||||
|
|
||||||
The first 3 variables (v_dx,v_dy,v_dz) specified for the *variable*
|
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
|
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
|
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
|
This fix writes the original coordinates of moving atoms to :doc:`binary
|
||||||
the motion can be continuous in a restarted simulation. See the
|
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
|
: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
|
a fix in an input script that reads a restart file, so that the
|
||||||
operation of the fix continues in an uninterrupted fashion.
|
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
|
This fix produces a per-atom array which can be accessed by various
|
||||||
:doc:`output commands <Howto_output>`. The number of columns for each
|
: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
|
atom is 3, and the columns store the original unwrapped x,y,z coords of
|
||||||
of each atom. The per-atom values can be accessed on any timestep.
|
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
|
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
|
For :doc:`rRESPA time integration <run_style>`, this fix adjusts the
|
||||||
position and velocity of atoms on the outermost rRESPA level.
|
position and velocity of atoms on the outermost rRESPA level.
|
||||||
|
|||||||
852
src/fix_move.cpp
852
src/fix_move.cpp
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user