lammps/doc/fix_gcmc.txt

259 lines
12 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 gcmc command :h3
[Syntax:]
fix ID group-ID gcmc N X M type seed T mu displace keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
gcmc = style name of this fix command :l
N = invoke this fix every N steps :l
X = number of exchanges to attempt (on average) every N steps :l
M = number of MC displacements to attempt (on average) every N steps :l
type = atom type to assign to inserted atoms (offset for molecule insertion) :l
seed = random # seed (positive integer) :l
T = temperature of the ideal gas reservoir (temperature units) :l
mu = chemical potential of the ideal gas reservoir (energy units) :l
displace = maximum Monte Carlo displacement distance (length units) :l
zero or more keyword/value pairs may be appended to args :l
keyword = {mol}, {region}, {maxangle}, {pressure}, or {fugacity_coeff} :l
{mol} value = template-ID
template-ID = ID of molecule template specified in a separate "molecule"_molecule.html command
{shake} value = fix-ID
fix-ID = ID of "fix shake"_fix_shake.html command
{region} value = region-ID
region-ID = ID of region to use as an exchange/move volume
{maxangle} value = maximum molecular rotation angle (degrees)
{pressure} value = pressue of the gas reservoir (pressure units)
{fugacity_coeff} value = fugacity coefficient of the gas reservoir (unitless) :pre
:ule
[Examples:]
fix 2 gas gcmc 10 1000 1000 2 29494 298.0 -0.5 0.01
fix 3 water gcmc 10 100 100 0 3456543 3.0 -2.5 0.1 mol my_one_water maxangle 180
fix 4 my_gas gcmc 1 10 10 1 123456543 300.0 -12.5 1.0 region disk :pre
[Description:]
This fix performs grand canonical Monte Carlo (GCMC) exchanges of
atoms or molecules of the given type with an imaginary ideal gas
reservoir at the specified T and chemical potential (mu) as discussed
in "(Frenkel)"_#Frenkel. If used with the "fix nvt"_fix_nh.html
command, simulations in the grand canonical enemble (muVT, constant
chemical potential, constant volume, and constant temperature) can be
performed. Specific uses include computing isotherms in microporous
materials, or computing vapor-liquid coexistence curves.
Perform up to X exchanges (on average) of gas atoms or molecules of
the given type between the simulation domain and the imaginary
reservoir every N timesteps. Also perform M (on average) Monte Carlo
displacements or rotations (for molecules) of gas of the given type
within the simulation domain. M should typically be chosen to be
approximately equal to the expected number of gas atoms or molecules
of the given type within the domain, which will result in roughly one
MC translation per atom or molecule per MC cycle.
For MC moves of molecular gasses, rotations and translations are each
attempted with 50% probability. For MC moves of atomic gasses,
translations are attempted 100% of the time. For MC exchanges of
either molecular or atomic gasses, deletions and insertions are each
attempted with 50% probability.
All inserted particles are assigned to two groups: the default group
"all" and the group specified in the fix gcmc command (which can also
be "all"). 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 "molecule"_molecule.html command, and those values are added to
the specified atom type. E.g. if {type} = 2, and the file specifies
atom types 1,2,3, then the inserted molecule will have atom types
3,4,5.
This fix cannot be used to perform MC insertions of gas atoms or
molecules other than the exchanged type, but MC deletions,
translations, and rotations can be performed on any atom/molecule in
the fix group. All atoms in the simulation domain can be moved using
regular time integration displacements, e.g. via
"fix_nvt"_fix_nvt.html, resulting in a hybrid GCMC+MD simulation. A
smaller-than-usual timestep size may be needed when running such a
hybrid simulation, especially if the inserted molecules are not well
equilibrated.
This command may optionally use the {region} keyword to define an
exchange and move volume. The specified region must have been
previously defined with a "region"_region.html command. It must be
defined with side = {in}. Insertion attempts occur only within the
specified region. Move and deletion attempt candidates are selected
from gas atoms or molecules within the region. If no candidate can be
found within the specified region after randomly selecting candidates
1000 times, the move or deletion attempt is considered a
failure. Moves must start within the specified region, but may move
the atom or molecule slightly outside of the region.
If used with "fix_nvt"_fix_nvt.html, the temperature of the imaginary
reservoir, T, should be set to be equivalent to the target temperature
used in "fix_nvt"_fix_nvt.html. Otherwise, the imaginary reservoir
will not be in thermal equilibrium with the simulation domain.
Note that neighbor lists are re-built every timestep that this fix is
invoked, so you should not set N to be too small. However, periodic
rebuilds are necessary in order to avoid dangerous rebuilds and missed
interactions. Specifically, avoid performing so many MC displacements
per timestep that atoms can move beyond the neighbor list skin
distance. See the "neighbor"_neighbor.html command for details.
When an atom or molecule is to be inserted, its center-of-mass
coordinates are chosen as a random position within the current
simulation domain, and new atom velocities are randomly chosen from
the specified temperature distribution given by T. Relative
coordinates for atoms in a molecule are taken from the template
molecule provided by the user. A random initial rotation is used in
the case of molecule insertions.
Individual atoms are inserted, unless the {mol} keyword is used. It
specifies a {template-ID} previously defined using the
"molecule"_molecule.html command, which reads a file that defines the
molecule. 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 "molecule"_molecule.html
command for details. The only settings required to be in this file
are the coordinates and types of atoms in the molecule.
When not using the {mol} keyword, you should ensure you do not delete
only a portion of a molecule (only some of its atoms), or LAMMPS will
soon generate an error when it tries to find those atoms. LAMMPS will
warn you if any of the atoms eligible for deletion have a non-zero
molecule ID, but does not check for this at the time of deletion.
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 "fix
shake"_fix_shake.html command which also appears in your input script.
Optionally, users may specify the maximum rotation angle for
molecular rotations using the {maxangle} keyword and specifying
the angle in degrees. The specified angle will apply to all three
Euler angles used internally to define the rotation matrix for
molecular rotations. The max angle can be set to zero, but rotations
will be pointless. Note that the default is ten degrees for each
Euler angle.
For atomic gasses, inserted atoms have the specified atom type, but
deleted atoms are any atoms that have been inserted or that belong
to the user-specified fix group. For molecular gasses, exchanged
molecules use the same atom types as in the template molecule
supplied by the user. In both cases, exchanged
atoms/molecules are assigned to two groups: the default group "all"
and the group specified in the fix gcmc command (which can also be
"all").
The gas reservoir pressure can be specified using the {pressure}
keyword, in which case the user-specified chemical potential is
ignored. For non-ideal gas reservoirs, the user may also specify the
fugacity coefficient using the {fugacity_coeff} keyword.
Use of this fix typically will cause the number of atoms to fluctuate,
therefore, you will want to use the
"compute_modify"_compute_modify.html command to insure that the
current number of atoms is used as a normalizing factor each time
temperature is computed. Here is the necessary command:
compute_modify thermo_temp dynamic yes :pre
If LJ units are used, note that a value of 0.18292026 is used by this
fix as the reduced value for Planck's constant. This value was
derived from LJ paramters for argon, where h* = h/sqrt(sigma^2 *
epsilon * mass), sigma = 3.429 angstroms, epsilon/k = 121.85 K, and
mass = 39.948 amu.
[Restart, fix_modify, output, run start/stop, minimize info:]
This fix writes the state of the deposition to "binary restart
files"_restart.html. This includes information about the random
number generator seed, the next timestep for MC exchanges, etc. See
the "read_restart"_read_restart.html 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 "fix_modify"_fix_modify.html options are relevant to this
fix.
This fix computes a global vector of length 6, which can be accessed
by various "output commands"_Section_howto.html#howto_15. The vector
values are the following global cummulative quantities:
1 = displacement attempts
2 = displacement successes
3 = insertion attempts
4 = insertion successes
5 = deletion attempts
6 = deletion successes
7 = rotation attempts
8 = rotation successes :ul
The vector values calculated by this fix are "extensive".
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 is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
Do not set "neigh_modify once yes" or else this fix will never be
called. Reneighboring is required.
Only pairwise interactions, as defined by the
"pair_style"_pair_style.html command, are included in this
calculation. Long-range interactions due to a
"kspace_style"_kspace_style.html command are not included. Not all
pair potentials can be evaluated in a pairwise mode as required by
this fix. For example, 3-body potentials, such as
"Tersoff"_pair_tersoff.html and "Stillinger-Weber"_pair_sw.html cannot
be used. "EAM"_pair_eam.html potentials for metals only include the
pair potential portion of the EAM interaction, not the embedding term.
Can be run in parallel, but aspects of the GCMC part will not scale
well in parallel. Only usable for 3D simulations with orthogonal
simulation cells.
Note that very lengthy simulations involving insertions/deletions of
billions of gas molecules may run out of atom or molecule IDs and
trigger an error, so it is better to run multiple shorter-duration
simulations. Likewise, very large molecules have not been tested
and may turn out to be problematic.
Use of multiple fix gcmc commands in the same input script can be
problematic if using a template molecule. The issue is that the
user-referenced template molecule in the second fix gcmc command
may no longer exist since it might have been deleted by the first
fix gcmc command. An existing template molecule will need to be
referenced by the user for each subsequent fix gcmc command.
[Related commands:]
"fix_nvt"_fix_nvt.html, "neighbor"_neighbor.html,
"fix_deposit"_fix_deposit.html, "fix_evaporate"_fix_evaporate.html,
"delete_atoms"_delete_atoms.html
[Default:]
The option defaults are mol = no, maxangle = 10.
:line
:link(Frenkel)
[(Frenkel)] Frenkel and Smit, Understanding Molecular Simulation,
Academic Press, London, 2002.