forked from lijiext/lammps
294 lines
14 KiB
Plaintext
294 lines
14 KiB
Plaintext
.. index:: fix deposit
|
|
|
|
fix deposit command
|
|
===================
|
|
|
|
Syntax
|
|
""""""
|
|
|
|
.. parsed-literal::
|
|
|
|
fix ID group-ID deposit N type M seed keyword values ...
|
|
|
|
* ID, group-ID are documented in :doc:`fix <fix>` command
|
|
* deposit = style name of this fix command
|
|
* N = # of atoms or molecules to insert
|
|
* type = atom type to assign to inserted atoms (offset for moleclue insertion)
|
|
* M = insert a single atom or molecule every M steps
|
|
* seed = random # seed (positive integer)
|
|
* one or more keyword/value pairs may be appended to args
|
|
* keyword = *region* or *id* or *global* or *local* or *near* or *attempt* or *rate* or *vx* or *vy* or *vz* or *mol* or *rigid* or *shake* or *units*
|
|
.. parsed-literal::
|
|
|
|
*region* value = region-ID
|
|
region-ID = ID of region to use as insertion volume
|
|
*id* value = *max* or *next*
|
|
max = atom ID for new atom(s) is max ID of all current atoms plus one
|
|
next = atom ID for new atom(s) increments by one for every deposition
|
|
*global* values = lo hi
|
|
lo,hi = put new atom/molecule a distance lo-hi above all other atoms (distance units)
|
|
*local* values = lo hi delta
|
|
lo,hi = put new atom/molecule a distance lo-hi above any nearby atom beneath it (distance units)
|
|
delta = lateral distance within which a neighbor is considered "nearby" (distance units)
|
|
*near* value = R
|
|
R = only insert atom/molecule if further than R from existing particles (distance units)
|
|
*attempt* value = Q
|
|
Q = attempt a single insertion up to Q times
|
|
*rate* value = V
|
|
V = z velocity (y in 2d) at which insertion volume moves (velocity units)
|
|
*vx* values = vxlo vxhi
|
|
vxlo,vxhi = range of x velocities for inserted atom/molecule (velocity units)
|
|
*vy* values = vylo vyhi
|
|
vylo,vyhi = range of y velocities for inserted atom/molecule (velocity units)
|
|
*vz* values = vzlo vzhi
|
|
vzlo,vzhi = range of z velocities for inserted atom/molecule (velocity units)
|
|
*target* values = tx ty tz
|
|
tx,ty,tz = location of target point (distance units)
|
|
*mol* value = template-ID
|
|
template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
|
|
*molfrac* values = f1 f2 ... fN
|
|
f1 to fN = relative probability of creating each of N molecules in template-ID
|
|
*rigid* value = fix-ID
|
|
fix-ID = ID of :doc:`fix rigid/small <fix_rigid>` command
|
|
*shake* value = fix-ID
|
|
fix-ID = ID of :doc:`fix shake <fix_shake>` command
|
|
*units* value = *lattice* or *box*
|
|
lattice = the geometry is defined in lattice units
|
|
box = the geometry is defined in simulation box units
|
|
|
|
|
|
|
|
Examples
|
|
""""""""
|
|
|
|
.. parsed-literal::
|
|
|
|
fix 3 all deposit 1000 2 100 29494 region myblock local 1.0 1.0 1.0 units box
|
|
fix 2 newatoms deposit 10000 1 500 12345 region disk near 2.0 vz -1.0 -0.8
|
|
fix 4 sputter deposit 1000 2 500 12235 region sphere vz -1.0 -1.0 target 5.0 5.0 0.0 units lattice
|
|
|
|
Description
|
|
"""""""""""
|
|
|
|
Insert a single atom or molecule into the simulation domain every M
|
|
timesteps until N atoms or molecules have been inserted. This is
|
|
useful for simulating deposition onto a surface. For the remainder of
|
|
this doc page, a single inserted atom or molecule is referred to as a
|
|
"particle".
|
|
|
|
If inserted particles are individual atoms, they are assigned the
|
|
specified atom type. If they are molecules, the type of each atom in
|
|
the inserted molecule is specified in the file read by the
|
|
:doc:`molecule <molecule>` command, and those values are added to the
|
|
specified atom type. E.g. if the file specifies atom types 1,2,3, and
|
|
those are the atom types you want for inserted molecules, then specify
|
|
*type* = 0. If you specify *type* = 2, the in the inserted molecule
|
|
will have atom types 3,4,5.
|
|
|
|
All atoms in the inserted particle are assigned to two groups: the
|
|
default group "all" and the group specified in the fix deposit command
|
|
(which can also be "all").
|
|
|
|
If you are computing temperature values which include inserted
|
|
particles, you will want to use the
|
|
:doc:`compute_modify <compute_modify>` dynamic option, which insures the
|
|
current number of atoms is used as a normalizing factor each time the
|
|
temperature is computed.
|
|
|
|
Care must be taken that inserted particles are not too near existing
|
|
atoms, using the options described below. When inserting particles
|
|
above a surface in a non-periodic box (see the
|
|
:doc:`boundary <boundary>` command), the possibility of a particle
|
|
escaping the surface and flying upward should be considered, since the
|
|
particle may be lost or the box size may grow infinitely large. A
|
|
:doc:`fix wall/reflect <fix_wall_reflect>` command can be used to
|
|
prevent this behavior. Note that if a shrink-wrap boundary is used,
|
|
it is OK to insert the new particle outside the box, however the box
|
|
will immediately be expanded to include the new particle. When
|
|
simulating a sputtering experiment it is probably more realistic to
|
|
ignore those atoms using the :doc:`thermo_modify <thermo_modify>`
|
|
command with the *lost ignore* option and a fixed
|
|
:doc:`boundary <boundary>`.
|
|
|
|
The fix deposit command must use the *region* keyword to define an
|
|
insertion volume. The specified region must have been previously
|
|
defined with a :doc:`region <region>` command. It must be defined with
|
|
side = *in*\ .
|
|
|
|
.. note::
|
|
|
|
LAMMPS checks that the specified region is wholly inside the
|
|
simulation box. It can do this correctly for orthonormal simulation
|
|
boxes. However for :ref:`triclinic boxes <howto_12>`, it
|
|
only tests against the larger orthonormal box that bounds the tilted
|
|
simulation box. If the specified region includes volume outside the
|
|
tilted box, then an insertion will likely fail, leading to a "lost
|
|
atoms" error. Thus for triclinic boxes you should insure the
|
|
specified region is wholly inside the simulation box.
|
|
|
|
Individual atoms are inserted, unless the *mol* keyword is used. It
|
|
specifies a *template-ID* previously defined using the
|
|
:doc:`molecule <molecule>` command, which reads files that define one or
|
|
more molecules. The coordinates, atom types, charges, etc, as well as
|
|
any bond/angle/etc and special neighbor information for the molecule
|
|
can be specified in the molecule file. See the
|
|
:doc:`molecule <molecule>` command for details. The only settings
|
|
required to be in each file are the coordinates and types of atoms in
|
|
the molecule.
|
|
|
|
If the molecule template contains more than one molecule, the relative
|
|
probability of depositing each molecule can be specified by the
|
|
*molfrac* keyword. N relative probablities, each from 0.0 to 1.0, are
|
|
specified, where N is the number of molecules in the template. Each
|
|
time a molecule is deposited, a random number is used to sample from
|
|
the list of relative probabilities. The N values must sum to 1.0.
|
|
|
|
If you wish to insert molecules via the *mol* keyword, that will be
|
|
treated as rigid bodies, use the *rigid* keyword, specifying as its
|
|
value the ID of a separate :doc:`fix rigid/small <fix_rigid_small>`
|
|
command which also appears in your input script.
|
|
|
|
If you wish to insert molecules via the *mol* keyword, that will have
|
|
their bonds or angles constrained via SHAKE, use the *shake* keyword,
|
|
specifying as its value the ID of a separate :doc:`fix shake <fix_shake>` command which also appears in your input script.
|
|
|
|
Each timestep a particle is inserted, the coordinates for its atoms
|
|
are chosen as follows. For insertion of individual atoms, the
|
|
"position" referred to in the following description is the coordinate
|
|
of the atom. For insertion of molecule, the "position" is the
|
|
geometric center of the molecule; see the :doc:`molecule <molecule>` doc
|
|
page for details. A random rotation of the molecule around its center
|
|
point is performed, which determines the coordinates all the
|
|
individual atoms.
|
|
|
|
A random position within the region insertion volume is generated. If
|
|
neither the *global* or *local* keyword is used, the random position
|
|
is the trial position. If the *global* keyword is used, the random
|
|
x,y values are used, but the z position of the new particle is set
|
|
above the highest current atom in the simulation by a distance
|
|
randomly chosen between lo/hi. (For a 2d simulation, this is done for
|
|
the y position.) If the *local* keyword is used, the z position is
|
|
set a distance between lo/hi above the highest current atom in the
|
|
simulation that is "nearby" the chosen x,y position. In this context,
|
|
"nearby" means the lateral distance (in x,y) between the new and old
|
|
particles is less than the *delta* setting.
|
|
|
|
Once a trial x,y,z position has been selected, the insertion is only
|
|
performed if no current atom in the simulation is within a distance R
|
|
of any atom in the new particle, including the effect of periodic
|
|
boundary conditions if applicable. R is defined by the *near*
|
|
keyword. Note that the default value for R is 0.0, which will allow
|
|
atoms to strongly overlap if you are inserting where other atoms are
|
|
present. This distance test is performed independently for each atom
|
|
in an inserted molecule, based on the randomly rotated configuration
|
|
of the molecule. If this test fails, a new random position within the
|
|
insertion volume is chosen and another trial is made. Up to Q
|
|
attempts are made. If the particle is not successfully inserted,
|
|
LAMMPS prints a warning message.
|
|
|
|
.. note::
|
|
|
|
If you are inserting finite size particles or a molecule or
|
|
rigid body consisting of finite-size particles, then you should
|
|
typically set R larger than the distance at which any inserted
|
|
particle may overlap with either a previouly inserted particle or an
|
|
existing particle. LAMMPS will issue a warning if R is smaller than
|
|
this value, based on the radii of existing and inserted particles.
|
|
|
|
The *rate* option moves the insertion volume in the z direction (3d)
|
|
or y direction (2d). This enables particles to be inserted from a
|
|
successively higher height over time. Note that this parameter is
|
|
ignored if the *global* or *local* keywords are used, since those
|
|
options choose a z-coordinate for insertion independently.
|
|
|
|
The vx, vy, and vz components of velocity for the inserted particle
|
|
are set using the values specified for the *vx*\ , *vy*\ , and *vz*
|
|
keywords. Note that normally, new particles should be a assigned a
|
|
negative vertical velocity so that they move towards the surface. For
|
|
molecules, the same velocity is given to every particle (no rotation
|
|
or bond vibration).
|
|
|
|
If the *target* option is used, the velocity vector of the inserted
|
|
particle is changed so that it points from the insertion position
|
|
towards the specified target point. The magnitude of the velocity is
|
|
unchanged. This can be useful, for example, for simulating a
|
|
sputtering process. E.g. the target point can be far away, so that
|
|
all incident particles strike the surface as if they are in an
|
|
incident beam of particles at a prescribed angle.
|
|
|
|
The *id* keyword determines how atom IDs and molecule IDs are assigned
|
|
to newly deposited particles. Molecule IDs are only assigned if
|
|
molecules are being inserted. For the *max* setting, the atom and
|
|
molecule IDs of all current atoms are checked. Atoms in the new
|
|
particle are assigned IDs starting with the current maximum plus one.
|
|
If a molecule is inserted it is assigned an ID = current maximum plus
|
|
one. This means that if particles leave the system, the new IDs may
|
|
replace the lost ones. For the *next* setting, the maximum ID of any
|
|
atom and molecule is stored at the time the fix is defined. Each time
|
|
a new particle is added, this value is incremented to assign IDs to
|
|
the new atom(s) or molecule. Thus atom and molecule IDs for deposited
|
|
particles will be consecutive even if particles leave the system over
|
|
time.
|
|
|
|
The *units* keyword determines the meaning of the distance units used
|
|
for the other deposition parameters. A *box* value selects standard
|
|
distance units as defined by the :doc:`units <units>` command,
|
|
e.g. Angstroms for units = real or metal. A *lattice* value means the
|
|
distance units are in lattice spacings. The :doc:`lattice <lattice>`
|
|
command must have been previously used to define the lattice spacing.
|
|
Note that the units choice affects all the keyword values that have
|
|
units of distance or velocity.
|
|
|
|
.. note::
|
|
|
|
If you are monitoring the temperature of a system where the atom
|
|
count is changing due to adding particles, you typically should use
|
|
the :doc:`compute_modify dynamic yes <compute_modify>` command for the
|
|
temperature compute you are using.
|
|
|
|
Restart, fix_modify, output, run start/stop, minimize info
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
This fix writes the state of the deposition to :doc:`binary restart files <restart>`. This includes information about how many
|
|
particles have been depositied, the random number generator seed, the
|
|
next timestep for deposition, etc. 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.
|
|
|
|
None of the :doc:`fix_modify <fix_modify>` options are relevant to this
|
|
fix. No global or per-atom quantities are stored by this fix for
|
|
access by various :ref:`output commands <howto_15>`. 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>`.
|
|
|
|
Restrictions
|
|
""""""""""""
|
|
|
|
|
|
This fix is part of the MISC package. It is only enabled if LAMMPS
|
|
was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
|
|
|
The specified insertion region cannot be a "dynamic" region, as
|
|
defined by the :doc:`region <region>` command.
|
|
|
|
Related commands
|
|
""""""""""""""""
|
|
|
|
:doc:`fix pour <fix_pour>`, :doc:`region <region>`
|
|
|
|
Default
|
|
"""""""
|
|
|
|
Insertions are performed for individual atoms, i.e. no *mol* setting
|
|
is defined. If the *mol* keyword is used, the default for *molfrac*
|
|
is an equal probabilities for all molecules in the template.
|
|
Additional option defaults are id = max, delta = 0.0, near = 0.0,
|
|
attempt = 10, rate = 0.0, vx = 0.0 0.0, vy = 0.0 0.0, vz = 0.0 0.0,
|
|
and units = lattice.
|
|
|
|
|
|
.. _lws: http://lammps.sandia.gov
|
|
.. _ld: Manual.html
|
|
.. _lc: Section_commands.html#comm
|