forked from lijiext/lammps
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@14532 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
parent
0766f95adc
commit
9cf43f2a0b
|
@ -0,0 +1,104 @@
|
|||
.. raw:: html
|
||||
|
||||
<H1></H1>
|
||||
|
||||
LAMMPS Documentation
|
||||
====================
|
||||
|
||||
29 Jan 2016 version
|
||||
-------------------
|
||||
|
||||
Version info:
|
||||
-------------
|
||||
|
||||
The LAMMPS "version" is the date when it was released, such as 1 May
|
||||
2010. LAMMPS is updated continuously. Whenever we fix a bug or add a
|
||||
feature, we release it immediately, and post a notice on `this page of the WWW site <bug_>`_. Each dated copy of LAMMPS contains all the
|
||||
features and bug-fixes up to and including that version date. The
|
||||
version date is printed to the screen and logfile every time you run
|
||||
LAMMPS. It is also in the file src/version.h and in the LAMMPS
|
||||
directory name created when you unpack a tarball, and at the top of
|
||||
the first page of the manual (this page).
|
||||
|
||||
* If you browse the HTML doc pages on the LAMMPS WWW site, they always
|
||||
describe the most current version of LAMMPS.
|
||||
* If you browse the HTML doc pages included in your tarball, they
|
||||
describe the version you have.
|
||||
* The `PDF file <Manual.pdf>`_ on the WWW site or in the tarball is updated
|
||||
about once per month. This is because it is large, and we don't want
|
||||
it to be part of every patch.
|
||||
* There is also a `Developer.pdf <Developer.pdf>`_ file in the doc
|
||||
directory, which describes the internal structure and algorithms of
|
||||
LAMMPS.
|
||||
LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel
|
||||
Simulator.
|
||||
|
||||
LAMMPS is a classical molecular dynamics simulation code designed to
|
||||
run efficiently on parallel computers. It was developed at Sandia
|
||||
National Laboratories, a US Department of Energy facility, with
|
||||
funding from the DOE. It is an open-source code, distributed freely
|
||||
under the terms of the GNU Public License (GPL).
|
||||
|
||||
The primary developers of LAMMPS are `Steve Plimpton <sjp_>`_, Aidan
|
||||
Thompson, and Paul Crozier who can be contacted at
|
||||
sjplimp,athomps,pscrozi at sandia.gov. The `LAMMPS WWW Site <lws_>`_ at
|
||||
http://lammps.sandia.gov has more information about the code and its
|
||||
uses.
|
||||
|
||||
.. _bug: http://lammps.sandia.gov/bug.html
|
||||
|
||||
|
||||
|
||||
.. _sjp: http://www.sandia.gov/~sjplimp
|
||||
|
||||
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The LAMMPS documentation is organized into the following sections. If
|
||||
you find errors or omissions in this manual or have suggestions for
|
||||
useful information to add, please send an email to the developers so
|
||||
we can improve the LAMMPS documentation.
|
||||
|
||||
Once you are familiar with LAMMPS, you may want to bookmark :ref:`this page <comm>` at Section_commands.html#comm since
|
||||
it gives quick access to documentation for all LAMMPS commands.
|
||||
|
||||
`PDF file <Manual.pdf>`_ of the entire manual, generated by
|
||||
`htmldoc <http://freecode.com/projects/htmldoc>`_
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:numbered:
|
||||
|
||||
Section_intro
|
||||
Section_start
|
||||
Section_commands
|
||||
Section_packages
|
||||
Section_accelerate
|
||||
Section_howto
|
||||
Section_example
|
||||
Section_perf
|
||||
Section_tools
|
||||
Section_modify
|
||||
Section_python
|
||||
Section_errors
|
||||
Section_history
|
||||
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`search`
|
||||
|
||||
.. raw:: html
|
||||
|
||||
</BODY>
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,430 @@
|
|||
Accelerating LAMMPS performance
|
||||
===============================
|
||||
|
||||
This section describes various methods for improving LAMMPS
|
||||
performance for different classes of problems running on different
|
||||
kinds of machines.
|
||||
|
||||
There are two thrusts to the discussion that follows. The
|
||||
first is using code options that implement alternate algorithms
|
||||
that can speed-up a simulation. The second is to use one
|
||||
of the several accelerator packages provided with LAMMPS that
|
||||
contain code optimized for certain kinds of hardware, including
|
||||
multi-core CPUs, GPUs, and Intel Xeon Phi coprocessors.
|
||||
|
||||
* 5.1 :ref:`Measuring performance <acc_1>`
|
||||
* 5.2 :ref:`Algorithms and code options to boost performace <acc_2>`
|
||||
* 5.3 :ref:`Accelerator packages with optimized styles <acc_3>`
|
||||
* 5.3.1 :doc:`USER-CUDA package <accelerate_cuda>`
|
||||
* 5.3.2 :doc:`GPU package <accelerate_gpu>`
|
||||
* 5.3.3 :doc:`USER-INTEL package <accelerate_intel>`
|
||||
* 5.3.4 :doc:`KOKKOS package <accelerate_kokkos>`
|
||||
* 5.3.5 :doc:`USER-OMP package <accelerate_omp>`
|
||||
* 5.3.6 :doc:`OPT package <accelerate_opt>`
|
||||
* 5.4 :ref:`Comparison of various accelerator packages <acc_4>`
|
||||
The `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the LAMMPS
|
||||
web site gives performance results for the various accelerator
|
||||
packages discussed in Section 5.2, for several of the standard LAMMPS
|
||||
benchmark problems, as a function of problem size and number of
|
||||
compute nodes, on different hardware platforms.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.. _acc_1:
|
||||
|
||||
Measuring performance
|
||||
---------------------------------
|
||||
|
||||
Before trying to make your simulation run faster, you should
|
||||
understand how it currently performs and where the bottlenecks are.
|
||||
|
||||
The best way to do this is run the your system (actual number of
|
||||
atoms) for a modest number of timesteps (say 100 steps) on several
|
||||
different processor counts, including a single processor if possible.
|
||||
Do this for an equilibrium version of your system, so that the
|
||||
100-step timings are representative of a much longer run. There is
|
||||
typically no need to run for 1000s of timesteps to get accurate
|
||||
timings; you can simply extrapolate from short runs.
|
||||
|
||||
For the set of runs, look at the timing data printed to the screen and
|
||||
log file at the end of each LAMMPS run. :ref:`This section <start_8>` of the manual has an overview.
|
||||
|
||||
Running on one (or a few processors) should give a good estimate of
|
||||
the serial performance and what portions of the timestep are taking
|
||||
the most time. Running the same problem on a few different processor
|
||||
counts should give an estimate of parallel scalability. I.e. if the
|
||||
simulation runs 16x faster on 16 processors, its 100% parallel
|
||||
efficient; if it runs 8x faster on 16 processors, it's 50% efficient.
|
||||
|
||||
The most important data to look at in the timing info is the timing
|
||||
breakdown and relative percentages. For example, trying different
|
||||
options for speeding up the long-range solvers will have little impact
|
||||
if they only consume 10% of the run time. If the pairwise time is
|
||||
dominating, you may want to look at GPU or OMP versions of the pair
|
||||
style, as discussed below. Comparing how the percentages change as
|
||||
you increase the processor count gives you a sense of how different
|
||||
operations within the timestep are scaling. Note that if you are
|
||||
running with a Kspace solver, there is additional output on the
|
||||
breakdown of the Kspace time. For PPPM, this includes the fraction
|
||||
spent on FFTs, which can be communication intensive.
|
||||
|
||||
Another important detail in the timing info are the histograms of
|
||||
atoms counts and neighbor counts. If these vary widely across
|
||||
processors, you have a load-imbalance issue. This often results in
|
||||
inaccurate relative timing data, because processors have to wait when
|
||||
communication occurs for other processors to catch up. Thus the
|
||||
reported times for "Communication" or "Other" may be higher than they
|
||||
really are, due to load-imbalance. If this is an issue, you can
|
||||
uncomment the MPI_Barrier() lines in src/timer.cpp, and recompile
|
||||
LAMMPS, to obtain synchronized timings.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _acc_2:
|
||||
|
||||
General strategies
|
||||
------------------------------
|
||||
|
||||
.. note::
|
||||
|
||||
this section 5.2 is still a work in progress
|
||||
|
||||
Here is a list of general ideas for improving simulation performance.
|
||||
Most of them are only applicable to certain models and certain
|
||||
bottlenecks in the current performance, so let the timing data you
|
||||
generate be your guide. It is hard, if not impossible, to predict how
|
||||
much difference these options will make, since it is a function of
|
||||
problem size, number of processors used, and your machine. There is
|
||||
no substitute for identifying performance bottlenecks, and trying out
|
||||
various options.
|
||||
|
||||
* rRESPA
|
||||
* 2-FFT PPPM
|
||||
* Staggered PPPM
|
||||
* single vs double PPPM
|
||||
* partial charge PPPM
|
||||
* verlet/split run style
|
||||
* processor command for proc layout and numa layout
|
||||
* load-balancing: balance and fix balance
|
||||
|
||||
2-FFT PPPM, also called *analytic differentiation* or *ad* PPPM, uses
|
||||
2 FFTs instead of the 4 FFTs used by the default *ik differentiation*
|
||||
PPPM. However, 2-FFT PPPM also requires a slightly larger mesh size to
|
||||
achieve the same accuracy as 4-FFT PPPM. For problems where the FFT
|
||||
cost is the performance bottleneck (typically large problems running
|
||||
on many processors), 2-FFT PPPM may be faster than 4-FFT PPPM.
|
||||
|
||||
Staggered PPPM performs calculations using two different meshes, one
|
||||
shifted slightly with respect to the other. This can reduce force
|
||||
aliasing errors and increase the accuracy of the method, but also
|
||||
doubles the amount of work required. For high relative accuracy, using
|
||||
staggered PPPM allows one to half the mesh size in each dimension as
|
||||
compared to regular PPPM, which can give around a 4x speedup in the
|
||||
kspace time. However, for low relative accuracy, using staggered PPPM
|
||||
gives little benefit and can be up to 2x slower in the kspace
|
||||
time. For example, the rhodopsin benchmark was run on a single
|
||||
processor, and results for kspace time vs. relative accuracy for the
|
||||
different methods are shown in the figure below. For this system,
|
||||
staggered PPPM (using ik differentiation) becomes useful when using a
|
||||
relative accuracy of slightly greater than 1e-5 and above.
|
||||
|
||||
.. image:: JPG/rhodo_staggered.jpg
|
||||
:align: center
|
||||
|
||||
.. note::
|
||||
|
||||
Using staggered PPPM may not give the same increase in accuracy
|
||||
of energy and pressure as it does in forces, so some caution must be
|
||||
used if energy and/or pressure are quantities of interest, such as
|
||||
when using a barostat.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _acc_3:
|
||||
|
||||
Packages with optimized styles
|
||||
------------------------------------------
|
||||
|
||||
Accelerated versions of various :doc:`pair_style <pair_style>`,
|
||||
:doc:`fixes <fix>`, :doc:`computes <compute>`, and other commands have
|
||||
been added to LAMMPS, which will typically run faster than the
|
||||
standard non-accelerated versions. Some require appropriate hardware
|
||||
to be present on your system, e.g. GPUs or Intel Xeon Phi
|
||||
coprocessors.
|
||||
|
||||
All of these commands are in packages provided with LAMMPS. An
|
||||
overview of packages is give in :doc:`Section packages <Section_packages>`.
|
||||
|
||||
These are the accelerator packages
|
||||
currently in LAMMPS, either as standard or user packages:
|
||||
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
| :doc:`USER-CUDA <accelerate_cuda>` | for NVIDIA GPUs |
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
| :doc:`GPU <accelerate_gpu>` | for NVIDIA GPUs as well as OpenCL support |
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
| :doc:`USER-INTEL <accelerate_intel>` | for Intel CPUs and Intel Xeon Phi |
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
| :doc:`KOKKOS <accelerate_kokkos>` | for GPUs, Intel Xeon Phi, and OpenMP threading |
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
| :doc:`USER-OMP <accelerate_omp>` | for OpenMP threading |
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
| :doc:`OPT <accelerate_opt>` | generic CPU optimizations |
|
||||
+--------------------------------------+------------------------------------------------+
|
||||
|
||||
Inverting this list, LAMMPS currently has acceleration support for
|
||||
three kinds of hardware, via the listed packages:
|
||||
|
||||
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Many-core CPUs | :doc:`USER-INTEL <accelerate_intel>`, :doc:`KOKKOS <accelerate_kokkos>`, :doc:`USER-OMP <accelerate_omp>`, :doc:`OPT <accelerate_opt>` packages |
|
||||
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| NVIDIA GPUs | :doc:`USER-CUDA <accelerate_cuda>`, :doc:`GPU <accelerate_gpu>`, :doc:`KOKKOS <accelerate_kokkos>` packages |
|
||||
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Intel Phi | :doc:`USER-INTEL <accelerate_intel>`, :doc:`KOKKOS <accelerate_kokkos>` packages |
|
||||
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Which package is fastest for your hardware may depend on the size
|
||||
problem you are running and what commands (accelerated and
|
||||
non-accelerated) are invoked by your input script. While these doc
|
||||
pages include performance guidelines, there is no substitute for
|
||||
trying out the different packages appropriate to your hardware.
|
||||
|
||||
Any accelerated style has the same name as the corresponding standard
|
||||
style, except that a suffix is appended. Otherwise, the syntax for
|
||||
the command that uses the style is identical, their functionality is
|
||||
the same, and the numerical results it produces should also be the
|
||||
same, except for precision and round-off effects.
|
||||
|
||||
For example, all of these styles are accelerated variants of the
|
||||
Lennard-Jones :doc:`pair_style lj/cut <pair_lj>`:
|
||||
|
||||
* :doc:`pair_style lj/cut/cuda <pair_lj>`
|
||||
* :doc:`pair_style lj/cut/gpu <pair_lj>`
|
||||
* :doc:`pair_style lj/cut/intel <pair_lj>`
|
||||
* :doc:`pair_style lj/cut/kk <pair_lj>`
|
||||
* :doc:`pair_style lj/cut/omp <pair_lj>`
|
||||
* :doc:`pair_style lj/cut/opt <pair_lj>`
|
||||
|
||||
To see what accelerate styles are currently available, see
|
||||
:ref:`Section_commands 5 <cmd_5>` of the manual. The
|
||||
doc pages for individual commands (e.g. :doc:`pair lj/cut <pair_lj>` or
|
||||
:doc:`fix nve <fix_nve>`) also list any accelerated variants available
|
||||
for that style.
|
||||
|
||||
To use an accelerator package in LAMMPS, and one or more of the styles
|
||||
it provides, follow these general steps. Details vary from package to
|
||||
package and are explained in the individual accelerator doc pages,
|
||||
listed above:
|
||||
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| build the accelerator library | only for USER-CUDA and GPU packages |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| install the accelerator package | make yes-opt, make yes-user-intel, etc |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| add compile/link flags to Makefile.machine | in src/MAKE, <br>
|
||||
only for USER-INTEL, KOKKOS, USER-OMP, OPT packages |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| re-build LAMMPS | make machine |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| run a LAMMPS simulation | lmp_machine < in.script <br>
|
||||
mpirun -np 32 lmp_machine -in in.script |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| enable the accelerator package | via "-c on" and "-k on" :ref:`command-line switches <start_7>`, <br>
|
||||
only for USER-CUDA and KOKKOS packages |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| set any needed options for the package | via "-pk" :ref:`command-line switch <start_7>` or
|
||||
:doc:`package <package>` command, <br>
|
||||
only if defaults need to be changed |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
| use accelerated styles in your input script | via "-sf" :ref:`command-line switch <start_7>` or
|
||||
:doc:`suffix <suffix>` command |
|
||||
+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Note that the first 4 steps can be done as a single command, using the
|
||||
src/Make.py tool. This tool is discussed in :ref:`Section 2.4 <start_4>` of the manual, and its use is
|
||||
illustrated in the individual accelerator sections. Typically these
|
||||
steps only need to be done once, to create an executable that uses one
|
||||
or more accelerator packages.
|
||||
|
||||
The last 4 steps can all be done from the command-line when LAMMPS is
|
||||
launched, without changing your input script, as illustrated in the
|
||||
individual accelerator sections. Or you can add
|
||||
:doc:`package <package>` and :doc:`suffix <suffix>` commands to your input
|
||||
script.
|
||||
|
||||
.. note::
|
||||
|
||||
With a few exceptions, you can build a single LAMMPS executable
|
||||
with all its accelerator packages installed. Note however that the
|
||||
USER-INTEL and KOKKOS packages require you to choose one of their
|
||||
hardware options when building for a specific platform. I.e. CPU or
|
||||
Phi option for the USER-INTEL package. Or the OpenMP, Cuda, or Phi
|
||||
option for the KOKKOS package.
|
||||
|
||||
These are the exceptions. You cannot build a single executable with:
|
||||
|
||||
* both the USER-INTEL Phi and KOKKOS Phi options
|
||||
* the USER-INTEL Phi or Kokkos Phi option, and either the USER-CUDA or GPU packages
|
||||
|
||||
See the examples/accelerate/README and make.list files for sample
|
||||
Make.py commands that build LAMMPS with any or all of the accelerator
|
||||
packages. As an example, here is a command that builds with all the
|
||||
GPU related packages installed (USER-CUDA, GPU, KOKKOS with Cuda),
|
||||
including settings to build the needed auxiliary USER-CUDA and GPU
|
||||
libraries for Kepler GPUs:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Make.py -j 16 -p omp gpu cuda kokkos -cc nvcc wrap=mpi -cuda mode=double arch=35 -gpu mode=double arch=35 \ -kokkos cuda arch=35 lib-all file mpi
|
||||
|
||||
The examples/accelerate directory also has input scripts that can be
|
||||
used with all of the accelerator packages. See its README file for
|
||||
details.
|
||||
|
||||
Likewise, the bench directory has FERMI and KEPLER and PHI
|
||||
sub-directories with Make.py commands and input scripts for using all
|
||||
the accelerator packages on various machines. See the README files in
|
||||
those dirs.
|
||||
|
||||
As mentioned above, the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the LAMMPS web site gives
|
||||
performance results for the various accelerator packages for several
|
||||
of the standard LAMMPS benchmark problems, as a function of problem
|
||||
size and number of compute nodes, on different hardware platforms.
|
||||
|
||||
Here is a brief summary of what the various packages provide. Details
|
||||
are in the individual accelerator sections.
|
||||
|
||||
* Styles with a "cuda" or "gpu" suffix are part of the USER-CUDA or GPU
|
||||
packages, and can be run on NVIDIA GPUs. The speed-up on a GPU
|
||||
depends on a variety of factors, discussed in the accelerator
|
||||
sections.
|
||||
* Styles with an "intel" suffix are part of the USER-INTEL
|
||||
package. These styles support vectorized single and mixed precision
|
||||
calculations, in addition to full double precision. In extreme cases,
|
||||
this can provide speedups over 3.5x on CPUs. The package also
|
||||
supports acceleration in "offload" mode to Intel(R) Xeon Phi(TM)
|
||||
coprocessors. This can result in additional speedup over 2x depending
|
||||
on the hardware configuration.
|
||||
* Styles with a "kk" suffix are part of the KOKKOS package, and can be
|
||||
run using OpenMP on multicore CPUs, on an NVIDIA GPU, or on an Intel
|
||||
Xeon Phi in "native" mode. The speed-up depends on a variety of
|
||||
factors, as discussed on the KOKKOS accelerator page.
|
||||
* Styles with an "omp" suffix are part of the USER-OMP package and allow
|
||||
a pair-style to be run in multi-threaded mode using OpenMP. This can
|
||||
be useful on nodes with high-core counts when using less MPI processes
|
||||
than cores is advantageous, e.g. when running with PPPM so that FFTs
|
||||
are run on fewer MPI processors or when the many MPI tasks would
|
||||
overload the available bandwidth for communication.
|
||||
* Styles with an "opt" suffix are part of the OPT package and typically
|
||||
speed-up the pairwise calculations of your simulation by 5-25% on a
|
||||
CPU.
|
||||
The individual accelerator package doc pages explain:
|
||||
|
||||
* what hardware and software the accelerated package requires
|
||||
* how to build LAMMPS with the accelerated package
|
||||
* how to run with the accelerated package either via command-line switches or modifying the input script
|
||||
* speed-ups to expect
|
||||
* guidelines for best performance
|
||||
* restrictions
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _acc_4:
|
||||
|
||||
Comparison of various accelerator packages
|
||||
------------------------------------------------------
|
||||
|
||||
.. note::
|
||||
|
||||
this section still needs to be re-worked with additional KOKKOS
|
||||
and USER-INTEL information.
|
||||
|
||||
The next section compares and contrasts the various accelerator
|
||||
options, since there are multiple ways to perform OpenMP threading,
|
||||
run on GPUs, and run on Intel Xeon Phi coprocessors.
|
||||
|
||||
All 3 of these packages accelerate a LAMMPS calculation using NVIDIA
|
||||
hardware, but they do it in different ways.
|
||||
|
||||
As a consequence, for a particular simulation on specific hardware,
|
||||
one package may be faster than the other. We give guidelines below,
|
||||
but the best way to determine which package is faster for your input
|
||||
script is to try both of them on your machine. See the benchmarking
|
||||
section below for examples where this has been done.
|
||||
|
||||
**Guidelines for using each package optimally:**
|
||||
|
||||
* The GPU package allows you to assign multiple CPUs (cores) to a single
|
||||
GPU (a common configuration for "hybrid" nodes that contain multicore
|
||||
CPU(s) and GPU(s)) and works effectively in this mode. The USER-CUDA
|
||||
package does not allow this; you can only use one CPU per GPU.
|
||||
* The GPU package moves per-atom data (coordinates, forces)
|
||||
back-and-forth between the CPU and GPU every timestep. The USER-CUDA
|
||||
package only does this on timesteps when a CPU calculation is required
|
||||
(e.g. to invoke a fix or compute that is non-GPU-ized). Hence, if you
|
||||
can formulate your input script to only use GPU-ized fixes and
|
||||
computes, and avoid doing I/O too often (thermo output, dump file
|
||||
snapshots, restart files), then the data transfer cost of the
|
||||
USER-CUDA package can be very low, causing it to run faster than the
|
||||
GPU package.
|
||||
* The GPU package is often faster than the USER-CUDA package, if the
|
||||
number of atoms per GPU is smaller. The crossover point, in terms of
|
||||
atoms/GPU at which the USER-CUDA package becomes faster depends
|
||||
strongly on the pair style. For example, for a simple Lennard Jones
|
||||
system the crossover (in single precision) is often about 50K-100K
|
||||
atoms per GPU. When performing double precision calculations the
|
||||
crossover point can be significantly smaller.
|
||||
* Both packages compute bonded interactions (bonds, angles, etc) on the
|
||||
CPU. This means a model with bonds will force the USER-CUDA package
|
||||
to transfer per-atom data back-and-forth between the CPU and GPU every
|
||||
timestep. If the GPU package is running with several MPI processes
|
||||
assigned to one GPU, the cost of computing the bonded interactions is
|
||||
spread across more CPUs and hence the GPU package can run faster.
|
||||
* When using the GPU package with multiple CPUs assigned to one GPU, its
|
||||
performance depends to some extent on high bandwidth between the CPUs
|
||||
and the GPU. Hence its performance is affected if full 16 PCIe lanes
|
||||
are not available for each GPU. In HPC environments this can be the
|
||||
case if S2050/70 servers are used, where two devices generally share
|
||||
one PCIe 2.0 16x slot. Also many multi-GPU mainboards do not provide
|
||||
full 16 lanes to each of the PCIe 2.0 16x slots.
|
||||
**Differences between the two packages:**
|
||||
|
||||
* The GPU package accelerates only pair force, neighbor list, and PPPM
|
||||
calculations. The USER-CUDA package currently supports a wider range
|
||||
of pair styles and can also accelerate many fix styles and some
|
||||
compute styles, as well as neighbor list and PPPM calculations.
|
||||
* The USER-CUDA package does not support acceleration for minimization.
|
||||
* The USER-CUDA package does not support hybrid pair styles.
|
||||
* The USER-CUDA package can order atoms in the neighbor list differently
|
||||
from run to run resulting in a different order for force accumulation.
|
||||
* The USER-CUDA package has a limit on the number of atom types that can be
|
||||
used in a simulation.
|
||||
* The GPU package requires neighbor lists to be built on the CPU when using
|
||||
exclusion lists or a triclinic simulation box.
|
||||
* The GPU package uses more GPU memory than the USER-CUDA package. This
|
||||
is generally not a problem since typical runs are computation-limited
|
||||
rather than memory-limited.
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
The LAMMPS distribution has two directories with sample input scripts
|
||||
for the GPU and USER-CUDA packages.
|
||||
|
||||
* lammps/examples/gpu = GPU package files
|
||||
* lammps/examples/USER/cuda = USER-CUDA package files
|
||||
|
||||
These contain input scripts for identical systems, so they can be used
|
||||
to benchmark the performance of both packages on your system.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,810 @@
|
|||
Commands
|
||||
========
|
||||
|
||||
This section describes how a LAMMPS input script is formatted and the
|
||||
input script commands used to define a LAMMPS simulation.
|
||||
|
||||
| 3.1 :ref:`LAMMPS input script <cmd_1>`
|
||||
| 3.2 :ref:`Parsing rules <cmd_2>`
|
||||
| 3.3 :ref:`Input script structure <cmd_3>`
|
||||
| 3.4 :ref:`Commands listed by category <cmd_4>`
|
||||
| 3.5 :ref:`Commands listed alphabetically <cmd_5>`
|
||||
|
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.. _cmd_1:
|
||||
|
||||
LAMMPS input script
|
||||
-------------------
|
||||
|
||||
LAMMPS executes by reading commands from a input script (text file),
|
||||
one line at a time. When the input script ends, LAMMPS exits. Each
|
||||
command causes LAMMPS to take some action. It may set an internal
|
||||
variable, read in a file, or run a simulation. Most commands have
|
||||
default settings, which means you only need to use the command if you
|
||||
wish to change the default.
|
||||
|
||||
In many cases, the ordering of commands in an input script is not
|
||||
important. However the following rules apply:
|
||||
|
||||
(1) LAMMPS does not read your entire input script and then perform a
|
||||
simulation with all the settings. Rather, the input script is read
|
||||
one line at a time and each command takes effect when it is read.
|
||||
Thus this sequence of commands:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
timestep 0.5
|
||||
run 100
|
||||
run 100
|
||||
|
||||
does something different than this sequence:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
run 100
|
||||
timestep 0.5
|
||||
run 100
|
||||
|
||||
In the first case, the specified timestep (0.5 fmsec) is used for two
|
||||
simulations of 100 timesteps each. In the 2nd case, the default
|
||||
timestep (1.0 fmsec) is used for the 1st 100 step simulation and a 0.5
|
||||
fmsec timestep is used for the 2nd one.
|
||||
|
||||
(2) Some commands are only valid when they follow other commands. For
|
||||
example you cannot set the temperature of a group of atoms until atoms
|
||||
have been defined and a group command is used to define which atoms
|
||||
belong to the group.
|
||||
|
||||
(3) Sometimes command B will use values that can be set by command A.
|
||||
This means command A must precede command B in the input script if it
|
||||
is to have the desired effect. For example, the
|
||||
:doc:`read_data <read_data>` command initializes the system by setting
|
||||
up the simulation box and assigning atoms to processors. If default
|
||||
values are not desired, the :doc:`processors <processors>` and
|
||||
:doc:`boundary <boundary>` commands need to be used before read_data to
|
||||
tell LAMMPS how to map processors to the simulation box.
|
||||
|
||||
Many input script errors are detected by LAMMPS and an ERROR or
|
||||
WARNING message is printed. :doc:`This section <Section_errors>` gives
|
||||
more information on what errors mean. The documentation for each
|
||||
command lists restrictions on how the command can be used.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _cmd_2:
|
||||
|
||||
Parsing rules
|
||||
-------------
|
||||
|
||||
Each non-blank line in the input script is treated as a command.
|
||||
LAMMPS commands are case sensitive. Command names are lower-case, as
|
||||
are specified command arguments. Upper case letters may be used in
|
||||
file names or user-chosen ID strings.
|
||||
|
||||
Here is how each line in the input script is parsed by LAMMPS:
|
||||
|
||||
(1) If the last printable character on the line is a "&" character,
|
||||
the command is assumed to continue on the next line. The next line is
|
||||
concatenated to the previous line by removing the "&" character and
|
||||
line break. This allows long commands to be continued across two or
|
||||
more lines. See the discussion of triple quotes in (6) for how to
|
||||
continue a command across multiple line without using "&" characters.
|
||||
|
||||
(2) All characters from the first "#" character onward are treated as
|
||||
comment and discarded. See an exception in (6). Note that a
|
||||
comment after a trailing "&" character will prevent the command from
|
||||
continuing on the next line. Also note that for multi-line commands a
|
||||
single leading "#" will comment out the entire command.
|
||||
|
||||
(3) The line is searched repeatedly for $ characters, which indicate
|
||||
variables that are replaced with a text string. See an exception in
|
||||
(6).
|
||||
|
||||
If the $ is followed by curly brackets, then the variable name is the
|
||||
text inside the curly brackets. If no curly brackets follow the $,
|
||||
then the variable name is the single character immediately following
|
||||
the $. Thus ${myTemp} and $x refer to variable names "myTemp" and
|
||||
"x".
|
||||
|
||||
How the variable is converted to a text string depends on what style
|
||||
of variable it is; see the `variable <variable>`_ doc page for details.
|
||||
It can be a variable that stores multiple text strings, and return one
|
||||
of them. The returned text string can be multiple "words" (space
|
||||
separated) which will then be interpreted as multiple arguments in the
|
||||
input command. The variable can also store a numeric formula which
|
||||
will be evaluated and its numeric result returned as a string.
|
||||
|
||||
As a special case, if the $ is followed by parenthesis, then the text
|
||||
inside the parenthesis is treated as an "immediate" variable and
|
||||
evaluated as an :doc:`equal-style variable <variable>`. This is a way
|
||||
to use numeric formulas in an input script without having to assign
|
||||
them to variable names. For example, these 3 input script lines:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
variable X equal (xlo+xhi)/2+sqrt(v_area)
|
||||
region 1 block $X 2 INF INF EDGE EDGE
|
||||
variable X delete
|
||||
|
||||
can be replaced by
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE
|
||||
|
||||
so that you do not have to define (or discard) a temporary variable X.
|
||||
|
||||
Note that neither the curly-bracket or immediate form of variables can
|
||||
contain nested $ characters for other variables to substitute for.
|
||||
Thus you cannot do this:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
variable a equal 2
|
||||
variable b2 equal 4
|
||||
print "B2 = ${b$a}"
|
||||
|
||||
Nor can you specify this $($x-1.0) for an immediate variable, but
|
||||
you could use $(v_x-1.0), since the latter is valid syntax for an
|
||||
:doc:`equal-style variable <variable>`.
|
||||
|
||||
See the :doc:`variable <variable>` command for more details of how
|
||||
strings are assigned to variables and evaluated, and how they can be
|
||||
used in input script commands.
|
||||
|
||||
(4) The line is broken into "words" separated by whitespace (tabs,
|
||||
spaces). Note that words can thus contain letters, digits,
|
||||
underscores, or punctuation characters.
|
||||
|
||||
(5) The first word is the command name. All successive words in the
|
||||
line are arguments.
|
||||
|
||||
(6) If you want text with spaces to be treated as a single argument,
|
||||
it can be enclosed in either single or double or triple quotes. A
|
||||
long single argument enclosed in single or double quotes can span
|
||||
multiple lines if the "&" character is used, as described above. When
|
||||
the lines are concatenated together (and the "&" characters and line
|
||||
breaks removed), the text will become a single line. If you want
|
||||
multiple lines of an argument to retain their line breaks, the text
|
||||
can be enclosed in triple quotes, in which case "&" characters are not
|
||||
needed. For example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
print "Volume = $v"
|
||||
print 'Volume = $v'
|
||||
if "${steps} > 1000" then quit
|
||||
variable a string "red green blue &
|
||||
purple orange cyan"
|
||||
print """
|
||||
System volume = $v
|
||||
System temperature = $t
|
||||
"""
|
||||
|
||||
In each case, the single, double, or triple quotes are removed when
|
||||
the single argument they enclose is stored internally.
|
||||
|
||||
See the :doc:`dump modify format <dump_modify>`, :doc:`print <print>`,
|
||||
:doc:`if <if>`, and :doc:`python <python>` commands for examples.
|
||||
|
||||
A "#" or "$" character that is between quotes will not be treated as a
|
||||
comment indicator in (2) or substituted for as a variable in (3).
|
||||
|
||||
.. note::
|
||||
|
||||
If the argument is itself a command that requires a quoted
|
||||
argument (e.g. using a :doc:`print <print>` command as part of an
|
||||
:doc:`if <if>` or :doc:`run every <run>` command), then single, double, or
|
||||
triple quotes can be nested in the usual manner. See the doc pages
|
||||
for those commands for examples. Only one of level of nesting is
|
||||
allowed, but that should be sufficient for most use cases.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _cmd_3:
|
||||
|
||||
Input script structure
|
||||
----------------------------------
|
||||
|
||||
This section describes the structure of a typical LAMMPS input script.
|
||||
The "examples" directory in the LAMMPS distribution contains many
|
||||
sample input scripts; the corresponding problems are discussed in
|
||||
:doc:`Section_example <Section_example>`, and animated on the `LAMMPS WWW Site <lws_>`_.
|
||||
|
||||
A LAMMPS input script typically has 4 parts:
|
||||
|
||||
1. Initialization
|
||||
2. Atom definition
|
||||
3. Settings
|
||||
4. Run a simulation
|
||||
|
||||
The last 2 parts can be repeated as many times as desired. I.e. run a
|
||||
simulation, change some settings, run some more, etc. Each of the 4
|
||||
parts is now described in more detail. Remember that almost all the
|
||||
commands need only be used if a non-default value is desired.
|
||||
|
||||
(1) Initialization
|
||||
|
||||
Set parameters that need to be defined before atoms are created or
|
||||
read-in from a file.
|
||||
|
||||
The relevant commands are :doc:`units <units>`,
|
||||
:doc:`dimension <dimension>`, :doc:`newton <newton>`,
|
||||
:doc:`processors <processors>`, :doc:`boundary <boundary>`,
|
||||
:doc:`atom_style <atom_style>`, :doc:`atom_modify <atom_modify>`.
|
||||
|
||||
If force-field parameters appear in the files that will be read, these
|
||||
commands tell LAMMPS what kinds of force fields are being used:
|
||||
:doc:`pair_style <pair_style>`, :doc:`bond_style <bond_style>`,
|
||||
:doc:`angle_style <angle_style>`, :doc:`dihedral_style <dihedral_style>`,
|
||||
:doc:`improper_style <improper_style>`.
|
||||
|
||||
(2) Atom definition
|
||||
|
||||
There are 3 ways to define atoms in LAMMPS. Read them in from a data
|
||||
or restart file via the :doc:`read_data <read_data>` or
|
||||
:doc:`read_restart <read_restart>` commands. These files can contain
|
||||
molecular topology information. Or create atoms on a lattice (with no
|
||||
molecular topology), using these commands: :doc:`lattice <lattice>`,
|
||||
:doc:`region <region>`, :doc:`create_box <create_box>`,
|
||||
:doc:`create_atoms <create_atoms>`. The entire set of atoms can be
|
||||
duplicated to make a larger simulation using the
|
||||
:doc:`replicate <replicate>` command.
|
||||
|
||||
(3) Settings
|
||||
|
||||
Once atoms and molecular topology are defined, a variety of settings
|
||||
can be specified: force field coefficients, simulation parameters,
|
||||
output options, etc.
|
||||
|
||||
Force field coefficients are set by these commands (they can also be
|
||||
set in the read-in files): :doc:`pair_coeff <pair_coeff>`,
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`angle_coeff <angle_coeff>`,
|
||||
:doc:`dihedral_coeff <dihedral_coeff>`,
|
||||
:doc:`improper_coeff <improper_coeff>`,
|
||||
:doc:`kspace_style <kspace_style>`, :doc:`dielectric <dielectric>`,
|
||||
:doc:`special_bonds <special_bonds>`.
|
||||
|
||||
Various simulation parameters are set by these commands:
|
||||
:doc:`neighbor <neighbor>`, :doc:`neigh_modify <neigh_modify>`,
|
||||
:doc:`group <group>`, :doc:`timestep <timestep>`,
|
||||
:doc:`reset_timestep <reset_timestep>`, :doc:`run_style <run_style>`,
|
||||
:doc:`min_style <min_style>`, :doc:`min_modify <min_modify>`.
|
||||
|
||||
Fixes impose a variety of boundary conditions, time integration, and
|
||||
diagnostic options. The :doc:`fix <fix>` command comes in many flavors.
|
||||
|
||||
Various computations can be specified for execution during a
|
||||
simulation using the :doc:`compute <compute>`,
|
||||
:doc:`compute_modify <compute_modify>`, and :doc:`variable <variable>`
|
||||
commands.
|
||||
|
||||
Output options are set by the :doc:`thermo <thermo>`, :doc:`dump <dump>`,
|
||||
and :doc:`restart <restart>` commands.
|
||||
|
||||
(4) Run a simulation
|
||||
|
||||
A molecular dynamics simulation is run using the :doc:`run <run>`
|
||||
command. Energy minimization (molecular statics) is performed using
|
||||
the :doc:`minimize <minimize>` command. A parallel tempering
|
||||
(replica-exchange) simulation can be run using the
|
||||
:doc:`temper <temper>` command.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _cmd_4:
|
||||
|
||||
Commands listed by category
|
||||
---------------------------
|
||||
|
||||
This section lists all LAMMPS commands, grouped by category. The
|
||||
:ref:`next section <cmd_5>` lists the same commands alphabetically. Note
|
||||
that some style options for some commands are part of specific LAMMPS
|
||||
packages, which means they cannot be used unless the package was
|
||||
included when LAMMPS was built. Not all packages are included in a
|
||||
default LAMMPS build. These dependencies are listed as Restrictions
|
||||
in the command's documentation.
|
||||
|
||||
Initialization:
|
||||
|
||||
:doc:`atom_modify <atom_modify>`, :doc:`atom_style <atom_style>`,
|
||||
:doc:`boundary <boundary>`, :doc:`dimension <dimension>`,
|
||||
:doc:`newton <newton>`, :doc:`processors <processors>`, :doc:`units <units>`
|
||||
|
||||
Atom definition:
|
||||
|
||||
:doc:`create_atoms <create_atoms>`, :doc:`create_box <create_box>`,
|
||||
:doc:`lattice <lattice>`, :doc:`read_data <read_data>`,
|
||||
:doc:`read_dump <read_dump>`, :doc:`read_restart <read_restart>`,
|
||||
:doc:`region <region>`, :doc:`replicate <replicate>`
|
||||
|
||||
Force fields:
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`, :doc:`angle_style <angle_style>`,
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`bond_style <bond_style>`,
|
||||
:doc:`dielectric <dielectric>`, :doc:`dihedral_coeff <dihedral_coeff>`,
|
||||
:doc:`dihedral_style <dihedral_style>`,
|
||||
:doc:`improper_coeff <improper_coeff>`,
|
||||
:doc:`improper_style <improper_style>`,
|
||||
:doc:`kspace_modify <kspace_modify>`, :doc:`kspace_style <kspace_style>`,
|
||||
:doc:`pair_coeff <pair_coeff>`, :doc:`pair_modify <pair_modify>`,
|
||||
:doc:`pair_style <pair_style>`, :doc:`pair_write <pair_write>`,
|
||||
:doc:`special_bonds <special_bonds>`
|
||||
|
||||
Settings:
|
||||
|
||||
:doc:`comm_style <comm_style>`, :doc:`group <group>`, :doc:`mass <mass>`,
|
||||
:doc:`min_modify <min_modify>`, :doc:`min_style <min_style>`,
|
||||
:doc:`neigh_modify <neigh_modify>`, :doc:`neighbor <neighbor>`,
|
||||
:doc:`reset_timestep <reset_timestep>`, :doc:`run_style <run_style>`,
|
||||
:doc:`set <set>`, :doc:`timestep <timestep>`, :doc:`velocity <velocity>`
|
||||
|
||||
Fixes:
|
||||
|
||||
:doc:`fix <fix>`, :doc:`fix_modify <fix_modify>`, :doc:`unfix <unfix>`
|
||||
|
||||
Computes:
|
||||
|
||||
:doc:`compute <compute>`, :doc:`compute_modify <compute_modify>`,
|
||||
:doc:`uncompute <uncompute>`
|
||||
|
||||
Output:
|
||||
|
||||
:doc:`dump <dump>`, :doc:`dump image <dump_image>`,
|
||||
:doc:`dump_modify <dump_modify>`, :doc:`dump movie <dump_image>`,
|
||||
:doc:`restart <restart>`, :doc:`thermo <thermo>`,
|
||||
:doc:`thermo_modify <thermo_modify>`, :doc:`thermo_style <thermo_style>`,
|
||||
:doc:`undump <undump>`, :doc:`write_data <write_data>`,
|
||||
:doc:`write_dump <write_dump>`, :doc:`write_restart <write_restart>`
|
||||
|
||||
Actions:
|
||||
|
||||
:doc:`delete_atoms <delete_atoms>`, :doc:`delete_bonds <delete_bonds>`,
|
||||
:doc:`displace_atoms <displace_atoms>`, :doc:`change_box <change_box>`,
|
||||
:doc:`minimize <minimize>`, :doc:`neb <neb>` :doc:`prd <prd>`,
|
||||
:doc:`rerun <rerun>`, :doc:`run <run>`, :doc:`temper <temper>`
|
||||
|
||||
Miscellaneous:
|
||||
|
||||
:doc:`clear <clear>`, :doc:`echo <echo>`, :doc:`if <if>`,
|
||||
:doc:`include <include>`, :doc:`jump <jump>`, :doc:`label <label>`,
|
||||
:doc:`log <log>`, :doc:`next <next>`, :doc:`print <print>`,
|
||||
:doc:`shell <shell>`, :doc:`variable <variable>`
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _cmd_5:
|
||||
|
||||
.. _comm:
|
||||
|
||||
Individual commands
|
||||
------------------------------------------
|
||||
|
||||
This section lists all LAMMPS commands alphabetically, with a separate
|
||||
listing below of styles within certain commands. The :ref:`previous section <cmd_4>` lists the same commands, grouped by category. Note
|
||||
that some style options for some commands are part of specific LAMMPS
|
||||
packages, which means they cannot be used unless the package was
|
||||
included when LAMMPS was built. Not all packages are included in a
|
||||
default LAMMPS build. These dependencies are listed as Restrictions
|
||||
in the command's documentation.
|
||||
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`angle_coeff <angle_coeff>` | :doc:`angle_style <angle_style>` | :doc:`atom_modify <atom_modify>` | :doc:`atom_style <atom_style>` | :doc:`balance <balance>` | :doc:`bond_coeff <bond_coeff>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`bond_style <bond_style>` | :doc:`boundary <boundary>` | :doc:`box <box>` | :doc:`change_box <change_box>` | :doc:`clear <clear>` | :doc:`comm_modify <comm_modify>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`comm_style <comm_style>` | :doc:`compute <compute>` | :doc:`compute_modify <compute_modify>` | :doc:`create_atoms <create_atoms>` | :doc:`create_bonds <create_bonds>` | :doc:`create_box <create_box>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`delete_atoms <delete_atoms>` | :doc:`delete_bonds <delete_bonds>` | :doc:`dielectric <dielectric>` | :doc:`dihedral_coeff <dihedral_coeff>` | :doc:`dihedral_style <dihedral_style>` | :doc:`dimension <dimension>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`displace_atoms <displace_atoms>` | :doc:`dump <dump>` | :doc:`dump image <dump_image>` | :doc:`dump_modify <dump_modify>` | :doc:`dump movie <dump_image>` | :doc:`echo <echo>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`fix <fix>` | :doc:`fix_modify <fix_modify>` | :doc:`group <group>` | :doc:`if <if>` | :doc:`info <info>` | :doc:`improper_coeff <improper_coeff>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`improper_style <improper_style>` | :doc:`include <include>` | :doc:`jump <jump>` | :doc:`kspace_modify <kspace_modify>` | :doc:`kspace_style <kspace_style>` | :doc:`label <label>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`lattice <lattice>` | :doc:`log <log>` | :doc:`mass <mass>` | :doc:`minimize <minimize>` | :doc:`min_modify <min_modify>` | :doc:`min_style <min_style>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`molecule <molecule>` | :doc:`neb <neb>` | :doc:`neigh_modify <neigh_modify>` | :doc:`neighbor <neighbor>` | :doc:`newton <newton>` | :doc:`next <next>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`package <package>` | :doc:`pair_coeff <pair_coeff>` | :doc:`pair_modify <pair_modify>` | :doc:`pair_style <pair_style>` | :doc:`pair_write <pair_write>` | :doc:`partition <partition>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`prd <prd>` | :doc:`print <print>` | :doc:`processors <processors>` | :doc:`python <python>` | :doc:`quit <quit>` | :doc:`read_data <read_data>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`read_dump <read_dump>` | :doc:`read_restart <read_restart>` | :doc:`region <region>` | :doc:`replicate <replicate>` | :doc:`rerun <rerun>` | :doc:`reset_timestep <reset_timestep>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`restart <restart>` | :doc:`run <run>` | :doc:`run_style <run_style>` | :doc:`set <set>` | :doc:`shell <shell>` | :doc:`special_bonds <special_bonds>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`suffix <suffix>` | :doc:`tad <tad>` | :doc:`temper <temper>` | :doc:`thermo <thermo>` | :doc:`thermo_modify <thermo_modify>` | :doc:`thermo_style <thermo_style>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`timer <timer>` | :doc:`timestep <timestep>` | :doc:`uncompute <uncompute>` | :doc:`undump <undump>` | :doc:`unfix <unfix>` | :doc:`units <units>` |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
| :doc:`variable <variable>` | :doc:`velocity <velocity>` | :doc:`write_data <write_data>` | :doc:`write_dump <write_dump>` | :doc:`write_restart <write_restart>` | |
|
||||
+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|
||||
|
||||
These are additional commands in USER packages, which can be used if
|
||||
:ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+------------------------------+
|
||||
| :doc:`group2ndx <group2ndx>` |
|
||||
+------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Fix styles
|
||||
----------
|
||||
|
||||
See the :doc:`fix <fix>` command for one-line descriptions of each style
|
||||
or click on the style itself for a full description. Some of the
|
||||
styles have accelerated versions, which can be used if LAMMPS is built
|
||||
with the :doc:`appropriate accelerated package <Section_accelerate>`.
|
||||
This is indicated by additional letters in parenthesis: c = USER-CUDA,
|
||||
g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`adapt <fix_adapt>` | :doc:`addforce (c) <fix_addforce>` | :doc:`append/atoms <fix_append_atoms>` | :doc:`atom/swap <fix_atom_swap>` | :doc:`aveforce (c) <fix_aveforce>` | :doc:`ave/atom <fix_ave_atom>` | :doc:`ave/chunk <fix_ave_chunk>` | :doc:`ave/correlate <fix_ave_correlate>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`ave/histo <fix_ave_histo>` | :doc:`ave/histo/weight <fix_ave_histo>` | :doc:`ave/spatial <fix_ave_spatial>` | :doc:`ave/time <fix_ave_time>` | :doc:`balance <fix_balance>` | :doc:`bond/break <fix_bond_break>` | :doc:`bond/create <fix_bond_create>` | :doc:`bond/swap <fix_bond_swap>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`box/relax <fix_box_relax>` | :doc:`deform (k) <fix_deform>` | :doc:`deposit <fix_deposit>` | :doc:`drag <fix_drag>` | :doc:`dt/reset <fix_dt_reset>` | :doc:`efield <fix_efield>` | :doc:`enforce2d (c) <fix_enforce2d>` | :doc:`evaporate <fix_evaporate>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`external <fix_external>` | :doc:`freeze (c) <fix_freeze>` | :doc:`gcmc <fix_gcmc>` | :doc:`gld <fix_gld>` | :doc:`gravity (co) <fix_gravity>` | :doc:`heat <fix_heat>` | :doc:`indent <fix_indent>` | :doc:`langevin (k) <fix_langevin>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`lineforce <fix_lineforce>` | :doc:`momentum <fix_momentum>` | :doc:`move <fix_move>` | :doc:`msst <fix_msst>` | :doc:`neb <fix_neb>` | :doc:`nph (ko) <fix_nh>` | :doc:`nphug (o) <fix_nphug>` | :doc:`nph/asphere (o) <fix_nph_asphere>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`nph/sphere (o) <fix_nph_sphere>` | :doc:`npt (ckio) <fix_nh>` | :doc:`npt/asphere (o) <fix_npt_asphere>` | :doc:`npt/sphere (o) <fix_npt_sphere>` | :doc:`nve (ckio) <fix_nve>` | :doc:`nve/asphere (i) <fix_nve_asphere>` | :doc:`nve/asphere/noforce <fix_nve_asphere_noforce>` | :doc:`nve/body <fix_nve_body>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`nve/limit <fix_nve_limit>` | :doc:`nve/line <fix_nve_line>` | :doc:`nve/noforce <fix_nve_noforce>` | :doc:`nve/sphere (o) <fix_nve_sphere>` | :doc:`nve/tri <fix_nve_tri>` | :doc:`nvt (cko) <fix_nh>` | :doc:`nvt/asphere (o) <fix_nvt_asphere>` | :doc:`nvt/sllod (o) <fix_nvt_sllod>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`nvt/sphere (o) <fix_nvt_sphere>` | :doc:`oneway <fix_oneway>` | :doc:`orient/fcc <fix_orient_fcc>` | :doc:`planeforce <fix_planeforce>` | :doc:`poems <fix_poems>` | :doc:`pour <fix_pour>` | :doc:`press/berendsen <fix_press_berendsen>` | :doc:`print <fix_print>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`property/atom <fix_property_atom>` | :doc:`qeq/comb (o) <fix_qeq_comb>` | :doc:`qeq/dynamic <fix_qeq>` | :doc:`qeq/fire <fix_qeq>` | :doc:`qeq/point <fix_qeq>` | :doc:`qeq/shielded <fix_qeq>` | :doc:`qeq/slater <fix_qeq>` | :doc:`reax/bonds <fix_reax_bonds>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`recenter <fix_recenter>` | :doc:`restrain <fix_restrain>` | :doc:`rigid (o) <fix_rigid>` | :doc:`rigid/nph (o) <fix_rigid>` | :doc:`rigid/npt (o) <fix_rigid>` | :doc:`rigid/nve (o) <fix_rigid>` | :doc:`rigid/nvt (o) <fix_rigid>` | :doc:`rigid/small (o) <fix_rigid>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`rigid/small/nph <fix_rigid>` | :doc:`rigid/small/npt <fix_rigid>` | :doc:`rigid/small/nve <fix_rigid>` | :doc:`rigid/small/nvt <fix_rigid>` | :doc:`setforce (ck) <fix_setforce>` | :doc:`shake (c) <fix_shake>` | :doc:`spring <fix_spring>` | :doc:`spring/rg <fix_spring_rg>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`spring/self <fix_spring_self>` | :doc:`srd <fix_srd>` | :doc:`store/force <fix_store_force>` | :doc:`store/state <fix_store_state>` | :doc:`temp/berendsen (c) <fix_temp_berendsen>` | :doc:`temp/csld <fix_temp_csvr>` | :doc:`temp/csvr <fix_temp_csvr>` | :doc:`temp/rescale (c) <fix_temp_rescale>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`tfmc <fix_tfmc>` | :doc:`thermal/conductivity <fix_thermal_conductivity>` | :doc:`tmd <fix_tmd>` | :doc:`ttm <fix_ttm>` | :doc:`tune/kspace <fix_tune_kspace>` | :doc:`vector <fix_vector>` | :doc:`viscosity <fix_viscosity>` | :doc:`viscous (c) <fix_viscous>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`wall/colloid <fix_wall>` | :doc:`wall/gran <fix_wall_gran>` | :doc:`wall/harmonic <fix_wall>` | :doc:`wall/lj1043 <fix_wall>` | :doc:`wall/lj126 <fix_wall>` | :doc:`wall/lj93 <fix_wall>` | :doc:`wall/piston <fix_wall_piston>` | :doc:`wall/reflect (k) <fix_wall_reflect>` |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
| :doc:`wall/region <fix_wall_region>` | :doc:`wall/srd <fix_wall_srd>` | | | | | | |
|
||||
+------------------------------------------+--------------------------------------------------------+------------------------------------------+----------------------------------------+------------------------------------------------+------------------------------------------+------------------------------------------------------+--------------------------------------------+
|
||||
|
||||
These are additional fix styles in USER packages, which can be used if
|
||||
:ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`adapt/fep <fix_adapt_fep>` | :doc:`addtorque <fix_addtorque>` | :doc:`atc <fix_atc>` | :doc:`ave/correlate/long <fix_ave_correlate_long>` | :doc:`ave/spatial/sphere <fix_ave_spatial_sphere>` | :doc:`drude <fix_drude>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`drude/transform/direct <fix_drude_transform>` | :doc:`drude/transform/reverse <fix_drude_transform>` | :doc:`colvars <fix_colvars>` | :doc:`gle <fix_gle>` | :doc:`imd <fix_imd>` | :doc:`ipi <fix_ipi>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`langevin/drude <fix_langevin_drude>` | :doc:`langevin/eff <fix_langevin_eff>` | :doc:`lb/fluid <fix_lb_fluid>` | :doc:`lb/momentum <fix_lb_momentum>` | :doc:`lb/pc <fix_lb_pc>` | :doc:`lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`lb/viscous <fix_lb_viscous>` | :doc:`meso <fix_meso>` | :doc:`meso/stationary <fix_meso_stationary>` | :doc:`nph/eff <fix_nh_eff>` | :doc:`npt/eff <fix_nh_eff>` | :doc:`nve/eff <fix_nve_eff>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`nvt/eff <fix_nh_eff>` | :doc:`nvt/sllod/eff <fix_nvt_sllod_eff>` | :doc:`phonon <fix_phonon>` | :doc:`pimd <fix_pimd>` | :doc:`qbmsst <fix_qbmsst>` | :doc:`qeq/reax <fix_qeq_reax>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`qmmm <fix_qmmm>` | :doc:`qtb <fix_qtb>` | :doc:`reax/c/bonds <fix_reax_bonds>` | :doc:`reax/c/species <fix_reaxc_species>` | :doc:`saed/vtk <fix_saed_vtk>` | :doc:`smd <fix_smd>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`smd/adjust/dt <fix_smd_adjust_dt>` | :doc:`smd/integrate/tlsph <fix_smd_integrate_tlsph>` | :doc:`smd/integrate/ulsph <fix_smd_integrate_ulsph>` | :doc:`smd/move/triangulated/surface <fix_smd_move_triangulated_surface>` | :doc:`smd/setvel <fix_smd_setvel>` | :doc:`smd/tlsph/reference/configuration <fix_smd_tlsph_reference_configuration>` |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
| :doc:`smd/wall/surface <fix_smd_wall_surface>` | :doc:`temp/rescale/eff <fix_temp_rescale_eff>` | :doc:`ti/rs <fix_ti_rs>` | :doc:`ti/spring <fix_ti_spring>` | :doc:`ttm/mod <fix_ttm>` | |
|
||||
+-----------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------------+----------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Compute styles
|
||||
--------------
|
||||
|
||||
See the :doc:`compute <compute>` command for one-line descriptions of
|
||||
each style or click on the style itself for a full description. Some
|
||||
of the styles have accelerated versions, which can be used if LAMMPS
|
||||
is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`angle/local <compute_angle_local>` | :doc:`angmom/chunk <compute_angmom_chunk>` | :doc:`body/local <compute_body_local>` | :doc:`bond/local <compute_bond_local>` | :doc:`centro/atom <compute_centro_atom>` | :doc:`chunk/atom <compute_chunk_atom>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`cluster/atom <compute_cluster_atom>` | :doc:`cna/atom <compute_cna_atom>` | :doc:`com <compute_com>` | :doc:`com/chunk <compute_com_chunk>` | :doc:`contact/atom <compute_contact_atom>` | :doc:`coord/atom <compute_coord_atom>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`damage/atom <compute_damage_atom>` | :doc:`dihedral/local <compute_dihedral_local>` | :doc:`dilatation/atom <compute_dilatation_atom>` | :doc:`displace/atom <compute_displace_atom>` | :doc:`erotate/asphere <compute_erotate_asphere>` | :doc:`erotate/rigid <compute_erotate_rigid>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`erotate/sphere <compute_erotate_sphere>` | :doc:`erotate/sphere/atom <compute_erotate_sphere_atom>` | :doc:`event/displace <compute_event_displace>` | :doc:`group/group <compute_group_group>` | :doc:`gyration <compute_gyration>` | :doc:`gyration/chunk <compute_gyration_chunk>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`heat/flux <compute_heat_flux>` | :doc:`hexorder/atom <compute_hexorder_atom>` | :doc:`improper/local <compute_improper_local>` | :doc:`inertia/chunk <compute_inertia_chunk>` | :doc:`ke <compute_ke>` | :doc:`ke/atom <compute_ke_atom>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`ke/rigid <compute_ke_rigid>` | :doc:`msd <compute_msd>` | :doc:`msd/chunk <compute_msd_chunk>` | :doc:`msd/nongauss <compute_msd_nongauss>` | :doc:`omega/chunk <compute_omega_chunk>` | :doc:`orientorder/atom <compute_orientorder_atom>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`pair <compute_pair>` | :doc:`pair/local <compute_pair_local>` | :doc:`pe (c) <compute_pe>` | :doc:`pe/atom <compute_pe_atom>` | :doc:`plasticity/atom <compute_plasticity_atom>` | :doc:`pressure (c) <compute_pressure>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`property/atom <compute_property_atom>` | :doc:`property/local <compute_property_local>` | :doc:`property/chunk <compute_property_chunk>` | :doc:`rdf <compute_rdf>` | :doc:`reduce <compute_reduce>` | :doc:`reduce/region <compute_reduce>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`slice <compute_slice>` | :doc:`sna/atom <compute_sna_atom>` | :doc:`snad/atom <compute_sna_atom>` | :doc:`snav/atom <compute_sna_atom>` | :doc:`stress/atom <compute_stress_atom>` | :doc:`temp (ck) <compute_temp>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`temp/asphere <compute_temp_asphere>` | :doc:`temp/chunk <compute_temp_chunk>` | :doc:`temp/com <compute_temp_com>` | :doc:`temp/deform <compute_temp_deform>` | :doc:`temp/partial (c) <compute_temp_partial>` | :doc:`temp/profile <compute_temp_profile>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`temp/ramp <compute_temp_ramp>` | :doc:`temp/region <compute_temp_region>` | :doc:`temp/sphere <compute_temp_sphere>` | :doc:`ti <compute_ti>` | :doc:`torque/chunk <compute_torque_chunk>` | :doc:`vacf <compute_vacf>` |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
| :doc:`vcm/chunk <compute_vcm_chunk>` | :doc:`voronoi/atom <compute_voronoi_atom>` | | | | |
|
||||
+------------------------------------------------+----------------------------------------------------------+--------------------------------------------------+----------------------------------------------+--------------------------------------------------+----------------------------------------------------+
|
||||
|
||||
These are additional compute styles in USER packages, which can be
|
||||
used if :ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`ackland/atom <compute_ackland_atom>` | :doc:`basal/atom <compute_basal_atom>` | :doc:`fep <compute_fep>` | :doc:`force/tally <compute_tally>` | :doc:`heat/flux/tally <compute_tally>` | :doc:`ke/eff <compute_ke_eff>` |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`ke/atom/eff <compute_ke_atom_eff>` | :doc:`meso/e/atom <compute_meso_e_atom>` | :doc:`meso/rho/atom <compute_meso_rho_atom>` | :doc:`meso/t/atom <compute_meso_t_atom>` | :doc:`pe/tally <compute_tally>` | :doc:`saed <compute_saed>` |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`smd/contact/radius <compute_smd_contact_radius>` | :doc:`smd/damage <compute_smd_damage>` | :doc:`smd/hourglass/error <compute_smd_hourglass_error>` | :doc:`smd/internal/energy <compute_smd_internal_energy>` | :doc:`smd/plastic/strain <compute_smd_plastic_strain>` | :doc:`smd/plastic/strain/rate <compute_smd_plastic_strain_rate>` |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`smd/rho <compute_smd_rho>` | :doc:`smd/tlsph/defgrad <compute_smd_tlsph_defgrad>` | :doc:`smd/tlsph/dt <compute_smd_tlsph_dt>` | :doc:`smd/tlsph/num/neighs <compute_smd_tlsph_num_neighs>` | :doc:`smd/tlsph/shape <compute_smd_tlsph_shape>` | :doc:`smd/tlsph/strain <compute_smd_tlsph_strain>` |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>` | :doc:`smd/tlsph/stress <compute_smd_tlsph_stress>` | :doc:`smd/triangle/mesh/vertices <compute_smd_triangle_mesh_vertices>` | :doc:`smd/ulsph/num/neighs <compute_smd_ulsph_num_neighs>` | :doc:`smd/ulsph/strain <compute_smd_ulsph_strain>` | :doc:`smd/ulsph/strain/rate <compute_smd_ulsph_strain_rate>` |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`smd/ulsph/stress <compute_smd_ulsph_stress>` | :doc:`smd/vol <compute_smd_vol>` | :doc:`stress/tally <compute_tally>` | :doc:`temp/drude <compute_temp_drude>` | :doc:`temp/eff <compute_temp_eff>` | :doc:`temp/deform/eff <compute_temp_deform_eff>` |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
| :doc:`temp/region/eff <compute_temp_region_eff>` | :doc:`temp/rotate <compute_temp_rotate>` | :doc:`xrd <compute_xrd>` | | | |
|
||||
+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Pair_style potentials
|
||||
---------------------
|
||||
|
||||
See the :doc:`pair_style <pair_style>` command for an overview of pair
|
||||
potentials. Click on the style itself for a full description. Many
|
||||
of the styles have accelerated versions, which can be used if LAMMPS
|
||||
is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`none <pair_none>` | :doc:`hybrid <pair_hybrid>` | :doc:`hybrid/overlay <pair_hybrid>` | :doc:`adp (o) <pair_adp>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`airebo (o) <pair_airebo>` | :doc:`beck (go) <pair_beck>` | :doc:`body <pair_body>` | :doc:`bop <pair_bop>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`born (go) <pair_born>` | :doc:`born/coul/long (cgo) <pair_born>` | :doc:`born/coul/long/cs <pair_born>` | :doc:`born/coul/msm (o) <pair_born>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`born/coul/wolf (go) <pair_born>` | :doc:`brownian (o) <pair_brownian>` | :doc:`brownian/poly (o) <pair_brownian>` | :doc:`buck (cgkio) <pair_buck>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`buck/coul/cut (cgkio) <pair_buck>` | :doc:`buck/coul/long (cgkio) <pair_buck>` | :doc:`buck/coul/long/cs <pair_buck>` | :doc:`buck/coul/msm (o) <pair_buck>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`buck/long/coul/long (o) <pair_buck_long>` | :doc:`colloid (go) <pair_colloid>` | :doc:`comb (o) <pair_comb>` | :doc:`comb3 <pair_comb>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`coul/cut (gko) <pair_coul>` | :doc:`coul/debye (gko) <pair_coul>` | :doc:`coul/dsf (gko) <pair_coul>` | :doc:`coul/long (gko) <pair_coul>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`coul/long/cs <pair_coul>` | :doc:`coul/msm <pair_coul>` | :doc:`coul/streitz <pair_coul>` | :doc:`coul/wolf (ko) <pair_coul>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`dpd (o) <pair_dpd>` | :doc:`dpd/tstat (o) <pair_dpd>` | :doc:`dsmc <pair_dsmc>` | :doc:`eam (cgkot) <pair_eam>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`eam/alloy (cgkot) <pair_eam>` | :doc:`eam/fs (cgkot) <pair_eam>` | :doc:`eim (o) <pair_eim>` | :doc:`gauss (go) <pair_gauss>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`gayberne (gio) <pair_gayberne>` | :doc:`gran/hertz/history (o) <pair_gran>` | :doc:`gran/hooke (co) <pair_gran>` | :doc:`gran/hooke/history (o) <pair_gran>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`hbond/dreiding/lj (o) <pair_hbond_dreiding>` | :doc:`hbond/dreiding/morse (o) <pair_hbond_dreiding>` | :doc:`kim <pair_kim>` | :doc:`lcbop <pair_lcbop>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`line/lj <pair_line_lj>` | :doc:`lj/charmm/coul/charmm (cko) <pair_charmm>` | :doc:`lj/charmm/coul/charmm/implicit (cko) <pair_charmm>` | :doc:`lj/charmm/coul/long (cgiko) <pair_charmm>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj/charmm/coul/msm <pair_charmm>` | :doc:`lj/class2 (cgko) <pair_class2>` | :doc:`lj/class2/coul/cut (cko) <pair_class2>` | :doc:`lj/class2/coul/long (cgko) <pair_class2>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj/cubic (go) <pair_lj_cubic>` | :doc:`lj/cut (cgikot) <pair_lj>` | :doc:`lj/cut/coul/cut (cgko) <pair_lj>` | :doc:`lj/cut/coul/debye (cgko) <pair_lj>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj/cut/coul/dsf (gko) <pair_lj>` | :doc:`lj/cut/coul/long (cgikot) <pair_lj>` | :doc:`lj/cut/coul/long/cs <pair_lj>` | :doc:`lj/cut/coul/msm (go) <pair_lj>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj/cut/dipole/cut (go) <pair_dipole>` | :doc:`lj/cut/dipole/long <pair_dipole>` | :doc:`lj/cut/tip4p/cut (o) <pair_lj>` | :doc:`lj/cut/tip4p/long (ot) <pair_lj>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj/expand (cgko) <pair_lj_expand>` | :doc:`lj/gromacs (cgko) <pair_gromacs>` | :doc:`lj/gromacs/coul/gromacs (cko) <pair_gromacs>` | :doc:`lj/long/coul/long (o) <pair_lj_long>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj/long/dipole/long <pair_dipole>` | :doc:`lj/long/tip4p/long <pair_lj_long>` | :doc:`lj/smooth (co) <pair_lj_smooth>` | :doc:`lj/smooth/linear (o) <pair_lj_smooth_linear>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lj96/cut (cgo) <pair_lj96>` | :doc:`lubricate (o) <pair_lubricate>` | :doc:`lubricate/poly (o) <pair_lubricate>` | :doc:`lubricateU <pair_lubricateU>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`lubricateU/poly <pair_lubricateU>` | :doc:`meam (o) <pair_meam>` | :doc:`mie/cut (o) <pair_mie>` | :doc:`morse (cgot) <pair_morse>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`nb3b/harmonic (o) <pair_nb3b_harmonic>` | :doc:`nm/cut (o) <pair_nm>` | :doc:`nm/cut/coul/cut (o) <pair_nm>` | :doc:`nm/cut/coul/long (o) <pair_nm>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`peri/eps <pair_peri>` | :doc:`peri/lps (o) <pair_peri>` | :doc:`peri/pmb (o) <pair_peri>` | :doc:`peri/ves <pair_peri>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`polymorphic <pair_polymorphic>` | :doc:`reax <pair_reax>` | :doc:`rebo (o) <pair_airebo>` | :doc:`resquared (go) <pair_resquared>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`snap <pair_snap>` | :doc:`soft (go) <pair_soft>` | :doc:`sw (cgkio) <pair_sw>` | :doc:`table (gko) <pair_table>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`tersoff (cgkio) <pair_tersoff>` | :doc:`tersoff/mod (ko) <pair_tersoff_mod>` | :doc:`tersoff/zbl (ko) <pair_tersoff_zbl>` | :doc:`tip4p/cut (o) <pair_coul>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`tip4p/long (o) <pair_coul>` | :doc:`tri/lj <pair_tri_lj>` | :doc:`vashishta (o) <pair_vashishta>` | :doc:`yukawa (go) <pair_yukawa>` |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`yukawa/colloid (go) <pair_yukawa_colloid>` | :doc:`zbl (go) <pair_zbl>` | | |
|
||||
+----------------------------------------------------+-------------------------------------------------------+-----------------------------------------------------------+-----------------------------------------------------+
|
||||
|
||||
These are additional pair styles in USER packages, which can be used
|
||||
if :ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`awpmd/cut <pair_awpmd>` | :doc:`buck/mdf <pair_mdf>` | :doc:`coul/cut/soft (o) <pair_lj_soft>` | :doc:`coul/diel (o) <pair_coul_diel>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`coul/long/soft (o) <pair_lj_soft>` | :doc:`eam/cd (o) <pair_eam>` | :doc:`edip (o) <pair_edip>` | :doc:`eff/cut <pair_eff>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`gauss/cut <pair_gauss>` | :doc:`lennard/mdf <pair_mdf>` | :doc:`list <pair_list>` | :doc:`lj/charmm/coul/long/soft (o) <pair_charmm>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`lj/cut/coul/cut/soft (o) <pair_lj_soft>` | :doc:`lj/cut/coul/long/soft (o) <pair_lj_soft>` | :doc:`lj/cut/dipole/sf (go) <pair_dipole>` | :doc:`lj/cut/soft (o) <pair_lj_soft>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`lj/cut/tip4p/long/soft (o) <pair_lj_soft>` | :doc:`lj/mdf <pair_mdf>` | :doc:`lj/sdk (gko) <pair_sdk>` | :doc:`lj/sdk/coul/long (go) <pair_sdk>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`lj/sdk/coul/msm (o) <pair_sdk>` | :doc:`lj/sf (o) <pair_lj_sf>` | :doc:`meam/spline <pair_meam_spline>` | :doc:`meam/sw/spline <pair_meam_sw_spline>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`mgpt <pair_mgpt>` | :doc:`quip <pair_quip>` | :doc:`reax/c <pair_reax_c>` | :doc:`smd/hertz <pair_smd_hertz>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`smd/tlsph <pair_smd_tlsph>` | :doc:`smd/triangulated/surface <pair_smd_triangulated_surface>` | :doc:`smd/ulsph <pair_smd_ulsph>` | :doc:`smtbq <pair_smtbq>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`sph/heatconduction <pair_sph_heatconduction>` | :doc:`sph/idealgas <pair_sph_idealgas>` | :doc:`sph/lj <pair_sph_lj>` | :doc:`sph/rhosum <pair_sph_rhosum>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`sph/taitwater <pair_sph_taitwater>` | :doc:`sph/taitwater/morris <pair_sph_taitwater_morris>` | :doc:`srp <pair_srp>` | :doc:`tersoff/table (o) <pair_tersoff>` |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
| :doc:`thole <pair_thole>` | :doc:`tip4p/long/soft (o) <pair_lj_soft>` | | |
|
||||
+-----------------------------------------------------+-----------------------------------------------------------------+--------------------------------------------+---------------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Bond_style potentials
|
||||
---------------------
|
||||
|
||||
See the :doc:`bond_style <bond_style>` command for an overview of bond
|
||||
potentials. Click on the style itself for a full description. Some
|
||||
of the styles have accelerated versions, which can be used if LAMMPS
|
||||
is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+-------------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
|
||||
| :doc:`none <bond_none>` | :doc:`hybrid <bond_hybrid>` | :doc:`class2 (o) <bond_class2>` | :doc:`fene (ko) <bond_fene>` |
|
||||
+-------------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
|
||||
| :doc:`fene/expand (o) <bond_fene_expand>` | :doc:`harmonic (ko) <bond_harmonic>` | :doc:`morse (o) <bond_morse>` | :doc:`nonlinear (o) <bond_nonlinear>` |
|
||||
+-------------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
|
||||
| :doc:`quartic (o) <bond_quartic>` | :doc:`table (o) <bond_table>` | | |
|
||||
+-------------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
|
||||
|
||||
These are additional bond styles in USER packages, which can be used
|
||||
if :ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+-------------------------------------------------+---------------------------------------------------------+
|
||||
| :doc:`harmonic/shift (o) <bond_harmonic_shift>` | :doc:`harmonic/shift/cut (o) <bond_harmonic_shift_cut>` |
|
||||
+-------------------------------------------------+---------------------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Angle_style potentials
|
||||
----------------------
|
||||
|
||||
See the :doc:`angle_style <angle_style>` command for an overview of
|
||||
angle potentials. Click on the style itself for a full description.
|
||||
Some of the styles have accelerated versions, which can be used if
|
||||
LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+---------------------------------------+----------------------------------------------+----------------------------------------------------+--------------------------------------------------+
|
||||
| :doc:`none <angle_none>` | :doc:`hybrid <angle_hybrid>` | :doc:`charmm (ko) <angle_charmm>` | :doc:`class2 (o) <angle_class2>` |
|
||||
+---------------------------------------+----------------------------------------------+----------------------------------------------------+--------------------------------------------------+
|
||||
| :doc:`cosine (o) <angle_cosine>` | :doc:`cosine/delta (o) <angle_cosine_delta>` | :doc:`cosine/periodic (o) <angle_cosine_periodic>` | :doc:`cosine/squared (o) <angle_cosine_squared>` |
|
||||
+---------------------------------------+----------------------------------------------+----------------------------------------------------+--------------------------------------------------+
|
||||
| :doc:`harmonic (ko) <angle_harmonic>` | :doc:`table (o) <angle_table>` | | |
|
||||
+---------------------------------------+----------------------------------------------+----------------------------------------------------+--------------------------------------------------+
|
||||
|
||||
These are additional angle styles in USER packages, which can be used
|
||||
if :ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+--------------------------------------------------+------------------------------------------------------+----------------------------------+------------------------------------+
|
||||
| :doc:`cosine/shift (o) <angle_cosine_shift>` | :doc:`cosine/shift/exp (o) <angle_cosine_shift_exp>` | :doc:`dipole (o) <angle_dipole>` | :doc:`fourier (o) <angle_fourier>` |
|
||||
+--------------------------------------------------+------------------------------------------------------+----------------------------------+------------------------------------+
|
||||
| :doc:`fourier/simple (o) <angle_fourier_simple>` | :doc:`quartic (o) <angle_quartic>` | :doc:`sdk <angle_sdk>` | |
|
||||
+--------------------------------------------------+------------------------------------------------------+----------------------------------+------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Dihedral_style potentials
|
||||
-------------------------
|
||||
|
||||
See the :doc:`dihedral_style <dihedral_style>` command for an overview
|
||||
of dihedral potentials. Click on the style itself for a full
|
||||
description. Some of the styles have accelerated versions, which can
|
||||
be used if LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+-----------------------------------------+-----------------------------------+-----------------------------------------------------+-------------------------------------+
|
||||
| :doc:`none <dihedral_none>` | :doc:`hybrid <dihedral_hybrid>` | :doc:`charmm (ko) <dihedral_charmm>` | :doc:`class2 (o) <dihedral_class2>` |
|
||||
+-----------------------------------------+-----------------------------------+-----------------------------------------------------+-------------------------------------+
|
||||
| :doc:`harmonic (o) <dihedral_harmonic>` | :doc:`helix (o) <dihedral_helix>` | :doc:`multi/harmonic (o) <dihedral_multi_harmonic>` | :doc:`opls (ko) <dihedral_opls>` |
|
||||
+-----------------------------------------+-----------------------------------+-----------------------------------------------------+-------------------------------------+
|
||||
|
||||
These are additional dihedral styles in USER packages, which can be
|
||||
used if :ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+---------------------------------------------------------+---------------------------------------+-------------------------------------------+-------------------------------------------+
|
||||
| :doc:`cosine/shift/exp (o) <dihedral_cosine_shift_exp>` | :doc:`fourier (o) <dihedral_fourier>` | :doc:`nharmonic (o) <dihedral_nharmonic>` | :doc:`quadratic (o) <dihedral_quadratic>` |
|
||||
+---------------------------------------------------------+---------------------------------------+-------------------------------------------+-------------------------------------------+
|
||||
| :doc:`table (o) <dihedral_table>` | | | |
|
||||
+---------------------------------------------------------+---------------------------------------+-------------------------------------------+-------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Improper_style potentials
|
||||
-------------------------
|
||||
|
||||
See the :doc:`improper_style <improper_style>` command for an overview
|
||||
of improper potentials. Click on the style itself for a full
|
||||
description. Some of the styles have accelerated versions, which can
|
||||
be used if LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+------------------------------------------+-----------------------------------------+-------------------------------------+---------------------------------+
|
||||
| :doc:`none <improper_none>` | :doc:`hybrid <improper_hybrid>` | :doc:`class2 (o) <improper_class2>` | :doc:`cvff (o) <improper_cvff>` |
|
||||
+------------------------------------------+-----------------------------------------+-------------------------------------+---------------------------------+
|
||||
| :doc:`harmonic (ko) <improper_harmonic>` | :doc:`umbrella (o) <improper_umbrella>` | | |
|
||||
+------------------------------------------+-----------------------------------------+-------------------------------------+---------------------------------+
|
||||
|
||||
These are additional improper styles in USER packages, which can be
|
||||
used if :ref:`LAMMPS is built with the appropriate package <start_3>`.
|
||||
|
||||
+-----------------------------------+-------------------------------------+---------------------------------------+---------------------------------+
|
||||
| :doc:`cossq (o) <improper_cossq>` | :doc:`distance <improper_distance>` | :doc:`fourier (o) <improper_fourier>` | :doc:`ring (o) <improper_ring>` |
|
||||
+-----------------------------------+-------------------------------------+---------------------------------------+---------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Kspace solvers
|
||||
--------------
|
||||
|
||||
See the :doc:`kspace_style <kspace_style>` command for an overview of
|
||||
Kspace solvers. Click on the style itself for a full description.
|
||||
Some of the styles have accelerated versions, which can be used if
|
||||
LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
|
||||
letters in parenthesis: c = USER-CUDA, g = GPU, i = USER-INTEL, k =
|
||||
KOKKOS, o = USER-OMP, t = OPT.
|
||||
|
||||
+--------------------------------------+-----------------------------------+---------------------------------+---------------------------------------+
|
||||
| :doc:`ewald (o) <kspace_style>` | :doc:`ewald/disp <kspace_style>` | :doc:`msm (o) <kspace_style>` | :doc:`msm/cg (o) <kspace_style>` |
|
||||
+--------------------------------------+-----------------------------------+---------------------------------+---------------------------------------+
|
||||
| :doc:`pppm (cgo) <kspace_style>` | :doc:`pppm/cg (o) <kspace_style>` | :doc:`pppm/disp <kspace_style>` | :doc:`pppm/disp/tip4p <kspace_style>` |
|
||||
+--------------------------------------+-----------------------------------+---------------------------------+---------------------------------------+
|
||||
| :doc:`pppm/tip4p (o) <kspace_style>` | | | |
|
||||
+--------------------------------------+-----------------------------------+---------------------------------+---------------------------------------+
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,170 @@
|
|||
Example problems
|
||||
================
|
||||
|
||||
The LAMMPS distribution includes an examples sub-directory with
|
||||
several sample problems. Each problem is in a sub-directory of its
|
||||
own. Most are 2d models so that they run quickly, requiring at most a
|
||||
couple of minutes to run on a desktop machine. Each problem has an
|
||||
input script (in.*) and produces a log file (log.*) and dump file
|
||||
(dump.*) when it runs. Some use a data file (data.*) of initial
|
||||
coordinates as additional input. A few sample log file outputs on
|
||||
different machines and different numbers of processors are included in
|
||||
the directories to compare your answers to. E.g. a log file like
|
||||
log.crack.foo.P means it ran on P processors of machine "foo".
|
||||
|
||||
For examples that use input data files, many of them were produced by
|
||||
`Pizza.py <http://pizza.sandia.gov>`_ or setup tools described in the
|
||||
:doc:`Additional Tools <Section_tools>` section of the LAMMPS
|
||||
documentation and provided with the LAMMPS distribution.
|
||||
|
||||
If you uncomment the :doc:`dump <dump>` command in the input script, a
|
||||
text dump file will be produced, which can be animated by various
|
||||
`visualization programs <http://lammps.sandia.gov/viz.html>`_. It can
|
||||
also be animated using the xmovie tool described in the :doc:`Additional Tools <Section_tools>` section of the LAMMPS documentation.
|
||||
|
||||
If you uncomment the :doc:`dump image <dump>` command in the input
|
||||
script, and assuming you have built LAMMPS with a JPG library, JPG
|
||||
snapshot images will be produced when the simulation runs. They can
|
||||
be quickly post-processed into a movie using commands described on the
|
||||
:doc:`dump image <dump_image>` doc page.
|
||||
|
||||
Animations of many of these examples can be viewed on the Movies
|
||||
section of the `LAMMPS WWW Site <lws_>`_.
|
||||
|
||||
These are the sample problems in the examples sub-directories:
|
||||
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| balance | dynamic load balancing, 2d system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| body | body particles, 2d system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| colloid | big colloid particles in a small particle solvent, 2d system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| comb | models using the COMB potential |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| crack | crack propagation in a 2d solid |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| cuda | use of the USER-CUDA package for GPU acceleration |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| dipole | point dipolar particles, 2d system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| dreiding | methanol via Dreiding FF |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| eim | NaCl using the EIM potential |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| ellipse | ellipsoidal particles in spherical solvent, 2d system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| flow | Couette and Poiseuille flow in a 2d channel |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| friction | frictional contact of spherical asperities between 2d surfaces |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| gpu | use of the GPU package for GPU acceleration |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| hugoniostat | Hugoniostat shock dynamics |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| indent | spherical indenter into a 2d solid |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| intel | use of the USER-INTEL package for CPU or Intel(R) Xeon Phi(TM) coprocessor |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| kim | use of potentials in Knowledge Base for Interatomic Models (KIM) |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| line | line segment particles in 2d rigid bodies |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| meam | MEAM test for SiC and shear (same as shear examples) |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| melt | rapid melt of 3d LJ system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| micelle | self-assembly of small lipid-like molecules into 2d bilayers |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| min | energy minimization of 2d LJ melt |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| msst | MSST shock dynamics |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| nb3b | use of nonbonded 3-body harmonic pair style |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| neb | nudged elastic band (NEB) calculation for barrier finding |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| nemd | non-equilibrium MD of 2d sheared system |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| obstacle | flow around two voids in a 2d channel |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| peptide | dynamics of a small solvated peptide chain (5-mer) |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| peri | Peridynamic model of cylinder impacted by indenter |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| pour | pouring of granular particles into a 3d box, then chute flow |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| prd | parallel replica dynamics of vacancy diffusion in bulk Si |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| qeq | use of the QEQ pacakge for charge equilibration |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| reax | RDX and TATB models using the ReaxFF |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| rigid | rigid bodies modeled as independent or coupled |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| shear | sideways shear applied to 2d solid, with and without a void |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| snap | NVE dynamics for BCC tantalum crystal using SNAP potential |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| srd | stochastic rotation dynamics (SRD) particles as solvent |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| tad | temperature-accelerated dynamics of vacancy diffusion in bulk Si |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
| tri | triangular particles in rigid bodies |
|
||||
+-------------+----------------------------------------------------------------------------+
|
||||
|
||||
vashishta: models using the Vashishta potential
|
||||
|
||||
Here is how you might run and visualize one of the sample problems:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd indent
|
||||
cp ../../src/lmp_linux . # copy LAMMPS executable to this dir
|
||||
lmp_linux -in in.indent # run the problem
|
||||
|
||||
Running the simulation produces the files *dump.indent* and
|
||||
*log.lammps*. You can visualize the dump file as follows:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
../../tools/xmovie/xmovie -scale dump.indent
|
||||
|
||||
If you uncomment the :doc:`dump image <dump_image>` line(s) in the input
|
||||
script a series of JPG images will be produced by the run. These can
|
||||
be viewed individually or turned into a movie or animated by tools
|
||||
like ImageMagick or QuickTime or various Windows-based tools. See the
|
||||
:doc:`dump image <dump_image>` doc page for more details. E.g. this
|
||||
Imagemagick command would create a GIF file suitable for viewing in a
|
||||
browser.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
% convert -loop 1 *.jpg foo.gif
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
There is also a COUPLE directory with examples of how to use LAMMPS as
|
||||
a library, either by itself or in tandem with another code or library.
|
||||
See the COUPLE/README file to get started.
|
||||
|
||||
There is also an ELASTIC directory with an example script for
|
||||
computing elastic constants at zero temperature, using an Si example. See
|
||||
the ELASTIC/in.elastic file for more info.
|
||||
|
||||
There is also an ELASTIC_T directory with an example script for
|
||||
computing elastic constants at finite temperature, using an Si example. See
|
||||
the ELASTIC_T/in.elastic file for more info.
|
||||
|
||||
There is also a USER directory which contains subdirectories of
|
||||
user-provided examples for user packages. See the README files in
|
||||
those directories for more info. See the
|
||||
:doc:`Section_start.html <Section_start>` file for more info about user
|
||||
packages.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,127 @@
|
|||
Future and history
|
||||
==================
|
||||
|
||||
This section lists features we plan to add to LAMMPS, features of
|
||||
previous versions of LAMMPS, and features of other parallel molecular
|
||||
dynamics codes our group has distributed.
|
||||
|
||||
| 13.1 :ref:`Coming attractions <hist_1>`
|
||||
| 13.2 :ref:`Past versions <hist_2>`
|
||||
|
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.. _hist_1:
|
||||
|
||||
Coming attractions
|
||||
-------------------------------
|
||||
|
||||
The `Wish list link <http://lammps.sandia.gov/future.html>`_ on the
|
||||
LAMMPS WWW page gives a list of features we are hoping to add to
|
||||
LAMMPS in the future, including contact names of individuals you can
|
||||
email if you are interested in contributing to the developement or
|
||||
would be a future user of that feature.
|
||||
|
||||
You can also send `email to the developers <http://lammps.sandia.gov/authors.html>`_ if you want to add
|
||||
your wish to the list.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _hist_2:
|
||||
|
||||
Past versions
|
||||
--------------------------
|
||||
|
||||
LAMMPS development began in the mid 1990s under a cooperative research
|
||||
& development agreement (CRADA) between two DOE labs (Sandia and LLNL)
|
||||
and 3 companies (Cray, Bristol Myers Squibb, and Dupont). The goal was
|
||||
to develop a large-scale parallel classical MD code; the coding effort
|
||||
was led by Steve Plimpton at Sandia.
|
||||
|
||||
After the CRADA ended, a final F77 version, LAMMPS 99, was
|
||||
released. As development of LAMMPS continued at Sandia, its memory
|
||||
management was converted to F90; a final F90 version was released as
|
||||
LAMMPS 2001.
|
||||
|
||||
The current LAMMPS is a rewrite in C++ and was first publicly released
|
||||
as an open source code in 2004. It includes many new features beyond
|
||||
those in LAMMPS 99 or 2001. It also includes features from older
|
||||
parallel MD codes written at Sandia, namely ParaDyn, Warp, and
|
||||
GranFlow (see below).
|
||||
|
||||
In late 2006 we began merging new capabilities into LAMMPS that were
|
||||
developed by Aidan Thompson at Sandia for his MD code GRASP, which has
|
||||
a parallel framework similar to LAMMPS. Most notably, these have
|
||||
included many-body potentials - Stillinger-Weber, Tersoff, ReaxFF -
|
||||
and the associated charge-equilibration routines needed for ReaxFF.
|
||||
|
||||
The `History link <http://lammps.sandia.gov/history.html>`_ on the
|
||||
LAMMPS WWW page gives a timeline of features added to the
|
||||
C++ open-source version of LAMMPS over the last several years.
|
||||
|
||||
These older codes are available for download from the `LAMMPS WWW site <lws_>`_, except for Warp & GranFlow which were primarily used
|
||||
internally. A brief listing of their features is given here.
|
||||
|
||||
LAMMPS 2001
|
||||
|
||||
* F90 + MPI
|
||||
* dynamic memory
|
||||
* spatial-decomposition parallelism
|
||||
* NVE, NVT, NPT, NPH, rRESPA integrators
|
||||
* LJ and Coulombic pairwise force fields
|
||||
* all-atom, united-atom, bead-spring polymer force fields
|
||||
* CHARMM-compatible force fields
|
||||
* class 2 force fields
|
||||
* 3d/2d Ewald & PPPM
|
||||
* various force and temperature constraints
|
||||
* SHAKE
|
||||
* Hessian-free truncated-Newton minimizer
|
||||
* user-defined diagnostics
|
||||
|
||||
LAMMPS 99
|
||||
|
||||
* F77 + MPI
|
||||
* static memory allocation
|
||||
* spatial-decomposition parallelism
|
||||
* most of the LAMMPS 2001 features with a few exceptions
|
||||
* no 2d Ewald & PPPM
|
||||
* molecular force fields are missing a few CHARMM terms
|
||||
* no SHAKE
|
||||
|
||||
Warp
|
||||
|
||||
* F90 + MPI
|
||||
* spatial-decomposition parallelism
|
||||
* embedded atom method (EAM) metal potentials + LJ
|
||||
* lattice and grain-boundary atom creation
|
||||
* NVE, NVT integrators
|
||||
* boundary conditions for applying shear stresses
|
||||
* temperature controls for actively sheared systems
|
||||
* per-atom energy and centro-symmetry computation and output
|
||||
|
||||
ParaDyn
|
||||
|
||||
* F77 + MPI
|
||||
* atom- and force-decomposition parallelism
|
||||
* embedded atom method (EAM) metal potentials
|
||||
* lattice atom creation
|
||||
* NVE, NVT, NPT integrators
|
||||
* all serial DYNAMO features for controls and constraints
|
||||
|
||||
GranFlow
|
||||
|
||||
* F90 + MPI
|
||||
* spatial-decomposition parallelism
|
||||
* frictional granular potentials
|
||||
* NVE integrator
|
||||
* boundary conditions for granular flow and packing and walls
|
||||
* particle insertion
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,593 @@
|
|||
Introduction
|
||||
============
|
||||
|
||||
This section provides an overview of what LAMMPS can and can't do,
|
||||
describes what it means for LAMMPS to be an open-source code, and
|
||||
acknowledges the funding and people who have contributed to LAMMPS
|
||||
over the years.
|
||||
|
||||
| 1.1 :ref:`What is LAMMPS <intro_1>`
|
||||
| 1.2 :ref:`LAMMPS features <intro_2>`
|
||||
| 1.3 :ref:`LAMMPS non-features <intro_3>`
|
||||
| 1.4 :ref:`Open source distribution <intro_4>`
|
||||
| 1.5 :ref:`Acknowledgments and citations <intro_5>`
|
||||
|
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.. _intro_1:
|
||||
|
||||
What is LAMMPS
|
||||
--------------
|
||||
|
||||
LAMMPS is a classical molecular dynamics code that models an ensemble
|
||||
of particles in a liquid, solid, or gaseous state. It can model
|
||||
atomic, polymeric, biological, metallic, granular, and coarse-grained
|
||||
systems using a variety of force fields and boundary conditions.
|
||||
|
||||
For examples of LAMMPS simulations, see the Publications page of the
|
||||
`LAMMPS WWW Site <lws_>`_.
|
||||
|
||||
LAMMPS runs efficiently on single-processor desktop or laptop
|
||||
machines, but is designed for parallel computers. It will run on any
|
||||
parallel machine that compiles C++ and supports the `MPI <mpi_>`_
|
||||
message-passing library. This includes distributed- or shared-memory
|
||||
parallel machines and Beowulf-style clusters.
|
||||
|
||||
.. _mpi: http://www-unix.mcs.anl.gov/mpi
|
||||
|
||||
|
||||
|
||||
LAMMPS can model systems with only a few particles up to millions or
|
||||
billions. See :doc:`Section_perf <Section_perf>` for information on
|
||||
LAMMPS performance and scalability, or the Benchmarks section of the
|
||||
`LAMMPS WWW Site <lws_>`_.
|
||||
|
||||
LAMMPS is a freely-available open-source code, distributed under the
|
||||
terms of the `GNU Public License <gnu_>`_, which means you can use or
|
||||
modify the code however you wish. See :ref:`this section <intro_4>` for a
|
||||
brief discussion of the open-source philosophy.
|
||||
|
||||
.. _gnu: http://www.gnu.org/copyleft/gpl.html
|
||||
|
||||
|
||||
|
||||
LAMMPS is designed to be easy to modify or extend with new
|
||||
capabilities, such as new force fields, atom types, boundary
|
||||
conditions, or diagnostics. See :doc:`Section_modify <Section_modify>`
|
||||
for more details.
|
||||
|
||||
The current version of LAMMPS is written in C++. Earlier versions
|
||||
were written in F77 and F90. See
|
||||
:doc:`Section_history <Section_history>` for more information on
|
||||
different versions. All versions can be downloaded from the `LAMMPS WWW Site <lws_>`_.
|
||||
|
||||
LAMMPS was originally developed under a US Department of Energy CRADA
|
||||
(Cooperative Research and Development Agreement) between two DOE labs
|
||||
and 3 companies. It is distributed by `Sandia National Labs <snl_>`_.
|
||||
See :ref:`this section <intro_5>` for more information on LAMMPS funding and
|
||||
individuals who have contributed to LAMMPS.
|
||||
|
||||
.. _snl: http://www.sandia.gov
|
||||
|
||||
|
||||
|
||||
In the most general sense, LAMMPS integrates Newton's equations of
|
||||
motion for collections of atoms, molecules, or macroscopic particles
|
||||
that interact via short- or long-range forces with a variety of
|
||||
initial and/or boundary conditions. For computational efficiency
|
||||
LAMMPS uses neighbor lists to keep track of nearby particles. The
|
||||
lists are optimized for systems with particles that are repulsive at
|
||||
short distances, so that the local density of particles never becomes
|
||||
too large. On parallel machines, LAMMPS uses spatial-decomposition
|
||||
techniques to partition the simulation domain into small 3d
|
||||
sub-domains, one of which is assigned to each processor. Processors
|
||||
communicate and store "ghost" atom information for atoms that border
|
||||
their sub-domain. LAMMPS is most efficient (in a parallel sense) for
|
||||
systems whose particles fill a 3d rectangular box with roughly uniform
|
||||
density. Papers with technical details of the algorithms used in
|
||||
LAMMPS are listed in :ref:`this section <intro_5>`.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _intro_2:
|
||||
|
||||
LAMMPS features
|
||||
---------------
|
||||
|
||||
This section highlights LAMMPS features, with pointers to specific
|
||||
commands which give more details. If LAMMPS doesn't have your
|
||||
favorite interatomic potential, boundary condition, or atom type, see
|
||||
:doc:`Section_modify <Section_modify>`, which describes how you can add
|
||||
it to LAMMPS.
|
||||
|
||||
General features
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
* runs on a single processor or in parallel
|
||||
* distributed-memory message-passing parallelism (MPI)
|
||||
* spatial-decomposition of simulation domain for parallelism
|
||||
* open-source distribution
|
||||
* highly portable C++
|
||||
* optional libraries used: MPI and single-processor FFT
|
||||
* GPU (CUDA and OpenCL), Intel(R) Xeon Phi(TM) coprocessors, and OpenMP support for many code features
|
||||
* easy to extend with new features and functionality
|
||||
* runs from an input script
|
||||
* syntax for defining and using variables and formulas
|
||||
* syntax for looping over runs and breaking out of loops
|
||||
* run one or multiple simulations simultaneously (in parallel) from one script
|
||||
* build as library, invoke LAMMPS thru library interface or provided Python wrapper
|
||||
* couple with other codes: LAMMPS calls other code, other code calls LAMMPS, umbrella code calls both
|
||||
|
||||
Particle and model types
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
(:doc:`atom style <atom_style>` command)
|
||||
|
||||
* atoms
|
||||
* coarse-grained particles (e.g. bead-spring polymers)
|
||||
* united-atom polymers or organic molecules
|
||||
* all-atom polymers, organic molecules, proteins, DNA
|
||||
* metals
|
||||
* granular materials
|
||||
* coarse-grained mesoscale models
|
||||
* finite-size spherical and ellipsoidal particles
|
||||
* finite-size line segment (2d) and triangle (3d) particles
|
||||
* point dipole particles
|
||||
* rigid collections of particles
|
||||
* hybrid combinations of these
|
||||
|
||||
Force fields
|
||||
^^^^^^^^^^^^
|
||||
|
||||
(:doc:`pair style <pair_style>`, :doc:`bond style <bond_style>`,
|
||||
:doc:`angle style <angle_style>`, :doc:`dihedral style <dihedral_style>`,
|
||||
:doc:`improper style <improper_style>`, :doc:`kspace style <kspace_style>`
|
||||
commands)
|
||||
|
||||
* pairwise potentials: Lennard-Jones, Buckingham, Morse, Born-Mayer-Huggins, Yukawa, soft, class 2 (COMPASS), hydrogen bond, tabulated
|
||||
* charged pairwise potentials: Coulombic, point-dipole
|
||||
* manybody potentials: EAM, Finnis/Sinclair EAM, modified EAM (MEAM), embedded ion method (EIM), EDIP, ADP, Stillinger-Weber, Tersoff, REBO, AIREBO, ReaxFF, COMB, SNAP, Streitz-Mintmire, 3-body polymorphic
|
||||
* long-range interactions for charge, point-dipoles, and LJ dispersion: Ewald, Wolf, PPPM (similar to particle-mesh Ewald)
|
||||
* polarization models: :doc:`QEq <fix_qeq>`, :ref:`core/shell model <howto_26>`, :ref:`Drude dipole model <howto_27>`
|
||||
* charge equilibration (QEq via dynamic, point, shielded, Slater methods)
|
||||
* coarse-grained potentials: DPD, GayBerne, REsquared, colloidal, DLVO
|
||||
* mesoscopic potentials: granular, Peridynamics, SPH
|
||||
* electron force field (eFF, AWPMD)
|
||||
* bond potentials: harmonic, FENE, Morse, nonlinear, class 2, quartic (breakable)
|
||||
* angle potentials: harmonic, CHARMM, cosine, cosine/squared, cosine/periodic, class 2 (COMPASS)
|
||||
* dihedral potentials: harmonic, CHARMM, multi-harmonic, helix, class 2 (COMPASS), OPLS
|
||||
* improper potentials: harmonic, cvff, umbrella, class 2 (COMPASS)
|
||||
* polymer potentials: all-atom, united-atom, bead-spring, breakable
|
||||
* water potentials: TIP3P, TIP4P, SPC
|
||||
* implicit solvent potentials: hydrodynamic lubrication, Debye
|
||||
* force-field compatibility with common CHARMM, AMBER, DREIDING, OPLS, GROMACS, COMPASS options
|
||||
* access to `KIM archive <http://openkim.org>`_ of potentials via :doc:`pair kim <pair_kim>`
|
||||
* hybrid potentials: multiple pair, bond, angle, dihedral, improper potentials can be used in one simulation
|
||||
* overlaid potentials: superposition of multiple pair potentials
|
||||
|
||||
Atom creation
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
(:doc:`read_data <read_data>`, :doc:`lattice <lattice>`,
|
||||
:doc:`create_atoms <create_atoms>`, :doc:`delete_atoms <delete_atoms>`,
|
||||
:doc:`displace_atoms <displace_atoms>`, :doc:`replicate <replicate>` commands)
|
||||
|
||||
* read in atom coords from files
|
||||
* create atoms on one or more lattices (e.g. grain boundaries)
|
||||
* delete geometric or logical groups of atoms (e.g. voids)
|
||||
* replicate existing atoms multiple times
|
||||
* displace atoms
|
||||
|
||||
Ensembles, constraints, and boundary conditions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
(:doc:`fix <fix>` command)
|
||||
|
||||
* 2d or 3d systems
|
||||
* orthogonal or non-orthogonal (triclinic symmetry) simulation domains
|
||||
* constant NVE, NVT, NPT, NPH, Parinello/Rahman integrators
|
||||
* thermostatting options for groups and geometric regions of atoms
|
||||
* pressure control via Nose/Hoover or Berendsen barostatting in 1 to 3 dimensions
|
||||
* simulation box deformation (tensile and shear)
|
||||
* harmonic (umbrella) constraint forces
|
||||
* rigid body constraints
|
||||
* SHAKE bond and angle constraints
|
||||
* Monte Carlo bond breaking, formation, swapping
|
||||
* atom/molecule insertion and deletion
|
||||
* walls of various kinds
|
||||
* non-equilibrium molecular dynamics (NEMD)
|
||||
* variety of additional boundary conditions and constraints
|
||||
|
||||
Integrators
|
||||
^^^^^^^^^^^
|
||||
|
||||
(:doc:`run <run>`, :doc:`run_style <run_style>`, :doc:`minimize <minimize>` commands)
|
||||
|
||||
* velocity-Verlet integrator
|
||||
* Brownian dynamics
|
||||
* rigid body integration
|
||||
* energy minimization via conjugate gradient or steepest descent relaxation
|
||||
* rRESPA hierarchical timestepping
|
||||
* rerun command for post-processing of dump files
|
||||
|
||||
Diagnostics
|
||||
^^^^^^^^^^^
|
||||
|
||||
* see the various flavors of the :doc:`fix <fix>` and :doc:`compute <compute>` commands
|
||||
|
||||
Output
|
||||
^^^^^^
|
||||
|
||||
(:doc:`dump <dump>`, :doc:`restart <restart>` commands)
|
||||
|
||||
* log file of thermodynamic info
|
||||
* text dump files of atom coords, velocities, other per-atom quantities
|
||||
* binary restart files
|
||||
* parallel I/O of dump and restart files
|
||||
* per-atom quantities (energy, stress, centro-symmetry parameter, CNA, etc)
|
||||
* user-defined system-wide (log file) or per-atom (dump file) calculations
|
||||
* spatial and time averaging of per-atom quantities
|
||||
* time averaging of system-wide quantities
|
||||
* atom snapshots in native, XYZ, XTC, DCD, CFG formats
|
||||
|
||||
Multi-replica models
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:doc:`nudged elastic band <neb>`
|
||||
:doc:`parallel replica dynamics <prd>`
|
||||
:doc:`temperature accelerated dynamics <tad>`
|
||||
:doc:`parallel tempering <temper>`
|
||||
|
||||
Pre- and post-processing
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
* Various pre- and post-processing serial tools are packaged
|
||||
with LAMMPS; see these :doc:`doc pages <Section_tools>`.
|
||||
* Our group has also written and released a separate toolkit called
|
||||
`Pizza.py <pizza_>`_ which provides tools for doing setup, analysis,
|
||||
plotting, and visualization for LAMMPS simulations. Pizza.py is
|
||||
written in `Python <python_>`_ and is available for download from `the Pizza.py WWW site <pizza_>`_.
|
||||
.. _pizza: http://www.sandia.gov/~sjplimp/pizza.html
|
||||
|
||||
|
||||
|
||||
.. _python: http://www.python.org
|
||||
|
||||
|
||||
|
||||
Specialized features
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
These are LAMMPS capabilities which you may not think of as typical
|
||||
molecular dynamics options:
|
||||
|
||||
* :doc:`static <balance>` and :doc:`dynamic load-balancing <fix_balance>`
|
||||
* :doc:`generalized aspherical particles <body>`
|
||||
* :doc:`stochastic rotation dynamics (SRD) <fix_srd>`
|
||||
* :doc:`real-time visualization and interactive MD <fix_imd>`
|
||||
* calculate :doc:`virtual diffraction patterns <compute_xrd>`
|
||||
* :doc:`atom-to-continuum coupling <fix_atc>` with finite elements
|
||||
* coupled rigid body integration via the :doc:`POEMS <fix_poems>` library
|
||||
* :doc:`QM/MM coupling <fix_qmmm>`
|
||||
* :doc:`path-integral molecular dynamics (PIMD) <fix_ipi>` and :doc:`this as well <fix_pimd>`
|
||||
* Monte Carlo via :doc:`GCMC <fix_gcmc>` and :doc:`tfMC <fix_tfmc>` and :doc:`atom swapping <fix_swap>`
|
||||
* :doc:`Direct Simulation Monte Carlo <pair_dsmc>` for low-density fluids
|
||||
* :doc:`Peridynamics mesoscale modeling <pair_peri>`
|
||||
* :doc:`Lattice Boltzmann fluid <fix_lb_fluid>`
|
||||
* :doc:`targeted <fix_tmd>` and :doc:`steered <fix_smd>` molecular dynamics
|
||||
* :doc:`two-temperature electron model <fix_ttm>`
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _intro_3:
|
||||
|
||||
LAMMPS non-features
|
||||
-------------------
|
||||
|
||||
LAMMPS is designed to efficiently compute Newton's equations of motion
|
||||
for a system of interacting particles. Many of the tools needed to
|
||||
pre- and post-process the data for such simulations are not included
|
||||
in the LAMMPS kernel for several reasons:
|
||||
|
||||
* the desire to keep LAMMPS simple
|
||||
* they are not parallel operations
|
||||
* other codes already do them
|
||||
* limited development resources
|
||||
|
||||
Specifically, LAMMPS itself does not:
|
||||
|
||||
* run thru a GUI
|
||||
* build molecular systems
|
||||
* assign force-field coefficients automagically
|
||||
* perform sophisticated analyses of your MD simulation
|
||||
* visualize your MD simulation
|
||||
* plot your output data
|
||||
|
||||
A few tools for pre- and post-processing tasks are provided as part of
|
||||
the LAMMPS package; they are described in :doc:`this section <Section_tools>`. However, many people use other codes or
|
||||
write their own tools for these tasks.
|
||||
|
||||
As noted above, our group has also written and released a separate
|
||||
toolkit called `Pizza.py <pizza_>`_ which addresses some of the listed
|
||||
bullets. It provides tools for doing setup, analysis, plotting, and
|
||||
visualization for LAMMPS simulations. Pizza.py is written in
|
||||
`Python <python_>`_ and is available for download from `the Pizza.py WWW site <pizza_>`_.
|
||||
|
||||
LAMMPS requires as input a list of initial atom coordinates and types,
|
||||
molecular topology information, and force-field coefficients assigned
|
||||
to all atoms and bonds. LAMMPS will not build molecular systems and
|
||||
assign force-field parameters for you.
|
||||
|
||||
For atomic systems LAMMPS provides a :doc:`create_atoms <create_atoms>`
|
||||
command which places atoms on solid-state lattices (fcc, bcc,
|
||||
user-defined, etc). Assigning small numbers of force field
|
||||
coefficients can be done via the :doc:`pair coeff <pair_coeff>`, :doc:`bond coeff <bond_coeff>`, :doc:`angle coeff <angle_coeff>`, etc commands.
|
||||
For molecular systems or more complicated simulation geometries, users
|
||||
typically use another code as a builder and convert its output to
|
||||
LAMMPS input format, or write their own code to generate atom
|
||||
coordinate and molecular topology for LAMMPS to read in.
|
||||
|
||||
For complicated molecular systems (e.g. a protein), a multitude of
|
||||
topology information and hundreds of force-field coefficients must
|
||||
typically be specified. We suggest you use a program like
|
||||
`CHARMM <charmm_>`_ or `AMBER <amber_>`_ or other molecular builders to setup
|
||||
such problems and dump its information to a file. You can then
|
||||
reformat the file as LAMMPS input. Some of the tools in :doc:`this section <Section_tools>` can assist in this process.
|
||||
|
||||
Similarly, LAMMPS creates output files in a simple format. Most users
|
||||
post-process these files with their own analysis tools or re-format
|
||||
them for input into other programs, including visualization packages.
|
||||
If you are convinced you need to compute something on-the-fly as
|
||||
LAMMPS runs, see :doc:`Section_modify <Section_modify>` for a discussion
|
||||
of how you can use the :doc:`dump <dump>` and :doc:`compute <compute>` and
|
||||
:doc:`fix <fix>` commands to print out data of your choosing. Keep in
|
||||
mind that complicated computations can slow down the molecular
|
||||
dynamics timestepping, particularly if the computations are not
|
||||
parallel, so it is often better to leave such analysis to
|
||||
post-processing codes.
|
||||
|
||||
A very simple (yet fast) visualizer is provided with the LAMMPS
|
||||
package - see the :ref:`xmovie <xmovie>` tool in :doc:`this section <Section_tools>`. It creates xyz projection views of
|
||||
atomic coordinates and animates them. We find it very useful for
|
||||
debugging purposes. For high-quality visualization we recommend the
|
||||
following packages:
|
||||
|
||||
* `VMD <http://www.ks.uiuc.edu/Research/vmd>`_
|
||||
* `AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_
|
||||
* `PyMol <http://pymol.sourceforge.net>`_
|
||||
* `Raster3d <http://www.bmsc.washington.edu/raster3d/raster3d.html>`_
|
||||
* `RasMol <http://www.openrasmol.org>`_
|
||||
|
||||
Other features that LAMMPS does not yet (and may never) support are
|
||||
discussed in :doc:`Section_history <Section_history>`.
|
||||
|
||||
Finally, these are freely-available molecular dynamics codes, most of
|
||||
them parallel, which may be well-suited to the problems you want to
|
||||
model. They can also be used in conjunction with LAMMPS to perform
|
||||
complementary modeling tasks.
|
||||
|
||||
* `CHARMM <charmm_>`_
|
||||
* `AMBER <amber_>`_
|
||||
* `NAMD <namd_>`_
|
||||
* `NWCHEM <nwchem_>`_
|
||||
* `DL_POLY <dlpoly_>`_
|
||||
* `Tinker <tinker_>`_
|
||||
|
||||
.. _charmm: http://www.scripps.edu/brooks
|
||||
|
||||
|
||||
|
||||
.. _amber: http://amber.scripps.edu
|
||||
|
||||
|
||||
|
||||
.. _namd: http://www.ks.uiuc.edu/Research/namd/
|
||||
|
||||
|
||||
|
||||
.. _nwchem: http://www.emsl.pnl.gov/docs/nwchem/nwchem.html
|
||||
|
||||
|
||||
|
||||
.. _dlpoly: http://www.cse.clrc.ac.uk/msi/software/DL_POLY
|
||||
|
||||
|
||||
|
||||
.. _tinker: http://dasher.wustl.edu/tinker
|
||||
|
||||
|
||||
|
||||
CHARMM, AMBER, NAMD, NWCHEM, and Tinker are designed primarily for
|
||||
modeling biological molecules. CHARMM and AMBER use
|
||||
atom-decomposition (replicated-data) strategies for parallelism; NAMD
|
||||
and NWCHEM use spatial-decomposition approaches, similar to LAMMPS.
|
||||
Tinker is a serial code. DL_POLY includes potentials for a variety of
|
||||
biological and non-biological materials; both a replicated-data and
|
||||
spatial-decomposition version exist.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _intro_4:
|
||||
|
||||
Open source distribution
|
||||
------------------------
|
||||
|
||||
LAMMPS comes with no warranty of any kind. As each source file states
|
||||
in its header, it is a copyrighted code that is distributed free-of-
|
||||
charge, under the terms of the `GNU Public License <gnu_>`_ (GPL). This
|
||||
is often referred to as open-source distribution - see
|
||||
`www.gnu.org <gnuorg_>`_ or `www.opensource.org <opensource_>`_ for more
|
||||
details. The legal text of the GPL is in the LICENSE file that is
|
||||
included in the LAMMPS distribution.
|
||||
|
||||
.. _gnuorg: http://www.gnu.org
|
||||
|
||||
|
||||
|
||||
.. _opensource: http://www.opensource.org
|
||||
|
||||
|
||||
|
||||
Here is a summary of what the GPL means for LAMMPS users:
|
||||
|
||||
(1) Anyone is free to use, modify, or extend LAMMPS in any way they
|
||||
choose, including for commercial purposes.
|
||||
|
||||
(2) If you distribute a modified version of LAMMPS, it must remain
|
||||
open-source, meaning you distribute it under the terms of the GPL.
|
||||
You should clearly annotate such a code as a derivative version of
|
||||
LAMMPS.
|
||||
|
||||
(3) If you release any code that includes LAMMPS source code, then it
|
||||
must also be open-sourced, meaning you distribute it under the terms
|
||||
of the GPL.
|
||||
|
||||
(4) If you give LAMMPS files to someone else, the GPL LICENSE file and
|
||||
source file headers (including the copyright and GPL notices) should
|
||||
remain part of the code.
|
||||
|
||||
In the spirit of an open-source code, these are various ways you can
|
||||
contribute to making LAMMPS better. You can send email to the
|
||||
`developers <http://lammps.sandia.gov/authors.html>`_ on any of these
|
||||
items.
|
||||
|
||||
* Point prospective users to the `LAMMPS WWW Site <lws_>`_. Mention it in
|
||||
talks or link to it from your WWW site.
|
||||
* If you find an error or omission in this manual or on the `LAMMPS WWW Site <lws_>`_, or have a suggestion for something to clarify or include,
|
||||
send an email to the
|
||||
`developers <http://lammps.sandia.gov/authors.html>`_.
|
||||
* If you find a bug, :ref:`Section_errors 2 <err_2>`
|
||||
describes how to report it.
|
||||
* If you publish a paper using LAMMPS results, send the citation (and
|
||||
any cool pictures or movies if you like) to add to the Publications,
|
||||
Pictures, and Movies pages of the `LAMMPS WWW Site <lws_>`_, with links
|
||||
and attributions back to you.
|
||||
* Create a new Makefile.machine that can be added to the src/MAKE
|
||||
directory.
|
||||
* The tools sub-directory of the LAMMPS distribution has various
|
||||
stand-alone codes for pre- and post-processing of LAMMPS data. More
|
||||
details are given in :doc:`Section_tools <Section_tools>`. If you write
|
||||
a new tool that users will find useful, it can be added to the LAMMPS
|
||||
distribution.
|
||||
* LAMMPS is designed to be easy to extend with new code for features
|
||||
like potentials, boundary conditions, diagnostic computations, etc.
|
||||
:doc:`This section <Section_modify>` gives details. If you add a
|
||||
feature of general interest, it can be added to the LAMMPS
|
||||
distribution.
|
||||
* The Benchmark page of the `LAMMPS WWW Site <lws_>`_ lists LAMMPS
|
||||
performance on various platforms. The files needed to run the
|
||||
benchmarks are part of the LAMMPS distribution. If your machine is
|
||||
sufficiently different from those listed, your timing data can be
|
||||
added to the page.
|
||||
* You can send feedback for the User Comments page of the `LAMMPS WWW Site <lws_>`_. It might be added to the page. No promises.
|
||||
* Cash. Small denominations, unmarked bills preferred. Paper sack OK.
|
||||
Leave on desk. VISA also accepted. Chocolate chip cookies
|
||||
encouraged.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _intro_5:
|
||||
|
||||
Acknowledgments and citations
|
||||
-------------------------------------------
|
||||
|
||||
LAMMPS development has been funded by the `US Department of Energy <doe_>`_ (DOE), through its CRADA, LDRD, ASCI, and Genomes-to-Life
|
||||
programs and its `OASCR <oascr_>`_ and `OBER <ober_>`_ offices.
|
||||
|
||||
Specifically, work on the latest version was funded in part by the US
|
||||
Department of Energy's Genomics:GTL program
|
||||
(`www.doegenomestolife.org <gtl_>`_) under the `project <ourgtl_>`_, "Carbon
|
||||
Sequestration in Synechococcus Sp.: From Molecular Machines to
|
||||
Hierarchical Modeling".
|
||||
|
||||
.. _doe: http://www.doe.gov
|
||||
|
||||
|
||||
|
||||
.. _gtl: http://www.doegenomestolife.org
|
||||
|
||||
|
||||
|
||||
.. _ourgtl: http://www.genomes2life.org
|
||||
|
||||
|
||||
|
||||
.. _oascr: http://www.sc.doe.gov/ascr/home.html
|
||||
|
||||
|
||||
|
||||
.. _ober: http://www.er.doe.gov/production/ober/ober_top.html
|
||||
|
||||
|
||||
|
||||
The following paper describe the basic parallel algorithms used in
|
||||
LAMMPS. If you use LAMMPS results in your published work, please cite
|
||||
this paper and include a pointer to the `LAMMPS WWW Site <lws_>`_
|
||||
(http://lammps.sandia.gov):
|
||||
|
||||
S. J. Plimpton, **Fast Parallel Algorithms for Short-Range Molecular
|
||||
Dynamics**, J Comp Phys, 117, 1-19 (1995).
|
||||
|
||||
Other papers describing specific algorithms used in LAMMPS are listed
|
||||
under the `Citing LAMMPS link <http://lammps.sandia.gov/cite.html>`_ of
|
||||
the LAMMPS WWW page.
|
||||
|
||||
The `Publications link <http://lammps.sandia.gov/papers.html>`_ on the
|
||||
LAMMPS WWW page lists papers that have cited LAMMPS. If your paper is
|
||||
not listed there for some reason, feel free to send us the info. If
|
||||
the simulations in your paper produced cool pictures or animations,
|
||||
we'll be pleased to add them to the
|
||||
`Pictures <http://lammps.sandia.gov/pictures.html>`_ or
|
||||
`Movies <http://lammps.sandia.gov/movies.html>`_ pages of the LAMMPS WWW
|
||||
site.
|
||||
|
||||
The core group of LAMMPS developers is at Sandia National Labs:
|
||||
|
||||
* Steve Plimpton, sjplimp at sandia.gov
|
||||
* Aidan Thompson, athomps at sandia.gov
|
||||
* Paul Crozier, pscrozi at sandia.gov
|
||||
|
||||
The following folks are responsible for significant contributions to
|
||||
the code, or other aspects of the LAMMPS development effort. Many of
|
||||
the packages they have written are somewhat unique to LAMMPS and the
|
||||
code would not be as general-purpose as it is without their expertise
|
||||
and efforts.
|
||||
|
||||
* Axel Kohlmeyer (Temple U), akohlmey at gmail.com, SVN and Git repositories, indefatigable mail list responder, USER-CG-CMM and USER-OMP packages
|
||||
* Roy Pollock (LLNL), Ewald and PPPM solvers
|
||||
* Mike Brown (ORNL), brownw at ornl.gov, GPU package
|
||||
* Greg Wagner (Sandia), gjwagne at sandia.gov, MEAM package for MEAM potential
|
||||
* Mike Parks (Sandia), mlparks at sandia.gov, PERI package for Peridynamics
|
||||
* Rudra Mukherjee (JPL), Rudranarayan.M.Mukherjee at jpl.nasa.gov, POEMS package for articulated rigid body motion
|
||||
* Reese Jones (Sandia) and collaborators, rjones at sandia.gov, USER-ATC package for atom/continuum coupling
|
||||
* Ilya Valuev (JIHT), valuev at physik.hu-berlin.de, USER-AWPMD package for wave-packet MD
|
||||
* Christian Trott (U Tech Ilmenau), christian.trott at tu-ilmenau.de, USER-CUDA package
|
||||
* Andres Jaramillo-Botero (Caltech), ajaramil at wag.caltech.edu, USER-EFF package for electron force field
|
||||
* Christoph Kloss (JKU), Christoph.Kloss at jku.at, USER-LIGGGHTS package for granular models and granular/fluid coupling
|
||||
* Metin Aktulga (LBL), hmaktulga at lbl.gov, USER-REAXC package for C version of ReaxFF
|
||||
* Georg Gunzenmuller (EMI), georg.ganzenmueller at emi.fhg.de, USER-SPH package
|
||||
|
||||
As discussed in :doc:`Section_history <Section_history>`, LAMMPS
|
||||
originated as a cooperative project between DOE labs and industrial
|
||||
partners. Folks involved in the design and testing of the original
|
||||
version of LAMMPS were the following:
|
||||
|
||||
* John Carpenter (Mayo Clinic, formerly at Cray Research)
|
||||
* Terry Stouch (Lexicon Pharmaceuticals, formerly at Bristol Myers Squibb)
|
||||
* Steve Lustig (Dupont)
|
||||
* Jim Belak (LLNL)
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,984 @@
|
|||
Modifying & extending LAMMPS
|
||||
============================
|
||||
|
||||
This section describes how to customize LAMMPS by modifying
|
||||
and extending its source code.
|
||||
|
||||
| 10.1 :ref:`Atom styles <mod_1>`
|
||||
| 10.2 :ref:`Bond, angle, dihedral, improper potentials <mod_2>`
|
||||
| 10.3 :ref:`Compute styles <mod_3>`
|
||||
| 10.4 :ref:`Dump styles <mod_4>`
|
||||
| 10.5 :ref:`Dump custom output options <mod_5>`
|
||||
| 10.6 :ref:`Fix styles <mod_6>` which include integrators, temperature and pressure control, force constraints, boundary conditions, diagnostic output, etc
|
||||
| 10.7 :ref:`Input script commands <mod_7>`
|
||||
| 10.8 :ref:`Kspace computations <mod_8>`
|
||||
| 10.9 :ref:`Minimization styles <mod_9>`
|
||||
| 10.10 :ref:`Pairwise potentials <mod_10>`
|
||||
| 10.11 :ref:`Region styles <mod_11>`
|
||||
| 10.12 :ref:`Body styles <mod_12>`
|
||||
| 10.13 :ref:`Thermodynamic output options <mod_13>`
|
||||
| 10.14 :ref:`Variable options <mod_14>`
|
||||
| 10.15 :ref:`Submitting new features for inclusion in LAMMPS <mod_15>`
|
||||
|
|
||||
|
||||
LAMMPS is designed in a modular fashion so as to be easy to modify and
|
||||
extend with new functionality. In fact, about 75% of its source code
|
||||
is files added in this fashion.
|
||||
|
||||
In this section, changes and additions users can make are listed along
|
||||
with minimal instructions. If you add a new feature to LAMMPS and
|
||||
think it will be of interest to general users, we encourage you to
|
||||
submit it to the developers for inclusion in the released version of
|
||||
LAMMPS. Information about how to do this is provided
|
||||
:ref:`below <mod_14>`.
|
||||
|
||||
The best way to add a new feature is to find a similar feature in
|
||||
LAMMPS and look at the corresponding source and header files to figure
|
||||
out what it does. You will need some knowledge of C++ to be able to
|
||||
understand the hi-level structure of LAMMPS and its class
|
||||
organization, but functions (class methods) that do actual
|
||||
computations are written in vanilla C-style code and operate on simple
|
||||
C-style data structures (vectors and arrays).
|
||||
|
||||
Most of the new features described in this section require you to
|
||||
write a new C++ derived class (except for exceptions described below,
|
||||
where you can make small edits to existing files). Creating a new
|
||||
class requires 2 files, a source code file (*.cpp) and a header file
|
||||
(*.h). The derived class must provide certain methods to work as a
|
||||
new option. Depending on how different your new feature is compared
|
||||
to existing features, you can either derive from the base class
|
||||
itself, or from a derived class that already exists. Enabling LAMMPS
|
||||
to invoke the new class is as simple as putting the two source
|
||||
files in the src dir and re-building LAMMPS.
|
||||
|
||||
The advantage of C++ and its object-orientation is that all the code
|
||||
and variables needed to define the new feature are in the 2 files you
|
||||
write, and thus shouldn't make the rest of LAMMPS more complex or
|
||||
cause side-effect bugs.
|
||||
|
||||
Here is a concrete example. Suppose you write 2 files pair_foo.cpp
|
||||
and pair_foo.h that define a new class PairFoo that computes pairwise
|
||||
potentials described in the classic 1997 :ref:`paper <Foo>` by Foo, et al.
|
||||
If you wish to invoke those potentials in a LAMMPS input script with a
|
||||
command like
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style foo 0.1 3.5
|
||||
|
||||
then your pair_foo.h file should be structured as follows:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
#ifdef PAIR_CLASS
|
||||
PairStyle(foo,PairFoo)
|
||||
#else
|
||||
...
|
||||
(class definition for PairFoo)
|
||||
...
|
||||
#endif
|
||||
|
||||
where "foo" is the style keyword in the pair_style command, and
|
||||
PairFoo is the class name defined in your pair_foo.cpp and pair_foo.h
|
||||
files.
|
||||
|
||||
When you re-build LAMMPS, your new pairwise potential becomes part of
|
||||
the executable and can be invoked with a pair_style command like the
|
||||
example above. Arguments like 0.1 and 3.5 can be defined and
|
||||
processed by your new class.
|
||||
|
||||
As illustrated by this pairwise example, many kinds of options are
|
||||
referred to in the LAMMPS documentation as the "style" of a particular
|
||||
command.
|
||||
|
||||
The instructions below give the header file for the base class that
|
||||
these styles are derived from. Public variables in that file are ones
|
||||
used and set by the derived classes which are also used by the base
|
||||
class. Sometimes they are also used by the rest of LAMMPS. Virtual
|
||||
functions in the base class header file which are set = 0 are ones you
|
||||
must define in your new derived class to give it the functionality
|
||||
LAMMPS expects. Virtual functions that are not set to 0 are functions
|
||||
you can optionally define.
|
||||
|
||||
Additionally, new output options can be added directly to the
|
||||
thermo.cpp, dump_custom.cpp, and variable.cpp files as explained
|
||||
below.
|
||||
|
||||
Here are additional guidelines for modifying LAMMPS and adding new
|
||||
functionality:
|
||||
|
||||
* Think about whether what you want to do would be better as a pre- or
|
||||
post-processing step. Many computations are more easily and more
|
||||
quickly done that way.
|
||||
* Don't do anything within the timestepping of a run that isn't
|
||||
parallel. E.g. don't accumulate a bunch of data on a single processor
|
||||
and analyze it. You run the risk of seriously degrading the parallel
|
||||
efficiency.
|
||||
* If your new feature reads arguments or writes output, make sure you
|
||||
follow the unit conventions discussed by the :doc:`units <units>`
|
||||
command.
|
||||
* If you add something you think is truly useful and doesn't impact
|
||||
LAMMPS performance when it isn't used, send an email to the
|
||||
`developers <http://lammps.sandia.gov/authors.html>`_. We might be
|
||||
interested in adding it to the LAMMPS distribution. See further
|
||||
details on this at the bottom of this page.
|
||||
|
||||
|
||||
|
||||
|
||||
.. _mod_1:
|
||||
|
||||
Atom styles
|
||||
-----------
|
||||
|
||||
Classes that define an :doc:`atom style <atom_style>` are derived from
|
||||
the AtomVec class and managed by the Atom class. The atom style
|
||||
determines what attributes are associated with an atom. A new atom
|
||||
style can be created if one of the existing atom styles does not
|
||||
define all the attributes you need to store and communicate with
|
||||
atoms.
|
||||
|
||||
Atom_vec_atomic.cpp is a simple example of an atom style.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See atom_vec.h for details.
|
||||
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| init | one time setup (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| grow | re-allocate atom arrays to longer lengths (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| grow_reset | make array pointers in Atom and AtomVec classes consistent (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| copy | copy info for one atom to another atom's array locations (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_comm | store an atom's info in a buffer communicated every timestep (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_comm_vel | add velocity info to communication buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_comm_hybrid | store extra info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_comm | retrieve an atom's info from the buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_comm_vel | also retrieve velocity info (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_comm_hybrid | retreive extra info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_reverse | store an atom's info in a buffer communicating partial forces (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_reverse_hybrid | store extra info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_reverse | retrieve an atom's info from the buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_reverse_hybrid | retreive extra info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_border | store an atom's info in a buffer communicated on neighbor re-builds (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_border_vel | add velocity info to buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_border_hybrid | store extra info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_border | retrieve an atom's info from the buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_border_vel | also retrieve velocity info (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_border_hybrid | retreive extra info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_exchange | store all an atom's info to migrate to another processor (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_exchange | retrieve an atom's info from the buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| size_restart | number of restart quantities associated with proc's atoms (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| pack_restart | pack atom quantities into a buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| unpack_restart | unpack atom quantities from a buffer (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| create_atom | create an individual atom of this style (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| data_atom | parse an atom line from the data file (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| data_atom_hybrid | parse additional atom info unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| data_vel | parse one line of velocity information from data file (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| data_vel_hybrid | parse additional velocity data unique to this atom style (optional) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
| memory_usage | tally memory allocated by atom arrays (required) |
|
||||
+-----------------------+--------------------------------------------------------------------------------+
|
||||
|
||||
The constructor of the derived class sets values for several variables
|
||||
that you must set when defining a new atom style, which are documented
|
||||
in atom_vec.h. New atom arrays are defined in atom.cpp. Search for
|
||||
the word "customize" and you will find locations you will need to
|
||||
modify.
|
||||
|
||||
.. note::
|
||||
|
||||
It is possible to add some attributes, such as a molecule ID, to
|
||||
atom styles that do not have them via the :doc:`fix property/atom <fix_property_atom>` command. This command also
|
||||
allows new custom attributes consisting of extra integer or
|
||||
floating-point values to be added to atoms. See the :doc:`fix property/atom <fix_property_atom>` doc page for examples of cases
|
||||
where this is useful and details on how to initialize, access, and
|
||||
output the custom values.
|
||||
|
||||
New :doc:`pair styles <pair_style>`, :doc:`fixes <fix>`, or
|
||||
:doc:`computes <compute>` can be added to LAMMPS, as discussed below.
|
||||
The code for these classes can use the per-atom properties defined by
|
||||
fix property/atom. The Atom class has a find_custom() method that is
|
||||
useful in this context:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
int index = atom->find_custom(char *name, int &flag);
|
||||
|
||||
The "name" of a custom attribute, as specified in the :doc:`fix property/atom <fix_property_atom>` command, is checked to verify
|
||||
that it exists and its index is returned. The method also sets flag =
|
||||
0/1 depending on whether it is an integer or floating-point attribute.
|
||||
The vector of values associated with the attribute can then be
|
||||
accessed using the returned index as
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
int *ivector = atom->ivector[index];
|
||||
double *dvector = atom->dvector[index];
|
||||
|
||||
Ivector or dvector are vectors of length Nlocal = # of owned atoms,
|
||||
which store the attributes of individual atoms.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_2:
|
||||
|
||||
Bond, angle, dihedral, improper potentials
|
||||
------------------------------------------
|
||||
|
||||
Classes that compute molecular interactions are derived from the Bond,
|
||||
Angle, Dihedral, and Improper classes. New styles can be created to
|
||||
add new potentials to LAMMPS.
|
||||
|
||||
Bond_harmonic.cpp is the simplest example of a bond style. Ditto for
|
||||
the harmonic forms of the angle, dihedral, and improper style
|
||||
commands.
|
||||
|
||||
Here is a brief description of common methods you define in your
|
||||
new derived class. See bond.h, angle.h, dihedral.h, and improper.h
|
||||
for details and specific additional methods.
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| init | check if all coefficients are set, calls *init_style* (optional) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| init_style | check if style specific conditions are met (optional) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| compute | compute the molecular interactions (required) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| settings | apply global settings for all types (optional) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| coeff | set coefficients for one type (required) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| equilibrium_distance | length of bond, used by SHAKE (required, bond only) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| equilibrium_angle | opening of angle, used by SHAKE (required, angle only) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| write & read_restart | writes/reads coeffs to restart files (required) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| single | force and energy of a single bond or angle (required, bond or angle only) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
| memory_usage | tally memory allocated by the style (optional) |
|
||||
+----------------------+---------------------------------------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_3:
|
||||
|
||||
Compute styles
|
||||
--------------
|
||||
|
||||
Classes that compute scalar and vector quantities like temperature
|
||||
and the pressure tensor, as well as classes that compute per-atom
|
||||
quantities like kinetic energy and the centro-symmetry parameter
|
||||
are derived from the Compute class. New styles can be created
|
||||
to add new calculations to LAMMPS.
|
||||
|
||||
Compute_temp.cpp is a simple example of computing a scalar
|
||||
temperature. Compute_ke_atom.cpp is a simple example of computing
|
||||
per-atom kinetic energy.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See compute.h for details.
|
||||
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| init | perform one time setup (required) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| init_list | neighbor list setup, if needed (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| compute_scalar | compute a scalar quantity (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| compute_vector | compute a vector of quantities (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| compute_peratom | compute one or more quantities per atom (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| compute_local | compute one or more quantities per processor (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| pack_comm | pack a buffer with items to communicate (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| unpack_comm | unpack the buffer (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| pack_reverse | pack a buffer with items to reverse communicate (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| unpack_reverse | unpack the buffer (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| remove_bias | remove velocity bias from one atom (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| remove_bias_all | remove velocity bias from all atoms in group (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| restore_bias | restore velocity bias for one atom after remove_bias (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| restore_bias_all | same as before, but for all atoms in group (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| pair_tally_callback | callback function for *tally*-style computes (optional). |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
| memory_usage | tally memory usage (optional) |
|
||||
+---------------------+-----------------------------------------------------------------+
|
||||
|
||||
Tally-style computes are a special case, as their computation is done
|
||||
in two stages: the callback function is registered with the pair style
|
||||
and then called from the Pair::ev_tally() function, which is called for
|
||||
each pair after force and energy has been computed for this pair. Then
|
||||
the tallied values are retrieved with the standard compute_scalar or
|
||||
compute_vector or compute_peratom methods. The USER-TALLY package
|
||||
provides *examples*_compute_tally.html for utilizing this mechanism.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_4:
|
||||
|
||||
Dump styles
|
||||
-----------
|
||||
|
||||
.. _mod_5:
|
||||
|
||||
Dump custom output options
|
||||
--------------------------
|
||||
|
||||
Classes that dump per-atom info to files are derived from the Dump
|
||||
class. To dump new quantities or in a new format, a new derived dump
|
||||
class can be added, but it is typically simpler to modify the
|
||||
DumpCustom class contained in the dump_custom.cpp file.
|
||||
|
||||
Dump_atom.cpp is a simple example of a derived dump class.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See dump.h for details.
|
||||
|
||||
+--------------+---------------------------------------------------+
|
||||
| write_header | write the header section of a snapshot of atoms |
|
||||
+--------------+---------------------------------------------------+
|
||||
| count | count the number of lines a processor will output |
|
||||
+--------------+---------------------------------------------------+
|
||||
| pack | pack a proc's output data into a buffer |
|
||||
+--------------+---------------------------------------------------+
|
||||
| write_data | write a proc's data to a file |
|
||||
+--------------+---------------------------------------------------+
|
||||
|
||||
See the :doc:`dump <dump>` command and its *custom* style for a list of
|
||||
keywords for atom information that can already be dumped by
|
||||
DumpCustom. It includes options to dump per-atom info from Compute
|
||||
classes, so adding a new derived Compute class is one way to calculate
|
||||
new quantities to dump.
|
||||
|
||||
Alternatively, you can add new keywords to the dump custom command.
|
||||
Search for the word "customize" in dump_custom.cpp to see the
|
||||
half-dozen or so locations where code will need to be added.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_6:
|
||||
|
||||
Fix styles
|
||||
----------
|
||||
|
||||
In LAMMPS, a "fix" is any operation that is computed during
|
||||
timestepping that alters some property of the system. Essentially
|
||||
everything that happens during a simulation besides force computation,
|
||||
neighbor list construction, and output, is a "fix". This includes
|
||||
time integration (update of coordinates and velocities), force
|
||||
constraints or boundary conditions (SHAKE or walls), and diagnostics
|
||||
(compute a diffusion coefficient). New styles can be created to add
|
||||
new options to LAMMPS.
|
||||
|
||||
Fix_setforce.cpp is a simple example of setting forces on atoms to
|
||||
prescribed values. There are dozens of fix options already in LAMMPS;
|
||||
choose one as a template that is similar to what you want to
|
||||
implement.
|
||||
|
||||
Here is a brief description of methods you can define in your new
|
||||
derived class. See fix.h for details.
|
||||
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| setmask | determines when the fix is called during the timestep (required) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| init | initialization before a run (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| setup_pre_exchange | called before atom exchange in setup (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| setup_pre_force | called before force computation in setup (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| setup | called immediately before the 1st timestep and after forces are computed (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_setup_pre_force | like setup_pre_force, but for minimizations instead of MD runs (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_setup | like setup, but for minimizations instead of MD runs (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| initial_integrate | called at very beginning of each timestep (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pre_exchange | called before atom exchange on re-neighboring steps (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pre_neighbor | called before neighbor list build (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pre_force | called before pair & molecular forces are computed (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| post_force | called after pair & molecular forces are computed and communicated (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| final_integrate | called at end of each timestep (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| end_of_step | called at very end of timestep (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| write_restart | dumps fix info to restart file (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| restart | uses info from restart file to re-initialize the fix (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| grow_arrays | allocate memory for atom-based arrays used by fix (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| copy_arrays | copy atom info when an atom migrates to a new processor (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pack_exchange | store atom's data in a buffer (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| unpack_exchange | retrieve atom's data from a buffer (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pack_restart | store atom's data for writing to restart file (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| unpack_restart | retrieve atom's data from a restart file buffer (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| size_restart | size of atom's data (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| maxsize_restart | max size of atom's data (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| setup_pre_force_respa | same as setup_pre_force, but for rRESPA (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| initial_integrate_respa | same as initial_integrate, but for rRESPA (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| post_integrate_respa | called after the first half integration step is done in rRESPA (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pre_force_respa | same as pre_force, but for rRESPA (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| post_force_respa | same as post_force, but for rRESPA (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| final_integrate_respa | same as final_integrate, but for rRESPA (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_pre_force | called after pair & molecular forces are computed in minimizer (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_post_force | called after pair & molecular forces are computed and communicated in minmizer (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_store | store extra data for linesearch based minimization on a LIFO stack (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_pushstore | push the minimization LIFO stack one element down (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_popstore | pop the minimization LIFO stack one element up (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_clearstore | clear minimization LIFO stack (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_step | reset or move forward on line search minimization (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| min_dof | report number of degrees of freedom *added* by this fix in minimization (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| max_alpha | report maximum allowed step size during linesearch minimization (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pack_comm | pack a buffer to communicate a per-atom quantity (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| unpack_comm | unpack a buffer to communicate a per-atom quantity (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| pack_reverse_comm | pack a buffer to reverse communicate a per-atom quantity (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| unpack_reverse_comm | unpack a buffer to reverse communicate a per-atom quantity (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| dof | report number of degrees of freedom *removed* by this fix during MD (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| compute_scalar | return a global scalar property that the fix computes (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| compute_vector | return a component of a vector property that the fix computes (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| compute_array | return a component of an array property that the fix computes (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| deform | called when the box size is changed (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| reset_target | called when a change of the target temperature is requested during a run (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| reset_dt | is called when a change of the time step is requested during a run (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| modify_param | called when a fix_modify request is executed (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| memory_usage | report memory used by fix (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
| thermo | compute quantities for thermodynamic output (optional) |
|
||||
+-------------------------+-------------------------------------------------------------------------------------------+
|
||||
|
||||
Typically, only a small fraction of these methods are defined for a
|
||||
particular fix. Setmask is mandatory, as it determines when the fix
|
||||
will be invoked during the timestep. Fixes that perform time
|
||||
integration (*nve*, *nvt*, *npt*) implement initial_integrate() and
|
||||
final_integrate() to perform velocity Verlet updates. Fixes that
|
||||
constrain forces implement post_force().
|
||||
|
||||
Fixes that perform diagnostics typically implement end_of_step(). For
|
||||
an end_of_step fix, one of your fix arguments must be the variable
|
||||
"nevery" which is used to determine when to call the fix and you must
|
||||
set this variable in the constructor of your fix. By convention, this
|
||||
is the first argument the fix defines (after the ID, group-ID, style).
|
||||
|
||||
If the fix needs to store information for each atom that persists from
|
||||
timestep to timestep, it can manage that memory and migrate the info
|
||||
with the atoms as they move from processors to processor by
|
||||
implementing the grow_arrays, copy_arrays, pack_exchange, and
|
||||
unpack_exchange methods. Similarly, the pack_restart and
|
||||
unpack_restart methods can be implemented to store information about
|
||||
the fix in restart files. If you wish an integrator or force
|
||||
constraint fix to work with rRESPA (see the :doc:`run_style <run_style>`
|
||||
command), the initial_integrate, post_force_integrate, and
|
||||
final_integrate_respa methods can be implemented. The thermo method
|
||||
enables a fix to contribute values to thermodynamic output, as printed
|
||||
quantities and/or to be summed to the potential energy of the system.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_7:
|
||||
|
||||
Input script commands
|
||||
---------------------
|
||||
|
||||
New commands can be added to LAMMPS input scripts by adding new
|
||||
classes that have a "command" method. For example, the create_atoms,
|
||||
read_data, velocity, and run commands are all implemented in this
|
||||
fashion. When such a command is encountered in the LAMMPS input
|
||||
script, LAMMPS simply creates a class with the corresponding name,
|
||||
invokes the "command" method of the class, and passes it the arguments
|
||||
from the input script. The command method can perform whatever
|
||||
operations it wishes on LAMMPS data structures.
|
||||
|
||||
The single method your new class must define is as follows:
|
||||
|
||||
+---------+-----------------------------------------+
|
||||
| command | operations performed by the new command |
|
||||
+---------+-----------------------------------------+
|
||||
|
||||
Of course, the new class can define other methods and variables as
|
||||
needed.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_8:
|
||||
|
||||
Kspace computations
|
||||
-------------------
|
||||
|
||||
Classes that compute long-range Coulombic interactions via K-space
|
||||
representations (Ewald, PPPM) are derived from the KSpace class. New
|
||||
styles can be created to add new K-space options to LAMMPS.
|
||||
|
||||
Ewald.cpp is an example of computing K-space interactions.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See kspace.h for details.
|
||||
|
||||
+--------------+----------------------------------------------+
|
||||
| init | initialize the calculation before a run |
|
||||
+--------------+----------------------------------------------+
|
||||
| setup | computation before the 1st timestep of a run |
|
||||
+--------------+----------------------------------------------+
|
||||
| compute | every-timestep computation |
|
||||
+--------------+----------------------------------------------+
|
||||
| memory_usage | tally of memory usage |
|
||||
+--------------+----------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_9:
|
||||
|
||||
Minimization styles
|
||||
-------------------
|
||||
|
||||
Classes that perform energy minimization derived from the Min class.
|
||||
New styles can be created to add new minimization algorithms to
|
||||
LAMMPS.
|
||||
|
||||
Min_cg.cpp is an example of conjugate gradient minimization.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See min.h for details.
|
||||
|
||||
+--------------+------------------------------------------+
|
||||
| init | initialize the minimization before a run |
|
||||
+--------------+------------------------------------------+
|
||||
| run | perform the minimization |
|
||||
+--------------+------------------------------------------+
|
||||
| memory_usage | tally of memory usage |
|
||||
+--------------+------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_10:
|
||||
|
||||
Pairwise potentials
|
||||
-------------------
|
||||
|
||||
Classes that compute pairwise interactions are derived from the Pair
|
||||
class. In LAMMPS, pairwise calculation include manybody potentials
|
||||
such as EAM or Tersoff where particles interact without a static bond
|
||||
topology. New styles can be created to add new pair potentials to
|
||||
LAMMPS.
|
||||
|
||||
Pair_lj_cut.cpp is a simple example of a Pair class, though it
|
||||
includes some optional methods to enable its use with rRESPA.
|
||||
|
||||
Here is a brief description of the class methods in pair.h:
|
||||
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| compute | workhorse routine that computes pairwise interactions |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| settings | reads the input script line with arguments you define |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| coeff | set coefficients for one i,j type pair |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| init_one | perform initialization for one i,j type pair |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| init_style | initialization specific to this pair style |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| write & read_restart | write/read i,j pair coeffs to restart files |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| write & read_restart_settings | write/read global settings to restart files |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| single | force and energy of a single pairwise interaction between 2 atoms |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
| compute_inner/middle/outer | versions of compute used by rRESPA |
|
||||
+-------------------------------+-------------------------------------------------------------------+
|
||||
|
||||
The inner/middle/outer routines are optional.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_11:
|
||||
|
||||
Region styles
|
||||
-------------
|
||||
|
||||
Classes that define geometric regions are derived from the Region
|
||||
class. Regions are used elsewhere in LAMMPS to group atoms, delete
|
||||
atoms to create a void, insert atoms in a specified region, etc. New
|
||||
styles can be created to add new region shapes to LAMMPS.
|
||||
|
||||
Region_sphere.cpp is an example of a spherical region.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See region.h for details.
|
||||
|
||||
+-------+--------------------------------------------+
|
||||
| match | determine whether a point is in the region |
|
||||
+-------+--------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_12:
|
||||
|
||||
Body styles
|
||||
-----------
|
||||
|
||||
Classes that define body particles are derived from the Body class.
|
||||
Body particles can represent complex entities, such as surface meshes
|
||||
of discrete points, collections of sub-particles, deformable objects,
|
||||
etc.
|
||||
|
||||
See :ref:`Section_howto 14 <howto_14>` of the manual for
|
||||
an overview of using body particles and the :doc:`body <body>` doc page
|
||||
for details on the various body styles LAMMPS supports. New styles
|
||||
can be created to add new kinds of body particles to LAMMPS.
|
||||
|
||||
Body_nparticle.cpp is an example of a body particle that is treated as
|
||||
a rigid body containing N sub-particles.
|
||||
|
||||
Here is a brief description of methods you define in your new derived
|
||||
class. See body.h for details.
|
||||
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| data_body | process a line from the Bodies section of a data file |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| noutrow | number of sub-particles output is generated for |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| noutcol | number of values per-sub-particle output is generated for |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| output | output values for the Mth sub-particle |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| pack_comm_body | body attributes to communicate every timestep |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| unpack_comm_body | unpacking of those attributes |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| pack_border_body | body attributes to communicate when reneighboring is done |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
| unpack_border_body | unpacking of those attributes |
|
||||
+--------------------+-----------------------------------------------------------+
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_13:
|
||||
|
||||
Thermodynamic output options
|
||||
----------------------------
|
||||
|
||||
There is one class that computes and prints thermodynamic information
|
||||
to the screen and log file; see the file thermo.cpp.
|
||||
|
||||
There are two styles defined in thermo.cpp: "one" and "multi". There
|
||||
is also a flexible "custom" style which allows the user to explicitly
|
||||
list keywords for quantities to print when thermodynamic info is
|
||||
output. See the :doc:`thermo_style <thermo_style>` command for a list
|
||||
of defined quantities.
|
||||
|
||||
The thermo styles (one, multi, etc) are simply lists of keywords.
|
||||
Adding a new style thus only requires defining a new list of keywords.
|
||||
Search for the word "customize" with references to "thermo style" in
|
||||
thermo.cpp to see the two locations where code will need to be added.
|
||||
|
||||
New keywords can also be added to thermo.cpp to compute new quantities
|
||||
for output. Search for the word "customize" with references to
|
||||
"keyword" in thermo.cpp to see the several locations where code will
|
||||
need to be added.
|
||||
|
||||
Note that the :doc:`thermo_style custom <thermo>` command already allows
|
||||
for thermo output of quantities calculated by :doc:`fixes <fix>`,
|
||||
:doc:`computes <compute>`, and :doc:`variables <variable>`. Thus, it may
|
||||
be simpler to compute what you wish via one of those constructs, than
|
||||
by adding a new keyword to the thermo command.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _mod_14:
|
||||
|
||||
Variable options
|
||||
----------------
|
||||
|
||||
There is one class that computes and stores :doc:`variable <variable>`
|
||||
information in LAMMPS; see the file variable.cpp. The value
|
||||
associated with a variable can be periodically printed to the screen
|
||||
via the :doc:`print <print>`, :doc:`fix print <fix_print>`, or
|
||||
:doc:`thermo_style custom <thermo_style>` commands. Variables of style
|
||||
"equal" can compute complex equations that involve the following types
|
||||
of arguments:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
thermo keywords = ke, vol, atoms, ...
|
||||
other variables = v_a, v_myvar, ...
|
||||
math functions = div(x,y), mult(x,y), add(x,y), ...
|
||||
group functions = mass(group), xcm(group,x), ...
|
||||
atom values = x[123], y[3], vx[34], ...
|
||||
compute values = c_mytemp[0], c_thermo_press[3], ...
|
||||
|
||||
Adding keywords for the :doc:`thermo_style custom <thermo_style>` command
|
||||
(which can then be accessed by variables) was discussed
|
||||
:ref:`here <thermo>` on this page.
|
||||
|
||||
Adding a new math function of one or two arguments can be done by
|
||||
editing one section of the Variable::evaulate() method. Search for
|
||||
the word "customize" to find the appropriate location.
|
||||
|
||||
Adding a new group function can be done by editing one section of the
|
||||
Variable::evaulate() method. Search for the word "customize" to find
|
||||
the appropriate location. You may need to add a new method to the
|
||||
Group class as well (see the group.cpp file).
|
||||
|
||||
Accessing a new atom-based vector can be done by editing one section
|
||||
of the Variable::evaulate() method. Search for the word "customize"
|
||||
to find the appropriate location.
|
||||
|
||||
Adding new :doc:`compute styles <compute>` (whose calculated values can
|
||||
then be accessed by variables) was discussed
|
||||
:ref:`here <compute>` on this page.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.. _mod_15:
|
||||
|
||||
Submitting new features for inclusion in LAMMPS
|
||||
-----------------------------------------------
|
||||
|
||||
We encourage users to submit new features to `the developers <http://lammps.sandia.gov/authors.html>`_ that they add to
|
||||
LAMMPS, especially if you think they will be of interest to other
|
||||
users. If they are broadly useful we may add them as core files to
|
||||
LAMMPS or as part of a :ref:`standard package <start_3>`.
|
||||
Else we will add them as a user-contributed file or package. Examples
|
||||
of user packages are in src sub-directories that start with USER. The
|
||||
USER-MISC package is simply a collection of (mostly) unrelated single
|
||||
files, which is the simplest way to have your contribution quickly
|
||||
added to the LAMMPS distribution. You can see a list of the both
|
||||
standard and user packages by typing "make package" in the LAMMPS src
|
||||
directory.
|
||||
|
||||
Note that by providing us the files to release, you are agreeing to
|
||||
make them open-source, i.e. we can release them under the terms of the
|
||||
GPL, used as a license for the rest of LAMMPS. See :ref:`Section 1.4 <intro_4>` for details.
|
||||
|
||||
With user packages and files, all we are really providing (aside from
|
||||
the fame and fortune that accompanies having your name in the source
|
||||
code and on the `Authors page <http://lammps.sandia.gov/authors.html>`_
|
||||
of the `LAMMPS WWW site <lws_>`_), is a means for you to distribute your
|
||||
work to the LAMMPS user community, and a mechanism for others to
|
||||
easily try out your new feature. This may help you find bugs or make
|
||||
contact with new collaborators. Note that you're also implicitly
|
||||
agreeing to support your code which means answer questions, fix bugs,
|
||||
and maintain it if LAMMPS changes in some way that breaks it (an
|
||||
unusual event).
|
||||
|
||||
.. note::
|
||||
|
||||
If you prefer to actively develop and support your add-on
|
||||
feature yourself, then you may wish to make it available for download
|
||||
from your own website, as a user package that LAMMPS users can add to
|
||||
their copy of LAMMPS. See the `Offsite LAMMPS packages and tools <http://lammps.sandia.gov/offsite.html>`_ page of the LAMMPS web
|
||||
site for examples of groups that do this. We are happy to advertise
|
||||
your package and web site from that page. Simply email the
|
||||
`developers <http://lammps.sandia.gov/authors.html>`_ with info about
|
||||
your package and we will post it there.
|
||||
|
||||
The previous sections of this doc page describe how to add new "style"
|
||||
files of various kinds to LAMMPS. Packages are simply collections of
|
||||
one or more new class files which are invoked as a new style within a
|
||||
LAMMPS input script. If designed correctly, these additions typically
|
||||
do not require changes to the main core of LAMMPS; they are simply
|
||||
add-on files. If you think your new feature requires non-trivial
|
||||
changes in core LAMMPS files, you'll need to `communicate with the developers <http://lammps.sandia.gov/authors.html>`_, since we may or may
|
||||
not want to make those changes. An example of a trivial change is
|
||||
making a parent-class method "virtual" when you derive a new child
|
||||
class from it.
|
||||
|
||||
Here are the steps you need to follow to submit a single file or user
|
||||
package for our consideration. Following these steps will save both
|
||||
you and us time. See existing files in packages in the src dir for
|
||||
examples.
|
||||
|
||||
* All source files you provide must compile with the most current
|
||||
version of LAMMPS.
|
||||
* If you want your file(s) to be added to main LAMMPS or one of its
|
||||
standard packages, then it needs to be written in a style compatible
|
||||
with other LAMMPS source files. This is so the developers can
|
||||
understand it and hopefully maintain it. This basically means that
|
||||
the code accesses data structures, performs its operations, and is
|
||||
formatted similar to other LAMMPS source files, including the use of
|
||||
the error class for error and warning messages.
|
||||
* If you want your contribution to be added as a user-contributed
|
||||
feature, and it's a single file (actually a *.cpp and *.h file) it can
|
||||
rapidly be added to the USER-MISC directory. Send us the one-line
|
||||
entry to add to the USER-MISC/README file in that dir, along with the
|
||||
2 source files. You can do this multiple times if you wish to
|
||||
contribute several individual features.
|
||||
* If you want your contribution to be added as a user-contribution and
|
||||
it is several related featues, it is probably best to make it a user
|
||||
package directory with a name like USER-FOO. In addition to your new
|
||||
files, the directory should contain a README text file. The README
|
||||
should contain your name and contact information and a brief
|
||||
description of what your new package does. If your files depend on
|
||||
other LAMMPS style files also being installed (e.g. because your file
|
||||
is a derived class from the other LAMMPS class), then an Install.sh
|
||||
file is also needed to check for those dependencies. See other README
|
||||
and Install.sh files in other USER directories as examples. Send us a
|
||||
tarball of this USER-FOO directory.
|
||||
* Your new source files need to have the LAMMPS copyright, GPL notice,
|
||||
and your name and email address at the top, like other
|
||||
user-contributed LAMMPS source files. They need to create a class
|
||||
that is inside the LAMMPS namespace. If the file is for one of the
|
||||
USER packages, including USER-MISC, then we are not as picky about the
|
||||
coding style (see above). I.e. the files do not need to be in the
|
||||
same stylistic format and syntax as other LAMMPS files, though that
|
||||
would be nice for developers as well as users who try to read your
|
||||
code.
|
||||
* You must also create a documentation file for each new command or
|
||||
style you are adding to LAMMPS. This will be one file for a
|
||||
single-file feature. For a package, it might be several files. These
|
||||
are simple text files which we auto-convert to HTML. Thus they must
|
||||
be in the same format as other *.txt files in the lammps/doc directory
|
||||
for similar commands and styles; use one or more of them as a starting
|
||||
point. As appropriate, the text files can include links to equations
|
||||
(see doc/Eqs/*.tex for examples, we auto-create the associated JPG
|
||||
files), or figures (see doc/JPG for examples), or even additional PDF
|
||||
files with further details (see doc/PDF for examples). The doc page
|
||||
should also include literature citations as appropriate; see the
|
||||
bottom of doc/fix_nh.txt for examples and the earlier part of the same
|
||||
file for how to format the cite itself. The "Restrictions" section of
|
||||
the doc page should indicate that your command is only available if
|
||||
LAMMPS is built with the appropriate USER-MISC or USER-FOO package.
|
||||
See other user package doc files for examples of how to do this. The
|
||||
txt2html tool we use to convert to HTML can be downloaded from `this site <http://www.sandia.gov/~sjplimp/download.html>`_, so you can perform
|
||||
the HTML conversion yourself to proofread your doc page.
|
||||
* For a new package (or even a single command) you can include one or
|
||||
more example scripts. These should run in no more than 1 minute, even
|
||||
on a single processor, and not require large data files as input. See
|
||||
directories under examples/USER for examples of input scripts other
|
||||
users provided for their packages.
|
||||
* If there is a paper of yours describing your feature (either the
|
||||
algorithm/science behind the feature itself, or its initial usage, or
|
||||
its implementation in LAMMPS), you can add the citation to the *.cpp
|
||||
source file. See src/USER-EFF/atom_vec_electron.cpp for an example.
|
||||
A LaTeX citation is stored in a variable at the top of the file and a
|
||||
single line of code that references the variable is added to the
|
||||
constructor of the class. Whenever a user invokes your feature from
|
||||
their input script, this will cause LAMMPS to output the citation to a
|
||||
log.cite file and prompt the user to examine the file. Note that you
|
||||
should only use this for a paper you or your group authored.
|
||||
E.g. adding a cite in the code for a paper by Nose and Hoover if you
|
||||
write a fix that implements their integrator is not the intended
|
||||
usage. That kind of citation should just be in the doc page you
|
||||
provide.
|
||||
Finally, as a general rule-of-thumb, the more clear and
|
||||
self-explanatory you make your doc and README files, and the easier
|
||||
you make it for people to get started, e.g. by providing example
|
||||
scripts, the more likely it is that users will try out your new
|
||||
feature.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.. _Foo:
|
||||
|
||||
|
||||
|
||||
**(Foo)** Foo, Morefoo, and Maxfoo, J of Classic Potentials, 75, 345 (1997).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,74 @@
|
|||
Performance & scalability
|
||||
=========================
|
||||
|
||||
LAMMPS performance on several prototypical benchmarks and machines is
|
||||
discussed on the Benchmarks page of the `LAMMPS WWW Site <lws_>`_ where
|
||||
CPU timings and parallel efficiencies are listed. Here, the
|
||||
benchmarks are described briefly and some useful rules of thumb about
|
||||
their performance are highlighted.
|
||||
|
||||
These are the 5 benchmark problems:
|
||||
|
||||
#. LJ = atomic fluid, Lennard-Jones potential with 2.5 sigma cutoff (55
|
||||
neighbors per atom), NVE integration
|
||||
#. Chain = bead-spring polymer melt of 100-mer chains, FENE bonds and LJ
|
||||
pairwise interactions with a 2^(1/6) sigma cutoff (5 neighbors per
|
||||
atom), NVE integration
|
||||
#. EAM = metallic solid, Cu EAM potential with 4.95 Angstrom cutoff (45
|
||||
neighbors per atom), NVE integration
|
||||
#. Chute = granular chute flow, frictional history potential with 1.1
|
||||
sigma cutoff (7 neighbors per atom), NVE integration
|
||||
#. Rhodo = rhodopsin protein in solvated lipid bilayer, CHARMM force
|
||||
field with a 10 Angstrom LJ cutoff (440 neighbors per atom),
|
||||
particle-particle particle-mesh (PPPM) for long-range Coulombics, NPT
|
||||
integration
|
||||
The input files for running the benchmarks are included in the LAMMPS
|
||||
distribution, as are sample output files. Each of the 5 problems has
|
||||
32,000 atoms and runs for 100 timesteps. Each can be run as a serial
|
||||
benchmarks (on one processor) or in parallel. In parallel, each
|
||||
benchmark can be run as a fixed-size or scaled-size problem. For
|
||||
fixed-size benchmarking, the same 32K atom problem is run on various
|
||||
numbers of processors. For scaled-size benchmarking, the model size
|
||||
is increased with the number of processors. E.g. on 8 processors, a
|
||||
256K-atom problem is run; on 1024 processors, a 32-million atom
|
||||
problem is run, etc.
|
||||
|
||||
A useful metric from the benchmarks is the CPU cost per atom per
|
||||
timestep. Since LAMMPS performance scales roughly linearly with
|
||||
problem size and timesteps, the run time of any problem using the same
|
||||
model (atom style, force field, cutoff, etc) can then be estimated.
|
||||
For example, on a 1.7 GHz Pentium desktop machine (Intel icc compiler
|
||||
under Red Hat Linux), the CPU run-time in seconds/atom/timestep for
|
||||
the 5 problems is
|
||||
|
||||
+----------------+---------+---------+---------+---------+-----------+
|
||||
| Problem: | LJ | Chain | EAM | Chute | Rhodopsin |
|
||||
+----------------+---------+---------+---------+---------+-----------+
|
||||
| CPU/atom/step: | 4.55E-6 | 2.18E-6 | 9.38E-6 | 2.18E-6 | 1.11E-4 |
|
||||
+----------------+---------+---------+---------+---------+-----------+
|
||||
| Ratio to LJ: | 1.0 | 0.48 | 2.06 | 0.48 | 24.5 |
|
||||
+----------------+---------+---------+---------+---------+-----------+
|
||||
|
||||
The ratios mean that if the atomic LJ system has a normalized cost of
|
||||
1.0, the bead-spring chains and granular systems run 2x faster, while
|
||||
the EAM metal and solvated protein models run 2x and 25x slower
|
||||
respectively. The bulk of these cost differences is due to the
|
||||
expense of computing a particular pairwise force field for a given
|
||||
number of neighbors per atom.
|
||||
|
||||
Performance on a parallel machine can also be predicted from the
|
||||
one-processor timings if the parallel efficiency can be estimated.
|
||||
The communication bandwidth and latency of a particular parallel
|
||||
machine affects the efficiency. On most machines LAMMPS will give
|
||||
fixed-size parallel efficiencies on these benchmarks above 50% so long
|
||||
as the atoms/processor count is a few 100 or greater - i.e. on 64 to
|
||||
128 processors. Likewise, scaled-size parallel efficiencies will
|
||||
typically be 80% or greater up to very large processor counts. The
|
||||
benchmark data on the `LAMMPS WWW Site <lws_>`_ gives specific examples on
|
||||
some different machines, including a run of 3/4 of a billion LJ atoms
|
||||
on 1500 processors that ran at 85% parallel efficiency.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,737 @@
|
|||
Additional tools
|
||||
================
|
||||
|
||||
LAMMPS is designed to be a computational kernel for performing
|
||||
molecular dynamics computations. Additional pre- and post-processing
|
||||
steps are often necessary to setup and analyze a simulation. A few
|
||||
additional tools are provided with the LAMMPS distribution and are
|
||||
described in this section.
|
||||
|
||||
Our group has also written and released a separate toolkit called
|
||||
`Pizza.py <pizza_>`_ which provides tools for doing setup, analysis,
|
||||
plotting, and visualization for LAMMPS simulations. Pizza.py is
|
||||
written in `Python <python_>`_ and is available for download from `the Pizza.py WWW site <pizza_>`_.
|
||||
|
||||
.. _pizza: http://www.sandia.gov/~sjplimp/pizza.html
|
||||
|
||||
|
||||
|
||||
.. _python: http://www.python.org
|
||||
|
||||
|
||||
|
||||
Note that many users write their own setup or analysis tools or use
|
||||
other existing codes and convert their output to a LAMMPS input format
|
||||
or vice versa. The tools listed here are included in the LAMMPS
|
||||
distribution as examples of auxiliary tools. Some of them are not
|
||||
actively supported by Sandia, as they were contributed by LAMMPS
|
||||
users. If you have problems using them, we can direct you to the
|
||||
authors.
|
||||
|
||||
The source code for each of these codes is in the tools sub-directory
|
||||
of the LAMMPS distribution. There is a Makefile (which you may need
|
||||
to edit for your platform) which will build several of the tools which
|
||||
reside in that directory. Some of them are larger packages in their
|
||||
own sub-directories with their own Makefiles.
|
||||
|
||||
* :ref:`amber2lmp <amber>`
|
||||
* :ref:`binary2txt <binary>`
|
||||
* :ref:`ch2lmp <charmm>`
|
||||
* :ref:`chain <chain>`
|
||||
* :ref:`colvars <colvars>`
|
||||
* :ref:`createatoms <create>`
|
||||
* :ref:`data2xmovie <data>`
|
||||
* :ref:`eam database <eamdb>`
|
||||
* :ref:`eam generate <eamgn>`
|
||||
* :ref:`eff <eff>`
|
||||
* :ref:`emacs <emacs>`
|
||||
* :ref:`fep <fep>`
|
||||
* :ref:`i-pi <ipi>`
|
||||
* :ref:`ipp <ipp>`
|
||||
* :ref:`kate <kate>`
|
||||
* :ref:`lmp2arc <arc>`
|
||||
* :ref:`lmp2cfg <cfg>`
|
||||
* :ref:`lmp2vmd <vmd>`
|
||||
* :ref:`matlab <matlab>`
|
||||
* :ref:`micelle2d <micelle>`
|
||||
* :ref:`moltemplate <moltemplate>`
|
||||
* :ref:`msi2lmp <msi>`
|
||||
* :ref:`phonon <phonon>`
|
||||
* :ref:`polymer bonding <polybond>`
|
||||
* :ref:`pymol_asphere <pymol>`
|
||||
* :ref:`python <pythontools>`
|
||||
* :ref:`reax <reax>`
|
||||
* :ref:`restart2data <restart>`
|
||||
* :ref:`vim <vim>`
|
||||
* :ref:`xmgrace <xmgrace>`
|
||||
* :ref:`xmovie <xmovie>`
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _amber:
|
||||
|
||||
amber2lmp tool
|
||||
--------------------------
|
||||
|
||||
The amber2lmp sub-directory contains two Python scripts for converting
|
||||
files back-and-forth between the AMBER MD code and LAMMPS. See the
|
||||
README file in amber2lmp for more information.
|
||||
|
||||
These tools were written by Keir Novik while he was at Queen Mary
|
||||
University of London. Keir is no longer there and cannot support
|
||||
these tools which are out-of-date with respect to the current LAMMPS
|
||||
version (and maybe with respect to AMBER as well). Since we don't use
|
||||
these tools at Sandia, you'll need to experiment with them and make
|
||||
necessary modifications yourself.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _binary:
|
||||
|
||||
binary2txt tool
|
||||
----------------------------
|
||||
|
||||
The file binary2txt.cpp converts one or more binary LAMMPS dump file
|
||||
into ASCII text files. The syntax for running the tool is
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
binary2txt file1 file2 ...
|
||||
|
||||
which creates file1.txt, file2.txt, etc. This tool must be compiled
|
||||
on a platform that can read the binary file created by a LAMMPS run,
|
||||
since binary files are not compatible across all platforms.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _charmm:
|
||||
|
||||
ch2lmp tool
|
||||
------------------------
|
||||
|
||||
The ch2lmp sub-directory contains tools for converting files
|
||||
back-and-forth between the CHARMM MD code and LAMMPS.
|
||||
|
||||
They are intended to make it easy to use CHARMM as a builder and as a
|
||||
post-processor for LAMMPS. Using charmm2lammps.pl, you can convert an
|
||||
ensemble built in CHARMM into its LAMMPS equivalent. Using
|
||||
lammps2pdb.pl you can convert LAMMPS atom dumps into pdb files.
|
||||
|
||||
See the README file in the ch2lmp sub-directory for more information.
|
||||
|
||||
These tools were created by Pieter in't Veld (pjintve at sandia.gov)
|
||||
and Paul Crozier (pscrozi at sandia.gov) at Sandia.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _chain:
|
||||
|
||||
chain tool
|
||||
----------------------
|
||||
|
||||
The file chain.f creates a LAMMPS data file containing bead-spring
|
||||
polymer chains and/or monomer solvent atoms. It uses a text file
|
||||
containing chain definition parameters as an input. The created
|
||||
chains and solvent atoms can strongly overlap, so LAMMPS needs to run
|
||||
the system initially with a "soft" pair potential to un-overlap it.
|
||||
The syntax for running the tool is
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
chain < def.chain > data.file
|
||||
|
||||
See the def.chain or def.chain.ab files in the tools directory for
|
||||
examples of definition files. This tool was used to create the
|
||||
system for the :doc:`chain benchmark <Section_perf>`.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _colvars:
|
||||
|
||||
colvars tools
|
||||
---------------------------
|
||||
|
||||
The colvars directory contains a collection of tools for postprocessing
|
||||
data produced by the colvars collective variable library.
|
||||
To compile the tools, edit the makefile for your system and run "make".
|
||||
|
||||
Please report problems and issues the colvars library and its tools
|
||||
at: https://github.com/colvars/colvars/issues
|
||||
|
||||
abf_integrate:
|
||||
|
||||
MC-based integration of multidimensional free energy gradient
|
||||
Version 20110511
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Syntax: ./abf_integrate < filename > [-n < nsteps >] [-t < temp >] [-m [0|1] (metadynamics)] [-h < hill_height >] [-f < variable_hill_factor >]
|
||||
|
||||
The LAMMPS interface to the colvars collective variable library, as
|
||||
well as these tools, were created by Axel Kohlmeyer (akohlmey at
|
||||
gmail.com) at ICTP, Italy.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _create:
|
||||
|
||||
createatoms tool
|
||||
-----------------------------
|
||||
|
||||
The tools/createatoms directory contains a Fortran program called
|
||||
createAtoms.f which can generate a variety of interesting crystal
|
||||
structures and geometries and output the resulting list of atom
|
||||
coordinates in LAMMPS or other formats.
|
||||
|
||||
See the included Manual.pdf for details.
|
||||
|
||||
The tool is authored by Xiaowang Zhou (Sandia), xzhou at sandia.gov.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _data:
|
||||
|
||||
data2xmovie tool
|
||||
---------------------------
|
||||
|
||||
The file data2xmovie.c converts a LAMMPS data file into a snapshot
|
||||
suitable for visualizing with the :ref:`xmovie <xmovie>` tool, as if it had
|
||||
been output with a dump command from LAMMPS itself. The syntax for
|
||||
running the tool is
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
data2xmovie [options] < infile > outfile
|
||||
|
||||
See the top of the data2xmovie.c file for a discussion of the options.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _eamdb:
|
||||
|
||||
eam database tool
|
||||
-----------------------------
|
||||
|
||||
The tools/eam_database directory contains a Fortran program that will
|
||||
generate EAM alloy setfl potential files for any combination of 16
|
||||
elements: Cu, Ag, Au, Ni, Pd, Pt, Al, Pb, Fe, Mo, Ta, W, Mg, Co, Ti,
|
||||
Zr. The files can then be used with the :doc:`pair_style eam/alloy <pair_eam>` command.
|
||||
|
||||
The tool is authored by Xiaowang Zhou (Sandia), xzhou at sandia.gov,
|
||||
and is based on his paper:
|
||||
|
||||
X. W. Zhou, R. A. Johnson, and H. N. G. Wadley, Phys. Rev. B, 69,
|
||||
144113 (2004).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _eamgn:
|
||||
|
||||
eam generate tool
|
||||
-----------------------------
|
||||
|
||||
The tools/eam_generate directory contains several one-file C programs
|
||||
that convert an analytic formula into a tabulated :doc:`embedded atom method (EAM) <pair_eam>` setfl potential file. The potentials they
|
||||
produce are in the potentials directory, and can be used with the
|
||||
:doc:`pair_style eam/alloy <pair_eam>` command.
|
||||
|
||||
The source files and potentials were provided by Gerolf Ziegenhain
|
||||
(gerolf at ziegenhain.com).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _eff:
|
||||
|
||||
eff tool
|
||||
------------------
|
||||
|
||||
The tools/eff directory contains various scripts for generating
|
||||
structures and post-processing output for simulations using the
|
||||
electron force field (eFF).
|
||||
|
||||
These tools were provided by Andres Jaramillo-Botero at CalTech
|
||||
(ajaramil at wag.caltech.edu).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _emacs:
|
||||
|
||||
emacs tool
|
||||
----------------------
|
||||
|
||||
The tools/emacs directory contains a Lips add-on file for Emacs that
|
||||
enables a lammps-mode for editing of input scripts when using Emacs,
|
||||
with various highlighting options setup.
|
||||
|
||||
These tools were provided by Aidan Thompson at Sandia
|
||||
(athomps at sandia.gov).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _fep:
|
||||
|
||||
fep tool
|
||||
------------------
|
||||
|
||||
The tools/fep directory contains Python scripts useful for
|
||||
post-processing results from performing free-energy perturbation
|
||||
simulations using the USER-FEP package.
|
||||
|
||||
The scripts were contributed by Agilio Padua (Universite Blaise
|
||||
Pascal Clermont-Ferrand), agilio.padua at univ-bpclermont.fr.
|
||||
|
||||
See README file in the tools/fep directory.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _ipi:
|
||||
|
||||
i-pi tool
|
||||
-------------------
|
||||
|
||||
The tools/i-pi directory contains a version of the i-PI package, with
|
||||
all the LAMMPS-unrelated files removed. It is provided so that it can
|
||||
be used with the :doc:`fix ipi <fix_ipi>` command to perform
|
||||
path-integral molecular dynamics (PIMD).
|
||||
|
||||
The i-PI package was created and is maintained by Michele Ceriotti,
|
||||
michele.ceriotti at gmail.com, to interface to a variety of molecular
|
||||
dynamics codes.
|
||||
|
||||
See the tools/i-pi/manual.pdf file for an overview of i-PI, and the
|
||||
:doc:`fix ipi <fix_ipi>` doc page for further details on running PIMD
|
||||
calculations with LAMMPS.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _ipp:
|
||||
|
||||
ipp tool
|
||||
------------------
|
||||
|
||||
The tools/ipp directory contains a Perl script ipp which can be used
|
||||
to facilitate the creation of a complicated file (say, a lammps input
|
||||
script or tools/createatoms input file) using a template file.
|
||||
|
||||
ipp was created and is maintained by Reese Jones (Sandia), rjones at
|
||||
sandia.gov.
|
||||
|
||||
See two examples in the tools/ipp directory. One of them is for the
|
||||
tools/createatoms tool's input file.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _kate:
|
||||
|
||||
kate tool
|
||||
--------------------
|
||||
|
||||
The file in the tools/kate directory is an add-on to the Kate editor
|
||||
in the KDE suite that allow syntax highlighting of LAMMPS input
|
||||
scripts. See the README.txt file for details.
|
||||
|
||||
The file was provided by Alessandro Luigi Sellerio
|
||||
(alessandro.sellerio at ieni.cnr.it).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _arc:
|
||||
|
||||
lmp2arc tool
|
||||
----------------------
|
||||
|
||||
The lmp2arc sub-directory contains a tool for converting LAMMPS output
|
||||
files to the format for Accelrys' Insight MD code (formerly
|
||||
MSI/Biosym and its Discover MD code). See the README file for more
|
||||
information.
|
||||
|
||||
This tool was written by John Carpenter (Cray), Michael Peachey
|
||||
(Cray), and Steve Lustig (Dupont). John is now at the Mayo Clinic
|
||||
(jec at mayo.edu), but still fields questions about the tool.
|
||||
|
||||
This tool was updated for the current LAMMPS C++ version by Jeff
|
||||
Greathouse at Sandia (jagreat at sandia.gov).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _cfg:
|
||||
|
||||
lmp2cfg tool
|
||||
----------------------
|
||||
|
||||
The lmp2cfg sub-directory contains a tool for converting LAMMPS output
|
||||
files into a series of *.cfg files which can be read into the
|
||||
`AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_ visualizer. See
|
||||
the README file for more information.
|
||||
|
||||
This tool was written by Ara Kooser at Sandia (askoose at sandia.gov).
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _vmd:
|
||||
|
||||
lmp2vmd tool
|
||||
----------------------
|
||||
|
||||
The lmp2vmd sub-directory contains a README.txt file that describes
|
||||
details of scripts and plugin support within the `VMD package <http://www.ks.uiuc.edu/Research/vmd>`_ for visualizing LAMMPS
|
||||
dump files.
|
||||
|
||||
The VMD plugins and other supporting scripts were written by Axel
|
||||
Kohlmeyer (akohlmey at cmm.chem.upenn.edu) at U Penn.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _matlab:
|
||||
|
||||
matlab tool
|
||||
------------------------
|
||||
|
||||
The matlab sub-directory contains several :ref:`MATLAB <matlab>` scripts for
|
||||
post-processing LAMMPS output. The scripts include readers for log
|
||||
and dump files, a reader for EAM potential files, and a converter that
|
||||
reads LAMMPS dump files and produces CFG files that can be visualized
|
||||
with the `AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_
|
||||
visualizer.
|
||||
|
||||
See the README.pdf file for more information.
|
||||
|
||||
These scripts were written by Arun Subramaniyan at Purdue Univ
|
||||
(asubrama at purdue.edu).
|
||||
|
||||
.. _matlab: http://www.mathworks.com
|
||||
|
||||
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _micelle:
|
||||
|
||||
micelle2d tool
|
||||
----------------------------
|
||||
|
||||
The file micelle2d.f creates a LAMMPS data file containing short lipid
|
||||
chains in a monomer solution. It uses a text file containing lipid
|
||||
definition parameters as an input. The created molecules and solvent
|
||||
atoms can strongly overlap, so LAMMPS needs to run the system
|
||||
initially with a "soft" pair potential to un-overlap it. The syntax
|
||||
for running the tool is
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
micelle2d < def.micelle2d > data.file
|
||||
|
||||
See the def.micelle2d file in the tools directory for an example of a
|
||||
definition file. This tool was used to create the system for the
|
||||
:doc:`micelle example <Section_example>`.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _moltemplate:
|
||||
|
||||
moltemplate tool
|
||||
----------------------------------
|
||||
|
||||
The moltemplate sub-directory contains a Python-based tool for
|
||||
building molecular systems based on a text-file description, and
|
||||
creating LAMMPS data files that encode their molecular topology as
|
||||
lists of bonds, angles, dihedrals, etc. See the README.TXT file for
|
||||
more information.
|
||||
|
||||
This tool was written by Andrew Jewett (jewett.aij at gmail.com), who
|
||||
supports it. It has its own WWW page at
|
||||
`http://moltemplate.org <http://moltemplate.org>`_.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _msi:
|
||||
|
||||
msi2lmp tool
|
||||
----------------------
|
||||
|
||||
The msi2lmp sub-directory contains a tool for creating LAMMPS input
|
||||
data files from Accelrys' Insight MD code (formerly MSI/Biosym and
|
||||
its Discover MD code). See the README file for more information.
|
||||
|
||||
This tool was written by John Carpenter (Cray), Michael Peachey
|
||||
(Cray), and Steve Lustig (Dupont). John is now at the Mayo Clinic
|
||||
(jec at mayo.edu), but still fields questions about the tool.
|
||||
|
||||
This tool may be out-of-date with respect to the current LAMMPS and
|
||||
Insight versions. Since we don't use it at Sandia, you'll need to
|
||||
experiment with it yourself.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _phonon:
|
||||
|
||||
phonon tool
|
||||
------------------------
|
||||
|
||||
The phonon sub-directory contains a post-processing tool useful for
|
||||
analyzing the output of the :doc:`fix phonon <fix_phonon>` command in
|
||||
the USER-PHONON package.
|
||||
|
||||
See the README file for instruction on building the tool and what
|
||||
library it needs. And see the examples/USER/phonon directory
|
||||
for example problems that can be post-processed with this tool.
|
||||
|
||||
This tool was written by Ling-Ti Kong at Shanghai Jiao Tong
|
||||
University.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _polybond:
|
||||
|
||||
polymer bonding tool
|
||||
-----------------------------------
|
||||
|
||||
The polybond sub-directory contains a Python-based tool useful for
|
||||
performing "programmable polymer bonding". The Python file
|
||||
lmpsdata.py provides a "Lmpsdata" class with various methods which can
|
||||
be invoked by a user-written Python script to create data files with
|
||||
complex bonding topologies.
|
||||
|
||||
See the Manual.pdf for details and example scripts.
|
||||
|
||||
This tool was written by Zachary Kraus at Georgia Tech.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _pymol:
|
||||
|
||||
pymol_asphere tool
|
||||
------------------------------
|
||||
|
||||
The pymol_asphere sub-directory contains a tool for converting a
|
||||
LAMMPS dump file that contains orientation info for ellipsoidal
|
||||
particles into an input file for the :ref:`PyMol visualization package <pymol>`.
|
||||
|
||||
.. _pymol: http://pymol.sourceforge.net
|
||||
|
||||
|
||||
|
||||
Specifically, the tool triangulates the ellipsoids so they can be
|
||||
viewed as true ellipsoidal particles within PyMol. See the README and
|
||||
examples directory within pymol_asphere for more information.
|
||||
|
||||
This tool was written by Mike Brown at Sandia.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _pythontools:
|
||||
|
||||
python tool
|
||||
-----------------------------
|
||||
|
||||
The python sub-directory contains several Python scripts
|
||||
that perform common LAMMPS post-processing tasks, such as:
|
||||
|
||||
* extract thermodynamic info from a log file as columns of numbers
|
||||
* plot two columns of thermodynamic info from a log file using GnuPlot
|
||||
* sort the snapshots in a dump file by atom ID
|
||||
* convert multiple :doc:`NEB <neb>` dump files into one dump file for viz
|
||||
* convert dump files into XYZ, CFG, or PDB format for viz by other packages
|
||||
|
||||
These are simple scripts built on `Pizza.py <pizza_>`_ modules. See the
|
||||
README for more info on Pizza.py and how to use these scripts.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _reax:
|
||||
|
||||
reax tool
|
||||
--------------------
|
||||
|
||||
The reax sub-directory contains stand-alond codes that can
|
||||
post-process the output of the :doc:`fix reax/bonds <fix_reax_bonds>`
|
||||
command from a LAMMPS simulation using :doc:`ReaxFF <pair_reax>`. See
|
||||
the README.txt file for more info.
|
||||
|
||||
These tools were written by Aidan Thompson at Sandia.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _restart:
|
||||
|
||||
restart2data tool
|
||||
-------------------------------
|
||||
|
||||
.. note::
|
||||
|
||||
This tool is now obsolete and is not included in the current
|
||||
LAMMPS distribution. This is becaues there is now a
|
||||
:doc:`write_data <write_data>` command, which can create a data file
|
||||
from within an input script. Running LAMMPS with the "-r"
|
||||
:ref:`command-line switch <start_7>` as follows:
|
||||
|
||||
lmp_g++ -r restartfile datafile
|
||||
|
||||
is the same as running a 2-line input script:
|
||||
|
||||
read_restart restartfile
|
||||
write_data datafile
|
||||
|
||||
which will produce the same data file that the restart2data tool used
|
||||
to create. The following information is included in case you have an
|
||||
older version of LAMMPS which still includes the restart2data tool.
|
||||
|
||||
The file restart2data.cpp converts a binary LAMMPS restart file into
|
||||
an ASCII data file. The syntax for running the tool is
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
restart2data restart-file data-file (input-file)
|
||||
|
||||
Input-file is optional and if specified will contain LAMMPS input
|
||||
commands for the masses and force field parameters, instead of putting
|
||||
those in the data-file. Only a few force field styles currently
|
||||
support this option.
|
||||
|
||||
This tool must be compiled on a platform that can read the binary file
|
||||
created by a LAMMPS run, since binary files are not compatible across
|
||||
all platforms.
|
||||
|
||||
Note that a text data file has less precision than a binary restart
|
||||
file. Hence, continuing a run from a converted data file will
|
||||
typically not conform as closely to a previous run as will restarting
|
||||
from a binary restart file.
|
||||
|
||||
If a "%" appears in the specified restart-file, the tool expects a set
|
||||
of multiple files to exist. See the :doc:`restart <restart>` and
|
||||
:doc:`write_restart <write_restart>` commands for info on how such sets
|
||||
of files are written by LAMMPS, and how the files are named.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _vim:
|
||||
|
||||
vim tool
|
||||
------------------
|
||||
|
||||
The files in the tools/vim directory are add-ons to the VIM editor
|
||||
that allow easier editing of LAMMPS input scripts. See the README.txt
|
||||
file for details.
|
||||
|
||||
These files were provided by Gerolf Ziegenhain (gerolf at
|
||||
ziegenhain.com)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _xmgrace:
|
||||
|
||||
xmgrace tool
|
||||
--------------------------
|
||||
|
||||
The files in the tools/xmgrace directory can be used to plot the
|
||||
thermodynamic data in LAMMPS log files via the xmgrace plotting
|
||||
package. There are several tools in the directory that can be used in
|
||||
post-processing mode. The lammpsplot.cpp file can be compiled and
|
||||
used to create plots from the current state of a running LAMMPS
|
||||
simulation.
|
||||
|
||||
See the README file for details.
|
||||
|
||||
These files were provided by Vikas Varshney (vv0210 at gmail.com)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _xmovie:
|
||||
|
||||
xmovie tool
|
||||
------------------------
|
||||
|
||||
The xmovie tool is an X-based visualization package that can read
|
||||
LAMMPS dump files and animate them. It is in its own sub-directory
|
||||
with the tools directory. You may need to modify its Makefile so that
|
||||
it can find the appropriate X libraries to link against.
|
||||
|
||||
The syntax for running xmovie is
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
xmovie [options] dump.file1 dump.file2 ...
|
||||
|
||||
If you just type "xmovie" you will see a list of options. Note that
|
||||
by default, LAMMPS dump files are in scaled coordinates, so you
|
||||
typically need to use the -scale option with xmovie. When xmovie runs
|
||||
it opens a visualization window and a control window. The control
|
||||
options are straightforward to use.
|
||||
|
||||
Xmovie was mostly written by Mike Uttormark (U Wisconsin) while he
|
||||
spent a summer at Sandia. It displays 2d projections of a 3d domain.
|
||||
While simple in design, it is an amazingly fast program that can
|
||||
render large numbers of atoms very quickly. It's a useful tool for
|
||||
debugging LAMMPS input and output and making sure your simulation is
|
||||
doing what you think it should. The animations on the Examples page
|
||||
of the `LAMMPS WWW site <lws_>`_ were created with xmovie.
|
||||
|
||||
I've lost contact with Mike, so I hope he's comfortable with us
|
||||
distributing his great tool!
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,223 @@
|
|||
:doc:`Return to Section accelerate overview <Section_accelerate>`
|
||||
|
||||
5.USER-CUDA package
|
||||
-------------------
|
||||
|
||||
The USER-CUDA package was developed by Christian Trott (Sandia) while
|
||||
at U Technology Ilmenau in Germany. It provides NVIDIA GPU versions
|
||||
of many pair styles, many fixes, a few computes, and for long-range
|
||||
Coulombics via the PPPM command. It has the following general
|
||||
features:
|
||||
|
||||
* The package is designed to allow an entire LAMMPS calculation, for
|
||||
many timesteps, to run entirely on the GPU (except for inter-processor
|
||||
MPI communication), so that atom-based data (e.g. coordinates, forces)
|
||||
do not have to move back-and-forth between the CPU and GPU.
|
||||
* The speed-up advantage of this approach is typically better when the
|
||||
number of atoms per GPU is large
|
||||
* Data will stay on the GPU until a timestep where a non-USER-CUDA fix
|
||||
or compute is invoked. Whenever a non-GPU operation occurs (fix,
|
||||
compute, output), data automatically moves back to the CPU as needed.
|
||||
This may incur a performance penalty, but should otherwise work
|
||||
transparently.
|
||||
* Neighbor lists are constructed on the GPU.
|
||||
* The package only supports use of a single MPI task, running on a
|
||||
single CPU (core), assigned to each GPU.
|
||||
Here is a quick overview of how to use the USER-CUDA package:
|
||||
|
||||
* build the library in lib/cuda for your GPU hardware with desired precision
|
||||
* include the USER-CUDA package and build LAMMPS
|
||||
* use the mpirun command to specify 1 MPI task per GPU (on each node)
|
||||
* enable the USER-CUDA package via the "-c on" command-line switch
|
||||
* specify the # of GPUs per node
|
||||
* use USER-CUDA styles in your input script
|
||||
|
||||
The latter two steps can be done using the "-pk cuda" and "-sf cuda"
|
||||
:ref:`command-line switches <start_7>` respectively. Or
|
||||
the effect of the "-pk" or "-sf" switches can be duplicated by adding
|
||||
the :doc:`package cuda <package>` or :doc:`suffix cuda <suffix>` commands
|
||||
respectively to your input script.
|
||||
|
||||
**Required hardware/software:**
|
||||
|
||||
To use this package, you need to have one or more NVIDIA GPUs and
|
||||
install the NVIDIA Cuda software on your system:
|
||||
|
||||
Your NVIDIA GPU needs to support Compute Capability 1.3. This list may
|
||||
help you to find out the Compute Capability of your card:
|
||||
|
||||
http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units
|
||||
|
||||
Install the Nvidia Cuda Toolkit (version 3.2 or higher) and the
|
||||
corresponding GPU drivers. The Nvidia Cuda SDK is not required, but
|
||||
we recommend it also be installed. You can then make sure its sample
|
||||
projects can be compiled without problems.
|
||||
|
||||
**Building LAMMPS with the USER-CUDA package:**
|
||||
|
||||
This requires two steps (a,b): build the USER-CUDA library, then build
|
||||
LAMMPS with the USER-CUDA package.
|
||||
|
||||
You can do both these steps in one line, using the src/Make.py script,
|
||||
described in :ref:`Section 2.4 <start_4>` of the manual.
|
||||
Type "Make.py -h" for help. If run from the src directory, this
|
||||
command will create src/lmp_cuda using src/MAKE/Makefile.mpi as the
|
||||
starting Makefile.machine:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Make.py -p cuda -cuda mode=single arch=20 -o cuda -a lib-cuda file mpi
|
||||
|
||||
Or you can follow these two (a,b) steps:
|
||||
|
||||
(a) Build the USER-CUDA library
|
||||
|
||||
The USER-CUDA library is in lammps/lib/cuda. If your *CUDA* toolkit
|
||||
is not installed in the default system directoy */usr/local/cuda* edit
|
||||
the file *lib/cuda/Makefile.common* accordingly.
|
||||
|
||||
To build the library with the settings in lib/cuda/Makefile.default,
|
||||
simply type:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
make
|
||||
|
||||
To set options when the library is built, type "make OPTIONS", where
|
||||
*OPTIONS* are one or more of the following. The settings will be
|
||||
written to the *lib/cuda/Makefile.defaults* before the build.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*precision=N* to set the precision level
|
||||
N = 1 for single precision (default)
|
||||
N = 2 for double precision
|
||||
N = 3 for positions in double precision
|
||||
N = 4 for positions and velocities in double precision
|
||||
*arch=M* to set GPU compute capability
|
||||
M = 35 for Kepler GPUs
|
||||
M = 20 for CC2.0 (GF100/110, e.g. C2050,GTX580,GTX470) (default)
|
||||
M = 21 for CC2.1 (GF104/114, e.g. GTX560, GTX460, GTX450)
|
||||
M = 13 for CC1.3 (GF200, e.g. C1060, GTX285)
|
||||
*prec_timer=0/1* to use hi-precision timers
|
||||
0 = do not use them (default)
|
||||
1 = use them
|
||||
this is usually only useful for Mac machines
|
||||
*dbg=0/1* to activate debug mode
|
||||
0 = no debug mode (default)
|
||||
1 = yes debug mode
|
||||
this is only useful for developers
|
||||
*cufft=1* for use of the CUDA FFT library
|
||||
0 = no CUFFT support (default)
|
||||
in the future other CUDA-enabled FFT libraries might be supported
|
||||
|
||||
If the build is successful, it will produce the files liblammpscuda.a and
|
||||
Makefile.lammps.
|
||||
|
||||
Note that if you change any of the options (like precision), you need
|
||||
to re-build the entire library. Do a "make clean" first, followed by
|
||||
"make".
|
||||
|
||||
(b) Build LAMMPS with the USER-CUDA package
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd lammps/src
|
||||
make yes-user-cuda
|
||||
make machine
|
||||
|
||||
No additional compile/link flags are needed in Makefile.machine.
|
||||
|
||||
Note that if you change the USER-CUDA library precision (discussed
|
||||
above) and rebuild the USER-CUDA library, then you also need to
|
||||
re-install the USER-CUDA package and re-build LAMMPS, so that all
|
||||
affected files are re-compiled and linked to the new USER-CUDA
|
||||
library.
|
||||
|
||||
**Run with the USER-CUDA package from the command line:**
|
||||
|
||||
The mpirun or mpiexec command sets the total number of MPI tasks used
|
||||
by LAMMPS (one or multiple per compute node) and the number of MPI
|
||||
tasks used per node. E.g. the mpirun command in MPICH does this via
|
||||
its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
|
||||
|
||||
When using the USER-CUDA package, you must use exactly one MPI task
|
||||
per physical GPU.
|
||||
|
||||
You must use the "-c on" :ref:`command-line switch <start_7>` to enable the USER-CUDA package.
|
||||
The "-c on" switch also issues a default :doc:`package cuda 1 <package>`
|
||||
command which sets various USER-CUDA options to default values, as
|
||||
discussed on the :doc:`package <package>` command doc page.
|
||||
|
||||
Use the "-sf cuda" :ref:`command-line switch <start_7>`,
|
||||
which will automatically append "cuda" to styles that support it. Use
|
||||
the "-pk cuda Ng" :ref:`command-line switch <start_7>` to
|
||||
set Ng = # of GPUs per node to a different value than the default set
|
||||
by the "-c on" switch (1 GPU) or change other :doc:`package cuda <package>` options.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
lmp_machine -c on -sf cuda -pk cuda 1 -in in.script # 1 MPI task uses 1 GPU
|
||||
mpirun -np 2 lmp_machine -c on -sf cuda -pk cuda 2 -in in.script # 2 MPI tasks use 2 GPUs on a single 16-core (or whatever) node
|
||||
mpirun -np 24 -ppn 2 lmp_machine -c on -sf cuda -pk cuda 2 -in in.script # ditto on 12 16-core nodes
|
||||
|
||||
The syntax for the "-pk" switch is the same as same as the "package
|
||||
cuda" command. See the :doc:`package <package>` command doc page for
|
||||
details, including the default values used for all its options if it
|
||||
is not specified.
|
||||
|
||||
Note that the default for the :doc:`package cuda <package>` command is
|
||||
to set the Newton flag to "off" for both pairwise and bonded
|
||||
interactions. This typically gives fastest performance. If the
|
||||
:doc:`newton <newton>` command is used in the input script, it can
|
||||
override these defaults.
|
||||
|
||||
**Or run with the USER-CUDA package by editing an input script:**
|
||||
|
||||
The discussion above for the mpirun/mpiexec command and the requirement
|
||||
of one MPI task per GPU is the same.
|
||||
|
||||
You must still use the "-c on" :ref:`command-line switch <start_7>` to enable the USER-CUDA package.
|
||||
|
||||
Use the :doc:`suffix cuda <suffix>` command, or you can explicitly add a
|
||||
"cuda" suffix to individual styles in your input script, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style lj/cut/cuda 2.5
|
||||
|
||||
You only need to use the :doc:`package cuda <package>` command if you
|
||||
wish to change any of its option defaults, including the number of
|
||||
GPUs/node (default = 1), as set by the "-c on" :ref:`command-line switch <start_7>`.
|
||||
|
||||
**Speed-ups to expect:**
|
||||
|
||||
The performance of a GPU versus a multi-core CPU is a function of your
|
||||
hardware, which pair style is used, the number of atoms/GPU, and the
|
||||
precision used on the GPU (double, single, mixed).
|
||||
|
||||
See the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the
|
||||
LAMMPS web site for performance of the USER-CUDA package on different
|
||||
hardware.
|
||||
|
||||
**Guidelines for best performance:**
|
||||
|
||||
* The USER-CUDA package offers more speed-up relative to CPU performance
|
||||
when the number of atoms per GPU is large, e.g. on the order of tens
|
||||
or hundreds of 1000s.
|
||||
* As noted above, this package will continue to run a simulation
|
||||
entirely on the GPU(s) (except for inter-processor MPI communication),
|
||||
for multiple timesteps, until a CPU calculation is required, either by
|
||||
a fix or compute that is non-GPU-ized, or until output is performed
|
||||
(thermo or dump snapshot or restart file). The less often this
|
||||
occurs, the faster your simulation will run.
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
None.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,249 @@
|
|||
:doc:`Return to Section accelerate overview <Section_accelerate>`
|
||||
|
||||
5.GPU package
|
||||
-------------
|
||||
|
||||
The GPU package was developed by Mike Brown at ORNL and his
|
||||
collaborators, particularly Trung Nguyen (ORNL). It provides GPU
|
||||
versions of many pair styles, including the 3-body Stillinger-Weber
|
||||
pair style, and for :doc:`kspace_style pppm <kspace_style>` for
|
||||
long-range Coulombics. It has the following general features:
|
||||
|
||||
* It is designed to exploit common GPU hardware configurations where one
|
||||
or more GPUs are coupled to many cores of one or more multi-core CPUs,
|
||||
e.g. within a node of a parallel machine.
|
||||
* Atom-based data (e.g. coordinates, forces) moves back-and-forth
|
||||
between the CPU(s) and GPU every timestep.
|
||||
* Neighbor lists can be built on the CPU or on the GPU
|
||||
* The charge assignement and force interpolation portions of PPPM can be
|
||||
run on the GPU. The FFT portion, which requires MPI communication
|
||||
between processors, runs on the CPU.
|
||||
* Asynchronous force computations can be performed simultaneously on the
|
||||
CPU(s) and GPU.
|
||||
* It allows for GPU computations to be performed in single or double
|
||||
precision, or in mixed-mode precision, where pairwise forces are
|
||||
computed in single precision, but accumulated into double-precision
|
||||
force vectors.
|
||||
* LAMMPS-specific code is in the GPU package. It makes calls to a
|
||||
generic GPU library in the lib/gpu directory. This library provides
|
||||
NVIDIA support as well as more general OpenCL support, so that the
|
||||
same functionality can eventually be supported on a variety of GPU
|
||||
hardware.
|
||||
Here is a quick overview of how to use the GPU package:
|
||||
|
||||
* build the library in lib/gpu for your GPU hardware wity desired precision
|
||||
* include the GPU package and build LAMMPS
|
||||
* use the mpirun command to set the number of MPI tasks/node which determines the number of MPI tasks/GPU
|
||||
* specify the # of GPUs per node
|
||||
* use GPU styles in your input script
|
||||
|
||||
The latter two steps can be done using the "-pk gpu" and "-sf gpu"
|
||||
:ref:`command-line switches <start_7>` respectively. Or
|
||||
the effect of the "-pk" or "-sf" switches can be duplicated by adding
|
||||
the :doc:`package gpu <package>` or :doc:`suffix gpu <suffix>` commands
|
||||
respectively to your input script.
|
||||
|
||||
**Required hardware/software:**
|
||||
|
||||
To use this package, you currently need to have an NVIDIA GPU and
|
||||
install the NVIDIA Cuda software on your system:
|
||||
|
||||
* Check if you have an NVIDIA GPU: cat /proc/driver/nvidia/gpus/0/information
|
||||
* Go to http://www.nvidia.com/object/cuda_get.html
|
||||
* Install a driver and toolkit appropriate for your system (SDK is not necessary)
|
||||
* Run lammps/lib/gpu/nvc_get_devices (after building the GPU library, see below) to list supported devices and properties
|
||||
|
||||
**Building LAMMPS with the GPU package:**
|
||||
|
||||
This requires two steps (a,b): build the GPU library, then build
|
||||
LAMMPS with the GPU package.
|
||||
|
||||
You can do both these steps in one line, using the src/Make.py script,
|
||||
described in :ref:`Section 2.4 <start_4>` of the manual.
|
||||
Type "Make.py -h" for help. If run from the src directory, this
|
||||
command will create src/lmp_gpu using src/MAKE/Makefile.mpi as the
|
||||
starting Makefile.machine:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Make.py -p gpu -gpu mode=single arch=31 -o gpu -a lib-gpu file mpi
|
||||
|
||||
Or you can follow these two (a,b) steps:
|
||||
|
||||
(a) Build the GPU library
|
||||
|
||||
The GPU library is in lammps/lib/gpu. Select a Makefile.machine (in
|
||||
lib/gpu) appropriate for your system. You should pay special
|
||||
attention to 3 settings in this makefile.
|
||||
|
||||
* CUDA_HOME = needs to be where NVIDIA Cuda software is installed on your system
|
||||
* CUDA_ARCH = needs to be appropriate to your GPUs
|
||||
* CUDA_PREC = precision (double, mixed, single) you desire
|
||||
|
||||
See lib/gpu/Makefile.linux.double for examples of the ARCH settings
|
||||
for different GPU choices, e.g. Fermi vs Kepler. It also lists the
|
||||
possible precision settings:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
CUDA_PREC = -D_SINGLE_SINGLE # single precision for all calculations
|
||||
CUDA_PREC = -D_DOUBLE_DOUBLE # double precision for all calculations
|
||||
CUDA_PREC = -D_SINGLE_DOUBLE # accumulation of forces, etc, in double
|
||||
|
||||
The last setting is the mixed mode referred to above. Note that your
|
||||
GPU must support double precision to use either the 2nd or 3rd of
|
||||
these settings.
|
||||
|
||||
To build the library, type:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
make -f Makefile.machine
|
||||
|
||||
If successful, it will produce the files libgpu.a and Makefile.lammps.
|
||||
|
||||
The latter file has 3 settings that need to be appropriate for the
|
||||
paths and settings for the CUDA system software on your machine.
|
||||
Makefile.lammps is a copy of the file specified by the EXTRAMAKE
|
||||
setting in Makefile.machine. You can change EXTRAMAKE or create your
|
||||
own Makefile.lammps.machine if needed.
|
||||
|
||||
Note that to change the precision of the GPU library, you need to
|
||||
re-build the entire library. Do a "clean" first, e.g. "make -f
|
||||
Makefile.linux clean", followed by the make command above.
|
||||
|
||||
(b) Build LAMMPS with the GPU package
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd lammps/src
|
||||
make yes-gpu
|
||||
make machine
|
||||
|
||||
No additional compile/link flags are needed in Makefile.machine.
|
||||
|
||||
Note that if you change the GPU library precision (discussed above)
|
||||
and rebuild the GPU library, then you also need to re-install the GPU
|
||||
package and re-build LAMMPS, so that all affected files are
|
||||
re-compiled and linked to the new GPU library.
|
||||
|
||||
**Run with the GPU package from the command line:**
|
||||
|
||||
The mpirun or mpiexec command sets the total number of MPI tasks used
|
||||
by LAMMPS (one or multiple per compute node) and the number of MPI
|
||||
tasks used per node. E.g. the mpirun command in MPICH does this via
|
||||
its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
|
||||
|
||||
When using the GPU package, you cannot assign more than one GPU to a
|
||||
single MPI task. However multiple MPI tasks can share the same GPU,
|
||||
and in many cases it will be more efficient to run this way. Likewise
|
||||
it may be more efficient to use less MPI tasks/node than the available
|
||||
# of CPU cores. Assignment of multiple MPI tasks to a GPU will happen
|
||||
automatically if you create more MPI tasks/node than there are
|
||||
GPUs/mode. E.g. with 8 MPI tasks/node and 2 GPUs, each GPU will be
|
||||
shared by 4 MPI tasks.
|
||||
|
||||
Use the "-sf gpu" :ref:`command-line switch <start_7>`,
|
||||
which will automatically append "gpu" to styles that support it. Use
|
||||
the "-pk gpu Ng" :ref:`command-line switch <start_7>` to
|
||||
set Ng = # of GPUs/node to use.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
lmp_machine -sf gpu -pk gpu 1 -in in.script # 1 MPI task uses 1 GPU
|
||||
mpirun -np 12 lmp_machine -sf gpu -pk gpu 2 -in in.script # 12 MPI tasks share 2 GPUs on a single 16-core (or whatever) node
|
||||
mpirun -np 48 -ppn 12 lmp_machine -sf gpu -pk gpu 2 -in in.script # ditto on 4 16-core nodes
|
||||
|
||||
Note that if the "-sf gpu" switch is used, it also issues a default
|
||||
:doc:`package gpu 1 <package>` command, which sets the number of
|
||||
GPUs/node to 1.
|
||||
|
||||
Using the "-pk" switch explicitly allows for setting of the number of
|
||||
GPUs/node to use and additional options. Its syntax is the same as
|
||||
same as the "package gpu" command. See the :doc:`package <package>`
|
||||
command doc page for details, including the default values used for
|
||||
all its options if it is not specified.
|
||||
|
||||
Note that the default for the :doc:`package gpu <package>` command is to
|
||||
set the Newton flag to "off" pairwise interactions. It does not
|
||||
affect the setting for bonded interactions (LAMMPS default is "on").
|
||||
The "off" setting for pairwise interaction is currently required for
|
||||
GPU package pair styles.
|
||||
|
||||
**Or run with the GPU package by editing an input script:**
|
||||
|
||||
The discussion above for the mpirun/mpiexec command, MPI tasks/node,
|
||||
and use of multiple MPI tasks/GPU is the same.
|
||||
|
||||
Use the :doc:`suffix gpu <suffix>` command, or you can explicitly add an
|
||||
"gpu" suffix to individual styles in your input script, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style lj/cut/gpu 2.5
|
||||
|
||||
You must also use the :doc:`package gpu <package>` command to enable the
|
||||
GPU package, unless the "-sf gpu" or "-pk gpu" :ref:`command-line switches <start_7>` were used. It specifies the
|
||||
number of GPUs/node to use, as well as other options.
|
||||
|
||||
**Speed-ups to expect:**
|
||||
|
||||
The performance of a GPU versus a multi-core CPU is a function of your
|
||||
hardware, which pair style is used, the number of atoms/GPU, and the
|
||||
precision used on the GPU (double, single, mixed).
|
||||
|
||||
See the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the
|
||||
LAMMPS web site for performance of the GPU package on various
|
||||
hardware, including the Titan HPC platform at ORNL.
|
||||
|
||||
You should also experiment with how many MPI tasks per GPU to use to
|
||||
give the best performance for your problem and machine. This is also
|
||||
a function of the problem size and the pair style being using.
|
||||
Likewise, you should experiment with the precision setting for the GPU
|
||||
library to see if single or mixed precision will give accurate
|
||||
results, since they will typically be faster.
|
||||
|
||||
**Guidelines for best performance:**
|
||||
|
||||
* Using multiple MPI tasks per GPU will often give the best performance,
|
||||
as allowed my most multi-core CPU/GPU configurations.
|
||||
* If the number of particles per MPI task is small (e.g. 100s of
|
||||
particles), it can be more efficient to run with fewer MPI tasks per
|
||||
GPU, even if you do not use all the cores on the compute node.
|
||||
* The :doc:`package gpu <package>` command has several options for tuning
|
||||
performance. Neighbor lists can be built on the GPU or CPU. Force
|
||||
calculations can be dynamically balanced across the CPU cores and
|
||||
GPUs. GPU-specific settings can be made which can be optimized
|
||||
for different hardware. See the :doc:`packakge <package>` command
|
||||
doc page for details.
|
||||
* As described by the :doc:`package gpu <package>` command, GPU
|
||||
accelerated pair styles can perform computations asynchronously with
|
||||
CPU computations. The "Pair" time reported by LAMMPS will be the
|
||||
maximum of the time required to complete the CPU pair style
|
||||
computations and the time required to complete the GPU pair style
|
||||
computations. Any time spent for GPU-enabled pair styles for
|
||||
computations that run simultaneously with :doc:`bond <bond_style>`,
|
||||
:doc:`angle <angle_style>`, :doc:`dihedral <dihedral_style>`,
|
||||
:doc:`improper <improper_style>`, and :doc:`long-range <kspace_style>`
|
||||
calculations will not be included in the "Pair" time.
|
||||
* When the *mode* setting for the package gpu command is force/neigh,
|
||||
the time for neighbor list calculations on the GPU will be added into
|
||||
the "Pair" time, not the "Neigh" time. An additional breakdown of the
|
||||
times required for various tasks on the GPU (data copy, neighbor
|
||||
calculations, force computations, etc) are output only with the LAMMPS
|
||||
screen output (not in the log file) at the end of each run. These
|
||||
timings represent total time spent on the GPU for each routine,
|
||||
regardless of asynchronous CPU calculations.
|
||||
* The output section "GPU Time Info (average)" reports "Max Mem / Proc".
|
||||
This is the maximum memory used at one time on the GPU for data
|
||||
storage by a single MPI process.
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
None.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,317 @@
|
|||
:doc:`Return to Section accelerate overview <Section_accelerate>`
|
||||
|
||||
5.USER-INTEL package
|
||||
--------------------
|
||||
|
||||
The USER-INTEL package was developed by Mike Brown at Intel
|
||||
Corporation. It provides two methods for accelerating simulations,
|
||||
depending on the hardware you have. The first is acceleration on
|
||||
Intel(R) CPUs by running in single, mixed, or double precision with
|
||||
vectorization. The second is acceleration on Intel(R) Xeon Phi(TM)
|
||||
coprocessors via offloading neighbor list and non-bonded force
|
||||
calculations to the Phi. The same C++ code is used in both cases.
|
||||
When offloading to a coprocessor from a CPU, the same routine is run
|
||||
twice, once on the CPU and once with an offload flag.
|
||||
|
||||
Note that the USER-INTEL package supports use of the Phi in "offload"
|
||||
mode, not "native" mode like the :doc:`KOKKOS package <accelerate_kokkos>`.
|
||||
|
||||
Also note that the USER-INTEL package can be used in tandem with the
|
||||
:doc:`USER-OMP package <accelerate_omp>`. This is useful when
|
||||
offloading pair style computations to the Phi, so that other styles
|
||||
not supported by the USER-INTEL package, e.g. bond, angle, dihedral,
|
||||
improper, and long-range electrostatics, can run simultaneously in
|
||||
threaded mode on the CPU cores. Since less MPI tasks than CPU cores
|
||||
will typically be invoked when running with coprocessors, this enables
|
||||
the extra CPU cores to be used for useful computation.
|
||||
|
||||
As illustrated below, if LAMMPS is built with both the USER-INTEL and
|
||||
USER-OMP packages, this dual mode of operation is made easier to use,
|
||||
via the "-suffix hybrid intel omp" :ref:`command-line switch <start_7>` or the :doc:`suffix hybrid intel omp <suffix>` command. Both set a second-choice suffix to "omp" so
|
||||
that styles from the USER-INTEL package will be used if available,
|
||||
with styles from the USER-OMP package as a second choice.
|
||||
|
||||
Here is a quick overview of how to use the USER-INTEL package for CPU
|
||||
acceleration, assuming one or more 16-core nodes. More details
|
||||
follow.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
use an Intel compiler
|
||||
use these CCFLAGS settings in Makefile.machine: -fopenmp, -DLAMMPS_MEMALIGN=64, -restrict, -xHost, -fno-alias, -ansi-alias, -override-limits
|
||||
use these LINKFLAGS settings in Makefile.machine: -fopenmp, -xHost
|
||||
make yes-user-intel yes-user-omp # including user-omp is optional
|
||||
make mpi # build with the USER-INTEL package, if settings (including compiler) added to Makefile.mpi
|
||||
make intel_cpu # or Makefile.intel_cpu already has settings, uses Intel MPI wrapper
|
||||
Make.py -v -p intel omp -intel cpu -a file mpich_icc # or one-line build via Make.py for MPICH
|
||||
Make.py -v -p intel omp -intel cpu -a file ompi_icc # or for OpenMPI
|
||||
Make.py -v -p intel omp -intel cpu -a file intel_cpu # or for Intel MPI wrapper
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
lmp_machine -sf intel -pk intel 0 omp 16 -in in.script # 1 node, 1 MPI task/node, 16 threads/task, no USER-OMP
|
||||
mpirun -np 32 lmp_machine -sf intel -in in.script # 2 nodess, 16 MPI tasks/node, no threads, no USER-OMP
|
||||
lmp_machine -sf hybrid intel omp -pk intel 0 omp 16 -pk omp 16 -in in.script # 1 node, 1 MPI task/node, 16 threads/task, with USER-OMP
|
||||
mpirun -np 32 -ppn 4 lmp_machine -sf hybrid intel omp -pk omp 4 -pk omp 4 -in in.script # 8 nodes, 4 MPI tasks/node, 4 threads/task, with USER-OMP
|
||||
|
||||
Here is a quick overview of how to use the USER-INTEL package for the
|
||||
same CPUs as above (16 cores/node), with an additional Xeon Phi(TM)
|
||||
coprocessor per node. More details follow.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Same as above for building, with these additions/changes:
|
||||
add the flag -DLMP_INTEL_OFFLOAD to CCFLAGS in Makefile.machine
|
||||
add the flag -offload to LINKFLAGS in Makefile.machine
|
||||
for Make.py change "-intel cpu" to "-intel phi", and "file intel_cpu" to "file intel_phi"
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
mpirun -np 32 lmp_machine -sf intel -pk intel 1 -in in.script # 2 nodes, 16 MPI tasks/node, 240 total threads on coprocessor, no USER-OMP
|
||||
mpirun -np 16 -ppn 8 lmp_machine -sf intel -pk intel 1 omp 2 -in in.script # 2 nodes, 8 MPI tasks/node, 2 threads/task, 240 total threads on coprocessor, no USER-OMP
|
||||
mpirun -np 32 -ppn 8 lmp_machine -sf hybrid intel omp -pk intel 1 omp 2 -pk omp 2 -in in.script # 4 nodes, 8 MPI tasks/node, 2 threads/task, 240 total threads on coprocessor, with USER-OMP
|
||||
|
||||
**Required hardware/software:**
|
||||
|
||||
Your compiler must support the OpenMP interface. Use of an Intel(R)
|
||||
C++ compiler is recommended, but not required. However, g++ will not
|
||||
recognize some of the settings listed above, so they cannot be used.
|
||||
Optimizations for vectorization have only been tested with the
|
||||
Intel(R) compiler. Use of other compilers may not result in
|
||||
vectorization, or give poor performance.
|
||||
|
||||
The recommended version of the Intel(R) compiler is 14.0.1.106.
|
||||
Versions 15.0.1.133 and later are also supported. If using Intel(R)
|
||||
MPI, versions 15.0.2.044 and later are recommended.
|
||||
|
||||
To use the offload option, you must have one or more Intel(R) Xeon
|
||||
Phi(TM) coprocessors and use an Intel(R) C++ compiler.
|
||||
|
||||
**Building LAMMPS with the USER-INTEL package:**
|
||||
|
||||
The lines above illustrate how to include/build with the USER-INTEL
|
||||
package, for either CPU or Phi support, in two steps, using the "make"
|
||||
command. Or how to do it with one command via the src/Make.py script,
|
||||
described in :ref:`Section 2.4 <start_4>` of the manual.
|
||||
Type "Make.py -h" for help. Because the mechanism for specifing what
|
||||
compiler to use (Intel in this case) is different for different MPI
|
||||
wrappers, 3 versions of the Make.py command are shown.
|
||||
|
||||
Note that if you build with support for a Phi coprocessor, the same
|
||||
binary can be used on nodes with or without coprocessors installed.
|
||||
However, if you do not have coprocessors on your system, building
|
||||
without offload support will produce a smaller binary.
|
||||
|
||||
If you also build with the USER-OMP package, you can use styles from
|
||||
both packages, as described below.
|
||||
|
||||
Note that the CCFLAGS and LINKFLAGS settings in Makefile.machine must
|
||||
include "-fopenmp". Likewise, if you use an Intel compiler, the
|
||||
CCFLAGS setting must include "-restrict". For Phi support, the
|
||||
"-DLMP_INTEL_OFFLOAD" (CCFLAGS) and "-offload" (LINKFLAGS) settings
|
||||
are required. The other settings listed above are optional, but will
|
||||
typically improve performance. The Make.py command will add all of
|
||||
these automatically.
|
||||
|
||||
If you are compiling on the same architecture that will be used for
|
||||
the runs, adding the flag *-xHost* to CCFLAGS enables vectorization
|
||||
with the Intel(R) compiler. Otherwise, you must provide the correct
|
||||
compute node architecture to the -x option (e.g. -xAVX).
|
||||
|
||||
Example machines makefiles Makefile.intel_cpu and Makefile.intel_phi
|
||||
are included in the src/MAKE/OPTIONS directory with settings that
|
||||
perform well with the Intel(R) compiler. The latter has support for
|
||||
offload to Phi coprocessors; the former does not.
|
||||
|
||||
**Run with the USER-INTEL package from the command line:**
|
||||
|
||||
The mpirun or mpiexec command sets the total number of MPI tasks used
|
||||
by LAMMPS (one or multiple per compute node) and the number of MPI
|
||||
tasks used per node. E.g. the mpirun command in MPICH does this via
|
||||
its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
|
||||
|
||||
If you compute (any portion of) pairwise interactions using USER-INTEL
|
||||
pair styles on the CPU, or use USER-OMP styles on the CPU, you need to
|
||||
choose how many OpenMP threads per MPI task to use. If both packages
|
||||
are used, it must be done for both packages, and the same thread count
|
||||
value should be used for both. Note that the product of MPI tasks *
|
||||
threads/task should not exceed the physical number of cores (on a
|
||||
node), otherwise performance will suffer.
|
||||
|
||||
When using the USER-INTEL package for the Phi, you also need to
|
||||
specify the number of coprocessor/node and optionally the number of
|
||||
coprocessor threads per MPI task to use. Note that coprocessor
|
||||
threads (which run on the coprocessor) are totally independent from
|
||||
OpenMP threads (which run on the CPU). The default values for the
|
||||
settings that affect coprocessor threads are typically fine, as
|
||||
discussed below.
|
||||
|
||||
As in the lines above, use the "-sf intel" or "-sf hybrid intel omp"
|
||||
:ref:`command-line switch <start_7>`, which will
|
||||
automatically append "intel" to styles that support it. In the second
|
||||
case, "omp" will be appended if an "intel" style does not exist.
|
||||
|
||||
Note that if either switch is used, it also invokes a default command:
|
||||
:doc:`package intel 1 <package>`. If the "-sf hybrid intel omp" switch
|
||||
is used, the default USER-OMP command :doc:`package omp 0 <package>` is
|
||||
also invoked (if LAMMPS was built with USER-OMP). Both set the number
|
||||
of OpenMP threads per MPI task via the OMP_NUM_THREADS environment
|
||||
variable. The first command sets the number of Xeon Phi(TM)
|
||||
coprocessors/node to 1 (ignored if USER-INTEL is built for CPU-only),
|
||||
and the precision mode to "mixed" (default value).
|
||||
|
||||
You can also use the "-pk intel Nphi" :ref:`command-line switch <start_7>` to explicitly set Nphi = # of Xeon
|
||||
Phi(TM) coprocessors/node, as well as additional options. Nphi should
|
||||
be >= 1 if LAMMPS was built with coprocessor support, otherswise Nphi
|
||||
= 0 for a CPU-only build. All the available coprocessor threads on
|
||||
each Phi will be divided among MPI tasks, unless the *tptask* option
|
||||
of the "-pk intel" :ref:`command-line switch <start_7>` is
|
||||
used to limit the coprocessor threads per MPI task. See the :doc:`package intel <package>` command for details, including the default values
|
||||
used for all its options if not specified, and how to set the number
|
||||
of OpenMP threads via the OMP_NUM_THREADS environment variable if
|
||||
desired.
|
||||
|
||||
If LAMMPS was built with the USER-OMP package, you can also use the
|
||||
"-pk omp Nt" :ref:`command-line switch <start_7>` to
|
||||
explicitly set Nt = # of OpenMP threads per MPI task to use, as well
|
||||
as additional options. Nt should be the same threads per MPI task as
|
||||
set for the USER-INTEL package, e.g. via the "-pk intel Nphi omp Nt"
|
||||
command. Again, see the :doc:`package omp <package>` command for
|
||||
details, including the default values used for all its options if not
|
||||
specified, and how to set the number of OpenMP threads via the
|
||||
OMP_NUM_THREADS environment variable if desired.
|
||||
|
||||
**Or run with the USER-INTEL package by editing an input script:**
|
||||
|
||||
The discussion above for the mpirun/mpiexec command, MPI tasks/node,
|
||||
OpenMP threads per MPI task, and coprocessor threads per MPI task is
|
||||
the same.
|
||||
|
||||
Use the :doc:`suffix intel <suffix>` or :doc:`suffix hybrid intel omp <suffix>` commands, or you can explicitly add an "intel" or
|
||||
"omp" suffix to individual styles in your input script, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style lj/cut/intel 2.5
|
||||
|
||||
You must also use the :doc:`package intel <package>` command, unless the
|
||||
"-sf intel" or "-pk intel" :ref:`command-line switches <start_7>` were used. It specifies how many
|
||||
coprocessors/node to use, as well as other OpenMP threading and
|
||||
coprocessor options. The :doc:`package <package>` doc page explains how
|
||||
to set the number of OpenMP threads via an environment variable if
|
||||
desired.
|
||||
|
||||
If LAMMPS was also built with the USER-OMP package, you must also use
|
||||
the :doc:`package omp <package>` command to enable that package, unless
|
||||
the "-sf hybrid intel omp" or "-pk omp" :ref:`command-line switches <start_7>` were used. It specifies how many
|
||||
OpenMP threads per MPI task to use (should be same as the setting for
|
||||
the USER-INTEL package), as well as other options. Its doc page
|
||||
explains how to set the number of OpenMP threads via an environment
|
||||
variable if desired.
|
||||
|
||||
**Speed-ups to expect:**
|
||||
|
||||
If LAMMPS was not built with coprocessor support (CPU only) when
|
||||
including the USER-INTEL package, then acclerated styles will run on
|
||||
the CPU using vectorization optimizations and the specified precision.
|
||||
This may give a substantial speed-up for a pair style, particularly if
|
||||
mixed or single precision is used.
|
||||
|
||||
If LAMMPS was built with coproccesor support, the pair styles will run
|
||||
on one or more Intel(R) Xeon Phi(TM) coprocessors (per node). The
|
||||
performance of a Xeon Phi versus a multi-core CPU is a function of
|
||||
your hardware, which pair style is used, the number of
|
||||
atoms/coprocessor, and the precision used on the coprocessor (double,
|
||||
single, mixed).
|
||||
|
||||
See the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the
|
||||
LAMMPS web site for performance of the USER-INTEL package on different
|
||||
hardware.
|
||||
|
||||
.. note::
|
||||
|
||||
Setting core affinity is often used to pin MPI tasks and OpenMP
|
||||
threads to a core or group of cores so that memory access can be
|
||||
uniform. Unless disabled at build time, affinity for MPI tasks and
|
||||
OpenMP threads on the host (CPU) will be set by default on the host
|
||||
when using offload to a coprocessor. In this case, it is unnecessary
|
||||
to use other methods to control affinity (e.g. taskset, numactl,
|
||||
I_MPI_PIN_DOMAIN, etc.). This can be disabled in an input script with
|
||||
the *no_affinity* option to the :doc:`package intel <package>` command
|
||||
or by disabling the option at build time (by adding
|
||||
-DINTEL_OFFLOAD_NOAFFINITY to the CCFLAGS line of your Makefile).
|
||||
Disabling this option is not recommended, especially when running on a
|
||||
machine with hyperthreading disabled.
|
||||
|
||||
**Guidelines for best performance on an Intel(R) Xeon Phi(TM)
|
||||
coprocessor:**
|
||||
|
||||
* The default for the :doc:`package intel <package>` command is to have
|
||||
all the MPI tasks on a given compute node use a single Xeon Phi(TM)
|
||||
coprocessor. In general, running with a large number of MPI tasks on
|
||||
each node will perform best with offload. Each MPI task will
|
||||
automatically get affinity to a subset of the hardware threads
|
||||
available on the coprocessor. For example, if your card has 61 cores,
|
||||
with 60 cores available for offload and 4 hardware threads per core
|
||||
(240 total threads), running with 24 MPI tasks per node will cause
|
||||
each MPI task to use a subset of 10 threads on the coprocessor. Fine
|
||||
tuning of the number of threads to use per MPI task or the number of
|
||||
threads to use per core can be accomplished with keyword settings of
|
||||
the :doc:`package intel <package>` command.
|
||||
* If desired, only a fraction of the pair style computation can be
|
||||
offloaded to the coprocessors. This is accomplished by using the
|
||||
*balance* keyword in the :doc:`package intel <package>` command. A
|
||||
balance of 0 runs all calculations on the CPU. A balance of 1 runs
|
||||
all calculations on the coprocessor. A balance of 0.5 runs half of
|
||||
the calculations on the coprocessor. Setting the balance to -1 (the
|
||||
default) will enable dynamic load balancing that continously adjusts
|
||||
the fraction of offloaded work throughout the simulation. This option
|
||||
typically produces results within 5 to 10 percent of the optimal fixed
|
||||
balance.
|
||||
* When using offload with CPU hyperthreading disabled, it may help
|
||||
performance to use fewer MPI tasks and OpenMP threads than available
|
||||
cores. This is due to the fact that additional threads are generated
|
||||
internally to handle the asynchronous offload tasks.
|
||||
* If running short benchmark runs with dynamic load balancing, adding a
|
||||
short warm-up run (10-20 steps) will allow the load-balancer to find a
|
||||
near-optimal setting that will carry over to additional runs.
|
||||
* If pair computations are being offloaded to an Intel(R) Xeon Phi(TM)
|
||||
coprocessor, a diagnostic line is printed to the screen (not to the
|
||||
log file), during the setup phase of a run, indicating that offload
|
||||
mode is being used and indicating the number of coprocessor threads
|
||||
per MPI task. Additionally, an offload timing summary is printed at
|
||||
the end of each run. When offloading, the frequency for :doc:`atom sorting <atom_modify>` is changed to 1 so that the per-atom data is
|
||||
effectively sorted at every rebuild of the neighbor lists.
|
||||
* For simulations with long-range electrostatics or bond, angle,
|
||||
dihedral, improper calculations, computation and data transfer to the
|
||||
coprocessor will run concurrently with computations and MPI
|
||||
communications for these calculations on the host CPU. The USER-INTEL
|
||||
package has two modes for deciding which atoms will be handled by the
|
||||
coprocessor. This choice is controlled with the *ghost* keyword of
|
||||
the :doc:`package intel <package>` command. When set to 0, ghost atoms
|
||||
(atoms at the borders between MPI tasks) are not offloaded to the
|
||||
card. This allows for overlap of MPI communication of forces with
|
||||
computation on the coprocessor when the :doc:`newton <newton>` setting
|
||||
is "on". The default is dependent on the style being used, however,
|
||||
better performance may be achieved by setting this option
|
||||
explictly.
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
When offloading to a coprocessor, :doc:`hybrid <pair_hybrid>` styles
|
||||
that require skip lists for neighbor builds cannot be offloaded.
|
||||
Using :doc:`hybrid/overlay <pair_hybrid>` is allowed. Only one intel
|
||||
accelerated style may be used with hybrid styles.
|
||||
:doc:`Special_bonds <special_bonds>` exclusion lists are not currently
|
||||
supported with offload, however, the same effect can often be
|
||||
accomplished by setting cutoffs for excluded atom types to 0. None of
|
||||
the pair styles in the USER-INTEL package currently support the
|
||||
"inner", "middle", "outer" options for rRESPA integration via the
|
||||
:doc:`run_style respa <run_style>` command; only the "pair" option is
|
||||
supported.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,527 @@
|
|||
:doc:`Return to Section accelerate overview <Section_accelerate>`
|
||||
|
||||
5.KOKKOS package
|
||||
----------------
|
||||
|
||||
The KOKKOS package was developed primarily by Christian Trott (Sandia)
|
||||
with contributions of various styles by others, including Sikandar
|
||||
Mashayak (UIUC), Stan Moore (Sandia), and Ray Shan (Sandia). The
|
||||
underlying Kokkos library was written primarily by Carter Edwards,
|
||||
Christian Trott, and Dan Sunderland (all Sandia).
|
||||
|
||||
The KOKKOS package contains versions of pair, fix, and atom styles
|
||||
that use data structures and macros provided by the Kokkos library,
|
||||
which is included with LAMMPS in lib/kokkos.
|
||||
|
||||
The Kokkos library is part of
|
||||
`Trilinos <http://trilinos.sandia.gov/packages/kokkos>`_ and can also be
|
||||
downloaded from `Github <https://github.com/kokkos/kokkos>`_. Kokkos is a
|
||||
templated C++ library that provides two key abstractions for an
|
||||
application like LAMMPS. First, it allows a single implementation of
|
||||
an application kernel (e.g. a pair style) to run efficiently on
|
||||
different kinds of hardware, such as a GPU, Intel Phi, or many-core
|
||||
CPU.
|
||||
|
||||
The Kokkos library also provides data abstractions to adjust (at
|
||||
compile time) the memory layout of basic data structures like 2d and
|
||||
3d arrays and allow the transparent utilization of special hardware
|
||||
load and store operations. Such data structures are used in LAMMPS to
|
||||
store atom coordinates or forces or neighbor lists. The layout is
|
||||
chosen to optimize performance on different platforms. Again this
|
||||
functionality is hidden from the developer, and does not affect how
|
||||
the kernel is coded.
|
||||
|
||||
These abstractions are set at build time, when LAMMPS is compiled with
|
||||
the KOKKOS package installed. All Kokkos operations occur within the
|
||||
context of an individual MPI task running on a single node of the
|
||||
machine. The total number of MPI tasks used by LAMMPS (one or
|
||||
multiple per compute node) is set in the usual manner via the mpirun
|
||||
or mpiexec commands, and is independent of Kokkos.
|
||||
|
||||
Kokkos currently provides support for 3 modes of execution (per MPI
|
||||
task). These are OpenMP (for many-core CPUs), Cuda (for NVIDIA GPUs),
|
||||
and OpenMP (for Intel Phi). Note that the KOKKOS package supports
|
||||
running on the Phi in native mode, not offload mode like the
|
||||
USER-INTEL package supports. You choose the mode at build time to
|
||||
produce an executable compatible with specific hardware.
|
||||
|
||||
Here is a quick overview of how to use the KOKKOS package
|
||||
for CPU acceleration, assuming one or more 16-core nodes.
|
||||
More details follow.
|
||||
|
||||
use a C++11 compatible compiler
|
||||
make yes-kokkos
|
||||
make mpi KOKKOS_DEVICES=OpenMP # build with the KOKKOS package
|
||||
make kokkos_omp # or Makefile.kokkos_omp already has variable set
|
||||
Make.py -v -p kokkos -kokkos omp -o mpi -a file mpi # or one-line build via Make.py
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
mpirun -np 16 lmp_mpi -k on -sf kk -in in.lj # 1 node, 16 MPI tasks/node, no threads
|
||||
mpirun -np 2 -ppn 1 lmp_mpi -k on t 16 -sf kk -in in.lj # 2 nodes, 1 MPI task/node, 16 threads/task
|
||||
mpirun -np 2 lmp_mpi -k on t 8 -sf kk -in in.lj # 1 node, 2 MPI tasks/node, 8 threads/task
|
||||
mpirun -np 32 -ppn 4 lmp_mpi -k on t 4 -sf kk -in in.lj # 8 nodes, 4 MPI tasks/node, 4 threads/task
|
||||
|
||||
* specify variables and settings in your Makefile.machine that enable OpenMP, GPU, or Phi support
|
||||
* include the KOKKOS package and build LAMMPS
|
||||
* enable the KOKKOS package and its hardware options via the "-k on" command-line switch use KOKKOS styles in your input script
|
||||
|
||||
Here is a quick overview of how to use the KOKKOS package for GPUs,
|
||||
assuming one or more nodes, each with 16 cores and a GPU. More
|
||||
details follow.
|
||||
|
||||
discuss use of NVCC, which Makefiles to examine
|
||||
|
||||
use a C++11 compatible compiler
|
||||
KOKKOS_DEVICES = Cuda, OpenMP
|
||||
KOKKOS_ARCH = Kepler35
|
||||
make yes-kokkos
|
||||
make machine
|
||||
Make.py -p kokkos -kokkos cuda arch=31 -o kokkos_cuda -a file kokkos_cuda
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
mpirun -np 1 lmp_cuda -k on t 6 -sf kk -in in.lj # one MPI task, 6 threads on CPU
|
||||
mpirun -np 4 -ppn 1 lmp_cuda -k on t 6 -sf kk -in in.lj # ditto on 4 nodes
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
mpirun -np 2 lmp_cuda -k on t 8 g 2 -sf kk -in in.lj # two MPI tasks, 8 threads per CPU
|
||||
mpirun -np 32 -ppn 2 lmp_cuda -k on t 8 g 2 -sf kk -in in.lj # ditto on 16 nodes
|
||||
|
||||
Here is a quick overview of how to use the KOKKOS package
|
||||
for the Intel Phi:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
use a C++11 compatible compiler
|
||||
KOKKOS_DEVICES = OpenMP
|
||||
KOKKOS_ARCH = KNC
|
||||
make yes-kokkos
|
||||
make machine
|
||||
Make.py -p kokkos -kokkos phi -o kokkos_phi -a file mpi
|
||||
|
||||
host=MIC, Intel Phi with 61 cores (240 threads/phi via 4x hardware threading):
|
||||
mpirun -np 1 lmp_g++ -k on t 240 -sf kk -in in.lj # 1 MPI task on 1 Phi, 1*240 = 240
|
||||
mpirun -np 30 lmp_g++ -k on t 8 -sf kk -in in.lj # 30 MPI tasks on 1 Phi, 30*8 = 240
|
||||
mpirun -np 12 lmp_g++ -k on t 20 -sf kk -in in.lj # 12 MPI tasks on 1 Phi, 12*20 = 240
|
||||
mpirun -np 96 -ppn 12 lmp_g++ -k on t 20 -sf kk -in in.lj # ditto on 8 Phis
|
||||
|
||||
**Required hardware/software:**
|
||||
|
||||
Kokkos support within LAMMPS must be built with a C++11 compatible
|
||||
compiler. If using gcc, version 4.8.1 or later is required.
|
||||
|
||||
To build with Kokkos support for CPUs, your compiler must support the
|
||||
OpenMP interface. You should have one or more multi-core CPUs so that
|
||||
multiple threads can be launched by each MPI task running on a CPU.
|
||||
|
||||
To build with Kokkos support for NVIDIA GPUs, NVIDIA Cuda software
|
||||
version 6.5 or later must be installed on your system. See the
|
||||
discussion for the :doc:`USER-CUDA <accelerate_cuda>` and
|
||||
:doc:`GPU <accelerate_gpu>` packages for details of how to check and do
|
||||
this.
|
||||
|
||||
.. note::
|
||||
|
||||
For good performance of the KOKKOS package on GPUs, you must
|
||||
have Kepler generation GPUs (or later). The Kokkos library exploits
|
||||
texture cache options not supported by Telsa generation GPUs (or
|
||||
older).
|
||||
|
||||
To build with Kokkos support for Intel Xeon Phi coprocessors, your
|
||||
sysmte must be configured to use them in "native" mode, not "offload"
|
||||
mode like the USER-INTEL package supports.
|
||||
|
||||
**Building LAMMPS with the KOKKOS package:**
|
||||
|
||||
You must choose at build time whether to build for CPUs (OpenMP),
|
||||
GPUs, or Phi.
|
||||
|
||||
You can do any of these in one line, using the src/Make.py script,
|
||||
described in :ref:`Section 2.4 <start_4>` of the manual.
|
||||
Type "Make.py -h" for help. If run from the src directory, these
|
||||
commands will create src/lmp_kokkos_omp, lmp_kokkos_cuda, and
|
||||
lmp_kokkos_phi. Note that the OMP and PHI options use
|
||||
src/MAKE/Makefile.mpi as the starting Makefile.machine. The CUDA
|
||||
option uses src/MAKE/OPTIONS/Makefile.kokkos_cuda.
|
||||
|
||||
The latter two steps can be done using the "-k on", "-pk kokkos" and
|
||||
"-sf kk" :ref:`command-line switches <start_7>`
|
||||
respectively. Or the effect of the "-pk" or "-sf" switches can be
|
||||
duplicated by adding the :doc:`package kokkos <package>` or :doc:`suffix kk <suffix>` commands respectively to your input script.
|
||||
|
||||
Or you can follow these steps:
|
||||
|
||||
CPU-only (run all-MPI or with OpenMP threading):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd lammps/src
|
||||
make yes-kokkos
|
||||
make g++ KOKKOS_DEVICES=OpenMP
|
||||
|
||||
Intel Xeon Phi:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd lammps/src
|
||||
make yes-kokkos
|
||||
make g++ KOKKOS_DEVICES=OpenMP KOKKOS_ARCH=KNC
|
||||
|
||||
CPUs and GPUs:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd lammps/src
|
||||
make yes-kokkos
|
||||
make cuda KOKKOS_DEVICES=Cuda
|
||||
|
||||
These examples set the KOKKOS-specific OMP, MIC, CUDA variables on the
|
||||
make command line which requires a GNU-compatible make command. Try
|
||||
"gmake" if your system's standard make complains.
|
||||
|
||||
.. note::
|
||||
|
||||
If you build using make line variables and re-build LAMMPS twice
|
||||
with different KOKKOS options and the *same* target, e.g. g++ in the
|
||||
first two examples above, then you *must* perform a "make clean-all"
|
||||
or "make clean-machine" before each build. This is to force all the
|
||||
KOKKOS-dependent files to be re-compiled with the new options.
|
||||
|
||||
You can also hardwire these make variables in the specified machine
|
||||
makefile, e.g. src/MAKE/Makefile.g++ in the first two examples above,
|
||||
with a line like:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
KOKKOS_ARCH = KNC
|
||||
|
||||
Note that if you build LAMMPS multiple times in this manner, using
|
||||
different KOKKOS options (defined in different machine makefiles), you
|
||||
do not have to worry about doing a "clean" in between. This is
|
||||
because the targets will be different.
|
||||
|
||||
.. note::
|
||||
|
||||
The 3rd example above for a GPU, uses a different machine
|
||||
makefile, in this case src/MAKE/Makefile.cuda, which is included in
|
||||
the LAMMPS distribution. To build the KOKKOS package for a GPU, this
|
||||
makefile must use the NVIDA "nvcc" compiler. And it must have a
|
||||
KOKKOS_ARCH setting that is appropriate for your NVIDIA hardware and
|
||||
installed software. Typical values for KOKKOS_ARCH are given below,
|
||||
as well as other settings that must be included in the machine
|
||||
makefile, if you create your own.
|
||||
|
||||
.. note::
|
||||
|
||||
Currently, there are no precision options with the KOKKOS
|
||||
package. All compilation and computation is performed in double
|
||||
precision.
|
||||
|
||||
There are other allowed options when building with the KOKKOS package.
|
||||
As above, they can be set either as variables on the make command line
|
||||
or in Makefile.machine. This is the full list of options, including
|
||||
those discussed above, Each takes a value shown below. The
|
||||
default value is listed, which is set in the
|
||||
lib/kokkos/Makefile.kokkos file.
|
||||
|
||||
#Default settings specific options
|
||||
#Options: force_uvm,use_ldg,rdc
|
||||
|
||||
* KOKKOS_DEVICES, values = *OpenMP*, *Serial*, *Pthreads*, *Cuda*, default = *OpenMP*
|
||||
* KOKKOS_ARCH, values = *KNC*, *SNB*, *HSW*, *Kepler*, *Kepler30*, *Kepler32*, *Kepler35*, *Kepler37*, *Maxwell*, *Maxwell50*, *Maxwell52*, *Maxwell53*, *ARMv8*, *BGQ*, *Power7*, *Power8*, default = *none*
|
||||
* KOKKOS_DEBUG, values = *yes*, *no*, default = *no*
|
||||
* KOKKOS_USE_TPLS, values = *hwloc*, *librt*, default = *none*
|
||||
* KOKKOS_CUDA_OPTIONS, values = *force_uvm*, *use_ldg*, *rdc*
|
||||
|
||||
KOKKOS_DEVICE sets the parallelization method used for Kokkos code
|
||||
(within LAMMPS). KOKKOS_DEVICES=OpenMP means that OpenMP will be
|
||||
used. KOKKOS_DEVICES=Pthreads means that pthreads will be used.
|
||||
KOKKOS_DEVICES=Cuda means an NVIDIA GPU running CUDA will be used.
|
||||
|
||||
If KOKKOS_DEVICES=Cuda, then the lo-level Makefile in the src/MAKE
|
||||
directory must use "nvcc" as its compiler, via its CC setting. For
|
||||
best performance its CCFLAGS setting should use -O3 and have a
|
||||
KOKKOS_ARCH setting that matches the compute capability of your NVIDIA
|
||||
hardware and software installation, e.g. KOKKOS_ARCH=Kepler30. Note
|
||||
the minimal required compute capability is 2.0, but this will give
|
||||
signicantly reduced performance compared to Kepler generation GPUs
|
||||
with compute capability 3.x. For the LINK setting, "nvcc" should not
|
||||
be used; instead use g++ or another compiler suitable for linking C++
|
||||
applications. Often you will want to use your MPI compiler wrapper
|
||||
for this setting (i.e. mpicxx). Finally, the lo-level Makefile must
|
||||
also have a "Compilation rule" for creating *.o files from *.cu files.
|
||||
See src/Makefile.cuda for an example of a lo-level Makefile with all
|
||||
of these settings.
|
||||
|
||||
KOKKOS_USE_TPLS=hwloc binds threads to hardware cores, so they do not
|
||||
migrate during a simulation. KOKKOS_USE_TPLS=hwloc should always be
|
||||
used if running with KOKKOS_DEVICES=Pthreads for pthreads. It is not
|
||||
necessary for KOKKOS_DEVICES=OpenMP for OpenMP, because OpenMP
|
||||
provides alternative methods via environment variables for binding
|
||||
threads to hardware cores. More info on binding threads to cores is
|
||||
given in :ref:`this section <acc_8>`.
|
||||
|
||||
KOKKOS_ARCH=KNC enables compiler switches needed when compling for an
|
||||
Intel Phi processor.
|
||||
|
||||
KOKKOS_USE_TPLS=librt enables use of a more accurate timer mechanism
|
||||
on most Unix platforms. This library is not available on all
|
||||
platforms.
|
||||
|
||||
KOKKOS_DEBUG is only useful when developing a Kokkos-enabled style
|
||||
within LAMMPS. KOKKOS_DEBUG=yes enables printing of run-time
|
||||
debugging information that can be useful. It also enables runtime
|
||||
bounds checking on Kokkos data structures.
|
||||
|
||||
KOKKOS_CUDA_OPTIONS are additional options for CUDA.
|
||||
|
||||
For more information on Kokkos see the Kokkos programmers' guide here:
|
||||
/lib/kokkos/doc/Kokkos_PG.pdf.
|
||||
|
||||
**Run with the KOKKOS package from the command line:**
|
||||
|
||||
The mpirun or mpiexec command sets the total number of MPI tasks used
|
||||
by LAMMPS (one or multiple per compute node) and the number of MPI
|
||||
tasks used per node. E.g. the mpirun command in MPICH does this via
|
||||
its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
|
||||
|
||||
When using KOKKOS built with host=OMP, you need to choose how many
|
||||
OpenMP threads per MPI task will be used (via the "-k" command-line
|
||||
switch discussed below). Note that the product of MPI tasks * OpenMP
|
||||
threads/task should not exceed the physical number of cores (on a
|
||||
node), otherwise performance will suffer.
|
||||
|
||||
When using the KOKKOS package built with device=CUDA, you must use
|
||||
exactly one MPI task per physical GPU.
|
||||
|
||||
When using the KOKKOS package built with host=MIC for Intel Xeon Phi
|
||||
coprocessor support you need to insure there are one or more MPI tasks
|
||||
per coprocessor, and choose the number of coprocessor threads to use
|
||||
per MPI task (via the "-k" command-line switch discussed below). The
|
||||
product of MPI tasks * coprocessor threads/task should not exceed the
|
||||
maximum number of threads the coproprocessor is designed to run,
|
||||
otherwise performance will suffer. This value is 240 for current
|
||||
generation Xeon Phi(TM) chips, which is 60 physical cores * 4
|
||||
threads/core. Note that with the KOKKOS package you do not need to
|
||||
specify how many Phi coprocessors there are per node; each
|
||||
coprocessors is simply treated as running some number of MPI tasks.
|
||||
|
||||
You must use the "-k on" :ref:`command-line switch <start_7>` to enable the KOKKOS package. It
|
||||
takes additional arguments for hardware settings appropriate to your
|
||||
system. Those arguments are :ref:`documented here <start_7>`. The two most commonly used
|
||||
options are:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
-k on t Nt g Ng
|
||||
|
||||
The "t Nt" option applies to host=OMP (even if device=CUDA) and
|
||||
host=MIC. For host=OMP, it specifies how many OpenMP threads per MPI
|
||||
task to use with a node. For host=MIC, it specifies how many Xeon Phi
|
||||
threads per MPI task to use within a node. The default is Nt = 1.
|
||||
Note that for host=OMP this is effectively MPI-only mode which may be
|
||||
fine. But for host=MIC you will typically end up using far less than
|
||||
all the 240 available threads, which could give very poor performance.
|
||||
|
||||
The "g Ng" option applies to device=CUDA. It specifies how many GPUs
|
||||
per compute node to use. The default is 1, so this only needs to be
|
||||
specified is you have 2 or more GPUs per compute node.
|
||||
|
||||
The "-k on" switch also issues a "package kokkos" command (with no
|
||||
additional arguments) which sets various KOKKOS options to default
|
||||
values, as discussed on the :doc:`package <package>` command doc page.
|
||||
|
||||
Use the "-sf kk" :ref:`command-line switch <start_7>`,
|
||||
which will automatically append "kk" to styles that support it. Use
|
||||
the "-pk kokkos" :ref:`command-line switch <start_7>` if
|
||||
you wish to change any of the default :doc:`package kokkos <package>`
|
||||
optionns set by the "-k on" :ref:`command-line switch <start_7>`.
|
||||
|
||||
Note that the default for the :doc:`package kokkos <package>` command is
|
||||
to use "full" neighbor lists and set the Newton flag to "off" for both
|
||||
pairwise and bonded interactions. This typically gives fastest
|
||||
performance. If the :doc:`newton <newton>` command is used in the input
|
||||
script, it can override the Newton flag defaults.
|
||||
|
||||
However, when running in MPI-only mode with 1 thread per MPI task, it
|
||||
will typically be faster to use "half" neighbor lists and set the
|
||||
Newton flag to "on", just as is the case for non-accelerated pair
|
||||
styles. You can do this with the "-pk" :ref:`command-line switch <start_7>`.
|
||||
|
||||
**Or run with the KOKKOS package by editing an input script:**
|
||||
|
||||
The discussion above for the mpirun/mpiexec command and setting
|
||||
appropriate thread and GPU values for host=OMP or host=MIC or
|
||||
device=CUDA are the same.
|
||||
|
||||
You must still use the "-k on" :ref:`command-line switch <start_7>` to enable the KOKKOS package, and
|
||||
specify its additional arguments for hardware options appopriate to
|
||||
your system, as documented above.
|
||||
|
||||
Use the :doc:`suffix kk <suffix>` command, or you can explicitly add a
|
||||
"kk" suffix to individual styles in your input script, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style lj/cut/kk 2.5
|
||||
|
||||
You only need to use the :doc:`package kokkos <package>` command if you
|
||||
wish to change any of its option defaults, as set by the "-k on"
|
||||
:ref:`command-line switch <start_7>`.
|
||||
|
||||
**Speed-ups to expect:**
|
||||
|
||||
The performance of KOKKOS running in different modes is a function of
|
||||
your hardware, which KOKKOS-enable styles are used, and the problem
|
||||
size.
|
||||
|
||||
Generally speaking, the following rules of thumb apply:
|
||||
|
||||
* When running on CPUs only, with a single thread per MPI task,
|
||||
performance of a KOKKOS style is somewhere between the standard
|
||||
(un-accelerated) styles (MPI-only mode), and those provided by the
|
||||
USER-OMP package. However the difference between all 3 is small (less
|
||||
than 20%).
|
||||
* When running on CPUs only, with multiple threads per MPI task,
|
||||
performance of a KOKKOS style is a bit slower than the USER-OMP
|
||||
package.
|
||||
* When running on GPUs, KOKKOS is typically faster than the USER-CUDA
|
||||
and GPU packages.
|
||||
* When running on Intel Xeon Phi, KOKKOS is not as fast as
|
||||
the USER-INTEL package, which is optimized for that hardware.
|
||||
See the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the
|
||||
LAMMPS web site for performance of the KOKKOS package on different
|
||||
hardware.
|
||||
|
||||
**Guidelines for best performance:**
|
||||
|
||||
Here are guidline for using the KOKKOS package on the different
|
||||
hardware configurations listed above.
|
||||
|
||||
Many of the guidelines use the :doc:`package kokkos <package>` command
|
||||
See its doc page for details and default settings. Experimenting with
|
||||
its options can provide a speed-up for specific calculations.
|
||||
|
||||
**Running on a multi-core CPU:**
|
||||
|
||||
If N is the number of physical cores/node, then the number of MPI
|
||||
tasks/node * number of threads/task should not exceed N, and should
|
||||
typically equal N. Note that the default threads/task is 1, as set by
|
||||
the "t" keyword of the "-k" :ref:`command-line switch <start_7>`. If you do not change this, no
|
||||
additional parallelism (beyond MPI) will be invoked on the host
|
||||
CPU(s).
|
||||
|
||||
You can compare the performance running in different modes:
|
||||
|
||||
* run with 1 MPI task/node and N threads/task
|
||||
* run with N MPI tasks/node and 1 thread/task
|
||||
* run with settings in between these extremes
|
||||
|
||||
Examples of mpirun commands in these modes are shown above.
|
||||
|
||||
When using KOKKOS to perform multi-threading, it is important for
|
||||
performance to bind both MPI tasks to physical cores, and threads to
|
||||
physical cores, so they do not migrate during a simulation.
|
||||
|
||||
If you are not certain MPI tasks are being bound (check the defaults
|
||||
for your MPI installation), binding can be forced with these flags:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
OpenMPI 1.8: mpirun -np 2 -bind-to socket -map-by socket ./lmp_openmpi ...
|
||||
Mvapich2 2.0: mpiexec -np 2 -bind-to socket -map-by socket ./lmp_mvapich ...
|
||||
|
||||
For binding threads with the KOKKOS OMP option, use thread affinity
|
||||
environment variables to force binding. With OpenMP 3.1 (gcc 4.7 or
|
||||
later, intel 12 or later) setting the environment variable
|
||||
OMP_PROC_BIND=true should be sufficient. For binding threads with the
|
||||
KOKKOS pthreads option, compile LAMMPS the KOKKOS HWLOC=yes option, as
|
||||
discussed in :ref:`Section 2.3.4 <start_3_4>` of the
|
||||
manual.
|
||||
|
||||
**Running on GPUs:**
|
||||
|
||||
Insure the -arch setting in the machine makefile you are using,
|
||||
e.g. src/MAKE/Makefile.cuda, is correct for your GPU hardware/software
|
||||
(see :ref:`this section <start_3_4>` of the manual for
|
||||
details).
|
||||
|
||||
The -np setting of the mpirun command should set the number of MPI
|
||||
tasks/node to be equal to the # of physical GPUs on the node.
|
||||
|
||||
Use the "-k" :ref:`command-line switch <start_7>` to
|
||||
specify the number of GPUs per node, and the number of threads per MPI
|
||||
task. As above for multi-core CPUs (and no GPU), if N is the number
|
||||
of physical cores/node, then the number of MPI tasks/node * number of
|
||||
threads/task should not exceed N. With one GPU (and one MPI task) it
|
||||
may be faster to use less than all the available cores, by setting
|
||||
threads/task to a smaller value. This is because using all the cores
|
||||
on a dual-socket node will incur extra cost to copy memory from the
|
||||
2nd socket to the GPU.
|
||||
|
||||
Examples of mpirun commands that follow these rules are shown above.
|
||||
|
||||
.. note::
|
||||
|
||||
When using a GPU, you will achieve the best performance if your
|
||||
input script does not use any fix or compute styles which are not yet
|
||||
Kokkos-enabled. This allows data to stay on the GPU for multiple
|
||||
timesteps, without being copied back to the host CPU. Invoking a
|
||||
non-Kokkos fix or compute, or performing I/O for
|
||||
:doc:`thermo <thermo_style>` or :doc:`dump <dump>` output will cause data
|
||||
to be copied back to the CPU.
|
||||
|
||||
You cannot yet assign multiple MPI tasks to the same GPU with the
|
||||
KOKKOS package. We plan to support this in the future, similar to the
|
||||
GPU package in LAMMPS.
|
||||
|
||||
You cannot yet use both the host (multi-threaded) and device (GPU)
|
||||
together to compute pairwise interactions with the KOKKOS package. We
|
||||
hope to support this in the future, similar to the GPU package in
|
||||
LAMMPS.
|
||||
|
||||
**Running on an Intel Phi:**
|
||||
|
||||
Kokkos only uses Intel Phi processors in their "native" mode, i.e.
|
||||
not hosted by a CPU.
|
||||
|
||||
As illustrated above, build LAMMPS with OMP=yes (the default) and
|
||||
MIC=yes. The latter insures code is correctly compiled for the Intel
|
||||
Phi. The OMP setting means OpenMP will be used for parallelization on
|
||||
the Phi, which is currently the best option within Kokkos. In the
|
||||
future, other options may be added.
|
||||
|
||||
Current-generation Intel Phi chips have either 61 or 57 cores. One
|
||||
core should be excluded for running the OS, leaving 60 or 56 cores.
|
||||
Each core is hyperthreaded, so there are effectively N = 240 (4*60) or
|
||||
N = 224 (4*56) cores to run on.
|
||||
|
||||
The -np setting of the mpirun command sets the number of MPI
|
||||
tasks/node. The "-k on t Nt" command-line switch sets the number of
|
||||
threads/task as Nt. The product of these 2 values should be N, i.e.
|
||||
240 or 224. Also, the number of threads/task should be a multiple of
|
||||
4 so that logical threads from more than one MPI task do not run on
|
||||
the same physical core.
|
||||
|
||||
Examples of mpirun commands that follow these rules are shown above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
As noted above, if using GPUs, the number of MPI tasks per compute
|
||||
node should equal to the number of GPUs per compute node. In the
|
||||
future Kokkos will support assigning multiple MPI tasks to a single
|
||||
GPU.
|
||||
|
||||
Currently Kokkos does not support AMD GPUs due to limits in the
|
||||
available backend programming models. Specifically, Kokkos requires
|
||||
extensive C++ support from the Kernel language. This is expected to
|
||||
change in the future.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,178 @@
|
|||
:doc:`Return to Section accelerate overview <Section_accelerate>`
|
||||
|
||||
5.USER-OMP package
|
||||
------------------
|
||||
|
||||
The USER-OMP package was developed by Axel Kohlmeyer at Temple
|
||||
University. It provides multi-threaded versions of most pair styles,
|
||||
nearly all bonded styles (bond, angle, dihedral, improper), several
|
||||
Kspace styles, and a few fix styles. The package currently uses the
|
||||
OpenMP interface for multi-threading.
|
||||
|
||||
Here is a quick overview of how to use the USER-OMP package, assuming
|
||||
one or more 16-core nodes. More details follow.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
use -fopenmp with CCFLAGS and LINKFLAGS in Makefile.machine
|
||||
make yes-user-omp
|
||||
make mpi # build with USER-OMP package, if settings added to Makefile.mpi
|
||||
make omp # or Makefile.omp already has settings
|
||||
Make.py -v -p omp -o mpi -a file mpi # or one-line build via Make.py
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
lmp_mpi -sf omp -pk omp 16 < in.script # 1 MPI task, 16 threads
|
||||
mpirun -np 4 lmp_mpi -sf omp -pk omp 4 -in in.script # 4 MPI tasks, 4 threads/task
|
||||
mpirun -np 32 -ppn 4 lmp_mpi -sf omp -pk omp 4 -in in.script # 8 nodes, 4 MPI tasks/node, 4 threads/task
|
||||
|
||||
**Required hardware/software:**
|
||||
|
||||
Your compiler must support the OpenMP interface. You should have one
|
||||
or more multi-core CPUs so that multiple threads can be launched by
|
||||
each MPI task running on a CPU.
|
||||
|
||||
**Building LAMMPS with the USER-OMP package:**
|
||||
|
||||
The lines above illustrate how to include/build with the USER-OMP
|
||||
package in two steps, using the "make" command. Or how to do it with
|
||||
one command via the src/Make.py script, described in :ref:`Section 2.4 <start_4>` of the manual. Type "Make.py -h" for
|
||||
help.
|
||||
|
||||
Note that the CCFLAGS and LINKFLAGS settings in Makefile.machine must
|
||||
include "-fopenmp". Likewise, if you use an Intel compiler, the
|
||||
CCFLAGS setting must include "-restrict". The Make.py command will
|
||||
add these automatically.
|
||||
|
||||
**Run with the USER-OMP package from the command line:**
|
||||
|
||||
The mpirun or mpiexec command sets the total number of MPI tasks used
|
||||
by LAMMPS (one or multiple per compute node) and the number of MPI
|
||||
tasks used per node. E.g. the mpirun command in MPICH does this via
|
||||
its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
|
||||
|
||||
You need to choose how many OpenMP threads per MPI task will be used
|
||||
by the USER-OMP package. Note that the product of MPI tasks *
|
||||
threads/task should not exceed the physical number of cores (on a
|
||||
node), otherwise performance will suffer.
|
||||
|
||||
As in the lines above, use the "-sf omp" :ref:`command-line switch <start_7>`, which will automatically append
|
||||
"omp" to styles that support it. The "-sf omp" switch also issues a
|
||||
default :doc:`package omp 0 <package>` command, which will set the
|
||||
number of threads per MPI task via the OMP_NUM_THREADS environment
|
||||
variable.
|
||||
|
||||
You can also use the "-pk omp Nt" :ref:`command-line switch <start_7>`, to explicitly set Nt = # of OpenMP
|
||||
threads per MPI task to use, as well as additional options. Its
|
||||
syntax is the same as the :doc:`package omp <package>` command whose doc
|
||||
page gives details, including the default values used if it is not
|
||||
specified. It also gives more details on how to set the number of
|
||||
threads via the OMP_NUM_THREADS environment variable.
|
||||
|
||||
**Or run with the USER-OMP package by editing an input script:**
|
||||
|
||||
The discussion above for the mpirun/mpiexec command, MPI tasks/node,
|
||||
and threads/MPI task is the same.
|
||||
|
||||
Use the :doc:`suffix omp <suffix>` command, or you can explicitly add an
|
||||
"omp" suffix to individual styles in your input script, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style lj/cut/omp 2.5
|
||||
|
||||
You must also use the :doc:`package omp <package>` command to enable the
|
||||
USER-OMP package. When you do this you also specify how many threads
|
||||
per MPI task to use. The command doc page explains other options and
|
||||
how to set the number of threads via the OMP_NUM_THREADS environment
|
||||
variable.
|
||||
|
||||
**Speed-ups to expect:**
|
||||
|
||||
Depending on which styles are accelerated, you should look for a
|
||||
reduction in the "Pair time", "Bond time", "KSpace time", and "Loop
|
||||
time" values printed at the end of a run.
|
||||
|
||||
You may see a small performance advantage (5 to 20%) when running a
|
||||
USER-OMP style (in serial or parallel) with a single thread per MPI
|
||||
task, versus running standard LAMMPS with its standard un-accelerated
|
||||
styles (in serial or all-MPI parallelization with 1 task/core). This
|
||||
is because many of the USER-OMP styles contain similar optimizations
|
||||
to those used in the OPT package, described in :doc:`Section accelerate 5.3.6 <accelerate_opt>`.
|
||||
|
||||
With multiple threads/task, the optimal choice of number of MPI
|
||||
tasks/node and OpenMP threads/task can vary a lot and should always be
|
||||
tested via benchmark runs for a specific simulation running on a
|
||||
specific machine, paying attention to guidelines discussed in the next
|
||||
sub-section.
|
||||
|
||||
A description of the multi-threading strategy used in the USER-OMP
|
||||
package and some performance examples are `presented here <http://sites.google.com/site/akohlmey/software/lammps-icms/lammps-icms-tms2011-talk.pdf?attredirects=0&d=1>`_
|
||||
|
||||
**Guidelines for best performance:**
|
||||
|
||||
For many problems on current generation CPUs, running the USER-OMP
|
||||
package with a single thread/task is faster than running with multiple
|
||||
threads/task. This is because the MPI parallelization in LAMMPS is
|
||||
often more efficient than multi-threading as implemented in the
|
||||
USER-OMP package. The parallel efficiency (in a threaded sense) also
|
||||
varies for different USER-OMP styles.
|
||||
|
||||
Using multiple threads/task can be more effective under the following
|
||||
circumstances:
|
||||
|
||||
* Individual compute nodes have a significant number of CPU cores but
|
||||
the CPU itself has limited memory bandwidth, e.g. for Intel Xeon 53xx
|
||||
(Clovertown) and 54xx (Harpertown) quad-core processors. Running one
|
||||
MPI task per CPU core will result in significant performance
|
||||
degradation, so that running with 4 or even only 2 MPI tasks per node
|
||||
is faster. Running in hybrid MPI+OpenMP mode will reduce the
|
||||
inter-node communication bandwidth contention in the same way, but
|
||||
offers an additional speedup by utilizing the otherwise idle CPU
|
||||
cores.
|
||||
* The interconnect used for MPI communication does not provide
|
||||
sufficient bandwidth for a large number of MPI tasks per node. For
|
||||
example, this applies to running over gigabit ethernet or on Cray XT4
|
||||
or XT5 series supercomputers. As in the aforementioned case, this
|
||||
effect worsens when using an increasing number of nodes.
|
||||
* The system has a spatially inhomogeneous particle density which does
|
||||
not map well to the :doc:`domain decomposition scheme <processors>` or
|
||||
:doc:`load-balancing <balance>` options that LAMMPS provides. This is
|
||||
because multi-threading achives parallelism over the number of
|
||||
particles, not via their distribution in space.
|
||||
* A machine is being used in "capability mode", i.e. near the point
|
||||
where MPI parallelism is maxed out. For example, this can happen when
|
||||
using the :doc:`PPPM solver <kspace_style>` for long-range
|
||||
electrostatics on large numbers of nodes. The scaling of the KSpace
|
||||
calculation (see the :doc:`kspace_style <kspace_style>` command) becomes
|
||||
the performance-limiting factor. Using multi-threading allows less
|
||||
MPI tasks to be invoked and can speed-up the long-range solver, while
|
||||
increasing overall performance by parallelizing the pairwise and
|
||||
bonded calculations via OpenMP. Likewise additional speedup can be
|
||||
sometimes be achived by increasing the length of the Coulombic cutoff
|
||||
and thus reducing the work done by the long-range solver. Using the
|
||||
:doc:`run_style verlet/split <run_style>` command, which is compatible
|
||||
with the USER-OMP package, is an alternative way to reduce the number
|
||||
of MPI tasks assigned to the KSpace calculation.
|
||||
Additional performance tips are as follows:
|
||||
|
||||
* The best parallel efficiency from *omp* styles is typically achieved
|
||||
when there is at least one MPI task per physical CPU chip, i.e. socket
|
||||
or die.
|
||||
* It is usually most efficient to restrict threading to a single
|
||||
socket, i.e. use one or more MPI task per socket.
|
||||
* NOTE: By default, several current MPI implementations use a processor
|
||||
affinity setting that restricts each MPI task to a single CPU core.
|
||||
Using multi-threading in this mode will force all threads to share the
|
||||
one core and thus is likely to be counterproductive. Instead, binding
|
||||
MPI tasks to a (multi-core) socket, should solve this issue.
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
None.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,74 @@
|
|||
:doc:`Return to Section accelerate overview <Section_accelerate>`
|
||||
|
||||
5.OPT package
|
||||
-------------
|
||||
|
||||
The OPT package was developed by James Fischer (High Performance
|
||||
Technologies), David Richie, and Vincent Natoli (Stone Ridge
|
||||
Technologies). It contains a handful of pair styles whose compute()
|
||||
methods were rewritten in C++ templated form to reduce the overhead
|
||||
due to if tests and other conditional code.
|
||||
|
||||
Here is a quick overview of how to use the OPT package. More details
|
||||
follow.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
make yes-opt
|
||||
make mpi # build with the OPT pacakge
|
||||
Make.py -v -p opt -o mpi -a file mpi # or one-line build via Make.py
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
lmp_mpi -sf opt -in in.script # run in serial
|
||||
mpirun -np 4 lmp_mpi -sf opt -in in.script # run in parallel
|
||||
|
||||
**Required hardware/software:**
|
||||
|
||||
None.
|
||||
|
||||
**Building LAMMPS with the OPT package:**
|
||||
|
||||
The lines above illustrate how to build LAMMPS with the OPT package in
|
||||
two steps, using the "make" command. Or how to do it with one command
|
||||
via the src/Make.py script, described in :ref:`Section 2.4 <start_4>` of the manual. Type "Make.py -h" for
|
||||
help.
|
||||
|
||||
Note that if you use an Intel compiler to build with the OPT package,
|
||||
the CCFLAGS setting in your Makefile.machine must include "-restrict".
|
||||
The Make.py command will add this automatically.
|
||||
|
||||
**Run with the OPT package from the command line:**
|
||||
|
||||
As in the lines above, use the "-sf opt" :ref:`command-line switch <start_7>`, which will automatically append
|
||||
"opt" to styles that support it.
|
||||
|
||||
**Or run with the OPT package by editing an input script:**
|
||||
|
||||
Use the :doc:`suffix opt <suffix>` command, or you can explicitly add an
|
||||
"opt" suffix to individual styles in your input script, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
pair_style lj/cut/opt 2.5
|
||||
|
||||
**Speed-ups to expect:**
|
||||
|
||||
You should see a reduction in the "Pair time" value printed at the end
|
||||
of a run. On most machines for reasonable problem sizes, it will be a
|
||||
5 to 20% savings.
|
||||
|
||||
**Guidelines for best performance:**
|
||||
|
||||
Just try out an OPT pair style to see how it performs.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
None.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,113 @@
|
|||
.. index:: angle_style charmm
|
||||
|
||||
angle_style charmm command
|
||||
==========================
|
||||
|
||||
angle_style charmm/intel command
|
||||
================================
|
||||
|
||||
angle_style charmm/kk command
|
||||
=============================
|
||||
|
||||
angle_style charmm/omp command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style charmm
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style charmm
|
||||
angle_coeff 1 300.0 107.0 50.0 3.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *charmm* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_charmm.jpg
|
||||
:align: center
|
||||
|
||||
with an additional Urey_Bradley term based on the distance *r* between
|
||||
the 1st and 3rd atoms in the angle. K, theta0, Kub, and Rub are
|
||||
coefficients defined for each angle type.
|
||||
|
||||
See :ref:`(MacKerell) <MacKerell>` for a description of the CHARMM force
|
||||
field.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy/radian^2)
|
||||
* theta0 (degrees)
|
||||
* K_ub (energy/distance^2)
|
||||
* r_ub (distance)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally; hence the units of K are in energy/radian^2.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _MacKerell:
|
||||
|
||||
|
||||
|
||||
**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field,
|
||||
Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,139 @@
|
|||
.. index:: angle_style class2
|
||||
|
||||
angle_style class2 command
|
||||
==========================
|
||||
|
||||
angle_style class2/omp command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style class2
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style class2
|
||||
angle_coeff * 75.0
|
||||
angle_coeff 1 bb 10.5872 1.0119 1.5228
|
||||
angle_coeff * ba 3.6551 24.895 1.0119 1.5228
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *class2* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_class2.jpg
|
||||
:align: center
|
||||
|
||||
where Ea is the angle term, Ebb is a bond-bond term, and Eba is a
|
||||
bond-angle term. Theta0 is the equilibrium angle and r1 and r2 are
|
||||
the equilibrium bond lengths.
|
||||
|
||||
See :ref:`(Sun) <Sun>` for a description of the COMPASS class2 force field.
|
||||
|
||||
Coefficients for the Ea, Ebb, and Eba formulas must be defined for
|
||||
each angle type via the :doc:`angle_coeff <angle_coeff>` command as in
|
||||
the example above, or in the data file or restart files read by the
|
||||
:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
|
||||
commands.
|
||||
|
||||
These are the 4 coefficients for the Ea formula:
|
||||
|
||||
* theta0 (degrees)
|
||||
* K2 (energy/radian^2)
|
||||
* K3 (energy/radian^3)
|
||||
* K4 (energy/radian^4)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally; hence the units of the various K are in per-radian.
|
||||
|
||||
For the Ebb formula, each line in a :doc:`angle_coeff <angle_coeff>`
|
||||
command in the input script lists 4 coefficients, the first of which
|
||||
is "bb" to indicate they are BondBond coefficients. In a data file,
|
||||
these coefficients should be listed under a "BondBond Coeffs" heading
|
||||
and you must leave out the "bb", i.e. only list 3 coefficients after
|
||||
the angle type.
|
||||
|
||||
* bb
|
||||
* M (energy/distance^2)
|
||||
* r1 (distance)
|
||||
* r2 (distance)
|
||||
|
||||
For the Eba formula, each line in a :doc:`angle_coeff <angle_coeff>`
|
||||
command in the input script lists 5 coefficients, the first of which
|
||||
is "ba" to indicate they are BondAngle coefficients. In a data file,
|
||||
these coefficients should be listed under a "BondAngle Coeffs" heading
|
||||
and you must leave out the "ba", i.e. only list 4 coefficients after
|
||||
the angle type.
|
||||
|
||||
* ba
|
||||
* N1 (energy/distance^2)
|
||||
* N2 (energy/distance^2)
|
||||
* r1 (distance)
|
||||
* r2 (distance)
|
||||
|
||||
The theta0 value in the Eba formula is not specified, since it is the
|
||||
same value from the Ea formula.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the CLASS2
|
||||
package. See the :ref:`Making LAMMPS <start_3>` section
|
||||
for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Sun:
|
||||
|
||||
|
||||
|
||||
**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,116 @@
|
|||
.. index:: angle_coeff
|
||||
|
||||
angle_coeff command
|
||||
===================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_coeff N args
|
||||
|
||||
* N = angle type (see asterisk form below)
|
||||
* args = coefficients for one or more angle types
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_coeff 1 300.0 107.0
|
||||
angle_coeff * 5.0
|
||||
angle_coeff 2*10 5.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Specify the angle force field coefficients for one or more angle types.
|
||||
The number and meaning of the coefficients depends on the angle style.
|
||||
Angle coefficients can also be set in the data file read by the
|
||||
:doc:`read_data <read_data>` command or in a restart file.
|
||||
|
||||
N can be specified in one of two ways. An explicit numeric value can
|
||||
be used, as in the 1st example above. Or a wild-card asterisk can be
|
||||
used to set the coefficients for multiple angle types. This takes the
|
||||
form "*" or "*n" or "n*" or "m*n". If N = the number of angle types,
|
||||
then an asterisk with no numeric values means all types from 1 to N. A
|
||||
leading asterisk means all types from 1 to n (inclusive). A trailing
|
||||
asterisk means all types from n to N (inclusive). A middle asterisk
|
||||
means all types from m to n (inclusive).
|
||||
|
||||
Note that using an angle_coeff command can override a previous setting
|
||||
for the same angle type. For example, these commands set the coeffs
|
||||
for all angle types, then overwrite the coeffs for just angle type 2:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_coeff * 200.0 107.0 1.2
|
||||
angle_coeff 2 50.0 107.0
|
||||
|
||||
A line in a data file that specifies angle coefficients uses the exact
|
||||
same format as the arguments of the angle_coeff command in an input
|
||||
script, except that wild-card asterisks should not be used since
|
||||
coefficients for all N types must be listed in the file. For example,
|
||||
under the "Angle Coeffs" section of a data file, the line that
|
||||
corresponds to the 1st example above would be listed as
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
1 300.0 107.0
|
||||
|
||||
The :doc:`angle_style class2 <angle_class2>` is an exception to this
|
||||
rule, in that an additional argument is used in the input script to
|
||||
allow specification of the cross-term coefficients. See its
|
||||
doc page for details.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Here is an alphabetic list of angle styles defined in LAMMPS. Click on
|
||||
the style to display the formula it computes and coefficients
|
||||
specified by the associated :doc:`angle_coeff <angle_coeff>` command.
|
||||
|
||||
Note that there are also additional angle styles submitted by users
|
||||
which are included in the LAMMPS distribution. The list of these with
|
||||
links to the individual styles are given in the angle section of :ref:`this page <cmd_5>`.
|
||||
|
||||
* :doc:`angle_style none <angle_none>` - turn off angle interactions
|
||||
* :doc:`angle_style hybrid <angle_hybrid>` - define multiple styles of angle interactions
|
||||
|
||||
* :doc:`angle_style charmm <angle_charmm>` - CHARMM angle
|
||||
* :doc:`angle_style class2 <angle_class2>` - COMPASS (class 2) angle
|
||||
* :doc:`angle_style cosine <angle_cosine>` - cosine angle potential
|
||||
* :doc:`angle_style cosine/delta <angle_cosine_delta>` - difference of cosines angle potential
|
||||
* :doc:`angle_style cosine/periodic <angle_cosine_periodic>` - DREIDING angle
|
||||
* :doc:`angle_style cosine/squared <angle_cosine_squared>` - cosine squared angle potential
|
||||
* :doc:`angle_style harmonic <angle_harmonic>` - harmonic angle
|
||||
* :doc:`angle_style table <angle_table>` - tabulated by angle
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This command must come after the simulation box is defined by a
|
||||
:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
|
||||
:doc:`create_box <create_box>` command.
|
||||
|
||||
An angle style must be defined before any angle coefficients are
|
||||
set, either in the input script or in a data file.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_style <angle_style>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,85 @@
|
|||
.. index:: angle_style cosine
|
||||
|
||||
angle_style cosine command
|
||||
==========================
|
||||
|
||||
angle_style cosine/omp command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine
|
||||
angle_coeff * 75.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *cosine* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_cosine.jpg
|
||||
:align: center
|
||||
|
||||
where K is defined for each angle type.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,90 @@
|
|||
.. index:: angle_style cosine/delta
|
||||
|
||||
angle_style cosine/delta command
|
||||
================================
|
||||
|
||||
angle_style cosine/delta/omp command
|
||||
====================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/delta
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/delta
|
||||
angle_coeff 2*4 75.0 100.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *cosine/delta* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_cosine_delta.jpg
|
||||
:align: center
|
||||
|
||||
where theta0 is the equilibrium value of the angle, and K is a
|
||||
prefactor. Note that the usual 1/2 factor is included in K.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy)
|
||||
* theta0 (degrees)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`, :doc:`angle_style cosine/squared <angle_cosine_squared>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,109 @@
|
|||
.. index:: angle_style cosine/periodic
|
||||
|
||||
angle_style cosine/periodic command
|
||||
===================================
|
||||
|
||||
angle_style cosine/periodic/omp command
|
||||
=======================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/periodic
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/periodic
|
||||
angle_coeff * 75.0 1 6
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *cosine/periodic* angle style uses the following potential, which
|
||||
is commonly used in the :ref:`DREIDING <howto_4>` force
|
||||
field, particularly for organometallic systems where *n* = 4 might be
|
||||
used for an octahedral complex and *n* = 3 might be used for a
|
||||
trigonal center:
|
||||
|
||||
.. image:: Eqs/angle_cosine_periodic.jpg
|
||||
:align: center
|
||||
|
||||
where C, B and n are coefficients defined for each angle type.
|
||||
|
||||
See :ref:`(Mayo) <Mayo>` for a description of the DREIDING force field
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* C (energy)
|
||||
* B = 1 or -1
|
||||
* n = 1, 2, 3, 4, 5 or 6 for periodicity
|
||||
|
||||
Note that the prefactor C is specified and not the overall force
|
||||
constant K = C / n^2. When B = 1, it leads to a minimum for the
|
||||
linear geometry. When B = -1, it leads to a maximum for the linear
|
||||
geometry.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Mayo:
|
||||
|
||||
|
||||
|
||||
**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909
|
||||
(1990).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,90 @@
|
|||
.. index:: angle_style cosine/shift
|
||||
|
||||
angle_style cosine/shift command
|
||||
================================
|
||||
|
||||
angle_style cosine/shift/omp command
|
||||
====================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/shift
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/shift
|
||||
angle_coeff * 10.0 45.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *cosine/shift* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_cosine_shift.jpg
|
||||
:align: center
|
||||
|
||||
where theta0 is the equilibrium angle. The potential is bounded
|
||||
between -Umin and zero. In the neighborhood of the minimum E=- Umin +
|
||||
Umin/4(theta-theta0)^2 hence the spring constant is umin/2.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* umin (energy)
|
||||
* theta (angle)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`,
|
||||
:doc:`angle_cosineshiftexp <angle_cosineshiftexp>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,103 @@
|
|||
.. index:: angle_style cosine/shift/exp
|
||||
|
||||
angle_style cosine/shift/exp command
|
||||
====================================
|
||||
|
||||
angle_style cosine/shift/exp/omp command
|
||||
========================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/shift/exp
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/shift/exp
|
||||
angle_coeff * 10.0 45.0 2.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *cosine/shift/exp* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_cosine_shift_exp.jpg
|
||||
:align: center
|
||||
|
||||
where Umin, theta, and a are defined for each angle type.
|
||||
|
||||
The potential is bounded between [-Umin:0] and the minimum is
|
||||
located at the angle theta0. The a parameter can be both positive or
|
||||
negative and is used to control the spring constant at the
|
||||
equilibrium.
|
||||
|
||||
The spring constant is given by k = A exp(A) Umin / [2 (Exp(a)-1)].
|
||||
For a > 3, k/Umin = a/2 to better than 5% relative error. For negative
|
||||
values of the a parameter, the spring constant is essentially zero,
|
||||
and anharmonic terms takes over. The potential is furthermore well
|
||||
behaved in the limit a -> 0, where it has been implemented to linear
|
||||
order in a for a < 0.001. In this limit the potential reduces to the
|
||||
cosineshifted potential.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* umin (energy)
|
||||
* theta (angle)
|
||||
* A (real number)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`,
|
||||
:doc:`angle_cosineshift <angle_cosineshift>`,
|
||||
:doc:`dihedral_cosineshift <dihedral_cosineshift>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,90 @@
|
|||
.. index:: angle_style cosine/squared
|
||||
|
||||
angle_style cosine/squared command
|
||||
==================================
|
||||
|
||||
angle_style cosine/squared/omp command
|
||||
======================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/squared
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style cosine/squared
|
||||
angle_coeff 2*4 75.0 100.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *cosine/squared* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_cosine_squared.jpg
|
||||
:align: center
|
||||
|
||||
where theta0 is the equilibrium value of the angle, and K is a
|
||||
prefactor. Note that the usual 1/2 factor is included in K.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy)
|
||||
* theta0 (degrees)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,152 @@
|
|||
.. index:: angle_style dipole
|
||||
|
||||
angle_style dipole command
|
||||
==========================
|
||||
|
||||
angle_style dipole/omp command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style dipole
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style dipole
|
||||
angle_coeff 6 2.1 180.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *dipole* angle style is used to control the orientation of a dipolar
|
||||
atom within a molecule :ref:`(Orsi) <Orsi>`. Specifically, the *dipole* angle
|
||||
style restrains the orientation of a point dipole mu_j (embedded in atom
|
||||
'j') with respect to a reference (bond) vector r_ij = r_i - r_j, where 'i'
|
||||
is another atom of the same molecule (typically, 'i' and 'j' are also
|
||||
covalently bonded).
|
||||
|
||||
It is convenient to define an angle gamma between the 'free' vector mu_j
|
||||
and the reference (bond) vector r_ij:
|
||||
|
||||
.. image:: Eqs/angle_dipole_gamma.jpg
|
||||
:align: center
|
||||
|
||||
The *dipole* angle style uses the potential:
|
||||
|
||||
.. image:: Eqs/angle_dipole_potential.jpg
|
||||
:align: center
|
||||
|
||||
where K is a rigidity constant and gamma0 is an equilibrium (reference)
|
||||
angle.
|
||||
|
||||
The torque on the dipole can be obtained by differentiating the
|
||||
potential using the 'chain rule' as in appendix C.3 of
|
||||
:ref:`(Allen) <Allen>`:
|
||||
|
||||
.. image:: Eqs/angle_dipole_torque.jpg
|
||||
:align: center
|
||||
|
||||
Example: if gamma0 is set to 0 degrees, the torque generated by
|
||||
the potential will tend to align the dipole along the reference
|
||||
direction defined by the (bond) vector r_ij (in other words, mu_j is
|
||||
restrained to point towards atom 'i').
|
||||
|
||||
The dipolar torque T_j must be counterbalanced in order to conserve
|
||||
the local angular momentum. This is achieved via an additional force
|
||||
couple generating a torque equivalent to the opposite of T_j:
|
||||
|
||||
.. image:: Eqs/angle_dipole_couple.jpg
|
||||
:align: center
|
||||
|
||||
where F_i and F_j are applied on atoms i and j, respectively.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy)
|
||||
* gamma0 (degrees)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_6>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER-MISC package. See the :ref:`Making LAMMPS <2_3>`
|
||||
section for more info on packages.
|
||||
|
||||
.. note::
|
||||
|
||||
In the "Angles" section of the data file, the atom ID 'j'
|
||||
corresponding to the dipole to restrain must come before the atom ID
|
||||
of the reference atom 'i'. A third atom ID 'k' must also be provided,
|
||||
although 'k' is just a 'dummy' atom which can be any atom; it may be
|
||||
useful to choose a convention (e.g., 'k'='i') and adhere to it. For
|
||||
example, if ID=1 for the dipolar atom to restrain, and ID=2 for the
|
||||
reference atom, the corresponding line in the "Angles" section of the
|
||||
data file would read: X X 1 2 2
|
||||
|
||||
The "newton" command for intramolecular interactions must be "on"
|
||||
(which is the default).
|
||||
|
||||
This angle style should not be used with SHAKE.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`, :doc:`angle_hybrid <angle_hybrid>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Orsi:
|
||||
|
||||
|
||||
|
||||
**(Orsi)** Orsi & Essex, The ELBA force field for coarse-grain modeling of
|
||||
lipid membranes, PloS ONE 6(12): e28637, 2011.
|
||||
|
||||
.. _Allen:
|
||||
|
||||
|
||||
|
||||
**(Allen)** Allen & Tildesley, Computer Simulation of Liquids,
|
||||
Clarendon Press, Oxford, 1987.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,85 @@
|
|||
.. index:: angle_style fourier
|
||||
|
||||
angle_style fourier command
|
||||
===========================
|
||||
|
||||
angle_style fourier/omp command
|
||||
===============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style fourier
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
angle_style fourier
|
||||
angle_coeff 75.0 1.0 1.0 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *fourier* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_fourier.jpg
|
||||
:align: center
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy)
|
||||
* C0 (real)
|
||||
* C1 (real)
|
||||
* C2 (real)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,84 @@
|
|||
.. index:: angle_style fourier/simple
|
||||
|
||||
angle_style fourier/simple command
|
||||
==================================
|
||||
|
||||
angle_style fourier/simple/omp command
|
||||
======================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style fourier/simple
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
angle_style fourier/simple
|
||||
angle_coeff 100.0 -1.0 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *fourier/simple* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_fourier_simple.jpg
|
||||
:align: center
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy)
|
||||
* c (real)
|
||||
* n (real)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,93 @@
|
|||
.. index:: angle_style harmonic
|
||||
|
||||
angle_style harmonic command
|
||||
============================
|
||||
|
||||
angle_style harmonic/kk command
|
||||
===============================
|
||||
|
||||
angle_style harmonic/omp command
|
||||
================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style harmonic
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style harmonic
|
||||
angle_coeff 1 300.0 107.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *harmonic* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_harmonic.jpg
|
||||
:align: center
|
||||
|
||||
where theta0 is the equilibrium value of the angle, and K is a
|
||||
prefactor. Note that the usual 1/2 factor is included in K.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy/radian^2)
|
||||
* theta0 (degrees)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally; hence the units of K are in energy/radian^2.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,109 @@
|
|||
.. index:: angle_style hybrid
|
||||
|
||||
angle_style hybrid command
|
||||
==========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style hybrid style1 style2 ...
|
||||
|
||||
* style1,style2 = list of one or more angle styles
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style hybrid harmonic cosine
|
||||
angle_coeff 1 harmonic 80.0 30.0
|
||||
angle_coeff 2* cosine 50.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *hybrid* style enables the use of multiple angle styles in one
|
||||
simulation. An angle style is assigned to each angle type. For
|
||||
example, angles in a polymer flow (of angle type 1) could be computed
|
||||
with a *harmonic* potential and angles in the wall boundary (of angle
|
||||
type 2) could be computed with a *cosine* potential. The assignment
|
||||
of angle type to style is made via the :doc:`angle_coeff <angle_coeff>`
|
||||
command or in the data file.
|
||||
|
||||
In the angle_coeff commands, the name of an angle style must be added
|
||||
after the angle type, with the remaining coefficients being those
|
||||
appropriate to that style. In the example above, the 2 angle_coeff
|
||||
commands set angles of angle type 1 to be computed with a *harmonic*
|
||||
potential with coefficients 80.0, 30.0 for K, theta0. All other angle
|
||||
types (2-N) are computed with a *cosine* potential with coefficient
|
||||
50.0 for K.
|
||||
|
||||
If angle coefficients are specified in the data file read via the
|
||||
:doc:`read_data <read_data>` command, then the same rule applies.
|
||||
E.g. "harmonic" or "cosine", must be added after the angle type, for each
|
||||
line in the "Angle Coeffs" section, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Angle Coeffs
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
1 harmonic 80.0 30.0
|
||||
2 cosine 50.0
|
||||
...
|
||||
|
||||
If *class2* is one of the angle hybrid styles, the same rule holds for
|
||||
specifying additional BondBond (and BondAngle) coefficients either via
|
||||
the input script or in the data file. I.e. *class2* must be added to
|
||||
each line after the angle type. For lines in the BondBond (or
|
||||
BondAngle) section of the data file for angle types that are not
|
||||
*class2*, you must use an angle style of *skip* as a placeholder, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
BondBond Coeffs
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
1 skip
|
||||
2 class2 3.6512 1.0119 1.0119
|
||||
...
|
||||
|
||||
Note that it is not necessary to use the angle style *skip* in the
|
||||
input script, since BondBond (or BondAngle) coefficients need not be
|
||||
specified at all for angle types that are not *class2*.
|
||||
|
||||
An angle style of *none* with no additional coefficients can be used
|
||||
in place of an angle style, either in a input script angle_coeff
|
||||
command or in the data file, if you desire to turn off interactions
|
||||
for specific angle types.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Unlike other angle styles, the hybrid angle style does not store angle
|
||||
coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when retarting a simulation from a restart
|
||||
file, you need to re-specify angle_coeff commands.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,38 @@
|
|||
.. index:: angle_style none
|
||||
|
||||
angle_style none command
|
||||
========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style none
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style none
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Using an angle style of none means angle forces are not computed, even
|
||||
if triplets of angle atoms were listed in the data file read by the
|
||||
:doc:`read_data <read_data>` command.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,93 @@
|
|||
.. index:: angle_style quartic
|
||||
|
||||
angle_style quartic command
|
||||
===========================
|
||||
|
||||
angle_style quartic/omp command
|
||||
===============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style quartic
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style quartic
|
||||
angle_coeff 1 129.1948 56.8726 -25.9442 -14.2221
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *quartic* angle style uses the potential
|
||||
|
||||
.. image:: Eqs/angle_quartic.jpg
|
||||
:align: center
|
||||
|
||||
where theta0 is the equilibrium value of the angle, and K is a
|
||||
prefactor. Note that the usual 1/2 factor is included in K.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* theta0 (degrees)
|
||||
* K2 (energy/radian^2)
|
||||
* K3 (energy/radian^3)
|
||||
* K4 (energy/radian^4)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally; hence the units of K are in energy/radian^2.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,70 @@
|
|||
.. index:: angle_style sdk
|
||||
|
||||
angle_style sdk command
|
||||
=======================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style sdk
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style sdk/omp
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style sdk
|
||||
angle_coeff 1 300.0 107.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *sdk* angle style is a combination of the harmonic angle potential,
|
||||
|
||||
.. image:: Eqs/angle_harmonic.jpg
|
||||
:align: center
|
||||
|
||||
where theta0 is the equilibrium value of the angle and K a prefactor,
|
||||
with the *repulsive* part of the non-bonded *lj/sdk* pair style
|
||||
between the atoms 1 and 3. This angle potential is intended for
|
||||
coarse grained MD simulations with the CMM parametrization using the
|
||||
:doc:`pair_style lj/sdk <pair_sdk>`. Relative to the pair_style
|
||||
*lj/sdk*, however, the energy is shifted by *epsilon*, to avoid sudden
|
||||
jumps. Note that the usual 1/2 factor is included in K.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above:
|
||||
|
||||
* K (energy/radian^2)
|
||||
* theta0 (degrees)
|
||||
|
||||
Theta0 is specified in degrees, but LAMMPS converts it to radians
|
||||
internally; hence the units of K are in energy/radian^2.
|
||||
The also required *lj/sdk* parameters will be extracted automatically
|
||||
from the pair_style.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
USER-CG-CMM package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`, :doc:`angle_style harmonic <angle_harmonic>`, :doc:`pair_style lj/sdk <pair_sdk>`,
|
||||
:doc:`pair_style lj/sdk/coul/long <pair_sdk>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,112 @@
|
|||
.. index:: angle_style
|
||||
|
||||
angle_style command
|
||||
===================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style style
|
||||
|
||||
* style = *none* or *hybrid* or *charmm* or *class2* or *cosine* or *cosine/squared* or *harmonic*
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style harmonic
|
||||
angle_style charmm
|
||||
angle_style hybrid harmonic cosine
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Set the formula(s) LAMMPS uses to compute angle interactions between
|
||||
triplets of atoms, which remain in force for the duration of the
|
||||
simulation. The list of angle triplets is read in by a
|
||||
:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>` command
|
||||
from a data or restart file.
|
||||
|
||||
Hybrid models where angles are computed using different angle
|
||||
potentials can be setup using the *hybrid* angle style.
|
||||
|
||||
The coefficients associated with a angle style can be specified in a
|
||||
data or restart file or via the :doc:`angle_coeff <angle_coeff>` command.
|
||||
|
||||
All angle potentials store their coefficient data in binary restart
|
||||
files which means angle_style and :doc:`angle_coeff <angle_coeff>`
|
||||
commands do not need to be re-specified in an input script that
|
||||
restarts a simulation. See the :doc:`read_restart <read_restart>`
|
||||
command for details on how to do this. The one exception is that
|
||||
angle_style *hybrid* only stores the list of sub-styles in the restart
|
||||
file; angle coefficients need to be re-specified.
|
||||
|
||||
.. note::
|
||||
|
||||
When both an angle and pair style is defined, the
|
||||
:doc:`special_bonds <special_bonds>` command often needs to be used to
|
||||
turn off (or weight) the pairwise interaction that would otherwise
|
||||
exist between 3 bonded atoms.
|
||||
|
||||
In the formulas listed for each angle style, *theta* is the angle
|
||||
between the 3 atoms in the angle.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Here is an alphabetic list of angle styles defined in LAMMPS. Click on
|
||||
the style to display the formula it computes and coefficients
|
||||
specified by the associated :doc:`angle_coeff <angle_coeff>` command.
|
||||
|
||||
Note that there are also additional angle styles submitted by users
|
||||
which are included in the LAMMPS distribution. The list of these with
|
||||
links to the individual styles are given in the angle section of :ref:`this page <cmd_5>`.
|
||||
|
||||
* :doc:`angle_style none <angle_none>` - turn off angle interactions
|
||||
* :doc:`angle_style hybrid <angle_hybrid>` - define multiple styles of angle interactions
|
||||
|
||||
* :doc:`angle_style charmm <angle_charmm>` - CHARMM angle
|
||||
* :doc:`angle_style class2 <angle_class2>` - COMPASS (class 2) angle
|
||||
* :doc:`angle_style cosine <angle_cosine>` - cosine angle potential
|
||||
* :doc:`angle_style cosine/delta <angle_cosine_delta>` - difference of cosines angle potential
|
||||
* :doc:`angle_style cosine/periodic <angle_cosine_periodic>` - DREIDING angle
|
||||
* :doc:`angle_style cosine/squared <angle_cosine_squared>` - cosine squared angle potential
|
||||
* :doc:`angle_style harmonic <angle_harmonic>` - harmonic angle
|
||||
* :doc:`angle_style table <angle_table>` - tabulated by angle
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
Angle styles can only be set for atom_styles that allow angles to be
|
||||
defined.
|
||||
|
||||
Most angle styles are part of the MOLECULE package. They are only
|
||||
enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
The doc pages for individual bond potentials tell if it is part of a
|
||||
package.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,175 @@
|
|||
.. index:: angle_style table
|
||||
|
||||
angle_style table command
|
||||
=========================
|
||||
|
||||
angle_style table/omp command
|
||||
=============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style table style N
|
||||
|
||||
* style = *linear* or *spline* = method of interpolation
|
||||
* N = use N values in table
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
angle_style table linear 1000
|
||||
angle_coeff 3 file.table ENTRY1
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Style *table* creates interpolation tables of length *N* from angle
|
||||
potential and derivative values listed in a file(s) as a function of
|
||||
angle The files are read by the :doc:`angle_coeff <angle_coeff>`
|
||||
command.
|
||||
|
||||
The interpolation tables are created by fitting cubic splines to the
|
||||
file values and interpolating energy and derivative values at each of
|
||||
*N* angles. During a simulation, these tables are used to interpolate
|
||||
energy and force values on individual atoms as needed. The
|
||||
interpolation is done in one of 2 styles: *linear* or *spline*.
|
||||
|
||||
For the *linear* style, the angle is used to find 2 surrounding table
|
||||
values from which an energy or its derivative is computed by linear
|
||||
interpolation.
|
||||
|
||||
For the *spline* style, a cubic spline coefficients are computed and
|
||||
stored at each of the *N* values in the table. The angle is used to
|
||||
find the appropriate set of coefficients which are used to evaluate a
|
||||
cubic polynomial which computes the energy or derivative.
|
||||
|
||||
The following coefficients must be defined for each angle type via the
|
||||
:doc:`angle_coeff <angle_coeff>` command as in the example above.
|
||||
|
||||
* filename
|
||||
* keyword
|
||||
|
||||
The filename specifies a file containing tabulated energy and
|
||||
derivative values. The keyword specifies a section of the file. The
|
||||
format of this file is described below.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The format of a tabulated file is as follows (without the
|
||||
parenthesized comments):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# Angle potential for harmonic (one or more comment or blank lines)
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
HAM (keyword is the first text on line)
|
||||
N 181 FP 0 0 EQ 90.0 (N, FP, EQ parameters)
|
||||
(blank line)
|
||||
N 181 FP 0 0 (N, FP parameters)
|
||||
1 0.0 200.5 2.5 (index, angle, energy, derivative)
|
||||
2 1.0 198.0 2.5
|
||||
...
|
||||
181 180.0 0.0 0.0
|
||||
|
||||
A section begins with a non-blank line whose 1st character is not a
|
||||
"#"; blank lines or lines starting with "#" can be used as comments
|
||||
between sections. The first line begins with a keyword which
|
||||
identifies the section. The line can contain additional text, but the
|
||||
initial text must match the argument specified in the
|
||||
:doc:`angle_coeff <angle_coeff>` command. The next line lists (in any
|
||||
order) one or more parameters for the table. Each parameter is a
|
||||
keyword followed by one or more numeric values.
|
||||
|
||||
The parameter "N" is required and its value is the number of table
|
||||
entries that follow. Note that this may be different than the *N*
|
||||
specified in the :doc:`angle_style table <angle_style>` command. Let
|
||||
Ntable = *N* in the angle_style command, and Nfile = "N" in the
|
||||
tabulated file. What LAMMPS does is a preliminary interpolation by
|
||||
creating splines using the Nfile tabulated values as nodal points. It
|
||||
uses these to interpolate as needed to generate energy and derivative
|
||||
values at Ntable different points. The resulting tables of length
|
||||
Ntable are then used as described above, when computing energy and
|
||||
force for individual angles and their atoms. This means that if you
|
||||
want the interpolation tables of length Ntable to match exactly what
|
||||
is in the tabulated file (with effectively no preliminary
|
||||
interpolation), you should set Ntable = Nfile.
|
||||
|
||||
The "FP" parameter is optional. If used, it is followed by two values
|
||||
fplo and fphi, which are the 2nd derivatives at the innermost and
|
||||
outermost angle settings. These values are needed by the spline
|
||||
construction routines. If not specified by the "FP" parameter, they
|
||||
are estimated (less accurately) by the first two and last two
|
||||
derivative values in the table.
|
||||
|
||||
The "EQ" parameter is also optional. If used, it is followed by a the
|
||||
equilibrium angle value, which is used, for example, by the :doc:`fix shake <fix_shake>` command. If not used, the equilibrium angle is
|
||||
set to 180.0.
|
||||
|
||||
Following a blank line, the next N lines list the tabulated values.
|
||||
On each line, the 1st value is the index from 1 to N, the 2nd value is
|
||||
the angle value (in degrees), the 3rd value is the energy (in energy
|
||||
units), and the 4th is -dE/d(theta) (also in energy units). The 3rd
|
||||
term is the energy of the 3-atom configuration for the specified
|
||||
angle. The last term is the derivative of the energy with respect to
|
||||
the angle (in degrees, not radians). Thus the units of the last term
|
||||
are still energy, not force. The angle values must increase from one
|
||||
line to the next. The angle values must also begin with 0.0 and end
|
||||
with 180.0, i.e. span the full range of possible angles.
|
||||
|
||||
Note that one file can contain many sections, each with a tabulated
|
||||
potential. LAMMPS reads the file section by section until it finds
|
||||
one that matches the specified keyword.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This angle style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`angle_coeff <angle_coeff>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,186 @@
|
|||
.. index:: atom_modify
|
||||
|
||||
atom_modify command
|
||||
===================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom_modify keyword values ...
|
||||
|
||||
* one or more keyword/value pairs may be appended
|
||||
* keyword = *id* or *map* or *first* or *sort*
|
||||
.. parsed-literal::
|
||||
|
||||
*id* value = *yes* or *no*
|
||||
*map* value = *array* or *hash*
|
||||
*first* value = group-ID = group whose atoms will appear first in internal atom lists
|
||||
*sort* values = Nfreq binsize
|
||||
Nfreq = sort atoms spatially every this many time steps
|
||||
binsize = bin size for spatial sorting (distance units)
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom_modify map hash
|
||||
atom_modify map array sort 10000 2.0
|
||||
atom_modify first colloid
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Modify certain attributes of atoms defined and stored within LAMMPS,
|
||||
in addition to what is specified by the :doc:`atom_style <atom_style>`
|
||||
command. The *id* and *map* keywords must be specified before a
|
||||
simulation box is defined; other keywords can be specified any time.
|
||||
|
||||
The *id* keyword determines whether non-zero atom IDs can be assigned
|
||||
to each atom. If the value is *yes*, which is the default, IDs are
|
||||
assigned, whether you use the :doc:`create atoms <create_atoms>` or
|
||||
:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
|
||||
commands to initialize atoms. If the value is *no* the IDs for all
|
||||
atoms are assumed to be 0.
|
||||
|
||||
If atom IDs are used, they must all be positive integers. They should
|
||||
also be unique, though LAMMPS does not check for this. Typically they
|
||||
should also be consecutively numbered (from 1 to Natoms), though this
|
||||
is not required. Molecular :doc:`atom styles <atom_style>` are those
|
||||
that store bond topology information (styles bond, angle, molecular,
|
||||
full). These styles require atom IDs since the IDs are used to encode
|
||||
the topology. Some other LAMMPS commands also require the use of atom
|
||||
IDs. E.g. some many-body pair styles use them to avoid double
|
||||
computation of the I-J interaction between two atoms.
|
||||
|
||||
The only reason not to use atom IDs is if you are running an atomic
|
||||
simulation so large that IDs cannot be uniquely assigned. For a
|
||||
default LAMMPS build this limit is 2^31 or about 2 billion atoms.
|
||||
However, even in this case, you can use 64-bit atom IDs, allowing 2^63
|
||||
or about 9e18 atoms, if you build LAMMPS with the - DLAMMPS_BIGBIG
|
||||
switch. This is described in :ref:`Section 2.2 <start_2>`
|
||||
of the manual. If atom IDs are not used, they must be specified as 0
|
||||
for all atoms, e.g. in a data or restart file.
|
||||
|
||||
The *map* keyword determines how atom ID lookup is done for molecular
|
||||
atom styles. Lookups are performed by bond (angle, etc) routines in
|
||||
LAMMPS to find the local atom index associated with a global atom ID.
|
||||
|
||||
When the *array* value is used, each processor stores a lookup table
|
||||
of length N, where N is the largest atom ID in the system. This is a
|
||||
fast, simple method for many simulations, but requires too much memory
|
||||
for large simulations. The *hash* value uses a hash table to perform
|
||||
the lookups. This can be slightly slower than the *array* method, but
|
||||
its memory cost is proportional to the number of atoms owned by a
|
||||
processor, i.e. N/P when N is the total number of atoms in the system
|
||||
and P is the number of processors.
|
||||
|
||||
When this setting is not specified in your input script, LAMMPS
|
||||
creates a map, if one is needed, as an array or hash. See the
|
||||
discussion of default values below for how LAMMPS chooses which kind
|
||||
of map to build. Note that atomic systems do not normally need to
|
||||
create a map. However, even in this case some LAMMPS commands will
|
||||
create a map to find atoms (and then destroy it), or require a
|
||||
permanent map. An example of the former is the :doc:`velocity loop all <velocity>` command, which uses a map when looping over all
|
||||
atoms and insuring the same velocity values are assigned to an atom
|
||||
ID, no matter which processor owns it.
|
||||
|
||||
The *first* keyword allows a :doc:`group <group>` to be specified whose
|
||||
atoms will be maintained as the first atoms in each processor's list
|
||||
of owned atoms. This in only useful when the specified group is a
|
||||
small fraction of all the atoms, and there are other operations LAMMPS
|
||||
is performing that will be sped-up significantly by being able to loop
|
||||
over the smaller set of atoms. Otherwise the reordering required by
|
||||
this option will be a net slow-down. The :doc:`neigh_modify include <neigh_modify>` and :doc:`comm_modify group <comm_modify>`
|
||||
commands are two examples of commands that require this setting to
|
||||
work efficiently. Several :doc:`fixes <fix>`, most notably time
|
||||
integration fixes like :doc:`fix nve <fix_nve>`, also take advantage of
|
||||
this setting if the group they operate on is the group specified by
|
||||
this command. Note that specifying "all" as the group-ID effectively
|
||||
turns off the *first* option.
|
||||
|
||||
It is OK to use the *first* keyword with a group that has not yet been
|
||||
defined, e.g. to use the atom_modify first command at the beginning of
|
||||
your input script. LAMMPS does not use the group until a simullation
|
||||
is run.
|
||||
|
||||
The *sort* keyword turns on a spatial sorting or reordering of atoms
|
||||
within each processor's sub-domain every *Nfreq* timesteps. If
|
||||
*Nfreq* is set to 0, then sorting is turned off. Sorting can improve
|
||||
cache performance and thus speed-up a LAMMPS simulation, as discussed
|
||||
in a paper by :ref:`(Meloni) <Meloni>`. Its efficacy depends on the problem
|
||||
size (atoms/processor), how quickly the system becomes disordered, and
|
||||
various other factors. As a general rule, sorting is typically more
|
||||
effective at speeding up simulations of liquids as opposed to solids.
|
||||
In tests we have done, the speed-up can range from zero to 3-4x.
|
||||
|
||||
Reordering is peformed every *Nfreq* timesteps during a dynamics run
|
||||
or iterations during a minimization. More precisely, reordering
|
||||
occurs at the first reneighboring that occurs after the target
|
||||
timestep. The reordering is performed locally by each processor,
|
||||
using bins of the specified *binsize*. If *binsize* is set to 0.0,
|
||||
then a binsize equal to half the :doc:`neighbor <neighbor>` cutoff
|
||||
distance (force cutoff plus skin distance) is used, which is a
|
||||
reasonable value. After the atoms have been binned, they are
|
||||
reordered so that atoms in the same bin are adjacent to each other in
|
||||
the processor's 1d list of atoms.
|
||||
|
||||
The goal of this procedure is for atoms to put atoms close to each
|
||||
other in the processor's one-dimensional list of atoms that are also
|
||||
near to each other spatially. This can improve cache performance when
|
||||
pairwise intereractions and neighbor lists are computed. Note that if
|
||||
bins are too small, there will be few atoms/bin. Likewise if bins are
|
||||
too large, there will be many atoms/bin. In both cases, the goal of
|
||||
cache locality will be undermined.
|
||||
|
||||
.. note::
|
||||
|
||||
Running a simulation with sorting on versus off should not
|
||||
change the simulation results in a statistical sense. However, a
|
||||
different ordering will induce round-off differences, which will lead
|
||||
to diverging trajectories over time when comparing two simluations.
|
||||
Various commands, particularly those which use random numbers
|
||||
(e.g. :doc:`velocity create <velocity>`, and :doc:`fix langevin <fix_langevin>`), may generate (statistically identical)
|
||||
results which depend on the order in which atoms are processed. The
|
||||
order of atoms in a :doc:`dump <dump>` file will also typically change
|
||||
if sorting is enabled.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
The *first* and *sort* options cannot be used together. Since sorting
|
||||
is on by default, it will be turned off if the *first* keyword is
|
||||
used with a group-ID that is not "all".
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
By default, *id* is yes. By default, atomic systems (no bond topology
|
||||
info) do not use a map. For molecular systems (with bond topology
|
||||
info), a map is used. The default map style is array if no atom ID is
|
||||
larger than 1 million, otherwise the default is hash. By default, a
|
||||
"first" group is not defined. By default, sorting is enabled with a
|
||||
frequency of 1000 and a binsize of 0.0, which means the neighbor
|
||||
cutoff will be used to set the bin size.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Meloni:
|
||||
|
||||
|
||||
|
||||
**(Meloni)** Meloni, Rosati and Colombo, J Chem Phys, 126, 121102 (2007).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,310 @@
|
|||
.. index:: atom_style
|
||||
|
||||
atom_style command
|
||||
==================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom_style style args
|
||||
|
||||
* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *electron* or *ellipsoid* or *full* or *line* or *meso* or *molecular* or *peri* or *smd* or *sphere* or *tri* or *template* or *hybrid*
|
||||
.. parsed-literal::
|
||||
|
||||
args = none for any style except *body* and *hybrid*
|
||||
*body* args = bstyle bstyle-args
|
||||
bstyle = style of body particles
|
||||
bstyle-args = additional arguments specific to the bstyle
|
||||
see the :doc:`body <body>` doc page for details
|
||||
*template* args = template-ID
|
||||
template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
|
||||
*hybrid* args = list of one or more sub-styles, each with their args
|
||||
|
||||
* accelerated styles (with same args) = *angle/cuda* or *angle/kk* or *atomic/cuda* or *atomic/kk* or *bond/kk* or *charge/cuda* or *charge/kk* or *full/cuda* or *full/kk* or *molecular/kk*
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom_style atomic
|
||||
atom_style bond
|
||||
atom_style full
|
||||
atom_style full/cuda
|
||||
atom_style body nparticle 2 10
|
||||
atom_style hybrid charge bond
|
||||
atom_style hybrid charge body nparticle 2 5
|
||||
atom_style template myMols
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define what style of atoms to use in a simulation. This determines
|
||||
what attributes are associated with the atoms. This command must be
|
||||
used before a simulation is setup via a :doc:`read_data <read_data>`,
|
||||
:doc:`read_restart <read_restart>`, or :doc:`create_box <create_box>`
|
||||
command.
|
||||
|
||||
Once a style is assigned, it cannot be changed, so use a style general
|
||||
enough to encompass all attributes. E.g. with style *bond*, angular
|
||||
terms cannot be used or added later to the model. It is OK to use a
|
||||
style more general than needed, though it may be slightly inefficient.
|
||||
|
||||
The choice of style affects what quantities are stored by each atom,
|
||||
what quantities are communicated between processors to enable forces
|
||||
to be computed, and what quantities are listed in the data file read
|
||||
by the :doc:`read_data <read_data>` command.
|
||||
|
||||
These are the additional attributes of each style and the typical
|
||||
kinds of physical systems they are used to model. All styles store
|
||||
coordinates, velocities, atom IDs and types. See the
|
||||
:doc:`read_data <read_data>`, :doc:`create_atoms <create_atoms>`, and
|
||||
:doc:`set <set>` commands for info on how to set these various
|
||||
quantities.
|
||||
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *angle* | bonds and angles | bead-spring polymers with stiffness |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *atomic* | only the default values | coarse-grain liquids, solids, metals |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *body* | mass, inertia moments, quaternion, angular momentum | arbitrary bodies |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *bond* | bonds | bead-spring polymers |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *charge* | charge | atomic system with charges |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *dipole* | charge and dipole moment | system with dipolar particles |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *electron* | charge and spin and eradius | electronic force field |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *ellipsoid* | shape, quaternion, angular momentum | aspherical particles |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *full* | molecular + charge | bio-molecules |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *line* | end points, angular velocity | rigid bodies |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *meso* | rho, e, cv | SPH particles |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *molecular* | bonds, angles, dihedrals, impropers | uncharged molecules |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *peri* | mass, volume | mesocopic Peridynamic models |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *smd* | volume, kernel diameter, contact radius, mass | solid and fluid SPH particles |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *sphere* | diameter, mass, angular velocity | granular models |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *template* | template index, template atom | small molecules with fixed topology |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *tri* | corner points, angular momentum | rigid bodies |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
| *wavepacket* | charge, spin, eradius, etag, cs_re, cs_im | AWPMD |
|
||||
+--------------+-----------------------------------------------------+--------------------------------------+
|
||||
|
||||
.. note::
|
||||
|
||||
It is possible to add some attributes, such as a molecule ID, to
|
||||
atom styles that do not have them via the :doc:`fix property/atom <fix_property_atom>` command. This command also
|
||||
allows new custom attributes consisting of extra integer or
|
||||
floating-point values to be added to atoms. See the :doc:`fix property/atom <fix_property_atom>` doc page for examples of cases
|
||||
where this is useful and details on how to initialize, access, and
|
||||
output the custom values.
|
||||
|
||||
All of the above styles define point particles, except the *sphere*,
|
||||
*ellipsoid*, *electron*, *peri*, *wavepacket*, *line*, *tri*, and
|
||||
*body* styles, which define finite-size particles. See :ref:`Section_howto 14 <howto_14>` for an overview of using finite-size
|
||||
particle models with LAMMPS.
|
||||
|
||||
All of the point-particle styles assign mass to particles on a
|
||||
per-type basis, using the :doc:`mass <mass>` command, The finite-size
|
||||
particle styles assign mass to individual particles on a per-particle
|
||||
basis.
|
||||
|
||||
For the *sphere* style, the particles are spheres and each stores a
|
||||
per-particle diameter and mass. If the diameter > 0.0, the particle
|
||||
is a finite-size sphere. If the diameter = 0.0, it is a point
|
||||
particle.
|
||||
|
||||
For the *ellipsoid* style, the particles are ellipsoids and each
|
||||
stores a flag which indicates whether it is a finite-size ellipsoid or
|
||||
a point particle. If it is an ellipsoid, it also stores a shape
|
||||
vector with the 3 diamters of the ellipsoid and a quaternion 4-vector
|
||||
with its orientation.
|
||||
|
||||
For the *dipole* style, a point dipole is defined for each point
|
||||
particle. Note that if you wish the particles to be finite-size
|
||||
spheres as in a Stockmayer potential for a dipolar fluid, so that the
|
||||
particles can rotate due to dipole-dipole interactions, then you need
|
||||
to use atom_style hybrid sphere dipole, which will assign both a
|
||||
diameter and dipole moment to each particle.
|
||||
|
||||
For the *electron* style, the particles representing electrons are 3d
|
||||
Gaussians with a specified position and bandwidth or uncertainty in
|
||||
position, which is represented by the eradius = electron size.
|
||||
|
||||
For the *peri* style, the particles are spherical and each stores a
|
||||
per-particle mass and volume.
|
||||
|
||||
The *meso* style is for smoothed particle hydrodynamics (SPH)
|
||||
particles which store a density (rho), energy (e), and heat capacity
|
||||
(cv).
|
||||
|
||||
The *smd* style is for a general formulation of Smooth Particle
|
||||
Hydrodynamics. Both fluids and solids can be modeled. Particles
|
||||
store the mass and volume of an integration point, a kernel diameter
|
||||
used for calculating the field variables (e.g. stress and deformation)
|
||||
and a contact radius for calculating repulsive forces which prevent
|
||||
individual physical bodies from penetretating each other.
|
||||
|
||||
The *wavepacket* style is similar to *electron*, but the electrons may
|
||||
consist of several Gaussian wave packets, summed up with coefficients
|
||||
cs= (cs_re,cs_im). Each of the wave packets is treated as a separate
|
||||
particle in LAMMPS, wave packets belonging to the same electron must
|
||||
have identical *etag* values.
|
||||
|
||||
For the *line* style, the particles are idealized line segments and
|
||||
each stores a per-particle mass and length and orientation (i.e. the
|
||||
end points of the line segment).
|
||||
|
||||
For the *tri* style, the particles are planar triangles and each
|
||||
stores a per-particle mass and size and orientation (i.e. the corner
|
||||
points of the triangle).
|
||||
|
||||
The *template* style allows molecular topolgy (bonds,angles,etc) to be
|
||||
defined via a molecule template using the `molecule <molecule.txt>`_
|
||||
command. The template stores one or more molecules with a single copy
|
||||
of the topology info (bonds,angles,etc) of each. Individual atoms
|
||||
only store a template index and template atom to identify which
|
||||
molecule and which atom-within-the-molecule they represent. Using the
|
||||
*template* style instead of the *bond*, *angle*, *molecular* styles
|
||||
can save memory for systems comprised of a large number of small
|
||||
molecules, all of a single type (or small number of types). See the
|
||||
paper by Grime and Voth, in :ref:`(Grime) <Grime>`, for examples of how this
|
||||
can be advantageous for large-scale coarse-grained systems.
|
||||
|
||||
.. note::
|
||||
|
||||
When using the *template* style with a :doc:`molecule template <molecule>` that contains multiple molecules, you should
|
||||
insure the atom types, bond types, angle_types, etc in all the
|
||||
molecules are consistent. E.g. if one molecule represents H2O and
|
||||
another CO2, then you probably do not want each molecule file to
|
||||
define 2 atom types and a single bond type, because they will conflict
|
||||
with each other when a mixture system of H2O and CO2 molecules is
|
||||
defined, e.g. by the :doc:`read_data <read_data>` command. Rather the
|
||||
H2O molecule should define atom types 1 and 2, and bond type 1. And
|
||||
the CO2 molecule should define atom types 3 and 4 (or atom types 3 and
|
||||
2 if a single oxygen type is desired), and bond type 2.
|
||||
|
||||
For the *body* style, the particles are arbitrary bodies with internal
|
||||
attributes defined by the "style" of the bodies, which is specified by
|
||||
the *bstyle* argument. Body particles can represent complex entities,
|
||||
such as surface meshes of discrete points, collections of
|
||||
sub-particles, deformable objects, etc.
|
||||
|
||||
The :doc:`body <body>` doc page descibes the body styles LAMMPS
|
||||
currently supports, and provides more details as to the kind of body
|
||||
particles they represent. For all styles, each body particle stores
|
||||
moments of inertia and a quaternion 4-vector, so that its orientation
|
||||
and position can be time integrated due to forces and torques.
|
||||
|
||||
Note that there may be additional arguments required along with the
|
||||
*bstyle* specification, in the atom_style body command. These
|
||||
arguments are described in the :doc:`body <body>` doc page.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Typically, simulations require only a single (non-hybrid) atom style.
|
||||
If some atoms in the simulation do not have all the properties defined
|
||||
by a particular style, use the simplest style that defines all the
|
||||
needed properties by any atom. For example, if some atoms in a
|
||||
simulation are charged, but others are not, use the *charge* style.
|
||||
If some atoms have bonds, but others do not, use the *bond* style.
|
||||
|
||||
The only scenario where the *hybrid* style is needed is if there is no
|
||||
single style which defines all needed properties of all atoms. For
|
||||
example, as mentioned above, if you want dipolar particles which will
|
||||
rotate due to torque, you need to use "atom_style hybrid sphere
|
||||
dipole". When a hybrid style is used, atoms store and communicate the
|
||||
union of all quantities implied by the individual styles.
|
||||
|
||||
When using the *hybrid* style, you cannot combine the *template* style
|
||||
with another molecular style that stores bond,angle,etc info on a
|
||||
per-atom basis.
|
||||
|
||||
LAMMPS can be extended with new atom styles as well as new body
|
||||
styles; see :doc:`this section <Section_modify>`.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda* or *kk* suffix are functionally the same as the
|
||||
corresponding style without the suffix. They have been optimized to
|
||||
run faster, depending on your available hardware, as discussed in
|
||||
:doc:`Section_accelerate <Section_accelerate>` of the manual. The
|
||||
accelerated styles take the same arguments and should produce the same
|
||||
results, except for round-off and precision issues.
|
||||
|
||||
Note that other acceleration packages in LAMMPS, specifically the GPU,
|
||||
USER-INTEL, USER-OMP, and OPT packages do not use accelerated atom
|
||||
styles.
|
||||
|
||||
The accelerated styles are part of the USER-CUDA and KOKKOS packages
|
||||
respectively. They are only enabled if LAMMPS was built with those
|
||||
packages. See the :ref:`Making LAMMPS <start_3>` section
|
||||
for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This command cannot be used after the simulation box is defined by a
|
||||
:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
|
||||
|
||||
The *angle*, *bond*, *full*, *molecular*, and *template* styles are
|
||||
part of the MOLECULE package. The *line* and *tri* styles are part
|
||||
of the ASPHERE pacakge. The *body* style is part of the BODY package.
|
||||
The *dipole* style is part of the DIPOLE package. The *peri* style is
|
||||
part of the PERI package for Peridynamics. The *electron* style is
|
||||
part of the USER-EFF package for :doc:`electronic force fields <pair_eff>`. The *meso* style is part of the USER-SPH
|
||||
package for smoothed particle hydrodyanmics (SPH). See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in LAMMPS. The
|
||||
*wavepacket* style is part of the USER-AWPMD package for the
|
||||
:doc:`antisymmetrized wave packet MD method <pair_awpmd>`. They are
|
||||
only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`read_data <read_data>`, :doc:`pair_style <pair_style>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
atom_style atomic
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Grime:
|
||||
|
||||
|
||||
|
||||
**(Grime)** Grime and Voth, to appear in J Chem Theory & Computation
|
||||
(2014).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,386 @@
|
|||
.. index:: balance
|
||||
|
||||
balance command
|
||||
===============
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
balance thresh style args ... keyword value ...
|
||||
|
||||
* thresh = imbalance threshhold that must be exceeded to perform a re-balance
|
||||
* one style/arg pair can be used (or multiple for *x*,*y*,*z*)
|
||||
* style = *x* or *y* or *z* or *shift* or *rcb*
|
||||
.. parsed-literal::
|
||||
|
||||
*x* args = *uniform* or Px-1 numbers between 0 and 1
|
||||
*uniform* = evenly spaced cuts between processors in x dimension
|
||||
numbers = Px-1 ascending values between 0 and 1, Px - # of processors in x dimension
|
||||
*x* can be specified together with *y* or *z*
|
||||
*y* args = *uniform* or Py-1 numbers between 0 and 1
|
||||
*uniform* = evenly spaced cuts between processors in y dimension
|
||||
numbers = Py-1 ascending values between 0 and 1, Py - # of processors in y dimension
|
||||
*y* can be specified together with *x* or *z*
|
||||
*z* args = *uniform* or Pz-1 numbers between 0 and 1
|
||||
*uniform* = evenly spaced cuts between processors in z dimension
|
||||
numbers = Pz-1 ascending values between 0 and 1, Pz - # of processors in z dimension
|
||||
*z* can be specified together with *x* or *y*
|
||||
*shift* args = dimstr Niter stopthresh
|
||||
dimstr = sequence of letters containing "x" or "y" or "z", each not more than once
|
||||
Niter = # of times to iterate within each dimension of dimstr sequence
|
||||
stopthresh = stop balancing when this imbalance threshhold is reached
|
||||
*rcb* args = none
|
||||
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *out*
|
||||
.. parsed-literal::
|
||||
|
||||
*out* value = filename
|
||||
filename = write each processor's sub-domain to a file
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
balance 0.9 x uniform y 0.4 0.5 0.6
|
||||
balance 1.2 shift xz 5 1.1
|
||||
balance 1.0 shift xz 5 1.1
|
||||
balance 1.1 rcb
|
||||
balance 1.0 shift x 20 1.0 out tmp.balance
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
This command adjusts the size and shape of processor sub-domains
|
||||
within the simulation box, to attempt to balance the number of
|
||||
particles and thus the computational cost (load) evenly across
|
||||
processors. The load balancing is "static" in the sense that this
|
||||
command performs the balancing once, before or between simulations.
|
||||
The processor sub-domains will then remain static during the
|
||||
subsequent run. To perform "dynamic" balancing, see the :doc:`fix balance <fix_balance>` command, which can adjust processor
|
||||
sub-domain sizes and shapes on-the-fly during a :doc:`run <run>`.
|
||||
|
||||
Load-balancing is typically only useful if the particles in the
|
||||
simulation box have a spatially-varying density distribution. E.g. a
|
||||
model of a vapor/liquid interface, or a solid with an irregular-shaped
|
||||
geometry containing void regions. In this case, the LAMMPS default of
|
||||
dividing the simulation box volume into a regular-spaced grid of 3d
|
||||
bricks, with one equal-volume sub-domain per procesor, may assign very
|
||||
different numbers of particles per processor. This can lead to poor
|
||||
performance when the simulation is run in parallel.
|
||||
|
||||
Note that the :doc:`processors <processors>` command allows some control
|
||||
over how the box volume is split across processors. Specifically, for
|
||||
a Px by Py by Pz grid of processors, it allows choice of Px, Py, and
|
||||
Pz, subject to the constraint that Px * Py * Pz = P, the total number
|
||||
of processors. This is sufficient to achieve good load-balance for
|
||||
some problems on some processor counts. However, all the processor
|
||||
sub-domains will still have the same shape and same volume.
|
||||
|
||||
The requested load-balancing operation is only performed if the
|
||||
current "imbalance factor" in particles owned by each processor
|
||||
exceeds the specified *thresh* parameter. The imbalance factor is
|
||||
defined as the maximum number of particles owned by any processor,
|
||||
divided by the average number of particles per processor. Thus an
|
||||
imbalance factor of 1.0 is perfect balance.
|
||||
|
||||
As an example, for 10000 particles running on 10 processors, if the
|
||||
most heavily loaded processor has 1200 particles, then the factor is
|
||||
1.2, meaning there is a 20% imbalance. Note that a re-balance can be
|
||||
forced even if the current balance is perfect (1.0) be specifying a
|
||||
*thresh* < 1.0.
|
||||
|
||||
.. note::
|
||||
|
||||
Balancing is performed even if the imbalance factor does not
|
||||
exceed the *thresh* parameter if a "grid" style is specified when the
|
||||
current partitioning is "tiled". The meaning of "grid" vs "tiled" is
|
||||
explained below. This is to allow forcing of the partitioning to
|
||||
"grid" so that the :doc:`comm_style brick <comm_style>` command can then
|
||||
be used to replace a current :doc:`comm_style tiled <comm_style>`
|
||||
setting.
|
||||
|
||||
When the balance command completes, it prints statistics about the
|
||||
result, including the change in the imbalance factor and the change in
|
||||
the maximum number of particles on any processor. For "grid" methods
|
||||
(defined below) that create a logical 3d grid of processors, the
|
||||
positions of all cutting planes in each of the 3 dimensions (as
|
||||
fractions of the box length) are also printed.
|
||||
|
||||
.. note::
|
||||
|
||||
This command attempts to minimize the imbalance factor, as
|
||||
defined above. But depending on the method a perfect balance (1.0)
|
||||
may not be achieved. For example, "grid" methods (defined below) that
|
||||
create a logical 3d grid cannot achieve perfect balance for many
|
||||
irregular distributions of particles. Likewise, if a portion of the
|
||||
system is a perfect lattice, e.g. the intiial system is generated by
|
||||
the :doc:`create_atoms <create_atoms>` command, then "grid" methods may
|
||||
be unable to achieve exact balance. This is because entire lattice
|
||||
planes will be owned or not owned by a single processor.
|
||||
|
||||
.. note::
|
||||
|
||||
The imbalance factor is also an estimate of the maximum speed-up
|
||||
you can hope to achieve by running a perfectly balanced simulation
|
||||
versus an imbalanced one. In the example above, the 10000 particle
|
||||
simulation could run up to 20% faster if it were perfectly balanced,
|
||||
versus when imbalanced. However, computational cost is not strictly
|
||||
proportional to particle count, and changing the relative size and
|
||||
shape of processor sub-domains may lead to additional computational
|
||||
and communication overheads, e.g. in the PPPM solver used via the
|
||||
:doc:`kspace_style <kspace_style>` command. Thus you should benchmark
|
||||
the run times of a simulation before and after balancing.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The method used to perform a load balance is specified by one of the
|
||||
listed styles (or more in the case of *x*,*y*,*z*), which are
|
||||
described in detail below. There are 2 kinds of styles.
|
||||
|
||||
The *x*, *y*, *z*, and *shift* styles are "grid" methods which produce
|
||||
a logical 3d grid of processors. They operate by changing the cutting
|
||||
planes (or lines) between processors in 3d (or 2d), to adjust the
|
||||
volume (area in 2d) assigned to each processor, as in the following 2d
|
||||
diagram where processor sub-domains are shown and atoms are colored by
|
||||
the processor that owns them. The leftmost diagram is the default
|
||||
partitioning of the simulation box across processors (one sub-box for
|
||||
each of 16 processors); the middle diagram is after a "grid" method
|
||||
has been applied.
|
||||
|
||||
.. thumbnail:: JPG/balance_uniform.jpg
|
||||
:align: center
|
||||
.. thumbnail:: JPG/balance_nonuniform.jpg
|
||||
:align: center
|
||||
.. thumbnail:: JPG/balance_rcb.jpg
|
||||
:align: center
|
||||
The *rcb* style is a "tiling" method which does not produce a logical
|
||||
3d grid of processors. Rather it tiles the simulation domain with
|
||||
rectangular sub-boxes of varying size and shape in an irregular
|
||||
fashion so as to have equal numbers of particles in each sub-box, as
|
||||
in the rightmost diagram above.
|
||||
|
||||
The "grid" methods can be used with either of the
|
||||
:doc:`comm_style <comm_style>` command options, *brick* or *tiled*. The
|
||||
"tiling" methods can only be used with :doc:`comm_style tiled <comm_style>`. Note that it can be useful to use a "grid"
|
||||
method with :doc:`comm_style tiled <comm_style>` to return the domain
|
||||
partitioning to a logical 3d grid of processors so that "comm_style
|
||||
brick" can afterwords be specified for subsequent :doc:`run <run>`
|
||||
commands.
|
||||
|
||||
When a "grid" method is specified, the current domain partitioning can
|
||||
be either a logical 3d grid or a tiled partitioning. In the former
|
||||
case, the current logical 3d grid is used as a starting point and
|
||||
changes are made to improve the imbalance factor. In the latter case,
|
||||
the tiled partitioning is discarded and a logical 3d grid is created
|
||||
with uniform spacing in all dimensions. This becomes the starting
|
||||
point for the balancing operation.
|
||||
|
||||
When a "tiling" method is specified, the current domain partitioning
|
||||
("grid" or "tiled") is ignored, and a new partitioning is computed
|
||||
from scratch.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *x*, *y*, and *z* styles invoke a "grid" method for balancing, as
|
||||
described above. Note that any or all of these 3 styles can be
|
||||
specified together, one after the other, but they cannot be used with
|
||||
any other style. This style adjusts the position of cutting planes
|
||||
between processor sub-domains in specific dimensions. Only the
|
||||
specified dimensions are altered.
|
||||
|
||||
The *uniform* argument spaces the planes evenly, as in the left
|
||||
diagrams above. The *numeric* argument requires listing Ps-1 numbers
|
||||
that specify the position of the cutting planes. This requires
|
||||
knowing Ps = Px or Py or Pz = the number of processors assigned by
|
||||
LAMMPS to the relevant dimension. This assignment is made (and the
|
||||
Px, Py, Pz values printed out) when the simulation box is created by
|
||||
the "create_box" or "read_data" or "read_restart" command and is
|
||||
influenced by the settings of the :doc:`processors <processors>`
|
||||
command.
|
||||
|
||||
Each of the numeric values must be between 0 and 1, and they must be
|
||||
listed in ascending order. They represent the fractional position of
|
||||
the cutting place. The left (or lower) edge of the box is 0.0, and
|
||||
the right (or upper) edge is 1.0. Neither of these values is
|
||||
specified. Only the interior Ps-1 positions are specified. Thus is
|
||||
there are 2 procesors in the x dimension, you specify a single value
|
||||
such as 0.75, which would make the left processor's sub-domain 3x
|
||||
larger than the right processor's sub-domain.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *shift* style invokes a "grid" method for balancing, as
|
||||
described above. It changes the positions of cutting planes between
|
||||
processors in an iterative fashion, seeking to reduce the imbalance
|
||||
factor, similar to how the :doc:`fix balance shift <fix_balance>`
|
||||
command operates.
|
||||
|
||||
The *dimstr* argument is a string of characters, each of which must be
|
||||
an "x" or "y" or "z". Eacn character can appear zero or one time,
|
||||
since there is no advantage to balancing on a dimension more than
|
||||
once. You should normally only list dimensions where you expect there
|
||||
to be a density variation in the particles.
|
||||
|
||||
Balancing proceeds by adjusting the cutting planes in each of the
|
||||
dimensions listed in *dimstr*, one dimension at a time. For a single
|
||||
dimension, the balancing operation (described below) is iterated on up
|
||||
to *Niter* times. After each dimension finishes, the imbalance factor
|
||||
is re-computed, and the balancing operation halts if the *stopthresh*
|
||||
criterion is met.
|
||||
|
||||
A rebalance operation in a single dimension is performed using a
|
||||
recursive multisectioning algorithm, where the position of each
|
||||
cutting plane (line in 2d) in the dimension is adjusted independently.
|
||||
This is similar to a recursive bisectioning for a single value, except
|
||||
that the bounds used for each bisectioning take advantage of
|
||||
information from neighboring cuts if possible. At each iteration, the
|
||||
count of particles on either side of each plane is tallied. If the
|
||||
counts do not match the target value for the plane, the position of
|
||||
the cut is adjusted to be halfway between a low and high bound. The
|
||||
low and high bounds are adjusted on each iteration, using new count
|
||||
information, so that they become closer together over time. Thus as
|
||||
the recustion progresses, the count of particles on either side of the
|
||||
plane gets closer to the target value.
|
||||
|
||||
Once the rebalancing is complete and final processor sub-domains
|
||||
assigned, particles are migrated to their new owning processor, and
|
||||
the balance procedure ends.
|
||||
|
||||
.. note::
|
||||
|
||||
At each rebalance operation, the bisectioning for each cutting
|
||||
plane (line in 2d) typcially starts with low and high bounds separated
|
||||
by the extent of a processor's sub-domain in one dimension. The size
|
||||
of this bracketing region shrinks by 1/2 every iteration. Thus if
|
||||
*Niter* is specified as 10, the cutting plane will typically be
|
||||
positioned to 1 part in 1000 accuracy (relative to the perfect target
|
||||
position). For *Niter* = 20, it will be accurate to 1 part in a
|
||||
million. Thus there is no need ot set *Niter* to a large value.
|
||||
LAMMPS will check if the threshold accuracy is reached (in a
|
||||
dimension) is less iterations than *Niter* and exit early. However,
|
||||
*Niter* should also not be set too small, since it will take roughly
|
||||
the same number of iterations to converge even if the cutting plane is
|
||||
initially close to the target value.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *rcb* style invokes a "tiled" method for balancing, as described
|
||||
above. It performs a recursive coordinate bisectioning (RCB) of the
|
||||
simulation domain. The basic idea is as follows.
|
||||
|
||||
The simulation domain is cut into 2 boxes by an axis-aligned cut in
|
||||
the longest dimension, leaving one new box on either side of the cut.
|
||||
All the processors are also partitioned into 2 groups, half assigned
|
||||
to the box on the lower side of the cut, and half to the box on the
|
||||
upper side. (If the processor count is odd, one side gets an extra
|
||||
processor.) The cut is positioned so that the number of atoms in the
|
||||
lower box is exactly the number that the processors assigned to that
|
||||
box should own for load balance to be perfect. This also makes load
|
||||
balance for the upper box perfect. The positioning is done
|
||||
iteratively, by a bisectioning method. Note that counting atoms on
|
||||
either side of the cut requires communication between all processors
|
||||
at each iteration.
|
||||
|
||||
That is the procedure for the first cut. Subsequent cuts are made
|
||||
recursively, in exactly the same manner. The subset of processors
|
||||
assigned to each box make a new cut in the longest dimension of that
|
||||
box, splitting the box, the subset of processsors, and the atoms in
|
||||
the box in two. The recursion continues until every processor is
|
||||
assigned a sub-box of the entire simulation domain, and owns the atoms
|
||||
in that sub-box.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *out* keyword writes a text file to the specified *filename* with
|
||||
the results of the balancing operation. The file contains the bounds
|
||||
of the sub-domain for each processor after the balancing operation
|
||||
completes. The format of the file is compatible with the
|
||||
`Pizza.py <pizza>`_ *mdump* tool which has support for manipulating and
|
||||
visualizing mesh files. An example is shown here for a balancing by 4
|
||||
processors for a 2d problem:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
ITEM: TIMESTEP
|
||||
0
|
||||
ITEM: NUMBER OF NODES
|
||||
16
|
||||
ITEM: BOX BOUNDS
|
||||
0 10
|
||||
0 10
|
||||
0 10
|
||||
ITEM: NODES
|
||||
1 1 0 0 0
|
||||
2 1 5 0 0
|
||||
3 1 5 5 0
|
||||
4 1 0 5 0
|
||||
5 1 5 0 0
|
||||
6 1 10 0 0
|
||||
7 1 10 5 0
|
||||
8 1 5 5 0
|
||||
9 1 0 5 0
|
||||
10 1 5 5 0
|
||||
11 1 5 10 0
|
||||
12 1 10 5 0
|
||||
13 1 5 5 0
|
||||
14 1 10 5 0
|
||||
15 1 10 10 0
|
||||
16 1 5 10 0
|
||||
ITEM: TIMESTEP
|
||||
0
|
||||
ITEM: NUMBER OF SQUARES
|
||||
4
|
||||
ITEM: SQUARES
|
||||
1 1 1 2 3 4
|
||||
2 1 5 6 7 8
|
||||
3 1 9 10 11 12
|
||||
4 1 13 14 15 16
|
||||
|
||||
The coordinates of all the vertices are listed in the NODES section, 5
|
||||
per processor. Note that the 4 sub-domains share vertices, so there
|
||||
will be duplicate nodes in the list.
|
||||
|
||||
The "SQUARES" section lists the node IDs of the 4 vertices in a
|
||||
rectangle for each processor (1 to 4).
|
||||
|
||||
For a 3d problem, the syntax is similar with 8 vertices listed for
|
||||
each processor, instead of 4, and "SQUARES" replaced by "CUBES".
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
For 2d simulations, the *z* style cannot be used. Nor can a "z"
|
||||
appear in *dimstr* for the *shift* style.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`processors <processors>`, :doc:`fix balance <fix_balance>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,301 @@
|
|||
Body particles
|
||||
==============
|
||||
|
||||
**Overview:**
|
||||
|
||||
This doc page is not about a LAMMPS input script command, but about
|
||||
body particles, which are generalized finite-size particles.
|
||||
Individual body particles can represent complex entities, such as
|
||||
surface meshes of discrete points, collections of sub-particles,
|
||||
deformable objects, etc. Note that other kinds of finite-size
|
||||
spherical and aspherical particles are also supported by LAMMPS, such
|
||||
as spheres, ellipsoids, line segments, and triangles, but they are
|
||||
simpler entities that body particles. See :ref:`Section_howto 14 <howto_14>` for a general overview of all these
|
||||
particle types.
|
||||
|
||||
Body particles are used via the :doc:`atom_style body <atom_style>`
|
||||
command. It takes a body style as an argument. The current body
|
||||
styles supported by LAMMPS are as follows. The name in the first
|
||||
column is used as the *bstyle* argument for the :doc:`atom_style body <atom_style>` command.
|
||||
|
||||
+-------------------+-----------------------------------+
|
||||
| *nparticle* | rigid body with N sub-particles |
|
||||
+-------------------+-----------------------------------+
|
||||
| *rounded/polygon* | 2d convex polygon with N vertices |
|
||||
+-------------------+-----------------------------------+
|
||||
|
||||
The body style determines what attributes are stored for each body and
|
||||
thus how they can be used to compute pairwise body/body or
|
||||
bond/non-body (point particle) interactions. More details of each
|
||||
style are described below.
|
||||
|
||||
.. note::
|
||||
|
||||
The rounded/polygon style listed in the table above and
|
||||
described below has not yet been relesed in LAMMPS. It will be soon.
|
||||
|
||||
We hope to add more styles in the future. See :ref:`Section_modify 12 <mod_12>` for details on how to add a new body
|
||||
style to the code.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**When to use body particles:**
|
||||
|
||||
You should not use body particles to model a rigid body made of
|
||||
simpler particles (e.g. point, sphere, ellipsoid, line segment,
|
||||
triangular particles), if the interaction between pairs of rigid
|
||||
bodies is just the summation of pairwise interactions between the
|
||||
simpler particles. LAMMPS already supports this kind of model via the
|
||||
:doc:`fix rigid <fix_rigid>` command. Any of the numerous pair styles
|
||||
that compute interactions between simpler particles can be used. The
|
||||
:doc:`fix rigid <fix_rigid>` command time integrates the motion of the
|
||||
rigid bodies. All of the standard LAMMPS commands for thermostatting,
|
||||
adding constraints, performing output, etc will operate as expected on
|
||||
the simple particles.
|
||||
|
||||
By contrast, when body particles are used, LAMMPS treats an entire
|
||||
body as a single particle for purposes of computing pairwise
|
||||
interactions, building neighbor lists, migrating particles between
|
||||
processors, outputting particles to a dump file, etc. This means that
|
||||
interactions between pairs of bodies or between a body and non-body
|
||||
(point) particle need to be encoded in an appropriate pair style. If
|
||||
such a pair style were to mimic the :doc:`fix rigid <fix_rigid>` model,
|
||||
it would need to loop over the entire collection of interactions
|
||||
between pairs of simple particles within the two bodies, each time a
|
||||
single body/body interaction was computed.
|
||||
|
||||
Thus it only makes sense to use body particles and develop such a pair
|
||||
style, when particle/particle interactions are more complex than what
|
||||
the :doc:`fix rigid <fix_rigid>` command can already calculate. For
|
||||
example, if particles have one or more of the following attributes:
|
||||
|
||||
* represented by a surface mesh
|
||||
* represented by a collection of geometric entities (e.g. planes + spheres)
|
||||
* deformable
|
||||
* internal stress that induces fragmentation
|
||||
|
||||
then the interaction between pairs of particles is likely to be more
|
||||
complex than the summation of simple sub-particle interactions. An
|
||||
example is contact or frictional forces between particles with planar
|
||||
sufaces that inter-penetrate.
|
||||
|
||||
These are additional LAMMPS commands that can be used with body
|
||||
particles of different styles
|
||||
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`fix nve/body <fix_nve_body>` | integrate motion of a body particle in NVE ensemble |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`fix nvt/body <fix_nvt_body>` | ditto for NVT ensemble |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`fix npt/body <fix_npt_body>` | ditto for NPT ensemble |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`fix nph/body <fix_nph_body>` | ditto for NPH ensemble |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`compute body/local <compute_body_local>` | store sub-particle attributes of a body particle |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`compute temp/body <compute_temp_body>` | compute temperature of body particles |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`dump local <dump>` | output sub-particle attributes of a body particle |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
| :doc:`dump image <dump_image>` | output body particle attributes as an image |
|
||||
+------------------------------------------------+-----------------------------------------------------+
|
||||
|
||||
The pair styles defined for use with specific body styles are listed
|
||||
in the sections below.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Specifics of body style nparticle:**
|
||||
|
||||
The *nparticle* body style represents body particles as a rigid body
|
||||
with a variable number N of sub-particles. It is provided as a
|
||||
vanillia, prototypical example of a body particle, although as
|
||||
mentioned above, the :doc:`fix rigid <fix_rigid>` command already
|
||||
duplicates its functionality.
|
||||
|
||||
The atom_style body command for this body style takes two additional
|
||||
arguments:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom_style body nparticle Nmin Nmax
|
||||
Nmin = minimum # of sub-particles in any body in the system
|
||||
Nmax = maximum # of sub-particles in any body in the system
|
||||
|
||||
The Nmin and Nmax arguments are used to bound the size of data
|
||||
structures used internally by each particle.
|
||||
|
||||
When the :doc:`read_data <read_data>` command reads a data file for this
|
||||
body style, the following information must be provided for each entry
|
||||
in the *Bodies* section of the data file:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom-ID 1 M
|
||||
N
|
||||
ixx iyy izz ixy ixz iyz
|
||||
x1 y1 z1
|
||||
...
|
||||
xN yN zN
|
||||
|
||||
N is the number of sub-particles in the body particle. M = 6 + 3*N.
|
||||
The integer line has a single value N. The floating point line(s)
|
||||
list 6 moments of inertia followed by the coordinates of the N
|
||||
sub-particles (x1 to zN) as 3N values. These values can be listed on
|
||||
as many lines as you wish; see the :doc:`read_data <read_data>` command
|
||||
for more details.
|
||||
|
||||
The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
|
||||
values consistent with the current orientation of the rigid body
|
||||
around its center of mass. The values are with respect to the
|
||||
simulation box XYZ axes, not with respect to the prinicpal axes of the
|
||||
rigid body itself. LAMMPS performs the latter calculation internally.
|
||||
The coordinates of each sub-particle are specified as its x,y,z
|
||||
displacement from the center-of-mass of the body particle. The
|
||||
center-of-mass position of the particle is specified by the x,y,z
|
||||
values in the *Atoms* section of the data file, as is the total mass
|
||||
of the body particle.
|
||||
|
||||
The :doc:`pair_style body <pair_body>` command can be used with this
|
||||
body style to compute body/body and body/non-body interactions.
|
||||
|
||||
For output purposes via the :doc:`compute body/local <compute_body_local>` and :doc:`dump local <dump>`
|
||||
commands, this body style produces one datum for each of the N
|
||||
sub-particles in a body particle. The datum has 3 values:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
1 = x position of sub-particle
|
||||
2 = y position of sub-particle
|
||||
3 = z position of sub-particle
|
||||
|
||||
These values are the current position of the sub-particle within the
|
||||
simulation domain, not a displacement from the center-of-mass (COM) of
|
||||
the body particle itself. These values are calculated using the
|
||||
current COM and orientation of the body particle.
|
||||
|
||||
For images created by the :doc:`dump image <dump_image>` command, if the
|
||||
*body* keyword is set, then each body particle is drawn as a
|
||||
collection of spheres, one for each sub-particle. The size of each
|
||||
sphere is determined by the *bflag1* parameter for the *body* keyword.
|
||||
The *bflag2* argument is ignored.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Specifics of body style rounded/polygon:**
|
||||
|
||||
The *rounded/polygon* body style represents body particles as a convex
|
||||
polygon with a variable number N > 2 of vertices, which can only be
|
||||
used for 2d models. One example use of this body style is for 2d
|
||||
discrete element models, as described in :ref:`Fraige <Fraige>`. Similar to
|
||||
body style *nparticle*, the atom_style body command for this body
|
||||
style takes two additional arguments:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom_style body rounded/polygon Nmin Nmax
|
||||
Nmin = minimum # of vertices in any body in the system
|
||||
Nmax = maximum # of vertices in any body in the system
|
||||
|
||||
The Nmin and Nmax arguments are used to bound the size of data
|
||||
structures used internally by each particle.
|
||||
|
||||
When the :doc:`read_data <read_data>` command reads a data file for this
|
||||
body style, the following information must be provided for each entry
|
||||
in the *Bodies* section of the data file:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
atom-ID 1 M
|
||||
N
|
||||
ixx iyy izz ixy ixz iyz
|
||||
x1 y1 z1
|
||||
...
|
||||
xN yN zN
|
||||
i j j k k ...
|
||||
radius
|
||||
|
||||
N is the number of vertices in the body particle. M = 6 + 3*N + 2*N +
|
||||
1. The integer line has a single value N. The floating point line(s)
|
||||
list 6 moments of inertia followed by the coordinates of the N
|
||||
vertices (x1 to zN) as 3N values, followed by 2N vertex indices
|
||||
corresponding to the end points of the N edges, followed by a single
|
||||
radius value = the smallest circle encompassing the polygon. That
|
||||
last value is used to facilitate the body/body contact detection.
|
||||
These floating-point values can be listed on as many lines as you
|
||||
wish; see the :doc:`read_data <read_data>` command for more details.
|
||||
|
||||
The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
|
||||
values consistent with the current orientation of the rigid body
|
||||
around its center of mass. The values are with respect to the
|
||||
simulation box XYZ axes, not with respect to the prinicpal axes of the
|
||||
rigid body itself. LAMMPS performs the latter calculation internally.
|
||||
The coordinates of each vertex are specified as its x,y,z displacement
|
||||
from the center-of-mass of the body particle. The center-of-mass
|
||||
position of the particle is specified by the x,y,z values in the
|
||||
*Atoms* section of the data file.
|
||||
|
||||
For example, the following information would specify a square
|
||||
particles whose edge length is sqrt(2):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
3 1 27
|
||||
4
|
||||
1 1 4 0 0 0
|
||||
-0.7071 -0.7071 0
|
||||
-0.7071 0.7071 0
|
||||
0.7071 0.7071 0
|
||||
0.7071 -0.7071 0
|
||||
0 1 1 2 2 3 3 0
|
||||
1.0
|
||||
|
||||
The :doc:`pair_style body/rounded/polygon <pair_body_rounded_polygon>` command
|
||||
can be used with this body style to compute body/body interactions.
|
||||
|
||||
For output purposes via the :doc:`compute body/local <compute_body_local>` and :doc:`dump local <dump>`
|
||||
commands, this body style produces one datum for each of the N
|
||||
sub-particles in a body particle. The datum has 3 values:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
1 = x position of vertex
|
||||
2 = y position of vertex
|
||||
3 = z position of vertex
|
||||
|
||||
These values are the current position of the vertex within the
|
||||
simulation domain, not a displacement from the center-of-mass (COM) of
|
||||
the body particle itself. These values are calculated using the
|
||||
current COM and orientation of the body particle.
|
||||
|
||||
For images created by the :doc:`dump image <dump_image>` command, if the
|
||||
*body* keyword is set, then each body particle is drawn as a convex
|
||||
polygon consisting of N line segments. Note that the line segments
|
||||
are drawn between the N vertices, which does not correspond exactly to
|
||||
the physical extent of the body (because the `pair_style rounded/polygon <pair_body_rounded_polygon.cpp>`_ defines finite-size
|
||||
spheres at those point and the line segments between the spheres are
|
||||
tangent to the spheres). The drawn diameter of each line segment is
|
||||
determined by the *bflag1* parameter for the *body* keyword. The
|
||||
*bflag2* argument is ignored.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Fraige:
|
||||
|
||||
|
||||
|
||||
**(Fraige)** F. Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds,
|
||||
Particuology, 6, 455 (2008).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,101 @@
|
|||
.. index:: bond_style class2
|
||||
|
||||
bond_style class2 command
|
||||
=========================
|
||||
|
||||
bond_style class2/omp command
|
||||
=============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style class2
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style class2
|
||||
bond_coeff 1 1.0 100.0 80.0 80.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *class2* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_class2.jpg
|
||||
:align: center
|
||||
|
||||
where r0 is the equilibrium bond distance.
|
||||
|
||||
See :ref:`(Sun) <Sun>` for a description of the COMPASS class2 force field.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* R0 (distance)
|
||||
* K2 (energy/distance^2)
|
||||
* K3 (energy/distance^3)
|
||||
* K4 (energy/distance^4)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the CLASS2
|
||||
package. See the :ref:`Making LAMMPS <start_3>` section
|
||||
for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Sun:
|
||||
|
||||
|
||||
|
||||
**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,112 @@
|
|||
.. index:: bond_coeff
|
||||
|
||||
bond_coeff command
|
||||
==================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_coeff N args
|
||||
|
||||
* N = bond type (see asterisk form below)
|
||||
* args = coefficients for one or more bond types
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_coeff 5 80.0 1.2
|
||||
bond_coeff * 30.0 1.5 1.0 1.0
|
||||
bond_coeff 1*4 30.0 1.5 1.0 1.0
|
||||
bond_coeff 1 harmonic 200.0 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Specify the bond force field coefficients for one or more bond types.
|
||||
The number and meaning of the coefficients depends on the bond style.
|
||||
Bond coefficients can also be set in the data file read by the
|
||||
:doc:`read_data <read_data>` command or in a restart file.
|
||||
|
||||
N can be specified in one of two ways. An explicit numeric value can
|
||||
be used, as in the 1st example above. Or a wild-card asterisk can be
|
||||
used to set the coefficients for multiple bond types. This takes the
|
||||
form "*" or "*n" or "n*" or "m*n". If N = the number of bond types,
|
||||
then an asterisk with no numeric values means all types from 1 to N. A
|
||||
leading asterisk means all types from 1 to n (inclusive). A trailing
|
||||
asterisk means all types from n to N (inclusive). A middle asterisk
|
||||
means all types from m to n (inclusive).
|
||||
|
||||
Note that using a bond_coeff command can override a previous setting
|
||||
for the same bond type. For example, these commands set the coeffs
|
||||
for all bond types, then overwrite the coeffs for just bond type 2:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_coeff * 100.0 1.2
|
||||
bond_coeff 2 200.0 1.2
|
||||
|
||||
A line in a data file that specifies bond coefficients uses the exact
|
||||
same format as the arguments of the bond_coeff command in an input
|
||||
script, except that wild-card asterisks should not be used since
|
||||
coefficients for all N types must be listed in the file. For example,
|
||||
under the "Bond Coeffs" section of a data file, the line that
|
||||
corresponds to the 1st example above would be listed as
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
5 80.0 1.2
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Here is an alphabetic list of bond styles defined in LAMMPS. Click on
|
||||
the style to display the formula it computes and coefficients
|
||||
specified by the associated :doc:`bond_coeff <bond_coeff>` command.
|
||||
|
||||
Note that here are also additional bond styles submitted by users
|
||||
which are included in the LAMMPS distribution. The list of these with
|
||||
links to the individual styles are given in the bond section of :ref:`this page <cmd_5>`.
|
||||
|
||||
* :doc:`bond_style none <bond_none>` - turn off bonded interactions
|
||||
* :doc:`bond_style hybrid <bond_hybrid>` - define multiple styles of bond interactions
|
||||
|
||||
* :doc:`bond_style class2 <bond_class2>` - COMPASS (class 2) bond
|
||||
* :doc:`bond_style fene <bond_fene>` - FENE (finite-extensible non-linear elastic) bond
|
||||
* :doc:`bond_style fene/expand <bond_fene_expand>` - FENE bonds with variable size particles
|
||||
* :doc:`bond_style harmonic <bond_harmonic>` - harmonic bond
|
||||
* :doc:`bond_style morse <bond_morse>` - Morse bond
|
||||
* :doc:`bond_style nonlinear <bond_nonlinear>` - nonlinear bond
|
||||
* :doc:`bond_style quartic <bond_quartic>` - breakable quartic bond
|
||||
* :doc:`bond_style table <bond_table>` - tabulated by bond length
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This command must come after the simulation box is defined by a
|
||||
:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
|
||||
:doc:`create_box <create_box>` command.
|
||||
|
||||
A bond style must be defined before any bond coefficients are set,
|
||||
either in the input script or in a data file.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_style <bond_style>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,109 @@
|
|||
.. index:: bond_style fene
|
||||
|
||||
bond_style fene command
|
||||
=======================
|
||||
|
||||
bond_style fene/kk command
|
||||
==========================
|
||||
|
||||
bond_style fene/omp command
|
||||
===========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style fene
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style fene
|
||||
bond_coeff 1 30.0 1.5 1.0 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *fene* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_fene.jpg
|
||||
:align: center
|
||||
|
||||
to define a finite extensible nonlinear elastic (FENE) potential
|
||||
:ref:`(Kremer) <Kremer>`, used for bead-spring polymer models. The first
|
||||
term is attractive, the 2nd Lennard-Jones term is repulsive. The
|
||||
first term extends to R0, the maximum extent of the bond. The 2nd
|
||||
term is cutoff at 2^(1/6) sigma, the minimum of the LJ potential.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy/distance^2)
|
||||
* R0 (distance)
|
||||
* epsilon (energy)
|
||||
* sigma (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
You typically should specify `special_bonds fene <special_bonds.html">`_
|
||||
or :doc:`special_bonds lj/coul 0 1 1 <special_bonds>` to use this bond
|
||||
style. LAMMPS will issue a warning it that's not the case.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Kremer:
|
||||
|
||||
|
||||
|
||||
**(Kremer)** Kremer, Grest, J Chem Phys, 92, 5057 (1990).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,111 @@
|
|||
.. index:: bond_style fene/expand
|
||||
|
||||
bond_style fene/expand command
|
||||
==============================
|
||||
|
||||
bond_style fene/expand/omp command
|
||||
==================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style fene/expand
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style fene/expand
|
||||
bond_coeff 1 30.0 1.5 1.0 1.0 0.5
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *fene/expand* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_fene_expand.jpg
|
||||
:align: center
|
||||
|
||||
to define a finite extensible nonlinear elastic (FENE) potential
|
||||
:ref:`(Kremer) <Kremer>`, used for bead-spring polymer models. The first
|
||||
term is attractive, the 2nd Lennard-Jones term is repulsive.
|
||||
|
||||
The *fene/expand* bond style is similar to *fene* except that an extra
|
||||
shift factor of delta (positive or negative) is added to *r* to
|
||||
effectively change the bead size of the bonded atoms. The first term
|
||||
now extends to R0 + delta and the 2nd term is cutoff at 2^(1/6) sigma
|
||||
+ delta.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy/distance^2)
|
||||
* R0 (distance)
|
||||
* epsilon (energy)
|
||||
* sigma (distance)
|
||||
* delta (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
You typically should specify `special_bonds fene <special_bonds.html">`_
|
||||
or :doc:`special_bonds lj/coul 0 1 1 <special_bonds>` to use this bond
|
||||
style. LAMMPS will issue a warning it that's not the case.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Kremer:
|
||||
|
||||
|
||||
|
||||
**(Kremer)** Kremer, Grest, J Chem Phys, 92, 5057 (1990).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,93 @@
|
|||
.. index:: bond_style harmonic
|
||||
|
||||
bond_style harmonic command
|
||||
===========================
|
||||
|
||||
bond_style harmonic/intel command
|
||||
=================================
|
||||
|
||||
bond_style harmonic/kk command
|
||||
==============================
|
||||
|
||||
bond_style harmonic/omp command
|
||||
===============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 5 80.0 1.2
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *harmonic* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_harmonic.jpg
|
||||
:align: center
|
||||
|
||||
where r0 is the equilibrium bond distance. Note that the usual 1/2
|
||||
factor is included in K.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy/distance^2)
|
||||
* r0 (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,94 @@
|
|||
.. index:: bond_style harmonic/shift
|
||||
|
||||
bond_style harmonic/shift command
|
||||
=================================
|
||||
|
||||
bond_style harmonic/shift/omp command
|
||||
=====================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic/shift
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic/shift
|
||||
bond_coeff 5 10.0 0.5 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *harmonic/shift* bond style is a shifted harmonic bond that uses
|
||||
the potential
|
||||
|
||||
.. image:: Eqs/bond_harmonic_shift.jpg
|
||||
:align: center
|
||||
|
||||
where r0 is the equilibrium bond distance, and rc the critical distance.
|
||||
The potential is -Umin at r0 and zero at rc. The spring constant is
|
||||
k = Umin / [ 2 (r0-rc)^2].
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* Umin (energy)
|
||||
|
||||
* r0 (distance)
|
||||
|
||||
* rc (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`,
|
||||
:doc:`bond_harmonic <bond_harmonic>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,93 @@
|
|||
.. index:: bond_style harmonic/shift/cut
|
||||
|
||||
bond_style harmonic/shift/cut command
|
||||
=====================================
|
||||
|
||||
bond_style harmonic/shift/cut/omp command
|
||||
=========================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic/shift/cut
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic/shift/cut
|
||||
bond_coeff 5 10.0 0.5 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *harmonic/shift/cut* bond style is a shifted harmonic bond that
|
||||
uses the potential
|
||||
|
||||
.. image:: Eqs/bond_harmonic_shift_cut.jpg
|
||||
:align: center
|
||||
|
||||
where r0 is the equilibrium bond distance, and rc the critical distance.
|
||||
The bond potential is zero for distances r > rc. The potential is -Umin
|
||||
at r0 and zero at rc. The spring constant is k = Umin / [ 2 (r0-rc)^2].
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* Umin (energy)
|
||||
* r0 (distance)
|
||||
* rc (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
|
||||
section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`,
|
||||
:doc:`bond_harmonic <bond_harmonic>`,
|
||||
:doc:`bond_harmonicshift <bond_harmonicshift>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,88 @@
|
|||
.. index:: bond_style hybrid
|
||||
|
||||
bond_style hybrid command
|
||||
=========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style hybrid style1 style2 ...
|
||||
|
||||
* style1,style2 = list of one or more bond styles
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style hybrid harmonic fene
|
||||
bond_coeff 1 harmonic 80.0 1.2
|
||||
bond_coeff 2* fene 30.0 1.5 1.0 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *hybrid* style enables the use of multiple bond styles in one
|
||||
simulation. A bond style is assigned to each bond type. For example,
|
||||
bonds in a polymer flow (of bond type 1) could be computed with a
|
||||
*fene* potential and bonds in the wall boundary (of bond type 2) could
|
||||
be computed with a *harmonic* potential. The assignment of bond type
|
||||
to style is made via the :doc:`bond_coeff <bond_coeff>` command or in
|
||||
the data file.
|
||||
|
||||
In the bond_coeff commands, the name of a bond style must be added
|
||||
after the bond type, with the remaining coefficients being those
|
||||
appropriate to that style. In the example above, the 2 bond_coeff
|
||||
commands set bonds of bond type 1 to be computed with a *harmonic*
|
||||
potential with coefficients 80.0, 1.2 for K, r0. All other bond types
|
||||
(2-N) are computed with a *fene* potential with coefficients 30.0,
|
||||
1.5, 1.0, 1.0 for K, R0, epsilon, sigma.
|
||||
|
||||
If bond coefficients are specified in the data file read via the
|
||||
:doc:`read_data <read_data>` command, then the same rule applies.
|
||||
E.g. "harmonic" or "fene" must be added after the bond type, for each
|
||||
line in the "Bond Coeffs" section, e.g.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Bond Coeffs
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
1 harmonic 80.0 1.2
|
||||
2 fene 30.0 1.5 1.0 1.0
|
||||
...
|
||||
|
||||
A bond style of *none* with no additional coefficients can be used in
|
||||
place of a bond style, either in a input script bond_coeff command or
|
||||
in the data file, if you desire to turn off interactions for specific
|
||||
bond types.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Unlike other bond styles, the hybrid bond style does not store bond
|
||||
coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when retarting a simulation from a restart
|
||||
file, you need to re-specify bond_coeff commands.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,88 @@
|
|||
.. index:: bond_style morse
|
||||
|
||||
bond_style morse command
|
||||
========================
|
||||
|
||||
bond_style morse/omp command
|
||||
============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style morse
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style morse
|
||||
bond_coeff 5 1.0 2.0 1.2
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *morse* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_morse.jpg
|
||||
:align: center
|
||||
|
||||
where r0 is the equilibrium bond distance, alpha is a stiffness
|
||||
parameter, and D determines the depth of the potential well.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* D (energy)
|
||||
* alpha (inverse distance)
|
||||
* r0 (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,38 @@
|
|||
.. index:: bond_style none
|
||||
|
||||
bond_style none command
|
||||
=======================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style none
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style none
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Using a bond style of none means bond forces are not computed, even if
|
||||
pairs of bonded atoms were listed in the data file read by the
|
||||
:doc:`read_data <read_data>` command.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,98 @@
|
|||
.. index:: bond_style nonlinear
|
||||
|
||||
bond_style nonlinear command
|
||||
============================
|
||||
|
||||
bond_style nonlinear/omp command
|
||||
================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style nonlinear
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style nonlinear
|
||||
bond_coeff 2 100.0 1.1 1.4
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *nonlinear* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_nonlinear.jpg
|
||||
:align: center
|
||||
|
||||
to define an anharmonic spring :ref:`(Rector) <Rector>` of equilibrium
|
||||
length r0 and maximum extension lamda.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* epsilon (energy)
|
||||
* r0 (distance)
|
||||
* lamda (distance)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Rector:
|
||||
|
||||
|
||||
|
||||
**(Rector)** Rector, Van Swol, Henderson, Molecular Physics, 82, 1009 (1994).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,128 @@
|
|||
.. index:: bond_style quartic
|
||||
|
||||
bond_style quartic command
|
||||
==========================
|
||||
|
||||
bond_style quartic/omp command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style quartic
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style quartic
|
||||
bond_coeff 2 1200 -0.55 0.25 1.3 34.6878
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *quartic* bond style uses the potential
|
||||
|
||||
.. image:: Eqs/bond_quartic.jpg
|
||||
:align: center
|
||||
|
||||
to define a bond that can be broken as the simulation proceeds (e.g.
|
||||
due to a polymer being stretched). The sigma and epsilon used in the
|
||||
LJ portion of the formula are both set equal to 1.0 by LAMMPS.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
|
||||
the data file or restart files read by the :doc:`read_data <read_data>`
|
||||
or :doc:`read_restart <read_restart>` commands:
|
||||
|
||||
* K (energy/distance^4)
|
||||
* B1 (distance)
|
||||
* B2 (distance)
|
||||
* Rc (distance)
|
||||
* U0 (energy)
|
||||
|
||||
This potential was constructed to mimic the FENE bond potential for
|
||||
coarse-grained polymer chains. When monomers with sigma = epsilon =
|
||||
1.0 are used, the following choice of parameters gives a quartic
|
||||
potential that looks nearly like the FENE potential: K = 1200, B1 =
|
||||
-0.55, B2 = 0.25, Rc = 1.3, and U0 = 34.6878. Different parameters
|
||||
can be specified using the :doc:`bond_coeff <bond_coeff>` command, but
|
||||
you will need to choose them carefully so they form a suitable bond
|
||||
potential.
|
||||
|
||||
Rc is the cutoff length at which the bond potential goes smoothly to a
|
||||
local maximum. If a bond length ever becomes > Rc, LAMMPS "breaks"
|
||||
the bond, which means two things. First, the bond potential is turned
|
||||
off by setting its type to 0, and is no longer computed. Second, a
|
||||
pairwise interaction between the two atoms is turned on, since they
|
||||
are no longer bonded.
|
||||
|
||||
LAMMPS does the second task via a computational sleight-of-hand. It
|
||||
subtracts the pairwise interaction as part of the bond computation.
|
||||
When the bond breaks, the subtraction stops. For this to work, the
|
||||
pairwise interaction must always be computed by the
|
||||
:doc:`pair_style <pair_style>` command, whether the bond is broken or
|
||||
not. This means that :doc:`special_bonds <special_bonds>` must be set
|
||||
to 1,1,1, as indicated as a restriction below.
|
||||
|
||||
Note that when bonds are dumped to a file via the :doc:`dump local <dump>` command, bonds with type 0 are not included. The
|
||||
:doc:`delete_bonds <delete_bonds>` command can also be used to query the
|
||||
status of broken bonds or permanently delete them, e.g.:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
delete_bonds all stats
|
||||
delete_bonds all bond 0 remove
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
The *quartic* style requires that :doc:`special_bonds <special_bonds>`
|
||||
parameters be set to 1,1,1. Three- and four-body interactions (angle,
|
||||
dihedral, etc) cannot be used with *quartic* bonds.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,121 @@
|
|||
.. index:: bond_style
|
||||
|
||||
bond_style command
|
||||
==================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style style args
|
||||
|
||||
* style = *none* or *hybrid* or *class2* or *fene* or *fene/expand* or *harmonic* or *morse* or *nonlinear* or *quartic*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
args = none for any style except *hybrid*
|
||||
*hybrid* args = list of one or more styles
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style harmonic
|
||||
bond_style fene
|
||||
bond_style hybrid harmonic fene
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Set the formula(s) LAMMPS uses to compute bond interactions between
|
||||
pairs of atoms. In LAMMPS, a bond differs from a pairwise
|
||||
interaction, which are set via the :doc:`pair_style <pair_style>`
|
||||
command. Bonds are defined between specified pairs of atoms and
|
||||
remain in force for the duration of the simulation (unless the bond
|
||||
breaks which is possible in some bond potentials). The list of bonded
|
||||
atoms is read in by a :doc:`read_data <read_data>` or
|
||||
:doc:`read_restart <read_restart>` command from a data or restart file.
|
||||
By contrast, pair potentials are typically defined between all pairs
|
||||
of atoms within a cutoff distance and the set of active interactions
|
||||
changes over time.
|
||||
|
||||
Hybrid models where bonds are computed using different bond potentials
|
||||
can be setup using the *hybrid* bond style.
|
||||
|
||||
The coefficients associated with a bond style can be specified in a
|
||||
data or restart file or via the :doc:`bond_coeff <bond_coeff>` command.
|
||||
|
||||
All bond potentials store their coefficient data in binary restart
|
||||
files which means bond_style and :doc:`bond_coeff <bond_coeff>` commands
|
||||
do not need to be re-specified in an input script that restarts a
|
||||
simulation. See the :doc:`read_restart <read_restart>` command for
|
||||
details on how to do this. The one exception is that bond_style
|
||||
*hybrid* only stores the list of sub-styles in the restart file; bond
|
||||
coefficients need to be re-specified.
|
||||
|
||||
.. note::
|
||||
|
||||
When both a bond and pair style is defined, the
|
||||
:doc:`special_bonds <special_bonds>` command often needs to be used to
|
||||
turn off (or weight) the pairwise interaction that would otherwise
|
||||
exist between 2 bonded atoms.
|
||||
|
||||
In the formulas listed for each bond style, *r* is the distance
|
||||
between the 2 atoms in the bond.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Here is an alphabetic list of bond styles defined in LAMMPS. Click on
|
||||
the style to display the formula it computes and coefficients
|
||||
specified by the associated :doc:`bond_coeff <bond_coeff>` command.
|
||||
|
||||
Note that there are also additional bond styles submitted by users
|
||||
which are included in the LAMMPS distribution. The list of these with
|
||||
links to the individual styles are given in the bond section of :ref:`this page <cmd_5>`.
|
||||
|
||||
* :doc:`bond_style none <bond_none>` - turn off bonded interactions
|
||||
* :doc:`bond_style hybrid <bond_hybrid>` - define multiple styles of bond interactions
|
||||
|
||||
* :doc:`bond_style class2 <bond_class2>` - COMPASS (class 2) bond
|
||||
* :doc:`bond_style fene <bond_fene>` - FENE (finite-extensible non-linear elastic) bond
|
||||
* :doc:`bond_style fene/expand <bond_fene_expand>` - FENE bonds with variable size particles
|
||||
* :doc:`bond_style harmonic <bond_harmonic>` - harmonic bond
|
||||
* :doc:`bond_style morse <bond_morse>` - Morse bond
|
||||
* :doc:`bond_style nonlinear <bond_nonlinear>` - nonlinear bond
|
||||
* :doc:`bond_style quartic <bond_quartic>` - breakable quartic bond
|
||||
* :doc:`bond_style table <bond_table>` - tabulated by bond length
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
Bond styles can only be set for atom styles that allow bonds to be
|
||||
defined.
|
||||
|
||||
Most bond styles are part of the MOLECULE package. They are only
|
||||
enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
The doc pages for individual bond potentials tell if it is part of a
|
||||
package.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
bond_style none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,172 @@
|
|||
.. index:: bond_style table
|
||||
|
||||
bond_style table command
|
||||
========================
|
||||
|
||||
bond_style table/omp command
|
||||
============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style table style N
|
||||
|
||||
* style = *linear* or *spline* = method of interpolation
|
||||
* N = use N values in table
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
bond_style table linear 1000
|
||||
bond_coeff 1 file.table ENTRY1
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Style *table* creates interpolation tables of length *N* from bond
|
||||
potential and force values listed in a file(s) as a function of bond
|
||||
length. The files are read by the :doc:`bond_coeff <bond_coeff>`
|
||||
command.
|
||||
|
||||
The interpolation tables are created by fitting cubic splines to the
|
||||
file values and interpolating energy and force values at each of *N*
|
||||
distances. During a simulation, these tables are used to interpolate
|
||||
energy and force values as needed. The interpolation is done in one
|
||||
of 2 styles: *linear* or *spline*.
|
||||
|
||||
For the *linear* style, the bond length is used to find 2 surrounding
|
||||
table values from which an energy or force is computed by linear
|
||||
interpolation.
|
||||
|
||||
For the *spline* style, a cubic spline coefficients are computed and
|
||||
stored at each of the *N* values in the table. The bond length is
|
||||
used to find the appropriate set of coefficients which are used to
|
||||
evaluate a cubic polynomial which computes the energy or force.
|
||||
|
||||
The following coefficients must be defined for each bond type via the
|
||||
:doc:`bond_coeff <bond_coeff>` command as in the example above.
|
||||
|
||||
* filename
|
||||
* keyword
|
||||
|
||||
The filename specifies a file containing tabulated energy and force
|
||||
values. The keyword specifies a section of the file. The format of
|
||||
this file is described below.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The format of a tabulated file is as follows (without the
|
||||
parenthesized comments):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# Bond potential for harmonic (one or more comment or blank lines)
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
HAM (keyword is the first text on line)
|
||||
N 101 FP 0 0 EQ 0.5 (N, FP, EQ parameters)
|
||||
(blank line)
|
||||
1 0.00 338.0000 1352.0000 (index, bond-length, energy, force)
|
||||
2 0.01 324.6152 1324.9600
|
||||
...
|
||||
101 1.00 338.0000 -1352.0000
|
||||
|
||||
A section begins with a non-blank line whose 1st character is not a
|
||||
"#"; blank lines or lines starting with "#" can be used as comments
|
||||
between sections. The first line begins with a keyword which
|
||||
identifies the section. The line can contain additional text, but the
|
||||
initial text must match the argument specified in the
|
||||
:doc:`bond_coeff <bond_coeff>` command. The next line lists (in any
|
||||
order) one or more parameters for the table. Each parameter is a
|
||||
keyword followed by one or more numeric values.
|
||||
|
||||
The parameter "N" is required and its value is the number of table
|
||||
entries that follow. Note that this may be different than the *N*
|
||||
specified in the :doc:`bond_style table <bond_style>` command. Let
|
||||
Ntable = *N* in the bond_style command, and Nfile = "N" in the
|
||||
tabulated file. What LAMMPS does is a preliminary interpolation by
|
||||
creating splines using the Nfile tabulated values as nodal points. It
|
||||
uses these to interpolate as needed to generate energy and force
|
||||
values at Ntable different points. The resulting tables of length
|
||||
Ntable are then used as described above, when computing energy and
|
||||
force for individual bond lengths. This means that if you want the
|
||||
interpolation tables of length Ntable to match exactly what is in the
|
||||
tabulated file (with effectively no preliminary interpolation), you
|
||||
should set Ntable = Nfile.
|
||||
|
||||
The "FP" parameter is optional. If used, it is followed by two values
|
||||
fplo and fphi, which are the derivatives of the force at the innermost
|
||||
and outermost bond lengths. These values are needed by the spline
|
||||
construction routines. If not specified by the "FP" parameter, they
|
||||
are estimated (less accurately) by the first two and last two force
|
||||
values in the table.
|
||||
|
||||
The "EQ" parameter is also optional. If used, it is followed by a the
|
||||
equilibrium bond length, which is used, for example, by the :doc:`fix shake <fix_shake>` command. If not used, the equilibrium bond
|
||||
length is set to 0.0.
|
||||
|
||||
Following a blank line, the next N lines list the tabulated values.
|
||||
On each line, the 1st value is the index from 1 to N, the 2nd value is
|
||||
the bond length r (in distance units), the 3rd value is the energy (in
|
||||
energy units), and the 4th is the force (in force units). The bond
|
||||
lengths must range from a LO value to a HI value, and increase from
|
||||
one line to the next. If the actual bond length is ever smaller than
|
||||
the LO value or larger than the HI value, then the bond energy and
|
||||
force is evaluated as if the bond were the LO or HI length.
|
||||
|
||||
Note that one file can contain many sections, each with a tabulated
|
||||
potential. LAMMPS reads the file section by section until it finds
|
||||
one that matches the specified keyword.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Styles with a *cuda*, *gpu*, *intel*, *kk*, *omp*, or *opt* suffix are
|
||||
functionally the same as the corresponding style without the suffix.
|
||||
They have been optimized to run faster, depending on your available
|
||||
hardware, as discussed in :doc:`Section_accelerate <Section_accelerate>`
|
||||
of the manual. The accelerated styles take the same arguments and
|
||||
should produce the same results, except for round-off and precision
|
||||
issues.
|
||||
|
||||
These accelerated styles are part of the USER-CUDA, GPU, USER-INTEL,
|
||||
KOKKOS, USER-OMP and OPT packages, respectively. They are only
|
||||
enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
You can specify the accelerated styles explicitly in your input script
|
||||
by including their suffix, or you can use the :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
|
||||
use the :doc:`suffix <suffix>` command in your input script.
|
||||
|
||||
See :doc:`Section_accelerate <Section_accelerate>` of the manual for
|
||||
more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This bond style can only be used if LAMMPS was built with the
|
||||
MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,114 @@
|
|||
.. index:: boundary
|
||||
|
||||
boundary command
|
||||
================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
boundary x y z
|
||||
|
||||
* x,y,z = *p* or *s* or *f* or *m*, one or two letters
|
||||
.. parsed-literal::
|
||||
|
||||
*p* is periodic
|
||||
*f* is non-periodic and fixed
|
||||
*s* is non-periodic and shrink-wrapped
|
||||
*m* is non-periodic and shrink-wrapped with a minimum value
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
boundary p p f
|
||||
boundary p fs p
|
||||
boundary s f fm
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Set the style of boundaries for the global simulation box in each
|
||||
dimension. A single letter assigns the same style to both the lower
|
||||
and upper face of the box. Two letters assigns the first style to the
|
||||
lower face and the second style to the upper face. The initial size
|
||||
of the simulation box is set by the :doc:`read_data <read_data>`,
|
||||
:doc:`read_restart <read_restart>`, or :doc:`create_box <create_box>`
|
||||
commands.
|
||||
|
||||
The style *p* means the box is periodic, so that particles interact
|
||||
across the boundary, and they can exit one end of the box and re-enter
|
||||
the other end. A periodic dimension can change in size due to
|
||||
constant pressure boundary conditions or box deformation (see the :doc:`fix npt <fix_nh>` and :doc:`fix deform <fix_deform>` commands). The *p*
|
||||
style must be applied to both faces of a dimension.
|
||||
|
||||
The styles *f*, *s*, and *m* mean the box is non-periodic, so that
|
||||
particles do not interact across the boundary and do not move from one
|
||||
side of the box to the other.
|
||||
|
||||
For style *f*, the position of the face is fixed. If an atom moves
|
||||
outside the face it will be deleted on the next timestep that
|
||||
reneighboring occurs. This will typically generate an error unless
|
||||
you have set the :doc:`thermo_modify lost <thermo_modify>` option to
|
||||
allow for lost atoms.
|
||||
|
||||
For style *s*, the position of the face is set so as to encompass the
|
||||
atoms in that dimension (shrink-wrapping), no matter how far they
|
||||
move.
|
||||
|
||||
For style *m*, shrink-wrapping occurs, but is bounded by the value
|
||||
specified in the data or restart file or set by the
|
||||
:doc:`create_box <create_box>` command. For example, if the upper z
|
||||
face has a value of 50.0 in the data file, the face will always be
|
||||
positioned at 50.0 or above, even if the maximum z-extent of all the
|
||||
atoms becomes less than 50.0. This can be useful if you start a
|
||||
simulation with an empty box or if you wish to leave room on one side
|
||||
of the box, e.g. for atoms to evaporate from a surface.
|
||||
|
||||
For triclinic (non-orthogonal) simulation boxes, if the 2nd dimension
|
||||
of a tilt factor (e.g. y for xy) is periodic, then the periodicity is
|
||||
enforced with the tilt factor offset. If the 1st dimension is
|
||||
shrink-wrapped, then the shrink wrapping is applied to the tilted box
|
||||
face, to encompass the atoms. E.g. for a positive xy tilt, the xlo
|
||||
and xhi faces of the box are planes tilting in the +y direction as y
|
||||
increases. These tilted planes are shrink-wrapped around the atoms to
|
||||
determine the x extent of the box.
|
||||
|
||||
See :ref:`Section_howto 12 <howto_12>` of the doc pages
|
||||
for a geometric description of triclinic boxes, as defined by LAMMPS,
|
||||
and how to transform these parameters to and from other commonly used
|
||||
triclinic representations.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This command cannot be used after the simulation box is defined by a
|
||||
:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command or
|
||||
:doc:`read_restart <read_restart>` command. See the
|
||||
:doc:`change_box <change_box>` command for how to change the simulation
|
||||
box boundaries after it has been defined.
|
||||
|
||||
For 2d simulations, the z dimension must be periodic.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
See the :doc:`thermo_modify <thermo_modify>` command for a discussion
|
||||
of lost atoms.
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
boundary p p p
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,73 @@
|
|||
.. index:: box
|
||||
|
||||
box command
|
||||
===========
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
box keyword value ...
|
||||
|
||||
* one or more keyword/value pairs may be appended
|
||||
* keyword = *tilt*
|
||||
.. parsed-literal::
|
||||
|
||||
*tilt* value = *small* or *large*
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
box tilt large
|
||||
box tilt small
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Set attributes of the simulation box.
|
||||
|
||||
For triclinic (non-orthogonal) simulation boxes, the *tilt* keyword
|
||||
allows simulation domains to be created with arbitrary tilt factors,
|
||||
e.g. via the :doc:`create_box <create_box>` or
|
||||
:doc:`read_data <read_data>` commands. Tilt factors determine how
|
||||
skewed the triclinic box is; see :ref:`this section <howto_12>` of the manual for a discussion of
|
||||
triclinic boxes in LAMMPS.
|
||||
|
||||
LAMMPS normally requires that no tilt factor can skew the box more
|
||||
than half the distance of the parallel box length, which is the 1st
|
||||
dimension in the tilt factor (x for xz). If *tilt* is set to
|
||||
*small*, which is the default, then an error will be
|
||||
generated if a box is created which exceeds this limit. If *tilt*
|
||||
is set to *large*, then no limit is enforced. You can create
|
||||
a box with any tilt factors you wish.
|
||||
|
||||
Note that if a simulation box has a large tilt factor, LAMMPS will run
|
||||
less efficiently, due to the large volume of communication needed to
|
||||
acquire ghost atoms around a processor's irregular-shaped sub-domain.
|
||||
For extreme values of tilt, LAMMPS may also lose atoms and generate an
|
||||
error.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This command cannot be used after the simulation box is defined by a
|
||||
:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command or
|
||||
:doc:`read_restart <read_restart>` command.
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The default value is tilt = small.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,381 @@
|
|||
.. index:: change_box
|
||||
|
||||
change_box command
|
||||
==================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box group-ID parameter args ... keyword args ...
|
||||
|
||||
* group-ID = ID of group of atoms to (optionally) displace
|
||||
* one or more parameter/arg pairs may be appended
|
||||
.. parsed-literal::
|
||||
|
||||
parameter = *x* or *y* or *z* or *xy* or *xz* or *yz* or *boundary* or *ortho* or *triclinic* or *set* or *remap*
|
||||
*x*, *y*, *z* args = style value(s)
|
||||
style = *final* or *delta* or *scale* or *volume*
|
||||
*final* values = lo hi
|
||||
lo hi = box boundaries after displacement (distance units)
|
||||
*delta* values = dlo dhi
|
||||
dlo dhi = change in box boundaries after displacement (distance units)
|
||||
*scale* values = factor
|
||||
factor = multiplicative factor for change in box length after displacement
|
||||
*volume* value = none = adjust this dim to preserve volume of system
|
||||
*xy*, *xz*, *yz* args = style value
|
||||
style = *final* or *delta*
|
||||
*final* value = tilt
|
||||
tilt = tilt factor after displacement (distance units)
|
||||
*delta* value = dtilt
|
||||
dtilt = change in tilt factor after displacement (distance units)
|
||||
*boundary* args = x y z
|
||||
x,y,z = *p* or *s* or *f* or *m*, one or two letters
|
||||
*p* is periodic
|
||||
*f* is non-periodic and fixed
|
||||
*s* is non-periodic and shrink-wrapped
|
||||
*m* is non-periodic and shrink-wrapped with a minimum value
|
||||
*ortho* args = none = change box to orthogonal
|
||||
*triclinic* args = none = change box to triclinic
|
||||
*set* args = none = store state of current box
|
||||
*remap* args = none = remap atom coords from last saved state to current box
|
||||
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *units*
|
||||
.. parsed-literal::
|
||||
|
||||
*units* value = *lattice* or *box*
|
||||
lattice = distances are defined in lattice units
|
||||
box = distances are defined in simulation box units
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all xy final -2.0 z final 0.0 5.0 boundary p p f remap units box
|
||||
change_box all x scale 1.1 y volume z volume remap
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Change the volume and/or shape and/or boundary conditions for the
|
||||
simulation box. Orthogonal simulation boxes have 3 adjustable size
|
||||
parameters (x,y,z). Triclinic (non-orthogonal) simulation boxes have
|
||||
6 adjustable size/shape parameters (x,y,z,xy,xz,yz). Any or all of
|
||||
them can be adjusted independently by this command. Thus it can be
|
||||
used to expand or contract a box, or to apply a shear strain to a
|
||||
non-orthogonal box. It can also be used to change the boundary
|
||||
conditions for the simulation box, similar to the
|
||||
:doc:`boundary <boundary>` command.
|
||||
|
||||
The size and shape of the initial simulation box are specified by the
|
||||
:doc:`create_box <create_box>` or :doc:`read_data <read_data>` or
|
||||
:doc:`read_restart <read_restart>` command used to setup the simulation.
|
||||
The size and shape may be altered by subsequent runs, e.g. by use of
|
||||
the :doc:`fix npt <fix_nh>` or :doc:`fix deform <fix_deform>` commands.
|
||||
The :doc:`create_box <create_box>`, :doc:`read data <read_data>`, and
|
||||
:doc:`read_restart <read_restart>` commands also determine whether the
|
||||
simulation box is orthogonal or triclinic and their doc pages explain
|
||||
the meaning of the xy,xz,yz tilt factors.
|
||||
|
||||
See :ref:`Section_howto 12 <howto_12>` of the doc pages
|
||||
for a geometric description of triclinic boxes, as defined by LAMMPS,
|
||||
and how to transform these parameters to and from other commonly used
|
||||
triclinic representations.
|
||||
|
||||
The keywords used in this command are applied sequentially to the
|
||||
simulation box and the atoms in it, in the order specified.
|
||||
|
||||
Before the sequence of keywords are invoked, the current box
|
||||
size/shape is stored, in case a *remap* keyword is used to map the
|
||||
atom coordinates from a previously stored box size/shape to the
|
||||
current one.
|
||||
|
||||
After all the keywords have been processed, any shrink-wrap boundary
|
||||
conditions are invoked (see the :doc:`boundary <boundary>` command)
|
||||
which may change simulation box boundaries, and atoms are migrated to
|
||||
new owning processors.
|
||||
|
||||
.. note::
|
||||
|
||||
This means that you cannot use the change_box command to enlarge
|
||||
a shrink-wrapped box, e.g. to make room to insert more atoms via the
|
||||
:doc:`create_atoms <create_atoms>` command, because the simulation box
|
||||
will be re-shrink-wrapped before the change_box command completes.
|
||||
Instead you could do something like this, assuming the simulation box
|
||||
is non-periodic and atoms extend from 0 to 20 in all dimensions:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all x final -10 20
|
||||
create_atoms 1 single -5 5 5 # this will fail to insert an atom
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all x final -10 20 boundary f s s
|
||||
create_atoms 1 single -5 5 5
|
||||
change_box boundary s s s # this will work
|
||||
|
||||
.. note::
|
||||
|
||||
Unlike the earlier "displace_box" version of this command, atom
|
||||
remapping is NOT performed by default. This command allows remapping
|
||||
to be done in a more general way, exactly when you specify it (zero or
|
||||
more times) in the sequence of transformations. Thus if you do not
|
||||
use the *remap* keyword, atom coordinates will not be changed even if
|
||||
the box size/shape changes. If a uniformly strained state is desired,
|
||||
the *remap* keyword should be specified.
|
||||
|
||||
.. note::
|
||||
|
||||
It is possible to lose atoms with this command. E.g. by
|
||||
changing the box without remapping the atoms, and having atoms end up
|
||||
outside of non-periodic boundaries. It is also possible to alter
|
||||
bonds between atoms straddling a boundary in bad ways. E.g. by
|
||||
converting a boundary from periodic to non-periodic. It is also
|
||||
possible when remapping atoms to put them (nearly) on top of each
|
||||
other. E.g. by converting a boundary from non-periodic to periodic.
|
||||
All of these will typically lead to bad dynamics and/or generate error
|
||||
messages.
|
||||
|
||||
.. note::
|
||||
|
||||
The simulation box size/shape can be changed by arbitrarily
|
||||
large amounts by this command. This is not a problem, except that the
|
||||
mapping of processors to the simulation box is not changed from its
|
||||
initial 3d configuration; see the :doc:`processors <processors>`
|
||||
command. Thus, if the box size/shape changes dramatically, the
|
||||
mapping of processors to the simulation box may not end up as optimal
|
||||
as the initial mapping attempted to be.
|
||||
|
||||
.. note::
|
||||
|
||||
Because the keywords used in this command are applied one at a
|
||||
time to the simulation box and the atoms in it, care must be taken
|
||||
with triclinic cells to avoid exceeding the limits on skew after each
|
||||
transformation in the sequence. If skew is exceeded before the final
|
||||
transformation this can be avoided by changing the order of the
|
||||
sequence, or breaking the transformation into two or more smaller
|
||||
transformations. For more information on the allowed limits for box
|
||||
skew see the discussion on triclinic boxes on :ref:`this page <howto_12>`.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
For the *x*, *y*, and *z* parameters, this is the meaning of their
|
||||
styles and values.
|
||||
|
||||
For style *final*, the final lo and hi box boundaries of a dimension
|
||||
are specified. The values can be in lattice or box distance units.
|
||||
See the discussion of the units keyword below.
|
||||
|
||||
For style *delta*, plus or minus changes in the lo/hi box boundaries
|
||||
of a dimension are specified. The values can be in lattice or box
|
||||
distance units. See the discussion of the units keyword below.
|
||||
|
||||
For style *scale*, a multiplicative factor to apply to the box length
|
||||
of a dimension is specified. For example, if the initial box length
|
||||
is 10, and the factor is 1.1, then the final box length will be 11. A
|
||||
factor less than 1.0 means compression.
|
||||
|
||||
The *volume* style changes the specified dimension in such a way that
|
||||
the overall box volume remains constant with respect to the operation
|
||||
performed by the preceding keyword. The *volume* style can only be
|
||||
used following a keyword that changed the volume, which is any of the
|
||||
*x*, *y*, *z* keywords. If the preceding keyword "key" had a *volume*
|
||||
style, then both it and the current keyword apply to the keyword
|
||||
preceding "key". I.e. this sequence of keywords is allowed:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all x scale 1.1 y volume z volume
|
||||
|
||||
The *volume* style changes the associated dimension so that the
|
||||
overall box volume is unchanged relative to its value before the
|
||||
preceding keyword was invoked.
|
||||
|
||||
If the following command is used, then the z box length will shrink by
|
||||
the same 1.1 factor the x box length was increased by:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all x scale 1.1 z volume
|
||||
|
||||
If the following command is used, then the y,z box lengths will each
|
||||
shrink by sqrt(1.1) to keep the volume constant. In this case, the
|
||||
y,z box lengths shrink so as to keep their relative aspect ratio
|
||||
constant:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all"x scale 1.1 y volume z volume
|
||||
|
||||
If the following command is used, then the final box will be a factor
|
||||
of 10% larger in x and y, and a factor of 21% smaller in z, so as to
|
||||
keep the volume constant:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
change_box all x scale 1.1 z volume y scale 1.1 z volume
|
||||
|
||||
.. note::
|
||||
|
||||
For solids or liquids, when one dimension of the box is
|
||||
expanded, it may be physically undesirable to hold the other 2 box
|
||||
lengths constant since that implies a density change. For solids,
|
||||
adjusting the other dimensions via the *volume* style may make
|
||||
physical sense (just as for a liquid), but may not be correct for
|
||||
materials and potentials whose Poisson ratio is not 0.5.
|
||||
|
||||
For the *scale* and *volume* styles, the box length is expanded or
|
||||
compressed around its mid point.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
For the *xy*, *xz*, and *yz* parameters, this is the meaning of their
|
||||
styles and values. Note that changing the tilt factors of a triclinic
|
||||
box does not change its volume.
|
||||
|
||||
For style *final*, the final tilt factor is specified. The value
|
||||
can be in lattice or box distance units. See the discussion of the
|
||||
units keyword below.
|
||||
|
||||
For style *delta*, a plus or minus change in the tilt factor is
|
||||
specified. The value can be in lattice or box distance units. See
|
||||
the discussion of the units keyword below.
|
||||
|
||||
All of these styles change the xy, xz, yz tilt factors. In LAMMPS,
|
||||
tilt factors (xy,xz,yz) for triclinic boxes are required to be no more
|
||||
than half the distance of the parallel box length. For example, if
|
||||
xlo = 2 and xhi = 12, then the x box length is 10 and the xy tilt
|
||||
factor must be between -5 and 5. Similarly, both xz and yz must be
|
||||
between -(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is not a
|
||||
limitation, since if the maximum tilt factor is 5 (as in this
|
||||
example), then configurations with tilt = ..., -15, -5, 5, 15, 25,
|
||||
... are all equivalent. Any tilt factor specified by this command
|
||||
must be within these limits.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *boundary* keyword takes arguments that have exactly the same
|
||||
meaning as they do for the :doc:`boundary <boundary>` command. In each
|
||||
dimension, a single letter assigns the same style to both the lower
|
||||
and upper face of the box. Two letters assigns the first style to the
|
||||
lower face and the second style to the upper face.
|
||||
|
||||
The style *p* means the box is periodic; the other styles mean
|
||||
non-periodic. For style *f*, the position of the face is fixed. For
|
||||
style *s*, the position of the face is set so as to encompass the
|
||||
atoms in that dimension (shrink-wrapping), no matter how far they
|
||||
move. For style *m*, shrink-wrapping occurs, but is bounded by the
|
||||
current box edge in that dimension, so that the box will become no
|
||||
smaller. See the :doc:`boundary <boundary>` command for more
|
||||
explanation of these style options.
|
||||
|
||||
Note that the "boundary" command itself can only be used before the
|
||||
simulation box is defined via a :doc:`read_data <read_data>` or
|
||||
:doc:`create_box <create_box>` or :doc:`read_restart <read_restart>`
|
||||
command. This command allows the boundary conditions to be changed
|
||||
later in your input script. Also note that the
|
||||
:doc:`read_restart <read_restart>` will change boundary conditions to
|
||||
match what is stored in the restart file. So if you wish to change
|
||||
them, you should use the change_box command after the read_restart
|
||||
command.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *ortho* and *triclinic* keywords convert the simulation box to be
|
||||
orthogonal or triclinic (non-orthongonal). See :ref:`this section <howto_13>` for a discussion of how non-orthongal
|
||||
boxes are represented in LAMMPS.
|
||||
|
||||
The simulation box is defined as either orthogonal or triclinic when
|
||||
it is created via the :doc:`create_box <create_box>`,
|
||||
:doc:`read_data <read_data>`, or :doc:`read_restart <read_restart>`
|
||||
commands.
|
||||
|
||||
These keywords allow you to toggle the existing simulation box from
|
||||
orthogonal to triclinic and vice versa. For example, an initial
|
||||
equilibration simulation can be run in an orthogonal box, the box can
|
||||
be toggled to triclinic, and then a :ref:`non-equilibrium MD (NEMD) simulation <howto_13>` can be run with deformation
|
||||
via the :doc:`fix deform <fix_deform>` command.
|
||||
|
||||
If the simulation box is currently triclinic and has non-zero tilt in
|
||||
xy, yz, or xz, then it cannot be converted to an orthogonal box.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *set* keyword saves the current box size/shape. This can be
|
||||
useful if you wish to use the *remap* keyword more than once or if you
|
||||
wish it to be applied to an intermediate box size/shape in a sequence
|
||||
of keyword operations. Note that the box size/shape is saved before
|
||||
any of the keywords are processed, i.e. the box size/shape at the time
|
||||
the create_box command is encountered in the input script.
|
||||
|
||||
The *remap* keyword remaps atom coordinates from the last saved box
|
||||
size/shape to the current box state. For example, if you stretch the
|
||||
box in the x dimension or tilt it in the xy plane via the *x* and *xy*
|
||||
keywords, then the *remap* commmand will dilate or tilt the atoms to
|
||||
conform to the new box size/shape, as if the atoms moved with the box
|
||||
as it deformed.
|
||||
|
||||
Note that this operation is performed without regard to periodic
|
||||
boundaries. Also, any shrink-wrapping of non-periodic boundaries (see
|
||||
the :doc:`boundary <boundary>` command) occurs after all keywords,
|
||||
including this one, have been processed.
|
||||
|
||||
Only atoms in the specified group are remapped.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *units* keyword determines the meaning of the distance units used
|
||||
to define various arguments. 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.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
If you use the *ortho* or *triclinic* keywords, then at the point in
|
||||
the input script when this command is issued, no :doc:`dumps <dump>` can
|
||||
be active, nor can a :doc:`fix ave/spatial <fix_ave_spatial>` or :doc:`fix deform <fix_deform>` be active. This is because these commands
|
||||
test whether the simulation box is orthogonal when they are first
|
||||
issued. Note that these commands can be used in your script before a
|
||||
change_box command is issued, so long as an :doc:`undump <undump>` or
|
||||
:doc:`unfix <unfix>` command is also used to turn them off.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`fix deform <fix_deform>`, :doc:`boundary <boundary>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option default is units = lattice.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,47 @@
|
|||
.. index:: clear
|
||||
|
||||
clear command
|
||||
=============
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
clear
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
(commands for 1st simulation)
|
||||
clear
|
||||
(commands for 2nd simulation)
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
This command deletes all atoms, restores all settings to their default
|
||||
values, and frees all memory allocated by LAMMPS. Once a clear
|
||||
command has been executed, it is almost as if LAMMPS were starting
|
||||
over, with only the exceptions noted below. This command enables
|
||||
multiple jobs to be run sequentially from one input script.
|
||||
|
||||
These settings are not affected by a clear command: the working
|
||||
directory (:doc:`shell <shell>` command), log file status
|
||||
(:doc:`log <log>` command), echo status (:doc:`echo <echo>` command), and
|
||||
input script variables (:doc:`variable <variable>` command).
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,177 @@
|
|||
.. index:: comm_modify
|
||||
|
||||
comm_modify command
|
||||
===================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
comm_modify keyword value ...
|
||||
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *mode* or *cutoff* or *cutoff/multi* or *group* or *vel*
|
||||
.. parsed-literal::
|
||||
|
||||
*mode* value = *single* or *multi* = communicate atoms within a single or multiple distances
|
||||
*cutoff* value = Rcut (distance units) = communicate atoms from this far away
|
||||
*cutoff/multi* type value
|
||||
type = atom type or type range (supports asterisk notation)
|
||||
value = Rcut (distance units) = communicate atoms for selected types from this far away
|
||||
*group* value = group-ID = only communicate atoms in the group
|
||||
*vel* value = *yes* or *no* = do or do not communicate velocity info with ghost atoms
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
comm_modify mode multi
|
||||
comm_modify mode multi group solvent
|
||||
comm_modift mode multi cutoff/multi 1 10.0 cutoff/multi 2*4 15.0
|
||||
comm_modify vel yes
|
||||
comm_modify mode single cutoff 5.0 vel yes
|
||||
comm_modify cutoff/multi * 0.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
This command sets parameters that affect the inter-processor
|
||||
communication of atom information that occurs each timestep as
|
||||
coordinates and other properties are exchanged between neighboring
|
||||
processors and stored as properties of ghost atoms.
|
||||
|
||||
.. note::
|
||||
|
||||
These options apply to the currently defined comm style. When
|
||||
you specify a :doc:`comm_style <comm_style>` command, all communication
|
||||
settings are restored to their default values, including those
|
||||
previously reset by a comm_modify command. Thus if your input script
|
||||
specifies a comm_style command, you should use the comm_modify command
|
||||
after it.
|
||||
|
||||
The *mode* keyword determines whether a single or multiple cutoff
|
||||
distances are used to determine which atoms to communicate.
|
||||
|
||||
The default mode is *single* which means each processor acquires
|
||||
information for ghost atoms that are within a single distance from its
|
||||
sub-domain. The distance is by default the maximum of the neighbor
|
||||
cutoff across all atom type pairs.
|
||||
|
||||
For many systems this is an efficient algorithm, but for systems with
|
||||
widely varying cutoffs for different type pairs, the *multi* mode can
|
||||
be faster. In this case, each atom type is assigned its own distance
|
||||
cutoff for communication purposes, and fewer atoms will be
|
||||
communicated. See the :doc:`neighbor multi <neighbor>` command for a
|
||||
neighbor list construction option that may also be beneficial for
|
||||
simulations of this kind.
|
||||
|
||||
The *cutoff* keyword allows you to extend the ghost cutoff distance
|
||||
for communication mode *single*, which is the distance from the borders
|
||||
of a processor's sub-domain at which ghost atoms are acquired from other
|
||||
processors. By default the ghost cutoff = neighbor cutoff = pairwise
|
||||
force cutoff + neighbor skin. See the :doc:`neighbor <neighbor>` command
|
||||
for more information about the skin distance. If the specified Rcut is
|
||||
greater than the neighbor cutoff, then extra ghost atoms will be acquired.
|
||||
If the provided cutoff is smaller, the provided value will be ignored
|
||||
and the ghost cutoff is set to the neighbor cutoff. Specifying a
|
||||
cutoff value of 0.0 will reset any previous value to the default.
|
||||
|
||||
The *cutoff/multi* option is equivalent to *cutoff*, but applies to
|
||||
communication mode *multi* instead. Since in this case the communication
|
||||
cutoffs are determined per atom type, a type specifier is needed and
|
||||
cutoff for one or multiple types can be extended. Also ranges of types
|
||||
using the usual asterisk notation can be given.
|
||||
|
||||
These are simulation scenarios in which it may be useful or even
|
||||
necessary to set a ghost cutoff > neighbor cutoff:
|
||||
|
||||
* a single polymer chain with bond interactions, but no pairwise interactions
|
||||
* bonded interactions (e.g. dihedrals) extend further than the pairwise cutoff
|
||||
* ghost atoms beyond the pairwise cutoff are needed for some computation
|
||||
|
||||
In the first scenario, a pairwise potential is not defined. Thus the
|
||||
pairwise neighbor cutoff will be 0.0. But ghost atoms are still
|
||||
needed for computing bond, angle, etc interactions between atoms on
|
||||
different processors, or when the interaction straddles a periodic
|
||||
boundary.
|
||||
|
||||
The appropriate ghost cutoff depends on the :doc:`newton bond <newton>`
|
||||
setting. For newton bond *off*, the distance needs to be the furthest
|
||||
distance between any two atoms in the bond, angle, etc. E.g. the
|
||||
distance between 1-4 atoms in a dihedral. For newton bond *on*, the
|
||||
distance between the central atom in the bond, angle, etc and any
|
||||
other atom is sufficient. E.g. the distance between 2-4 atoms in a
|
||||
dihedral.
|
||||
|
||||
In the second scenario, a pairwise potential is defined, but its
|
||||
neighbor cutoff is not sufficiently long enough to enable bond, angle,
|
||||
etc terms to be computed. As in the previous scenario, an appropriate
|
||||
ghost cutoff should be set.
|
||||
|
||||
In the last scenario, a :doc:`fix <fix>` or :doc:`compute <compute>` or
|
||||
:doc:`pairwise potential <pair_style>` needs to calculate with ghost
|
||||
atoms beyond the normal pairwise cutoff for some computation it
|
||||
performs (e.g. locate neighbors of ghost atoms in a multibody pair
|
||||
potential). Setting the ghost cutoff appropriately can insure it will
|
||||
find the needed atoms.
|
||||
|
||||
.. note::
|
||||
|
||||
In these scenarios, if you do not set the ghost cutoff long
|
||||
enough, and if there is only one processor in a periodic dimension
|
||||
(e.g. you are running in serial), then LAMMPS may "find" the atom it
|
||||
is looking for (e.g. the partner atom in a bond), that is on the far
|
||||
side of the simulation box, across a periodic boundary. This will
|
||||
typically lead to bad dynamics (i.e. the bond length is now the
|
||||
simulation box length). To detect if this is happening, see the
|
||||
:doc:`neigh_modify cluster <neigh_modify>` command.
|
||||
|
||||
The *group* keyword will limit communication to atoms in the specified
|
||||
group. This can be useful for models where no ghost atoms are needed
|
||||
for some kinds of particles. All atoms (not just those in the
|
||||
specified group) will still migrate to new processors as they move.
|
||||
The group specified with this option must also be specified via the
|
||||
:doc:`atom_modify first <atom_modify>` command.
|
||||
|
||||
The *vel* keyword enables velocity information to be communicated with
|
||||
ghost particles. Depending on the :doc:`atom_style <atom_style>`,
|
||||
velocity info includes the translational velocity, angular velocity,
|
||||
and angular momentum of a particle. If the *vel* option is set to
|
||||
*yes*, then ghost atoms store these quantities; if *no* then they do
|
||||
not. The *yes* setting is needed by some pair styles which require
|
||||
the velocity state of both the I and J particles to compute a pairwise
|
||||
I,J interaction.
|
||||
|
||||
Note that if the :doc:`fix deform <fix_deform>` command is being used
|
||||
with its "remap v" option enabled, then the velocities for ghost atoms
|
||||
(in the fix deform group) mirrored across a periodic boundary will
|
||||
also include components due to any velocity shift that occurs across
|
||||
that boundary (e.g. due to dilation or shear).
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
Communication mode *multi* is currently only available for
|
||||
:doc:`comm_style <comm_style>` *brick*.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`comm_style <comm_style>`, :doc:`neighbor <neighbor>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option defauls are mode = single, group = all, cutoff = 0.0, vel =
|
||||
no. The cutoff default of 0.0 means that ghost cutoff = neighbor
|
||||
cutoff = pairwise force cutoff + neighbor skin.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,73 @@
|
|||
.. index:: comm_style
|
||||
|
||||
comm_style command
|
||||
==================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
comm_style style
|
||||
|
||||
* style = *brick* or *tiled*
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
comm_style brick
|
||||
comm_style tiled
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
This command sets the style of inter-processor communication of atom
|
||||
information that occurs each timestep as coordinates and other
|
||||
properties are exchanged between neighboring processors and stored as
|
||||
properties of ghost atoms.
|
||||
|
||||
For the default *brick* style, the domain decomposition used by LAMMPS
|
||||
to partition the simulation box must be a regular 3d grid of bricks,
|
||||
one per processor. Each processor communicates with its 6 Cartesian
|
||||
neighbors in the grid to acquire information for nearby atoms.
|
||||
|
||||
For the *tiled* style, a more general domain decomposition can be
|
||||
used, as triggered by the :doc:`balance <balance>` or :doc:`fix balance <fix_balance>` commands. The simulation box can be
|
||||
partitioned into non-overlapping rectangular-shaped "tiles" or varying
|
||||
sizes and shapes. Again there is one tile per processor. To acquire
|
||||
information for nearby atoms, communication must now be done with a
|
||||
more complex pattern of neighboring processors.
|
||||
|
||||
Note that this command does not actually define a partitoining of the
|
||||
simulation box (a domain decomposition), rather it determines what
|
||||
kinds of decompositions are allowed and the pattern of communication
|
||||
used to enable the decomposition. A decomposition is created when the
|
||||
simulation box is first created, via the :doc:`create_box <create_box>`
|
||||
or :doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
|
||||
commands. For both the *brick* and *tiled* styles, the initial
|
||||
decomposition will be the same, as described by
|
||||
:doc:`create_box <create_box>` and :doc:`processors <processors>`
|
||||
commands. The decomposition can be changed via the
|
||||
:doc:`balance <balance>` or :doc:`fix_balance <fix_balance>` commands.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`comm_modify <comm_modify>`, :doc:`processors <processors>`,
|
||||
:doc:`balance <balance>`, :doc:`fix balance <fix_balance>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The default style is brick.
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,270 @@
|
|||
.. index:: compute
|
||||
|
||||
compute command
|
||||
===============
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID style args
|
||||
|
||||
* ID = user-assigned name for the computation
|
||||
* group-ID = ID of the group of atoms to perform the computation on
|
||||
* style = one of a list of possible style names (see below)
|
||||
* args = arguments used by a particular style
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all temp
|
||||
compute newtemp flow temp/partial 1 1 0
|
||||
compute 3 all ke/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that will be performed on a group of atoms.
|
||||
Quantities calculated by a compute are instantaneous values, meaning
|
||||
they are calculated from information about atoms on the current
|
||||
timestep or iteration, though a compute may internally store some
|
||||
information about a previous state of the system. Defining a compute
|
||||
does not perform a computation. Instead computes are invoked by other
|
||||
LAMMPS commands as needed, e.g. to calculate a temperature needed for
|
||||
a thermostat fix or to generate thermodynamic or dump file output.
|
||||
See this :ref:`howto section <howto_15>` for a summary of
|
||||
various LAMMPS output options, many of which involve computes.
|
||||
|
||||
The ID of a compute can only contain alphanumeric characters and
|
||||
underscores.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Computes calculate one of three styles of quantities: global,
|
||||
per-atom, or local. A global quantity is one or more system-wide
|
||||
values, e.g. the temperature of the system. A per-atom quantity is
|
||||
one or more values per atom, e.g. the kinetic energy of each atom.
|
||||
Per-atom values are set to 0.0 for atoms not in the specified compute
|
||||
group. Local quantities are calculated by each processor based on the
|
||||
atoms it owns, but there may be zero or more per atom, e.g. a list of
|
||||
bond distances. Computes that produce per-atom quantities have the
|
||||
word "atom" in their style, e.g. *ke/atom*. Computes that produce
|
||||
local quantities have the word "local" in their style,
|
||||
e.g. *bond/local*. Styles with neither "atom" or "local" in their
|
||||
style produce global quantities.
|
||||
|
||||
Note that a single compute produces either global or per-atom or local
|
||||
quantities, but never more than one of these (with only a few
|
||||
exceptions, as documented by individual compute commands).
|
||||
|
||||
Global, per-atom, and local quantities each come in three kinds: a
|
||||
single scalar value, a vector of values, or a 2d array of values. The
|
||||
doc page for each compute describes the style and kind of values it
|
||||
produces, e.g. a per-atom vector. Some computes produce more than one
|
||||
kind of a single style, e.g. a global scalar and a global vector.
|
||||
|
||||
When a compute quantity is accessed, as in many of the output commands
|
||||
discussed below, it can be referenced via the following bracket
|
||||
notation, where ID is the ID of the compute:
|
||||
|
||||
+------------+--------------------------------------------+
|
||||
| c_ID | entire scalar, vector, or array |
|
||||
+------------+--------------------------------------------+
|
||||
| c_ID[I] | one element of vector, one column of array |
|
||||
+------------+--------------------------------------------+
|
||||
| c_ID[I][J] | one element of array |
|
||||
+------------+--------------------------------------------+
|
||||
|
||||
In other words, using one bracket reduces the dimension of the
|
||||
quantity once (vector -> scalar, array -> vector). Using two brackets
|
||||
reduces the dimension twice (array -> scalar). Thus a command that
|
||||
uses scalar compute values as input can also process elements of a
|
||||
vector or array.
|
||||
|
||||
Note that commands and :doc:`variables <variable>` which use compute
|
||||
quantities typically do not allow for all kinds, e.g. a command may
|
||||
require a vector of values, not a scalar. This means there is no
|
||||
ambiguity about referring to a compute quantity as c_ID even if it
|
||||
produces, for example, both a scalar and vector. The doc pages for
|
||||
various commands explain the details.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
In LAMMPS, the values generated by a compute can be used in several
|
||||
ways:
|
||||
|
||||
* The results of computes that calculate a global temperature or
|
||||
pressure can be used by fixes that do thermostatting or barostatting
|
||||
or when atom velocities are created.
|
||||
* Global values can be output via the :doc:`thermo_style custom <thermo_style>` or :doc:`fix ave/time <fix_ave_time>` command.
|
||||
Or the values can be referenced in a :doc:`variable equal <variable>` or
|
||||
:doc:`variable atom <variable>` command.
|
||||
* Per-atom values can be output via the :doc:`dump custom <dump>` command
|
||||
or the :doc:`fix ave/spatial <fix_ave_spatial>` command. Or they can be
|
||||
time-averaged via the :doc:`fix ave/atom <fix_ave_atom>` command or
|
||||
reduced by the :doc:`compute reduce <compute_reduce>` command. Or the
|
||||
per-atom values can be referenced in an :doc:`atom-style variable <variable>`.
|
||||
* Local values can be reduced by the :doc:`compute reduce <compute_reduce>` command, or histogrammed by the :doc:`fix ave/histo <fix_ave_histo>` command, or output by the :doc:`dump local <dump>` command.
|
||||
The results of computes that calculate global quantities can be either
|
||||
"intensive" or "extensive" values. Intensive means the value is
|
||||
independent of the number of atoms in the simulation,
|
||||
e.g. temperature. Extensive means the value scales with the number of
|
||||
atoms in the simulation, e.g. total rotational kinetic energy.
|
||||
:doc:`Thermodynamic output <thermo_style>` will normalize extensive
|
||||
values by the number of atoms in the system, depending on the
|
||||
"thermo_modify norm" setting. It will not normalize intensive values.
|
||||
If a compute value is accessed in another way, e.g. by a
|
||||
:doc:`variable <variable>`, you may want to know whether it is an
|
||||
intensive or extensive value. See the doc page for individual
|
||||
computes for further info.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
LAMMPS creates its own computes internally for thermodynamic output.
|
||||
Three computes are always created, named "thermo_temp",
|
||||
"thermo_press", and "thermo_pe", as if these commands had been invoked
|
||||
in the input script:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute thermo_temp all temp
|
||||
compute thermo_press all pressure thermo_temp
|
||||
compute thermo_pe all pe
|
||||
|
||||
Additional computes for other quantities are created if the thermo
|
||||
style requires it. See the documentation for the
|
||||
:doc:`thermo_style <thermo_style>` command.
|
||||
|
||||
Fixes that calculate temperature or pressure, i.e. for thermostatting
|
||||
or barostatting, may also create computes. These are discussed in the
|
||||
documentation for specific :doc:`fix <fix>` commands.
|
||||
|
||||
In all these cases, the default computes LAMMPS creates can be
|
||||
replaced by computes defined by the user in the input script, as
|
||||
described by the :doc:`thermo_modify <thermo_modify>` and :doc:`fix modify <fix_modify>` commands.
|
||||
|
||||
Properties of either a default or user-defined compute can be modified
|
||||
via the :doc:`compute_modify <compute_modify>` command.
|
||||
|
||||
Computes can be deleted with the :doc:`uncompute <uncompute>` command.
|
||||
|
||||
Code for new computes can be added to LAMMPS (see :doc:`this section <Section_modify>` of the manual) and the results of their
|
||||
calculations accessed in the various ways described above.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
Each compute style has its own doc page which describes its arguments
|
||||
and what it does. Here is an alphabetic list of compute styles
|
||||
available in LAMMPS. They are also given in more compact form in the
|
||||
Compute section of :ref:`this page <cmd_5>`.
|
||||
|
||||
There are also additional compute styles (not listed here) submitted
|
||||
by users which are included in the LAMMPS distribution. The list of
|
||||
these with links to the individual styles are given in the compute
|
||||
section of :ref:`this page <cmd_5>`.
|
||||
|
||||
* :doc:`angle/local <compute_bond_local>` - theta and energy of each angle
|
||||
* :doc:`angmom/chunk <compute_angmom_chunk>` - angular momentum for each chunk
|
||||
* :doc:`body/local <compute_body_local>` - attributes of body sub-particles
|
||||
* :doc:`bond/local <compute_bond_local>` - distance and energy of each bond
|
||||
* :doc:`centro/atom <compute_centro_atom>` - centro-symmetry parameter for each atom
|
||||
* :doc:`chunk/atom <compute_chunk_atom>` - assign chunk IDs to each atom
|
||||
* :doc:`cluster/atom <compute_cluster_atom>` - cluster ID for each atom
|
||||
* :doc:`cna/atom <compute_cna_atom>` - common neighbor analysis (CNA) for each atom
|
||||
* :doc:`com <compute_com>` - center-of-mass of group of atoms
|
||||
* :doc:`com/chunk <compute_com_chunk>` - center-of-mass for each chunk
|
||||
* :doc:`contact/atom <compute_contact_atom>` - contact count for each spherical particle
|
||||
* :doc:`coord/atom <compute_coord_atom>` - coordination number for each atom
|
||||
* :doc:`damage/atom <compute_damage_atom>` - Peridynamic damage for each atom
|
||||
* :doc:`dihedral/local <compute_dihedral_local>` - angle of each dihedral
|
||||
* :doc:`dilatation/atom <compute_dilatation_atom>` - Peridynamic dilatation for each atom
|
||||
* :doc:`displace/atom <compute_displace_atom>` - displacement of each atom
|
||||
* :doc:`erotate/asphere <compute_erotate_asphere>` - rotational energy of aspherical particles
|
||||
* :doc:`erotate/rigid <compute_erotate_rigid>` - rotational energy of rigid bodies
|
||||
* :doc:`erotate/sphere <compute_erotate_sphere>` - rotational energy of spherical particles
|
||||
* :doc:`erotate/sphere/atom <compute_erotate_sphere>` - rotational energy for each spherical particle
|
||||
* :doc:`event/displace <compute_event_displace>` - detect event on atom displacement
|
||||
* :doc:`group/group <compute_group_group>` - energy/force between two groups of atoms
|
||||
* :doc:`gyration <compute_gyration>` - radius of gyration of group of atoms
|
||||
* :doc:`gyration/chunk <compute_gyration_chunk>` - radius of gyration for each chunk
|
||||
* :doc:`heat/flux <compute_heat_flux>` - heat flux through a group of atoms
|
||||
* :doc:`hexorder/atom <compute_hexorder_atom>` - bond orientational order parameter q6
|
||||
* :doc:`improper/local <compute_improper_local>` - angle of each improper
|
||||
* :doc:`inertia/chunk <compute_inertia_chunk>` - inertia tensor for each chunk
|
||||
* :doc:`ke <compute_ke>` - translational kinetic energy
|
||||
* :doc:`ke/atom <compute_ke_atom>` - kinetic energy for each atom
|
||||
* :doc:`ke/rigid <compute_ke_rigid>` - translational kinetic energy of rigid bodies
|
||||
* :doc:`msd <compute_msd>` - mean-squared displacement of group of atoms
|
||||
* :doc:`msd/chunk <compute_msd_chunk>` - mean-squared displacement for each chunk
|
||||
* :doc:`msd/nongauss <compute_msd_nongauss>` - MSD and non-Gaussian parameter of group of atoms
|
||||
* :doc:`omega/chunk <compute_omega_chunk>` - angular velocity for each chunk
|
||||
* :doc:`orientorder/atom <compute_orientorder_atom>` - Steinhardt bond orientational order parameters Ql
|
||||
* :doc:`pair <compute_pair>` - values computed by a pair style
|
||||
* :doc:`pair/local <compute_pair_local>` - distance/energy/force of each pairwise interaction
|
||||
* :doc:`pe <compute_pe>` - potential energy
|
||||
* :doc:`pe/atom <compute_pe_atom>` - potential energy for each atom
|
||||
* :doc:`plasticity/atom <compute_plasticity_atom>` - Peridynamic plasticity for each atom
|
||||
* :doc:`pressure <compute_pressure>` - total pressure and pressure tensor
|
||||
* :doc:`property/atom <compute_property_atom>` - convert atom attributes to per-atom vectors/arrays
|
||||
* :doc:`property/local <compute_property_local>` - convert local attributes to localvectors/arrays
|
||||
* :doc:`property/chunk <compute_property_chunk>` - extract various per-chunk attributes
|
||||
* :doc:`rdf <compute_rdf>` - radial distribution function g(r) histogram of group of atoms
|
||||
* :doc:`reduce <compute_reduce>` - combine per-atom quantities into a single global value
|
||||
* :doc:`reduce/region <compute_reduce>` - same as compute reduce, within a region
|
||||
* :doc:`slice <compute_slice>` - extract values from global vector or array
|
||||
* :doc:`sna/atom <compute_sna_atom>` - calculate bispectrum coefficients for each atom
|
||||
* :doc:`snad/atom <compute_sna_atom>` - derivative of bispectrum coefficients for each atom
|
||||
* :doc:`snav/atom <compute_sna_atom>` - virial contribution from bispectrum coefficients for each atom
|
||||
* :doc:`stress/atom <compute_stress_atom>` - stress tensor for each atom
|
||||
* :doc:`temp <compute_temp>` - temperature of group of atoms
|
||||
* :doc:`temp/asphere <compute_temp_asphere>` - temperature of aspherical particles
|
||||
* :doc:`temp/chunk <compute_temp_chunk>` - temperature of each chunk
|
||||
* :doc:`temp/com <compute_temp_com>` - temperature after subtracting center-of-mass velocity
|
||||
* :doc:`temp/deform <compute_temp_deform>` - temperature excluding box deformation velocity
|
||||
* :doc:`temp/partial <compute_temp_partial>` - temperature excluding one or more dimensions of velocity
|
||||
* :doc:`temp/profile <compute_temp_profile>` - temperature excluding a binned velocity profile
|
||||
* :doc:`temp/ramp <compute_temp_ramp>` - temperature excluding ramped velocity component
|
||||
* :doc:`temp/region <compute_temp_region>` - temperature of a region of atoms
|
||||
* :doc:`temp/sphere <compute_temp_sphere>` - temperature of spherical particles
|
||||
* :doc:`ti <compute_ti>` - thermodyanmic integration free energy values
|
||||
* :doc:`torque/chunk <compute_torque_chunk>` - torque applied on each chunk
|
||||
* :doc:`vacf <compute_vacf>` - velocity-autocorrelation function of group of atoms
|
||||
* :doc:`vcm/chunk <compute_vcm_chunk>` - velocity of center-of-mass for each chunk
|
||||
* :doc:`voronoi/atom <compute_voronoi_atom>` - Voronoi volume and neighbors for each atom
|
||||
|
||||
There are also additional compute styles submitted by users which are
|
||||
included in the LAMMPS distribution. The list of these with links to
|
||||
the individual styles are given in the compute section of :ref:`this page <cmd_5>`.
|
||||
|
||||
There are also additional accelerated compute styles included in the
|
||||
LAMMPS distribution for faster performance on CPUs and GPUs. The list
|
||||
of these with links to the individual styles are given in the pair
|
||||
section of :ref:`this page <cmd_5>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`uncompute <uncompute>`, :doc:`compute_modify <compute_modify>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/spatial <fix_ave_spatial>`,
|
||||
:doc:`fix ave/time <fix_ave_time>`, :doc:`fix ave/histo <fix_ave_histo>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,87 @@
|
|||
.. index:: compute ackland/atom
|
||||
|
||||
compute ackland/atom command
|
||||
============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID ackland/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* ackland/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all ackland/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Defines a computation that calculates the local lattice structure
|
||||
according to the formulation given in :ref:`(Ackland) <Ackland>`.
|
||||
|
||||
In contrast to the :doc:`centro-symmetry parameter <compute_centro_atom>` this method is stable against
|
||||
temperature boost, because it is based not on the distance between
|
||||
particles but the angles. Therefore statistical fluctuations are
|
||||
averaged out a little more. A comparison with the Common Neighbor
|
||||
Analysis metric is made in the paper.
|
||||
|
||||
The result is a number which is mapped to the following different
|
||||
lattice structures:
|
||||
|
||||
* 0 = UNKNOWN
|
||||
* 1 = BCC
|
||||
* 2 = FCC
|
||||
* 3 = HCP
|
||||
* 4 = ICO
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (i.e. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently or to have multiple compute/dump commands, each of
|
||||
which computes this quantity.-
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the USER-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 per-atom vector values will be unitless since they are the
|
||||
integers defined above.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute centro/atom <compute_centro_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Ackland:
|
||||
|
||||
|
||||
|
||||
**(Ackland)** Ackland, Jones, Phys Rev B, 73, 054104 (2006).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,86 @@
|
|||
.. index:: compute angle/local
|
||||
|
||||
compute angle/local command
|
||||
===========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID angle/local input1 input2 ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* angle/local = style name of this compute command
|
||||
* one or more keywords may be appended
|
||||
* keyword = *theta* or *eng*
|
||||
.. parsed-literal::
|
||||
|
||||
*theta* = tabulate angles
|
||||
*eng* = tabulate angle energies
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all angle/local theta
|
||||
compute 1 all angle/local eng theta
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates properties of individual angle
|
||||
interactions. The number of datums generated, aggregated across all
|
||||
processors, equals the number of angles in the system, modified by the
|
||||
group parameter as explained below.
|
||||
|
||||
The local data stored by this command is generated by looping over all
|
||||
the atoms owned on a processor and their angles. An angle will only
|
||||
be included if all 3 atoms in the angle are in the specified compute
|
||||
group. Any angles that have been broken (see the
|
||||
:doc:`angle_style <angle_style>` command) by setting their angle type to
|
||||
0 are not included. Angles that have been turned off (see the :doc:`fix shake <fix_shake>` or :doc:`delete_bonds <delete_bonds>` commands) by
|
||||
setting their angle type negative are written into the file, but their
|
||||
energy will be 0.0.
|
||||
|
||||
Note that as atoms migrate from processor to processor, there will be
|
||||
no consistent ordering of the entries within the local vector or array
|
||||
from one timestep to the next. The only consistency that is
|
||||
guaranteed is that the ordering on a particular timestep will be the
|
||||
same for local vectors or arrays generated by other compute commands.
|
||||
For example, angle output from the :doc:`compute property/local <compute_property_local>` command can be combined
|
||||
with data from this command and output by the :doc:`dump local <dump>`
|
||||
command in a consistent way.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a local vector or local array depending on the
|
||||
number of keywords. The length of the vector or number of rows in the
|
||||
array is the number of angles. If a single keyword is specified, a
|
||||
local vector is produced. If two or more keywords are specified, a
|
||||
local array is produced where the number of columns = the number of
|
||||
keywords. The vector or array can be accessed by any command that
|
||||
uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The output for *theta* will be in degrees. The output for *eng* will
|
||||
be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,97 @@
|
|||
.. index:: compute angmom/chunk
|
||||
|
||||
compute angmom/chunk command
|
||||
============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID angmom/chunk chunkID
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* angmom/chunk = style name of this compute command
|
||||
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 fluid angmom/chunk molchunk
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the angular momemtum of multiple
|
||||
chunks of atoms.
|
||||
|
||||
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
|
||||
to a single chunk (or no chunk). The ID for this command is specified
|
||||
as chunkID. For example, a single chunk could be the atoms in a
|
||||
molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
|
||||
defined and examples of how they can be used to measure properties of
|
||||
a system.
|
||||
|
||||
This compute calculates the 3 components of the angular momentum
|
||||
vector for each chunk, due to the velocity/momentum of the individual
|
||||
atoms in the chunk around the center-of-mass of the chunk. The
|
||||
calculation includes all effects due to atoms passing thru periodic
|
||||
boundaries.
|
||||
|
||||
Note that only atoms in the specified group contribute to the
|
||||
calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
defines its own group; atoms will have a chunk ID = 0 if they are not
|
||||
in that group, signifying they are not assigned to a chunk, and will
|
||||
thus also not contribute to this calculation. You can specify the
|
||||
"all" group for this command if you simply want to include atoms with
|
||||
non-zero chunk IDs.
|
||||
|
||||
.. note::
|
||||
|
||||
The coordinates of an atom contribute to the chunk's angular
|
||||
momentum 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 compute by using the :doc:`set image <set>` command.
|
||||
|
||||
The simplest way to output the results of the compute angmom/chunk
|
||||
calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
|
||||
command, for example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute cc1 all chunk/atom molecule
|
||||
compute myChunk all angmom/chunk cc1
|
||||
fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global array where the number of rows = the
|
||||
number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
|
||||
3 for the 3 xyz components of the angular momentum for each chunk.
|
||||
These values can be accessed by any command that uses global array
|
||||
values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The array values are "intensive". The array values will be in
|
||||
mass-velocity-distance :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`variable angmom() function <variable>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,88 @@
|
|||
.. index:: compute basal/atom
|
||||
|
||||
compute basal/atom command
|
||||
==========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID basal/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* basal/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all basal/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Defines a computation that calculates the hexagonal close-packed "c"
|
||||
lattice vector for each atom in the group. It does this by
|
||||
calculating the normal unit vector to the basal plane for each atom.
|
||||
The results enable efficient identification and characterization of
|
||||
twins and grains in hexagonal close-packed structures.
|
||||
|
||||
The output of the compute is thus the 3 components of a unit vector
|
||||
associdate with each atom. The components are set to 0.0 for
|
||||
atoms not in the group.
|
||||
|
||||
Details of the calculation are given in :ref:`(Barrett) <Barrett>`.
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (i.e. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently or to have multiple compute/dump commands, each of
|
||||
which computes this quantity.
|
||||
|
||||
An example input script that uses this compute is provided
|
||||
in examples/USER/misc/basal.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom array with 3 columns, which can be
|
||||
accessed by indices 1-3 by any command that uses per-atom values from
|
||||
a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The per-atom vector values are unitless since the 3 columns represent
|
||||
components of a unit vector.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the USER-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 output of this compute will be meaningless unless the atoms are on
|
||||
(or near) hcp lattice sites, since the calculation assumes a
|
||||
well-defined basal plane.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute centro/atom <compute_centro_atom>`, :doc:`compute ackland/atom <compute_ackland_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Barrett:
|
||||
|
||||
|
||||
|
||||
**(Barrett)** Barrett, Tschopp, El Kadiri, Scripta Mat. 66, p.666 (2012).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,106 @@
|
|||
.. index:: compute body/local
|
||||
|
||||
compute body/local command
|
||||
==========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID body/local input1 input2 ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* body/local = style name of this compute command
|
||||
* one or more keywords may be appended
|
||||
* keyword = *id* or *type* or *integer*
|
||||
.. parsed-literal::
|
||||
|
||||
*id* = atom ID of the body particle
|
||||
*type* = atom type of the body particle
|
||||
*integer* = 1,2,3,etc = index of fields defined by body style
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all body/local type 1 2 3
|
||||
compute 1 all body/local 3 6
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates properties of individual body
|
||||
sub-particles. The number of datums generated, aggregated across all
|
||||
processors, equals the number of body sub-particles plus the number of
|
||||
non-body particles in the system, modified by the group parameter as
|
||||
explained below. See :ref:`Section_howto 14 <howto_14>`
|
||||
of the manual and the :doc:`body <body>` doc page for more details on
|
||||
using body particles.
|
||||
|
||||
The local data stored by this command is generated by looping over all
|
||||
the atoms. An atom will only be included if it is in the group. If
|
||||
the atom is a body particle, then its N sub-particles will be looped
|
||||
over, and it will contribute N datums to the count of datums. If it
|
||||
is not a body particle, it will contribute 1 datum.
|
||||
|
||||
For both body particles and non-body particles, the *id* keyword
|
||||
will store the ID of the particle.
|
||||
|
||||
For both body particles and non-body particles, the *type* keyword
|
||||
will store the type of the particle.
|
||||
|
||||
The *integer* keywords mean different things for body and non-body
|
||||
particles. If the atom is not a body particle, only its *x*, *y*, *z*
|
||||
coordinates can be referenced, using the *integer* keywords 1,2,3.
|
||||
Note that this means that if you want to access more fields than this
|
||||
for body particles, then you cannot include non-body particles in the
|
||||
group.
|
||||
|
||||
For a body particle, the *integer* keywords refer to fields calculated
|
||||
by the body style for each sub-particle. The body style, as specified
|
||||
by the :doc:`atom_style body <atom_style>`, determines how many fields
|
||||
exist and what they are. See the :doc:`body <body>` doc page for
|
||||
details of the different styles.
|
||||
|
||||
Here is an example of how to output body information using the :doc:`dump local <dump>` command with this compute. If fields 1,2,3 for the
|
||||
body sub-particles are x,y,z coordinates, then the dump file will be
|
||||
formatted similar to the output of a :doc:`dump atom or custom <dump>`
|
||||
command.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all body/local type 1 2 3
|
||||
dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4]
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a local vector or local array depending on the
|
||||
number of keywords. The length of the vector or number of rows in the
|
||||
array is the number of datums as described above. If a single keyword
|
||||
is specified, a local vector is produced. If two or more keywords are
|
||||
specified, a local array is produced where the number of columns = the
|
||||
number of keywords. The vector or array can be accessed by any
|
||||
command that uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The :doc:`units <units>` for output values depend on the body style.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump local <dump>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,96 @@
|
|||
.. index:: compute bond/local
|
||||
|
||||
compute bond/local command
|
||||
==========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID bond/local input1 input2 ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* bond/local = style name of this compute command
|
||||
* one or more keywords may be appended
|
||||
* keyword = *dist* or *eng*
|
||||
.. parsed-literal::
|
||||
|
||||
*dist* = bond distance
|
||||
*eng* = bond energy
|
||||
*force* = bond force
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all bond/local eng
|
||||
compute 1 all bond/local dist eng force
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates properties of individual bond
|
||||
interactions. The number of datums generated, aggregated across all
|
||||
processors, equals the number of bonds in the system, modified
|
||||
by the group parameter as explained below.
|
||||
|
||||
The local data stored by this command is generated by looping over all
|
||||
the atoms owned on a processor and their bonds. A bond will only be
|
||||
included if both atoms in the bond are in the specified compute group.
|
||||
Any bonds that have been broken (see the :doc:`bond_style <bond_style>`
|
||||
command) by setting their bond type to 0 are not included. Bonds that
|
||||
have been turned off (see the :doc:`fix shake <fix_shake>` or
|
||||
:doc:`delete_bonds <delete_bonds>` commands) by setting their bond type
|
||||
negative are written into the file, but their energy will be 0.0.
|
||||
|
||||
Note that as atoms migrate from processor to processor, there will be
|
||||
no consistent ordering of the entries within the local vector or array
|
||||
from one timestep to the next. The only consistency that is
|
||||
guaranteed is that the ordering on a particular timestep will be the
|
||||
same for local vectors or arrays generated by other compute commands.
|
||||
For example, bond output from the :doc:`compute property/local <compute_property_local>` command can be combined
|
||||
with data from this command and output by the :doc:`dump local <dump>`
|
||||
command in a consistent way.
|
||||
|
||||
Here is an example of how to do this:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all property/local batom1 batom2 btype
|
||||
compute 2 all bond/local dist eng
|
||||
dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_2[1] c_2[2]
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a local vector or local array depending on the
|
||||
number of keywords. The length of the vector or number of rows in the
|
||||
array is the number of bonds. If a single keyword is specified, a
|
||||
local vector is produced. If two or more keywords are specified, a
|
||||
local array is produced where the number of columns = the number of
|
||||
keywords. The vector or array can be accessed by any command that
|
||||
uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The output for *dist* will be in distance :doc:`units <units>`. The
|
||||
output for *eng* will be in energy :doc:`units <units>`. The output for
|
||||
*force* will be in force :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,142 @@
|
|||
.. index:: compute centro/atom
|
||||
|
||||
compute centro/atom command
|
||||
===========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID centro/atom lattice
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* centro/atom = style name of this compute command
|
||||
* lattice = *fcc* or *bcc* or N = # of neighbors per atom to include
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all centro/atom fcc
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all centro/atom 8
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the centro-symmetry parameter for
|
||||
each atom in the group. In solid-state systems the centro-symmetry
|
||||
parameter is a useful measure of the local lattice disorder around an
|
||||
atom and can be used to characterize whether the atom is part of a
|
||||
perfect lattice, a local defect (e.g. a dislocation or stacking
|
||||
fault), or at a surface.
|
||||
|
||||
The value of the centro-symmetry parameter will be 0.0 for atoms not
|
||||
in the specified compute group.
|
||||
|
||||
This parameter is computed using the following formula from
|
||||
:ref:`(Kelchner) <Kelchner>`
|
||||
|
||||
.. image:: Eqs/centro_symmetry.jpg
|
||||
:align: center
|
||||
|
||||
where the *N* nearest neighbors or each atom are identified and Ri and
|
||||
Ri+N/2 are vectors from the central atom to a particular pair of
|
||||
nearest neighbors. There are N*(N-1)/2 possible neighbor pairs that
|
||||
can contribute to this formula. The quantity in the sum is computed
|
||||
for each, and the N/2 smallest are used. This will typically be for
|
||||
pairs of atoms in symmetrically opposite positions with respect to the
|
||||
central atom; hence the i+N/2 notation.
|
||||
|
||||
*N* is an input parameter, which should be set to correspond to the
|
||||
number of nearest neighbors in the underlying lattice of atoms. If
|
||||
the keyword *fcc* or *bcc* is used, *N* is set to 12 and 8
|
||||
respectively. More generally, *N* can be set to a positive, even
|
||||
integer.
|
||||
|
||||
For an atom on a lattice site, surrounded by atoms on a perfect
|
||||
lattice, the centro-symmetry parameter will be 0. It will be near 0
|
||||
for small thermal perturbations of a perfect lattice. If a point
|
||||
defect exists, the symmetry is broken, and the parameter will be a
|
||||
larger positive value. An atom at a surface will have a large
|
||||
positive parameter. If the atom does not have *N* neighbors (within
|
||||
the potential cutoff), then its centro-symmetry parameter is set to
|
||||
0.0.
|
||||
|
||||
Only atoms within the cutoff of the pairwise neighbor list are
|
||||
considered as possible neighbors. Atoms not in the compute group are
|
||||
included in the *N* neighbors used in this calculation.
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (e.g. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently or to have multiple compute/dump commands, each with a
|
||||
*centro/atom* style.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values are unitless values >= 0.0. Their
|
||||
magnitude depends on the lattice style due to the number of
|
||||
contibuting neighbor pairs in the summation in the formula above. And
|
||||
it depends on the local defects surrounding the central atom, as
|
||||
described above.
|
||||
|
||||
Here are typical centro-symmetry values, from a a nanoindentation
|
||||
simulation into gold (FCC). These were provided by Jon Zimmerman
|
||||
(Sandia):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Bulk lattice = 0
|
||||
Dislocation core ~ 1.0 (0.5 to 1.25)
|
||||
Stacking faults ~ 5.0 (4.0 to 6.0)
|
||||
Free surface ~ 23.0
|
||||
|
||||
These values are *not* normalized by the square of the lattice
|
||||
parameter. If they were, normalized values would be:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Bulk lattice = 0
|
||||
Dislocation core ~ 0.06 (0.03 to 0.075)
|
||||
Stacking faults ~ 0.3 (0.24 to 0.36)
|
||||
Free surface ~ 1.38
|
||||
|
||||
For BCC materials, the values for dislocation cores and free surfaces
|
||||
would be somewhat different, due to their being only 8 neighbors instead
|
||||
of 12.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute cna/atom <compute_cna_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Kelchner:
|
||||
|
||||
|
||||
|
||||
**(Kelchner)** Kelchner, Plimpton, Hamilton, Phys Rev B, 58, 11085 (1998).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,699 @@
|
|||
.. index:: compute chunk/atom
|
||||
|
||||
compute chunk/atom command
|
||||
==========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID chunk/atom style args keyword values ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* chunk/atom = style name of this compute command
|
||||
.. parsed-literal::
|
||||
|
||||
style = *bin/1d* or *bin/2d* or *bin/3d* or *bin/sphere* or *type* or *molecule* or *compute/fix/variable*
|
||||
*bin/1d* args = dim origin delta
|
||||
dim = *x* or *y* or *z*
|
||||
origin = *lower* or *center* or *upper* or coordinate value (distance units)
|
||||
delta = thickness of spatial bins in dim (distance units)
|
||||
*bin/2d* args = dim origin delta dim origin delta
|
||||
dim = *x* or *y* or *z*
|
||||
origin = *lower* or *center* or *upper* or coordinate value (distance units)
|
||||
delta = thickness of spatial bins in dim (distance units)
|
||||
*bin/3d* args = dim origin delta dim origin delta dim origin delta
|
||||
dim = *x* or *y* or *z*
|
||||
origin = *lower* or *center* or *upper* or coordinate value (distance units)
|
||||
delta = thickness of spatial bins in dim (distance units)
|
||||
*bin/sphere* args = xorig yorig zorig rmin rmax nsbin
|
||||
xorig,yorig,zorig = center point of sphere
|
||||
srmin,srmax = bin from sphere radius rmin to rmax
|
||||
nsbin = # of spherical shell bins between rmin and rmax
|
||||
*bin/cylinder* args = dim origin delta c1 c2 rmin rmax ncbin
|
||||
dim = *x* or *y* or *z* = axis of cylinder axis
|
||||
origin = *lower* or *center* or *upper* or coordinate value (distance units)
|
||||
delta = thickness of spatial bins in dim (distance units)
|
||||
c1,c2 = coords of cylinder axis in other 2 dimensions (distance units)
|
||||
crmin,crmax = bin from cylinder radius rmin to rmax (distance units)
|
||||
ncbin = # of concentric circle bins between rmin and rmax
|
||||
*type* args = none
|
||||
*molecule* args = none
|
||||
*compute/fix/variable* = c_ID, c_ID[I], f_ID, f_ID[I], v_name with no args
|
||||
c_ID = per-atom vector calculated by a compute with ID
|
||||
c_ID[I] = Ith column of per-atom array calculated by a compute with ID
|
||||
f_ID = per-atom vector calculated by a fix with ID
|
||||
f_ID[I] = Ith column of per-atom array calculated by a fix with ID
|
||||
v_name = per-atom vector calculated by an atom-style variable with name
|
||||
|
||||
* zero or more keyword/values pairs may be appended
|
||||
* keyword = *region* or *nchunk* or *static* or *compress* or *bound* or *discard* or *pbc* or *units*
|
||||
.. parsed-literal::
|
||||
|
||||
*region* value = region-ID
|
||||
region-ID = ID of region atoms must be in to be part of a chunk
|
||||
*nchunk* value = *once* or *every*
|
||||
once = only compute the number of chunks once
|
||||
every = re-compute the number of chunks whenever invoked
|
||||
*limit* values = 0 or Nc max or Nc exact
|
||||
0 = no limit on the number of chunks
|
||||
Nc max = limit number of chunks to be <= Nc
|
||||
Nc exact = set number of chunks to exactly Nc
|
||||
*ids* value = *once* or *nfreq* or *every*
|
||||
once = assign chunk IDs to atoms only once, they persist thereafter
|
||||
nfreq = assign chunk IDs to atoms only once every Nfreq steps (if invoked by :doc:`fix ave/chunk <fix_ave_chunk>` which sets Nfreq)
|
||||
every = assign chunk IDs to atoms whenever invoked
|
||||
*compress* value = *yes* or *no*
|
||||
yes = compress chunk IDs to eliminate IDs with no atoms
|
||||
no = do not compress chunk IDs even if some IDs have no atoms
|
||||
*discard* value = *yes* or *no* or *mixed*
|
||||
yes = discard atoms with out-of-range chunk IDs by assigning a chunk ID = 0
|
||||
no = keep atoms with out-of-range chunk IDs by assigning a valid chunk ID
|
||||
mixed = keep or discard such atoms according to spatial binning rule
|
||||
*bound* values = x/y/z lo hi
|
||||
x/y/z = *x* or *y* or *z* to bound sptial bins in this dimension
|
||||
lo = *lower* or coordinate value (distance units)
|
||||
hi = *upper* or coordinate value (distance units)
|
||||
*pbc* value = *no* or *yes*
|
||||
yes = use periodic distance for bin/sphere and bin/cylinder styles
|
||||
*units* value = *box* or *lattice* or *reduced*
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all chunk/atom type
|
||||
compute 1 all chunk/atom bin/1d z lower 0.02 units reduced
|
||||
compute 1 all chunk/atom bin/2d z lower 1.0 y 0.0 2.5
|
||||
compute 1 all chunk/atom molecule region sphere nchunk once ids once compress yes
|
||||
compute 1 all chunk/atom bin/sphere 5 5 5 2.0 5.0 5 discard yes
|
||||
compute 1 all chunk/atom bin/cylinder z lower 2 10 10 2.0 5.0 3 discard yes
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates an integer chunk ID from 1 to
|
||||
Nchunk for each atom in the group. Values of chunk IDs are determined
|
||||
by the *style* of chunk, which can be based on atom type or molecule
|
||||
ID or spatial binning or a per-atom property or value calculated by
|
||||
another :doc:`compute <compute>`, :doc:`fix <fix>`, or :doc:`atom-style variable <variable>`. Per-atom chunk IDs can be used by other
|
||||
computes with "chunk" in their style name, such as :doc:`compute com/chunk <compute_com_chunk>` or :doc:`compute msd/chunk <compute_msd_chunk>`. Or they can be used by the :doc:`fix ave/chunk <fix_ave_chunk>` command to sum and time average a
|
||||
variety of per-atom properties over the atoms in each chunk. Or they
|
||||
can simply be accessed by any command that uses per-atom values from a
|
||||
compute as input, as discussed in :ref:`Section_howto 15 <howto_15>`.
|
||||
|
||||
See :ref:`Section_howto 23 <howto_23>` for an overview of
|
||||
how this compute can be used with a variety of other commands to
|
||||
tabulate properties of a simulation. The howto section gives several
|
||||
examples of input script commands that can be used to calculate
|
||||
interesting properties.
|
||||
|
||||
Conceptually it is important to realize that this compute does two
|
||||
simple things. First, it sets the value of *Nchunk* = the number of
|
||||
chunks, which can be a constant value or change over time. Second, it
|
||||
assigns each atom to a chunk via a chunk ID. Chunk IDs range from 1
|
||||
to *Nchunk* inclusive; some chunks may have no atoms assigned to them.
|
||||
Atoms that do not belong to any chunk are assigned a value of 0. Note
|
||||
that the two operations are not always performed together. For
|
||||
example, spatial bins can be setup once (which sets *Nchunk*), and
|
||||
atoms assigned to those bins many times thereafter (setting their
|
||||
chunk IDs).
|
||||
|
||||
All other commands in LAMMPS that use chunk IDs assume there are
|
||||
*Nchunk* number of chunks, and that every atom is assigned to one of
|
||||
those chunks, or not assigned to any chunk.
|
||||
|
||||
There are many options for specifying for how and when *Nchunk* is
|
||||
calculated, and how and when chunk IDs are assigned to atoms. The
|
||||
details depend on the chunk *style* and its *args*, as well as
|
||||
optional keyword settings. They can also depend on whether a :doc:`fix ave/chunk <fix_ave_chunk>` command is using this compute, since
|
||||
that command requires *Nchunk* to remain static across windows of
|
||||
timesteps it specifies, while it accumulates per-chunk averages.
|
||||
|
||||
The details are described below.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
The different chunk styles operate as follows. For each style, how it
|
||||
calculates *Nchunk* and assigns chunk IDs to atoms is explained. Note
|
||||
that using the optional keywords can change both of those actions, as
|
||||
described further below where the keywords are discussed.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *binning* styles perform a spatial binning of atoms, and assign an
|
||||
atom the chunk ID corresponding to the bin number it is in. *Nchunk*
|
||||
is set to the number of bins, which can change if the simulation box
|
||||
size changes.
|
||||
|
||||
The *bin/1d*, *bin/2d*, and *bin/3d* styles define bins as 1d layers
|
||||
(slabs), 2d pencils, or 3d boxes. The *dim*, *origin*, and *delta*
|
||||
settings are specified 1, 2, or 3 times. For 2d or 3d bins, there is
|
||||
no restriction on specifying dim = x before dim = y or z, or dim = y
|
||||
before dim = z. Bins in a particular *dim* have a bin size in that
|
||||
dimension given by *delta*. In each dimension, bins are defined
|
||||
relative to a specified *origin*, which may be the lower/upper edge of
|
||||
the simulation box (in that dimension), or its center point, or a
|
||||
specified coordinate value. Starting at the origin, sufficient bins
|
||||
are created in both directions to completely span the simulation box
|
||||
or the bounds specified by the optional *bounds* keyword.
|
||||
|
||||
For orthogonal simulation boxes, the bins are layers, pencils, or
|
||||
boxes aligned with the xyz coordinate axes. For triclinic
|
||||
(non-orthogonal) simulation boxes, the bin faces are parallel to the
|
||||
tilted faces of the simulation box. See :ref:`this section <howto_12>` of the manual for a discussion of
|
||||
the geometry of triclinic boxes in LAMMPS. As described there, a
|
||||
tilted simulation box has edge vectors a,b,c. In that nomenclature,
|
||||
bins in the x dimension have faces with normals in the "b" cross "c"
|
||||
direction. Bins in y have faces normal to the "a" cross "c"
|
||||
direction. And bins in z have faces normal to the "a" cross "b"
|
||||
direction. Note that in order to define the size and position of
|
||||
these bins in an unambiguous fashion, the *units* option must be set
|
||||
to *reduced* when using a triclinic simulation box, as noted below.
|
||||
|
||||
The meaning of *origin* and *delta* for triclinic boxes is as follows.
|
||||
Consider a triclinic box with bins that are 1d layers or slabs in the
|
||||
x dimension. No matter how the box is tilted, an *origin* of 0.0
|
||||
means start layers at the lower "b" cross "c" plane of the simulation
|
||||
box and an *origin* of 1.0 means to start layers at the upper "b"
|
||||
cross "c" face of the box. A *delta* value of 0.1 in *reduced* units
|
||||
means there will be 10 layers from 0.0 to 1.0, regardless of the
|
||||
current size or shape of the simulation box.
|
||||
|
||||
The *bin/sphere* style defines a set of spherical shell bins around
|
||||
the origin (*xorig*,*yorig*,*zorig*), using *nsbin* bins with radii
|
||||
equally spaced between *srmin* and *srmax*. This is effectively a 1d
|
||||
vector of bins. For example, if *srmin* = 1.0 and *srmax* = 10.0 and
|
||||
*nsbin* = 9, then the first bin spans 1.0 < r < 2.0, and the last bin
|
||||
spans 9.0 < r 10.0. The geometry of the bins is the same whether the
|
||||
simulation box is orthogonal or triclinic; i.e. the spherical shells
|
||||
are not tilted or scaled differently in different dimensions to
|
||||
transform them into ellipsoidal shells.
|
||||
|
||||
The *bin/cylinder* style defines bins for a cylinder oriented along
|
||||
the axis *dim* with the axis coordinates in the other two radial
|
||||
dimensions at (*c1*,*c2*). For dim = x, c1/c2 = y/z; for dim = y,
|
||||
c1/c2 = x/z; for dim = z, c1/c2 = x/y. This is effectively a 2d array
|
||||
of bins. The first dimension is along the cylinder axis, the second
|
||||
dimension is radially outward from the cylinder axis. The bin size
|
||||
and positions along the cylinder axis are specified by the *origin*
|
||||
and *delta* values, the same as for the *bin/1d*, *bin/2d*, and
|
||||
*bin/3d* styles. There are *ncbin* concentric circle bins in the
|
||||
radial direction from the cylinder axis with radii equally spaced
|
||||
between *crmin* and *crmax*. For example, if *crmin* = 1.0 and
|
||||
*crmax* = 10.0 and *ncbin* = 9, then the first bin spans 1.0 < r <
|
||||
2.0, and the last bin spans 9.0 < r 10.0. The geometry of the bins in
|
||||
the radial dimensions is the same whether the simulation box is
|
||||
orthogonal or triclinic; i.e. the concetric circles are not tilted or
|
||||
scaled differently in the two different dimensions to transform them
|
||||
into ellipses.
|
||||
|
||||
The created bins (and hence the chunk IDs) are numbered consecutively
|
||||
from 1 to the number of bins = *Nchunk*. For *bin2d* and *bin3d*, the
|
||||
numbering varies most rapidly in the first dimension (which could be
|
||||
x, y, or z), next rapidly in the 2nd dimension, and most slowly in the
|
||||
3rd dimension. For *bin/sphere*, the bin with smallest radii is chunk
|
||||
1 and the bni with largest radii is chunk Nchunk = *ncbin*. For
|
||||
*bin/cylinder*, the numbering varies most rapidly in the dimension
|
||||
along the cylinder axis and most slowly in the radial direction.
|
||||
|
||||
Each time this compute is invoked, each atom is mapped to a bin based
|
||||
on its current position. Note that between reneighboring timesteps,
|
||||
atoms can move outside the current simulation box. If the box is
|
||||
periodic (in that dimension) the atom is remapping into the periodic
|
||||
box for purposes of binning. If the box in not periodic, the atom may
|
||||
have moved outside the bounds of all bins. If an atom is not inside
|
||||
any bin, the *discard* keyword is used to determine how a chunk ID is
|
||||
assigned to the atom.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *type* style uses the atom type as the chunk ID. *Nchunk* is set
|
||||
to the number of atom types defined for the simulation, e.g. via the
|
||||
:doc:`create_box <create_box>` or :doc:`read_data <read_data>` commands.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *molecule* style uses the molecule ID of each atom as its chunk
|
||||
ID. *Nchunk* is set to the largest chunk ID. Note that this excludes
|
||||
molecule IDs for atoms which are not in the specified group or
|
||||
optional region.
|
||||
|
||||
There is no requirement that all atoms in a particular molecule are
|
||||
assigned the same chunk ID (zero or non-zero), though you probably
|
||||
want that to be the case, if you wish to compute a per-molecule
|
||||
property. LAMMPS will issue a warning if that is not the case, but
|
||||
only the first time that *Nchunk* is calculated.
|
||||
|
||||
Note that atoms with a molecule ID = 0, which may be non-molecular
|
||||
solvent atoms, have an out-of-range chunk ID. These atoms are
|
||||
discarded (not assigned to any chunk) or assigned to *Nchunk*,
|
||||
depending on the value of the *discard* keyword.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *compute/fix/variable* styles set the chunk ID of each atom based
|
||||
on a quantity calculated and stored by a compute, fix, or variable.
|
||||
In each case, it must be a per-atom quantity. In each case the
|
||||
referenced floating point values are converted to an integer chunk ID
|
||||
as follows. The floating point value is truncated (rounded down) to
|
||||
an integer value. If the integer value is <= 0, then a chunk ID of 0
|
||||
is assigned to the atom. If the integer value is > 0, it becomes the
|
||||
chunk ID to the atom. *Nchunk* is set to the largest chunk ID. Note
|
||||
that this excludes atoms which are not in the specified group or
|
||||
optional region.
|
||||
|
||||
If the style begins with "c_", a compute ID must follow which has been
|
||||
previously defined in the input script. If no bracketed integer is
|
||||
appended, the per-atom vector calculated by the compute is used. If a
|
||||
bracketed integer is appended, the Ith column of the per-atom array
|
||||
calculated by the compute is used. Users can also write code for
|
||||
their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
|
||||
|
||||
If the style begins with "f_", a fix ID must follow which has been
|
||||
previously defined in the input script. If no bracketed integer is
|
||||
appended, the per-atom vector calculated by the fix is used. If a
|
||||
bracketed integer is appended, the Ith column of the per-atom array
|
||||
calculated by the fix is used. Note that some fixes only produce
|
||||
their values on certain timesteps, which must be compatible with the
|
||||
timestep on which this compute accesses the fix, else an error
|
||||
results. Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`.
|
||||
|
||||
If a value begins with "v_", a variable name for an *atom* or
|
||||
*atomfile* style :doc:`variable <variable>` must follow which has been
|
||||
previously defined in the input script. Variables of style *atom* can
|
||||
reference thermodynamic keywords and various per-atom attributes, or
|
||||
invoke other computes, fixes, or variables when they are evaluated, so
|
||||
this is a very general means of generating per-atom quantities to
|
||||
treat as a chunk ID.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Normally, *Nchunk* = the number of chunks, is re-calculated every time
|
||||
this fix is invoked, though the value may or may not change. As
|
||||
explained below, the *nchunk* keyword can be set to *once* which means
|
||||
*Nchunk* will never change.
|
||||
|
||||
If a :doc:`fix ave/chunk <fix_ave_chunk>` command uses this compute, it
|
||||
can also turn off the re-calculation of *Nchunk* for one or more
|
||||
windows of timesteps. The extent of the windows, during which Nchunk
|
||||
is held constant, are determined by the *Nevery*, *Nrepeat*, *Nfreq*
|
||||
values and the *ave* keyword setting that are used by the :doc:`fix ave/chunk <fix_ave_chunk>` command.
|
||||
|
||||
Specifically, if *ave* = *one*, then for each span of *Nfreq*
|
||||
timesteps, *Nchunk* is held constant between the first timestep when
|
||||
averaging is done (within the Nfreq-length window), and the last
|
||||
timestep when averaging is done (multiple of Nfreq). If *ave* =
|
||||
*running* or *window*, then *Nchunk* is held constant forever,
|
||||
starting on the first timestep when the :doc:`fix ave/chunk <fix_ave_chunk>` command invokes this compute.
|
||||
|
||||
Note that multiple :doc:`fix ave/chunk <fix_ave_chunk>` commands can use
|
||||
the same compute chunk/atom compute. However, the time windows they
|
||||
induce for holding *Nchunk* constant must be identical, else an error
|
||||
will be generated.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
The various optional keywords operate as follows. Note that some of
|
||||
them function differently or are ignored by different chunk styles.
|
||||
Some of them also have different default values, depending on
|
||||
the chunk style, as listed below.
|
||||
|
||||
The *region* keyword applies to all chunk styles. If used, an atom
|
||||
must be in both the specified group and the specified geometric
|
||||
:doc:`region <region>` to be assigned to a chunk.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *nchunk* keyword applies to all chunk styles. It specifies how
|
||||
often *Nchunk* is recalculated, which in turn can affect the chunk IDs
|
||||
assigned to individual atoms.
|
||||
|
||||
If *nchunk* is set to *once*, then *Nchunk* is only calculated once,
|
||||
the first time this compute is invoked. If *nchunk* is set to
|
||||
*every*, then *Nchunk* is re-calculated every time the compute is
|
||||
invoked. Note that, as described above, the use of this compute
|
||||
by the :doc:`fix ave/chunk <fix_ave_chunk>` command can override
|
||||
the *every* setting.
|
||||
|
||||
The default values for *nchunk* are listed below and depend on the
|
||||
chunk style and other system and keyword settings. They attempt to
|
||||
represent typical use cases for the various chunk styles. The
|
||||
*nchunk* value can always be set explicitly if desired.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *limit* keyword can be used to limit the calculated value of
|
||||
*Nchunk* = the number of chunks. The limit is applied each time
|
||||
*Nchunk* is calculated, which also limits the chunk IDs assigned to
|
||||
any atom. The *limit* keyword is used by all chunk styles except the
|
||||
*binning* styles, which ignore it. This is because the number of bins
|
||||
can be tailored using the *bound* keyword (described below) which
|
||||
effectively limits the size of *Nchunk*.
|
||||
|
||||
If *limit* is set to *Nc* = 0, then no limit is imposed on *Nchunk*,
|
||||
though the *compress* keyword can still be used to reduce *Nchunk*, as
|
||||
described below.
|
||||
|
||||
If *Nc* > 0, then the effect of the *limit* keyword depends on whether
|
||||
the *compress* keyword is also used with a setting of *yes*, and
|
||||
whether the *compress* keyword is specified before the *limit* keyword
|
||||
or after.
|
||||
|
||||
In all cases, *Nchunk* is first calculated in the usual way for each
|
||||
chunk style, as described above.
|
||||
|
||||
First, here is what occurs if *compress yes* is not set. If *limit*
|
||||
is set to *Nc max*, then *Nchunk* is reset to the smaller of *Nchunk*
|
||||
and *Nc*. If *limit* is set to *Nc exact*, then *Nchunk* is reset to
|
||||
*Nc*, whether the original *Nchunk* was larger or smaller than *Nc*.
|
||||
If *Nchunk* shrank due to the *limit* setting, then atom chunk IDs >
|
||||
*Nchunk* will be reset to 0 or *Nchunk*, depending on the setting of
|
||||
the *discard* keyword. If *Nchunk* grew, there will simply be some
|
||||
chunks with no atoms assigned to them.
|
||||
|
||||
If *compress yes* is set, and the *compress* keyword comes before the
|
||||
*limit* keyword, the compression operation is performed first, as
|
||||
described below, which resets *Nchunk*. The *limit* keyword is then
|
||||
applied to the new *Nchunk* value, exactly as described in the
|
||||
preceeding paragraph. Note that in this case, all atoms will end up
|
||||
with chunk IDs <= *Nc*, but their original values (e.g. molecule ID or
|
||||
compute/fix/variable value) may have been > *Nc*, because of the
|
||||
compression operation.
|
||||
|
||||
If *compress yes* is set, and the *compress* keyword comes after the
|
||||
*limit* keyword, then the *limit* value of *Nc* is applied first to
|
||||
the uncompressed value of *Nchunk*, but only if *Nc* < *Nchunk*
|
||||
(whether *Nc max* or *Nc exact* is used). This effectively means all
|
||||
atoms with chunk IDs > *Nc* have their chunk IDs reset to 0 or *Nc*,
|
||||
depending on the setting of the *discard* keyword. The compression
|
||||
operation is then performed, which may shrink *Nchunk* further. If
|
||||
the new *Nchunk* < *Nc* and *limit* = *Nc exact* is specified, then
|
||||
*Nchunk* is reset to *Nc*, which results in extra chunks with no atoms
|
||||
assigned to them. Note that in this case, all atoms will end up with
|
||||
chunk IDs <= *Nc*, and their original values (e.g. molecule ID or
|
||||
compute/fix/variable value) will also have been <= *Nc*.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *ids* keyword applies to all chunk styles. If the setting is
|
||||
*once* then the chunk IDs assigned to atoms the first time this
|
||||
compute is invoked will be permanent, and never be re-computed.
|
||||
|
||||
If the setting is *nfreq* and if a :doc:`fix ave/chunk <fix_ave_chunk>`
|
||||
command is using this compute, then in each of the *Nchunk* = constant
|
||||
time windows (discussed above), the chunk ID's assigned to atoms on
|
||||
the first step of the time window will persist until the end of the
|
||||
time window.
|
||||
|
||||
If the setting is *every*, which is the default, then chunk IDs are
|
||||
re-calculated on any timestep this compute is invoked.
|
||||
|
||||
.. note::
|
||||
|
||||
If you want the persistent chunk-IDs calculated by this compute
|
||||
to be continuous when running from a :doc:`restart file <read_restart>`,
|
||||
then you should use the same ID for this compute, as in the original
|
||||
run. This is so that the fix this compute creates to store per-atom
|
||||
quantities will also have the same ID, and thus be initialized
|
||||
correctly with chunk IDs from the restart file.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *compress* keyword applies to all chunk styles and affects how
|
||||
*Nchunk* is calculated, which in turn affects the chunk IDs assigned
|
||||
to each atom. It is useful for converting a "sparse" set of chunk IDs
|
||||
(with many IDs that have no atoms assigned to them), into a "dense"
|
||||
set of IDs, where every chunk has one or more atoms assigned to it.
|
||||
|
||||
Two possible use cases are as follows. If a large simulation box is
|
||||
mostly empty space, then the *binning* style may produce many bins
|
||||
with no atoms. If *compress* is set to *yes*, only bins with atoms
|
||||
will be contribute to *Nchunk*. Likewise, the *molecule* or
|
||||
*compute/fix/variable* styles may produce large *Nchunk* values. For
|
||||
example, the :doc:`compute cluster/atom <compute_cluster_atom>` command
|
||||
assigns every atom an atom ID for one of the atoms it is clustered
|
||||
with. For a million-atom system with 5 clusters, there would only be
|
||||
5 unique chunk IDs, but the largest chunk ID might be 1 million,
|
||||
resulting in *Nchunk* = 1 million. If *compress* is set to *yes*,
|
||||
*Nchunk* will be reset to 5.
|
||||
|
||||
If *compress* is set to *no*, which is the default, no compression is
|
||||
done. If it is set to *yes*, all chunk IDs with no atoms are removed
|
||||
from the list of chunk IDs, and the list is sorted. The remaining
|
||||
chunk IDs are renumbered from 1 to *Nchunk* where *Nchunk* is the new
|
||||
length of the list. The chunk IDs assigned to each atom reflect
|
||||
the new renumbering from 1 to *Nchunk*.
|
||||
|
||||
The original chunk IDs (before renumbering) can be accessed by the
|
||||
:doc:`compute property/chunk <compute_property_chunk>` command and its
|
||||
*id* keyword, or by the :doc:`fix ave/chunk <fix_ave_chunk>` command
|
||||
which outputs the original IDs as one of the columns in its global
|
||||
output array. For example, using the "compute cluster/atom" command
|
||||
discussed above, the original 5 unique chunk IDs might be atom IDs
|
||||
(27,4982,58374,857838,1000000). After compresion, these will be
|
||||
renumbered to (1,2,3,4,5). The original values (27,...,1000000) can
|
||||
be output to a file by the :doc:`fix ave/chunk <fix_ave_chunk>` command,
|
||||
or by using the :doc:`fix ave/time <fix_ave_time>` command in
|
||||
conjunction with the :doc:`compute property/chunk <compute_property_chunk>` command.
|
||||
|
||||
.. note::
|
||||
|
||||
The compression operation requires global communication across
|
||||
all processors to share their chunk ID values. It can require large
|
||||
memory on every processor to store them, even after they are
|
||||
compressed, if there are are a large number of unique chunk IDs with
|
||||
atoms assigned to them. It uses a STL map to find unique chunk IDs
|
||||
and store them in sorted order. Each time an atom is assigned a
|
||||
compressed chunk ID, it must access the STL map. All of this means
|
||||
that compression can be expensive, both in memory and CPU time. The
|
||||
use of the *limit* keyword in conjunction with the *compress* keyword
|
||||
can affect these costs, depending on which keyword is used first. So
|
||||
use this option with care.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *discard* keyword applies to all chunk styles. It affects what
|
||||
chunk IDs are assigned to atoms that do not match one of the valid
|
||||
chunk IDs from 1 to *Nchunk*. Note that it does not apply to atoms
|
||||
that are not in the specified group or optionally specified region.
|
||||
Those atoms are always assigned a chunk ID = 0.
|
||||
|
||||
If the calculated chunk ID for an atom is not within the range 1 to
|
||||
*Nchunk* then it is a "discard" atom. Note that *Nchunk* may have
|
||||
been shrunk by the *limit* keyword. Or the *compress* keyword may
|
||||
have eliminated chunk IDs that were valid before the compression took
|
||||
place, and are now not in the compressed list. Also note that for the
|
||||
*molecule* chunk style, if new molecules are added to the system,
|
||||
their chunk IDs may exceed a previously calculated *Nchunk*.
|
||||
Likewise, evaluation of a compute/fix/variable on a later timestep may
|
||||
return chunk IDs that are invalid for the previously calculated
|
||||
*Nchunk*.
|
||||
|
||||
All the chunk styles except the *binning* styles, must use *discard*
|
||||
set to either *yes* or *no*. If *discard* is set to *yes*, which is
|
||||
the default, then every "discard" atom has its chunk ID set to 0. If
|
||||
*discard* is set to *no*, every "discard" atom has its chunk ID set to
|
||||
*Nchunk*. I.e. it becomes part of the last chunk.
|
||||
|
||||
The *binning* styles use the *discard* keyword to decide whether to
|
||||
discard atoms outside the spatial domain covered by bins, or to assign
|
||||
them to the bin they are nearest to.
|
||||
|
||||
For the *bin/1d*, *bin/2d*, *bin/3d* styles the details are as
|
||||
follows. If *discard* is set to *yes*, an out-of-domain atom will
|
||||
have its chunk ID set to 0. If *discard* is set to *no*, the atom
|
||||
will have its chunk ID set to the first or last bin in that dimension.
|
||||
If *discard* is set to *mixed*, which is the default, it will only
|
||||
have its chunk ID set to the first or last bin if bins extend to the
|
||||
simulation box boundary in that dimension. This is the case if the
|
||||
*bound* keyword settings are *lower* and *upper*, which is the
|
||||
default. If the *bound* keyword settings are numeric values, then the
|
||||
atom will have its chunk ID set to 0 if it is outside the bounds of
|
||||
any bin. Note that in this case, it is possible that the first or
|
||||
last bin extends beyond the numeric *bounds* settings, depending on
|
||||
the specified *origin*. If this is the case, the chunk ID of the atom
|
||||
is only set to 0 if it is outside the first or last bin, not if it is
|
||||
simply outside the numeric *bounds* setting.
|
||||
|
||||
For the *bin/sphere* style the details are as follows. If *discard*
|
||||
is set to *yes*, an out-of-domain atom will have its chunk ID set to
|
||||
0. If *discard* is set to *no* or *mixed*, the atom will have its
|
||||
chunk ID set to the first or last bin, i.e. the innermost or outermost
|
||||
spherical shell. If the distance of the atom from the origin is less
|
||||
than *rmin*, it will be assigned to the first bin. If the distance of
|
||||
the atom from the origin is greater than *rmax*, it will be assigned
|
||||
to the last bin.
|
||||
|
||||
For the *bin/cylinder* style the details are as follows. If *discard*
|
||||
is set to *yes*, an out-of-domain atom will have its chunk ID set to
|
||||
0. If *discard* is set to *no*, the atom will have its chunk ID set
|
||||
to the first or last bin in both the radial and axis dimensions. If
|
||||
*discard* is set to *mixed*, which is the default, the the radial
|
||||
dimension is treated the same as for *discard* = no. But for the axis
|
||||
dimensinon, it will only have its chunk ID set to the first or last
|
||||
bin if bins extend to the simulation box boundary in the axis
|
||||
dimension. This is the case if the *bound* keyword settings are
|
||||
*lower* and *upper*, which is the default. If the *bound* keyword
|
||||
settings are numeric values, then the atom will have its chunk ID set
|
||||
to 0 if it is outside the bounds of any bin. Note that in this case,
|
||||
it is possible that the first or last bin extends beyond the numeric
|
||||
*bounds* settings, depending on the specified *origin*. If this is
|
||||
the case, the chunk ID of the atom is only set to 0 if it is outside
|
||||
the first or last bin, not if it is simply outside the numeric
|
||||
*bounds* setting.
|
||||
|
||||
If *discard* is set to *no* or *mixed*, the atom will have its
|
||||
chunk ID set to the first or last bin, i.e. the innermost or outermost
|
||||
spherical shell. If the distance of the atom from the origin is less
|
||||
than *rmin*, it will be assigned to the first bin. If the distance of
|
||||
the atom from the origin is greater than *rmax*, it will be assigned
|
||||
to the last bin.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *bound* keyword only applies to the *bin/1d*, *bin/2d*, *bin/3d*
|
||||
styles and to the axis dimension of the *bin/cylinder* style;
|
||||
otherwise it is ignored. It can be used one or more times to limit
|
||||
the extent of bin coverage in a specified dimension, i.e. to only bin
|
||||
a portion of the box. If the *lo* setting is *lower* or the *hi*
|
||||
setting is *upper*, the bin extent in that direction extends to the
|
||||
box boundary. If a numeric value is used for *lo* and/or *hi*, then
|
||||
the bin extent in the *lo* or *hi* direction extends only to that
|
||||
value, which is assumed to be inside (or at least near) the simulation
|
||||
box boundaries, though LAMMPS does not check for this. Note that
|
||||
using the *bound* keyword typically reduces the total number of bins
|
||||
and thus the number of chunks *Nchunk*.
|
||||
|
||||
The *pbc* keyword only applies to the *bin/sphere* and *bin/cylinder*
|
||||
styles. If set to *yes*, the distance an atom is from the sphere
|
||||
origin or cylinder axis is calculated in a minimum image sense with
|
||||
respect to periodic dimensions, when determining which bin the atom is
|
||||
in. I.e. if x is a periodic dimension and the distance between the
|
||||
atom and the sphere center in the x dimension is greater than 0.5 *
|
||||
simulation box length in x, then a box length is subtracted to give a
|
||||
distance < 0.5 * simulation box length. This allosws the sphere or
|
||||
cylinder center to be near a box edge, and atoms on the other side of
|
||||
the periodic box will still be close to the center point/axis. Note
|
||||
that with a setting of *yes*, the outer sphere or cylinder radius must
|
||||
also be <= 0.5 * simulation box length in any periodic dimension
|
||||
except for the cylinder axis dimension, or an error is generated.
|
||||
|
||||
The *units* keyword only applies to the *binning* styles; otherwise it
|
||||
is ignored. For the *bin/1d*, *bin/2d*, *bin/3d* styles, it
|
||||
determines the meaning of the distance units used for the bin sizes
|
||||
*delta* and for *origin* and *bounds* values if they are coordinate
|
||||
values. For the *bin/sphere* style it determines the meaning of the
|
||||
distance units used for *xorig*,*yorig*,*zorig* and the radii *srmin*
|
||||
and *srmax*. For the *bin/cylinder* style it determines the meaning
|
||||
of the distance units used for *delta*,*c1*,*c2* and the radii *crmin*
|
||||
and *crmax*.
|
||||
|
||||
For orthogonal simulation boxes, any of the 3 options may
|
||||
be used. For non-orthogonal (triclinic) simulation boxes, only the
|
||||
*reduced* option may be used.
|
||||
|
||||
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. A *reduced* value means normalized
|
||||
unitless values between 0 and 1, which represent the lower and upper
|
||||
faces of the simulation box respectively. Thus an *origin* value of
|
||||
0.5 means the center of the box in any dimension. A *delta* value of
|
||||
0.1 means 10 bins span the box in that dimension.
|
||||
|
||||
Note that for the *bin/sphere* style, the radii *srmin* and *srmax* are
|
||||
scaled by the lattice spacing or reduced value of the *x* dimension.
|
||||
|
||||
Note that for the *bin/cylinder* style, the radii *crmin* and *crmax*
|
||||
are scaled by the lattice spacing or reduced value of the 1st
|
||||
dimension perpendicular to the cylinder axis. E.g. y for an x-axis
|
||||
cylinder, x for a y-axis cylinder, and x for a z-axis cylinder.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values are unitless chunk IDs, ranging from 1 to
|
||||
*Nchunk* (inclusive) for atoms assigned to chunks, and 0 for atoms not
|
||||
belonging to a chunk.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
Even if the *nchunk* keyword is set to *once*, the chunk IDs assigned
|
||||
to each atom are not stored in a restart files. This means you cannot
|
||||
expect those assignments to persist in a restarted simulation.
|
||||
Instead you must re-specify this command and assign atoms to chunks when
|
||||
the restarted simulation begins.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`fix ave/chunk <fix_ave_chunk>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option defaults are as follows:
|
||||
|
||||
* region = none
|
||||
* nchunk = every, if compress is yes, overriding other defaults listed here
|
||||
* nchunk = once, for type style
|
||||
* nchunk = once, for mol style if region is none
|
||||
* nchunk = every, for mol style if region is set
|
||||
* nchunk = once, for binning style if the simulation box size is static or units = reduced
|
||||
* nchunk = every, for binning style if the simulation box size is dynamic and units is lattice or box
|
||||
* nchunk = every, for compute/fix/variable style
|
||||
* limit = 0
|
||||
* ids = every
|
||||
* compress = no
|
||||
* discard = yes, for all styles except binning
|
||||
* discard = mixed, for binning styles
|
||||
* bound = lower and upper in all dimensions
|
||||
* pbc = no
|
||||
* units = lattice
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,85 @@
|
|||
.. index:: compute cluster/atom
|
||||
|
||||
compute cluster/atom command
|
||||
============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID cluster/atom cutoff
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* cluster/atom = style name of this compute command
|
||||
* cutoff = distance within which to label atoms as part of same cluster (distance units)
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all cluster/atom 1.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that assigns each atom a cluster ID.
|
||||
|
||||
A cluster is defined as a set of atoms, each of which is within the
|
||||
cutoff distance from one or more other atoms in the cluster. If an
|
||||
atom has no neighbors within the cutoff distance, then it is a 1-atom
|
||||
cluster. The ID of every atom in the cluster will be the smallest
|
||||
atom ID of any atom in the cluster.
|
||||
|
||||
Only atoms in the compute group are clustered and assigned cluster
|
||||
IDs. Atoms not in the compute group are assigned a cluster ID = 0.
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (i.e. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently or to have multiple compute/dump commands, each of a
|
||||
*clsuter/atom* style.
|
||||
|
||||
.. note::
|
||||
|
||||
If you have a bonded system, then the settings of
|
||||
:doc:`special_bonds <special_bonds>` command can remove pairwise
|
||||
interactions between atoms in the same bond, angle, or dihedral. This
|
||||
is the default setting for the :doc:`special_bonds <special_bonds>`
|
||||
command, and means those pairwise interactions do not appear in the
|
||||
neighbor list. Because this fix uses the neighbor list, it also means
|
||||
those pairs will not be included when computing the clusters. This
|
||||
does not apply when using long-range coulomb (*coul/long*, *coul/msm*,
|
||||
*coul/wolf* or similar. One way to get around this would be to set
|
||||
special_bond scaling factors to very tiny numbers that are not exactly
|
||||
zero (e.g. 1.0e-50). Another workaround is to write a dump file, and
|
||||
use the :doc:`rerun <rerun>` command to compute the clusters for
|
||||
snapshots in the dump file. The rerun script can use a
|
||||
:doc:`special_bonds <special_bonds>` command that includes all pairs in
|
||||
the neighbor list.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values will be an ID > 0, as explained above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute coord/atom <compute_coord_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,117 @@
|
|||
.. index:: compute cna/atom
|
||||
|
||||
compute cna/atom command
|
||||
========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID cna/atom cutoff
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* cna/atom = style name of this compute command
|
||||
* cutoff = cutoff distance for nearest neighbors (distance units)
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all cna/atom 3.08
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the CNA (Common Neighbor
|
||||
Analysis) pattern for each atom in the group. In solid-state systems
|
||||
the CNA pattern is a useful measure of the local crystal structure
|
||||
around an atom. The CNA methodology is described in :ref:`(Faken) <Faken>`
|
||||
and :ref:`(Tsuzuki) <Tsuzuki>`.
|
||||
|
||||
Currently, there are five kinds of CNA patterns LAMMPS recognizes:
|
||||
|
||||
* fcc = 1
|
||||
* hcp = 2
|
||||
* bcc = 3
|
||||
* icosohedral = 4
|
||||
* unknown = 5
|
||||
|
||||
The value of the CNA pattern will be 0 for atoms not in the specified
|
||||
compute group. Note that normally a CNA calculation should only be
|
||||
performed on mono-component systems.
|
||||
|
||||
The CNA calculation can be sensitive to the specified cutoff value.
|
||||
You should insure the appropriate nearest neighbors of an atom are
|
||||
found within the cutoff distance for the presumed crystal strucure.
|
||||
E.g. 12 nearest neighbor for perfect FCC and HCP crystals, 14 nearest
|
||||
neighbors for perfect BCC crystals. These formulas can be used to
|
||||
obtain a good cutoff distance:
|
||||
|
||||
.. image:: Eqs/cna_cutoff1.jpg
|
||||
:align: center
|
||||
|
||||
where a is the lattice constant for the crystal structure concerned
|
||||
and in the HCP case, x = (c/a) / 1.633, where 1.633 is the ideal c/a
|
||||
for HCP crystals.
|
||||
|
||||
Also note that since the CNA calculation in LAMMPS uses the neighbors
|
||||
of an owned atom to find the nearest neighbors of a ghost atom, the
|
||||
following relation should also be satisfied:
|
||||
|
||||
.. image:: Eqs/cna_cutoff2.jpg
|
||||
:align: center
|
||||
|
||||
where Rc is the cutoff distance of the potential, Rs is the skin
|
||||
distance as specified by the :doc:`neighbor <neighbor>` command, and
|
||||
cutoff is the argument used with the compute cna/atom command. LAMMPS
|
||||
will issue a warning if this is not the case.
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (e.g. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently or to have multiple compute/dump commands, each with a
|
||||
*cna/atom* style.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values will be a number from 0 to 5, as explained
|
||||
above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute centro/atom <compute_centro_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Faken:
|
||||
|
||||
|
||||
|
||||
**(Faken)** Faken, Jonsson, Comput Mater Sci, 2, 279 (1994).
|
||||
|
||||
.. _Tsuzuki:
|
||||
|
||||
|
||||
|
||||
**(Tsuzuki)** Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,67 @@
|
|||
.. index:: compute com
|
||||
|
||||
compute com command
|
||||
===================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID com
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* com = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all com
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the center-of-mass of the group
|
||||
of atoms, including all effects due to atoms passing thru periodic
|
||||
boundaries.
|
||||
|
||||
A vector of three quantites is calculated by this compute, which
|
||||
are the x,y,z coordinates of the center of mass.
|
||||
|
||||
.. note::
|
||||
|
||||
The coordinates of an atom contribute to the center-of-mass 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 compute by using the :doc:`set image <set>` command.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global vector of length 3, which can be
|
||||
accessed by indices 1-3 by any command that uses global vector values
|
||||
from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The vector values are "intensive". The vector values will be in
|
||||
distance :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute com/chunk <compute_com_chunk>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,95 @@
|
|||
.. index:: compute com/chunk
|
||||
|
||||
compute com/chunk command
|
||||
=========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID com/chunk chunkID
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* com/chunk = style name of this compute command
|
||||
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 fluid com/chunk molchunk
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the center-of-mass for multiple
|
||||
chunks of atoms.
|
||||
|
||||
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
|
||||
to a single chunk (or no chunk). The ID for this command is specified
|
||||
as chunkID. For example, a single chunk could be the atoms in a
|
||||
molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
|
||||
defined and examples of how they can be used to measure properties of
|
||||
a system.
|
||||
|
||||
This compute calculates the x,y,z coordinates of the center-of-mass
|
||||
for each chunk, which includes all effects due to atoms passing thru
|
||||
periodic boundaries.
|
||||
|
||||
Note that only atoms in the specified group contribute to the
|
||||
calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
defines its own group; atoms will have a chunk ID = 0 if they are not
|
||||
in that group, signifying they are not assigned to a chunk, and will
|
||||
thus also not contribute to this calculation. You can specify the
|
||||
"all" group for this command if you simply want to include atoms with
|
||||
non-zero chunk IDs.
|
||||
|
||||
.. note::
|
||||
|
||||
The coordinates of an atom contribute to the chunk's
|
||||
center-of-mass 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 compute by using the :doc:`set image <set>` command.
|
||||
|
||||
The simplest way to output the results of the compute com/chunk
|
||||
calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
|
||||
command, for example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute cc1 all chunk/atom molecule
|
||||
compute myChunk all com/chunk cc1
|
||||
fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global array where the number of rows = the
|
||||
number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
|
||||
3 for the x,y,z center-of-mass coordinates of each chunk. These
|
||||
values can be accessed by any command that uses global array values
|
||||
from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The array values are "intensive". The array values will be in
|
||||
distance :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute com <compute_com>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,64 @@
|
|||
.. index:: compute contact/atom
|
||||
|
||||
compute contact/atom command
|
||||
============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID contact/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* contact/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all contact/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the number of contacts
|
||||
for each atom in a group.
|
||||
|
||||
The contact number is defined for finite-size spherical particles as
|
||||
the number of neighbor atoms which overlap the central particle,
|
||||
meaning that their distance of separation is less than or equal to the
|
||||
sum of the radii of the two particles.
|
||||
|
||||
The value of the contact number will be 0.0 for atoms not in the
|
||||
specified compute group.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, whose values can be
|
||||
accessed by any command that uses per-atom values from a compute as
|
||||
input. See :ref:`Section_howto 15 <howto_15>` for an
|
||||
overview of LAMMPS output options.
|
||||
|
||||
The per-atom vector values will be a number >= 0.0, as explained
|
||||
above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute requires that atoms store a radius as defined by the
|
||||
:doc:`atom_style sphere <atom_style>` command.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute coord/atom <compute_coord_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,103 @@
|
|||
.. index:: compute coord/atom
|
||||
|
||||
compute coord/atom command
|
||||
==========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID coord/atom cutoff type1 type2 ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* coord/atom = style name of this compute command
|
||||
* cutoff = distance within which to count coordination neighbors (distance units)
|
||||
* typeN = atom type for Nth coordination count (see asterisk form below)
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all coord/atom 2.0
|
||||
compute 1 all coord/atom 6.0 1 2
|
||||
compute 1 all coord/atom 6.0 2*4 5*8 *
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates one or more coordination numbers
|
||||
for each atom in a group.
|
||||
|
||||
A coordination number is defined as the number of neighbor atoms with
|
||||
specified atom type(s) that are within the specified cutoff distance
|
||||
from the central atom. Atoms not in the group are included in a
|
||||
coordination number of atoms in the group.
|
||||
|
||||
The *typeN* keywords allow you to specify which atom types contribute
|
||||
to each coordination number. One coordination number is computed for
|
||||
each of the *typeN* keywords listed. If no *typeN* keywords are
|
||||
listed, a single coordination number is calculated, which includes
|
||||
atoms of all types (same as the "*" format, see below).
|
||||
|
||||
The *typeN* keywords can be specified in one of two ways. An explicit
|
||||
numeric value can be used, as in the 2nd example above. Or a
|
||||
wild-card asterisk can be used to specify a range of atom types. This
|
||||
takes the form "*" or "*n" or "n*" or "m*n". If N = the number of
|
||||
atom types, then an asterisk with no numeric values means all types
|
||||
from 1 to N. A leading asterisk means all types from 1 to n
|
||||
(inclusive). A trailing asterisk means all types from n to N
|
||||
(inclusive). A middle asterisk means all types from m to n
|
||||
(inclusive).
|
||||
|
||||
The value of all coordination numbers will be 0.0 for atoms not in the
|
||||
specified compute group.
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (i.e. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently.
|
||||
|
||||
.. note::
|
||||
|
||||
If you have a bonded system, then the settings of
|
||||
:doc:`special_bonds <special_bonds>` command can remove pairwise
|
||||
interactions between atoms in the same bond, angle, or dihedral. This
|
||||
is the default setting for the :doc:`special_bonds <special_bonds>`
|
||||
command, and means those pairwise interactions do not appear in the
|
||||
neighbor list. Because this fix uses the neighbor list, it also means
|
||||
those pairs will not be included in the coordination count. One way
|
||||
to get around this, is to write a dump file, and use the
|
||||
:doc:`rerun <rerun>` command to compute the coordination for snapshots
|
||||
in the dump file. The rerun script can use a
|
||||
:doc:`special_bonds <special_bonds>` command that includes all pairs in
|
||||
the neighbor list.
|
||||
|
||||
**Output info:**
|
||||
|
||||
If single *type1* keyword is specified (or if none are specified),
|
||||
this compute calculates a per-atom vector. If multiple *typeN*
|
||||
keywords are specified, this compute calculates a per-atom array, with
|
||||
N columns. These values can be accessed by any command that uses
|
||||
per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The per-atom vector or array values will be a number >= 0.0, as
|
||||
explained above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute cluster/atom <compute_cluster_atom>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,69 @@
|
|||
.. index:: compute damage/atom
|
||||
|
||||
compute damage/atom command
|
||||
===========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID damage/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* damage/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all damage/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the per-atom damage for each atom
|
||||
in a group. This is a quantity relevant for :doc:`Peridynamics models <pair_peri>`. See `this document <PDF/PDLammps_overview.pdf>`_
|
||||
for an overview of LAMMPS commands for Peridynamics modeling.
|
||||
|
||||
The "damage" of a Peridymaics particles is based on the bond breakage
|
||||
between the particle and its neighbors. If all the bonds are broken
|
||||
the particle is considered to be fully damaged.
|
||||
|
||||
See the `PDLAMMPS user guide <http://www.sandia.gov/~mlparks/papers/PDLAMMPS.pdf>`_ for a formal
|
||||
definition of "damage" and more details about Peridynamics as it is
|
||||
implemented in LAMMPS.
|
||||
|
||||
This command can be used with all the Peridynamic pair styles.
|
||||
|
||||
The damage value will be 0.0 for atoms not in the specified compute
|
||||
group.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values are unitlesss numbers (damage) >= 0.0.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the PERI package. It is only enabled if
|
||||
LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute dilatation <compute_dilatation>`, :doc:`compute plasticity <compute_plasticity>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,79 @@
|
|||
.. index:: compute dihedral/local
|
||||
|
||||
compute dihedral/local command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID dihedral/local input1 input2 ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* dihedral/local = style name of this compute command
|
||||
* one or more keywords may be appended
|
||||
* keyword = *phi*
|
||||
.. parsed-literal::
|
||||
|
||||
*phi* = tabulate dihedral angles
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all dihedral/local phi
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates properties of individual dihedral
|
||||
interactions. The number of datums generated, aggregated across all
|
||||
processors, equals the number of angles in the system, modified by the
|
||||
group parameter as explained below.
|
||||
|
||||
The local data stored by this command is generated by looping over all
|
||||
the atoms owned on a processor and their dihedrals. A dihedral will
|
||||
only be included if all 4 atoms in the dihedral are in the specified
|
||||
compute group.
|
||||
|
||||
Note that as atoms migrate from processor to processor, there will be
|
||||
no consistent ordering of the entries within the local vector or array
|
||||
from one timestep to the next. The only consistency that is
|
||||
guaranteed is that the ordering on a particular timestep will be the
|
||||
same for local vectors or arrays generated by other compute commands.
|
||||
For example, dihedral output from the :doc:`compute property/local <compute_property_local>` command can be combined
|
||||
with data from this command and output by the :doc:`dump local <dump>`
|
||||
command in a consistent way.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a local vector or local array depending on the
|
||||
number of keywords. The length of the vector or number of rows in the
|
||||
array is the number of dihedrals. If a single keyword is specified, a
|
||||
local vector is produced. If two or more keywords are specified, a
|
||||
local array is produced where the number of columns = the number of
|
||||
keywords. The vector or array can be accessed by any command that
|
||||
uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The output for *phi* will be in degrees.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,71 @@
|
|||
.. index:: compute dilatation/atom
|
||||
|
||||
compute dilatation/atom command
|
||||
===============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID dilatation/atom
|
||||
|
||||
* ID, group-ID are documented in compute command
|
||||
* dilation/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all dilatation/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the per-atom dilatation for each
|
||||
atom in a group. This is a quantity relevant for :doc:`Peridynamics models <pair_peri>`. See `this document <PDF/PDLammps_overview.pdf>`_
|
||||
for an overview of LAMMPS commands for Peridynamics modeling.
|
||||
|
||||
For small deformation, dilatation of is the measure of the volumetric
|
||||
strain.
|
||||
|
||||
The dilatation "theta" for each peridynamic particle I is calculated
|
||||
as a sum over its neighbors with unbroken bonds, where the
|
||||
contribution of the IJ pair is a function of the change in bond length
|
||||
(versus the initial length in the reference state), the volume
|
||||
fraction of the particles and an influence function. See the
|
||||
`PDLAMMPS user guide <http://www.sandia.gov/~mlparks/papers/PDLAMMPS.pdf>`_ for a formal
|
||||
definition of dilatation.
|
||||
|
||||
This command can only be used with a subset of the Peridynamic :doc:`pair styles <pair_peri>`: peri/lps, peri/ves and peri/eps.
|
||||
|
||||
The dilatation value will be 0.0 for atoms not in the specified
|
||||
compute group.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
Section_howto 15 for an overview of LAMMPS output options.
|
||||
|
||||
The per-atom vector values are unitlesss numbers (theta) >= 0.0.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the PERI package. It is only enabled if
|
||||
LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute damage <compute_damage>`, :doc:`compute plasticity <compute_plasticity>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,80 @@
|
|||
.. index:: compute displace/atom
|
||||
|
||||
compute displace/atom command
|
||||
=============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID displace/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* displace/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all displace/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the current displacement of each
|
||||
atom in the group from its original coordinates, including all effects
|
||||
due to atoms passing thru periodic boundaries.
|
||||
|
||||
A vector of four quantites per atom is calculated by this compute.
|
||||
The first 3 elements of the vector are the dx,dy,dz displacements.
|
||||
The 4th component is the total displacement, i.e. sqrt(dx*dx + dy*dy +
|
||||
dz*dz).
|
||||
|
||||
The displacement of an atom is from its original position at the time
|
||||
the compute command was issued. The value of the displacement will be
|
||||
0.0 for atoms not in the specified compute group.
|
||||
|
||||
.. note::
|
||||
|
||||
Initial coordinates are stored 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 compute by
|
||||
using the :doc:`set image <set>` command.
|
||||
|
||||
.. note::
|
||||
|
||||
If you want the quantities calculated by this compute to be
|
||||
continuous when running from a :doc:`restart file <read_restart>`, then
|
||||
you should use the same ID for this compute, as in the original run.
|
||||
This is so that the fix this compute creates to store per-atom
|
||||
quantities will also have the same ID, and thus be initialized
|
||||
correctly with time=0 atom coordinates from the restart file.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom array with 4 columns, which can be
|
||||
accessed by indices 1-4 by any command that uses per-atom values from
|
||||
a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The per-atom array values will be in distance :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute msd <compute_msd>`, :doc:`dump custom <dump>`, :doc:`fix store/state <fix_store_state>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,80 @@
|
|||
.. index:: compute erotate/asphere
|
||||
|
||||
compute erotate/asphere command
|
||||
===============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID erotate/asphere
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* erotate/asphere = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all erotate/asphere
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the rotational kinetic energy of
|
||||
a group of aspherical particles. The aspherical particles can be
|
||||
ellipsoids, or line segments, or triangles. See the
|
||||
:doc:`atom_style <atom_style>` and :doc:`read_data <read_data>` commands
|
||||
for descriptions of these options.
|
||||
|
||||
For all 3 types of particles, the rotational kinetic energy is
|
||||
computed as 1/2 I w^2, where I is the inertia tensor for the
|
||||
aspherical particle and w is its angular velocity, which is computed
|
||||
from its angular momentum if needed.
|
||||
|
||||
.. note::
|
||||
|
||||
For :doc:`2d models <dimension>`, ellipsoidal particles are
|
||||
treated as ellipsoids, not ellipses, meaning their moments of inertia
|
||||
will be the same as in 3d.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the KE). This value can be
|
||||
used by any command that uses a global scalar value from a compute as
|
||||
input. See :ref:`Section_howto 15 <howto_15>` for an
|
||||
overview of LAMMPS output options.
|
||||
|
||||
The scalar value calculated by this compute is "extensive". The
|
||||
scalar value will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute requires that ellipsoidal particles atoms store a shape
|
||||
and quaternion orientation and angular momentum as defined by the
|
||||
:doc:`atom_style ellipsoid <atom_style>` command.
|
||||
|
||||
This compute requires that line segment particles atoms store a length
|
||||
and orientation and angular velocity as defined by the :doc:`atom_style line <atom_style>` command.
|
||||
|
||||
This compute requires that triangular particles atoms store a size and
|
||||
shape and quaternion orientation and angular momentum as defined by
|
||||
the :doc:`atom_style tri <atom_style>` command.
|
||||
|
||||
All particles in the group must be finite-size. They cannot be point
|
||||
particles.
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
:doc:`compute erotate/sphere <compute_erotate_sphere>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,69 @@
|
|||
.. index:: compute erotate/rigid
|
||||
|
||||
compute erotate/rigid command
|
||||
=============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID erotate/rigid fix-ID
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* erotate/rigid = style name of this compute command
|
||||
* fix-ID = ID of rigid body fix
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all erotate/rigid myRigid
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the rotational kinetic energy of
|
||||
a collection of rigid bodies, as defined by one of the :doc:`fix rigid <fix_rigid>` command variants.
|
||||
|
||||
The rotational energy of each rigid body is computed as 1/2 I Wbody^2,
|
||||
where I is the inertia tensor for the rigid body, and Wbody is its
|
||||
angular velocity vector. Both I and Wbody are in the frame of
|
||||
reference of the rigid body, i.e. I is diagonalized.
|
||||
|
||||
The *fix-ID* should be the ID of one of the :doc:`fix rigid <fix_rigid>`
|
||||
commands which defines the rigid bodies. The group specified in the
|
||||
compute command is ignored. The rotational energy of all the rigid
|
||||
bodies defined by the fix rigid command in included in the
|
||||
calculation.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the summed rotational energy
|
||||
of all the rigid bodies). This value can be used by any command that
|
||||
uses a global scalar value from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The scalar value calculated by this compute is "extensive". The
|
||||
scalar value will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the RIGID package. It is only enabled if
|
||||
LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute ke/rigid <compute_erotate_ke_rigid>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,69 @@
|
|||
.. index:: compute erotate/sphere
|
||||
|
||||
compute erotate/sphere command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID erotate/sphere
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* erotate/sphere = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all erotate/sphere
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the rotational kinetic energy of
|
||||
a group of spherical particles.
|
||||
|
||||
The rotational energy is computed as 1/2 I w^2, where I is the moment
|
||||
of inertia for a sphere and w is the particle's angular velocity.
|
||||
|
||||
.. note::
|
||||
|
||||
For :doc:`2d models <dimension>`, particles are treated as
|
||||
spheres, not disks, meaning their moment of inertia will be the same
|
||||
as in 3d.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the KE). This value can be
|
||||
used by any command that uses a global scalar value from a compute as
|
||||
input. See :ref:`Section_howto 15 <howto_15>` for an
|
||||
overview of LAMMPS output options.
|
||||
|
||||
The scalar value calculated by this compute is "extensive". The
|
||||
scalar value will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute requires that atoms store a radius and angular velocity
|
||||
(omega) as defined by the :doc:`atom_style sphere <atom_style>` command.
|
||||
|
||||
All particles in the group must be finite-size spheres or point
|
||||
particles. They cannot be aspherical. Point particles will not
|
||||
contribute to the rotational energy.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute erotate/asphere <compute_erotate_asphere>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,65 @@
|
|||
.. index:: compute erotate/sphere/atom
|
||||
|
||||
compute erotate/sphere/atom command
|
||||
===================================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID erotate/sphere/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* erotate/sphere/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all erotate/sphere/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the rotational kinetic energy for
|
||||
each particle in a group.
|
||||
|
||||
The rotational energy is computed as 1/2 I w^2, where I is the moment
|
||||
of inertia for a sphere and w is the particle's angular velocity.
|
||||
|
||||
.. note::
|
||||
|
||||
For :doc:`2d models <dimension>`, particles are treated as
|
||||
spheres, not disks, meaning their moment of inertia will be the same
|
||||
as in 3d.
|
||||
|
||||
The value of the rotational kinetic energy will be 0.0 for atoms not
|
||||
in the specified compute group or for point particles with a radius =
|
||||
0.0.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump custom <dump>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,74 @@
|
|||
.. index:: compute event/displace
|
||||
|
||||
compute event/displace command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID event/displace threshold
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* event/displace = style name of this compute command
|
||||
* threshold = minimum distance anyparticle must move to trigger an event (distance units)
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all event/displace 0.5
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that flags an "event" if any particle in the
|
||||
group has moved a distance greater than the specified threshold
|
||||
distance when compared to a previously stored reference state
|
||||
(i.e. the previous event). This compute is typically used in
|
||||
conjunction with the :doc:`prd <prd>` and :doc:`tad <tad>` commands,
|
||||
to detect if a transition
|
||||
to a new minimum energy basin has occurred.
|
||||
|
||||
This value calculated by the compute is equal to 0 if no particle has
|
||||
moved far enough, and equal to 1 if one or more particles have moved
|
||||
further than the threshold distance.
|
||||
|
||||
.. note::
|
||||
|
||||
If the system is undergoing significant center-of-mass motion,
|
||||
due to thermal motion, an external force, or an initial net momentum,
|
||||
then this compute will not be able to distinguish that motion from
|
||||
local atom displacements and may generate "false postives."
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the flag). This value can be
|
||||
used by any command that uses a global scalar value from a compute as
|
||||
input. See :ref:`Section_howto 15 <howto_15>` for an
|
||||
overview of LAMMPS output options.
|
||||
|
||||
The scalar value calculated by this compute is "intensive". The
|
||||
scalar value will be a 0 or 1 as explained above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This command can only be used if LAMMPS was built with the REPLICA
|
||||
package. See the :ref:`Making LAMMPS <start_3>` section
|
||||
for more info on packages.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`prd <prd>`, :doc:`tad <tad>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,315 @@
|
|||
.. index:: compute fep
|
||||
|
||||
compute fep command
|
||||
===================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID fep temp attribute args ... keyword value ...
|
||||
|
||||
* ID, group-ID are documented in the :doc:`compute <compute>` command
|
||||
* fep = name of this compute command
|
||||
* temp = external temperature (as specified for constant-temperature run)
|
||||
* one or more attributes with args may be appended
|
||||
* attribute = *pair* or *atom*
|
||||
.. parsed-literal::
|
||||
|
||||
*pair* args = pstyle pparam I J v_delta
|
||||
pstyle = pair style name, e.g. lj/cut
|
||||
pparam = parameter to perturb
|
||||
I,J = type pair(s) to set parameter for
|
||||
v_delta = variable with perturbation to apply (in the units of the parameter)
|
||||
*atom* args = aparam I v_delta
|
||||
aparam = parameter to perturb
|
||||
I = type to set parameter for
|
||||
v_delta = variable with perturbation to apply (in the units of the parameter)
|
||||
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *tail* or *volume*
|
||||
.. parsed-literal::
|
||||
|
||||
*tail* value = *no* or *yes*
|
||||
*no* = ignore tail correction to pair energies (usually small in fep)
|
||||
*yes* = include tail correction to pair energies
|
||||
*volume* value = *no* or *yes*
|
||||
*no* = ignore volume changes (e.g. in *NVE* or *NVT* trajectories)
|
||||
*yes* = include volume changes (e.g. in *NpT* trajectories)
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all fep 298 pair lj/cut epsilon 1 * v_delta pair lj/cut sigma 1 * v_delta volume yes
|
||||
compute 1 all fep 300 atom charge 2 v_delta
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Apply a perturbation to parameters of the interaction potential and
|
||||
recalculate the pair potential energy without changing the atomic
|
||||
coordinates from those of the reference, unperturbed system. This
|
||||
compute can be used to calculate free energy differences using several
|
||||
methods, such as free-energy perturbation (FEP), finite-difference
|
||||
thermodynamic integration (FDTI) or Bennet's acceptance ratio method
|
||||
(BAR).
|
||||
|
||||
The potential energy of the system is decomposed in three terms: a
|
||||
background term corresponding to interaction sites whose parameters
|
||||
remain constant, a reference term *U*<sub>0</sub> corresponding to the
|
||||
initial interactions of the atoms that will undergo perturbation, and
|
||||
a term *U*<sub>1</sub> corresponding to the final interactions of
|
||||
these atoms:
|
||||
|
||||
.. image:: Eqs/compute_fep_u.jpg
|
||||
:align: center
|
||||
|
||||
A coupling parameter λ varying from 0 to 1 connects the
|
||||
reference and perturbed systems:
|
||||
|
||||
.. image:: Eqs/compute_fep_lambda.jpg
|
||||
:align: center
|
||||
|
||||
It is possible but not necessary that the coupling parameter (or a
|
||||
function thereof) appears as a multiplication factor of the potential
|
||||
energy. Therefore, this compute can apply perturbations to interaction
|
||||
parameters that are not directly proportional to the potential energy
|
||||
(e.g. σ in Lennard-Jones potentials).
|
||||
|
||||
This command can be combined with :doc:`fix adapt <fix_adapt>` to
|
||||
perform multistage free-energy perturbation calculations along
|
||||
stepwise alchemical transformations during a simulation run:
|
||||
|
||||
.. image:: Eqs/compute_fep_fep.jpg
|
||||
:align: center
|
||||
|
||||
This compute is suitable for the finite-difference thermodynamic
|
||||
integration (FDTI) method :ref:`(Mezei) <Mezei>`, which is based on an
|
||||
evaluation of the numerical derivative of the free energy by a
|
||||
perturbation method using a very small δ:
|
||||
|
||||
.. image:: Eqs/compute_fep_fdti.jpg
|
||||
:align: center
|
||||
|
||||
where *w*<sub>i</sub> are weights of a numerical quadrature. The :doc:`fix adapt <fix_adapt>` command can be used to define the stages of
|
||||
λ at which the derivative is calculated and averaged.
|
||||
|
||||
The compute fep calculates the exponential Boltzmann term and also the
|
||||
potential energy difference *U*<sub>1</sub>-*U*<sub>0</sub>. By
|
||||
choosing a very small perturbation δ the thermodynamic
|
||||
integration method can be implemented using a numerical evaluation of
|
||||
the derivative of the potential energy with respect to λ:
|
||||
|
||||
.. image:: Eqs/compute_fep_ti.jpg
|
||||
:align: center
|
||||
|
||||
Another technique to calculate free energy differences is the
|
||||
acceptance ratio method :ref:`(Bennet) <Bennet>`, which can be implemented
|
||||
by calculating the potential energy differences with δ = 1.0 on
|
||||
both the forward and reverse routes:
|
||||
|
||||
.. image:: Eqs/compute_fep_bar.jpg
|
||||
:align: center
|
||||
|
||||
The value of the free energy difference is determined by numerical
|
||||
root finding to establish the equality.
|
||||
|
||||
Concerning the choice of how the atomic parameters are perturbed in
|
||||
order to setup an alchemical transformation route, several strategies
|
||||
are available, such as single-topology or double-topology strategies
|
||||
:ref:`(Pearlman) <Pearlman>`. The latter does not require modification of
|
||||
bond lengths, angles or other internal coordinates.
|
||||
|
||||
NOTES: This compute command does not take kinetic energy into account,
|
||||
therefore the masses of the particles should not be modified between
|
||||
the reference and perturbed states, or along the alchemical
|
||||
transformation route. This compute command does not change bond
|
||||
lengths or other internal coordinates :ref:`(Boresch, Karplus) <BoreschKarplus>`.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *pair* attribute enables various parameters of potentials defined
|
||||
by the :doc:`pair_style <pair_style>` and :doc:`pair_coeff <pair_coeff>`
|
||||
commands to be changed, if the pair style supports it.
|
||||
|
||||
The *pstyle* argument is the name of the pair style. For example,
|
||||
*pstyle* could be specified as "lj/cut". The *pparam* argument is the
|
||||
name of the parameter to change. This is a (non-exclusive) list of
|
||||
pair styles and parameters that can be used with this compute. See
|
||||
the doc pages for individual pair styles and their energy formulas for
|
||||
the meaning of these parameters:
|
||||
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut <pair_lj>` | epsilon,sigma | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut/coul/cut <pair_lj>` | epsilon,sigma | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut/coul/long <pair_lj>` | epsilon,sigma | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`coul/cut/soft <pair_lj_soft>` | lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`coul/long/soft <pair_lj_soft>` | lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut/coul/cut/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut/coul/long/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/cut/tip4p/long/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`tip4p/long/soft <pair_lj_soft>` | lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`lj/charmm/coul/long/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`born <pair_born>` | a,b,c | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
| :doc:`buck <pair_buck>` | a,c | type pairs |
|
||||
+------------------------------------------------+----------------------+------------+
|
||||
|
||||
Note that it is easy to add new potentials and their parameters to
|
||||
this list. All it typically takes is adding an extract() method to
|
||||
the pair_*.cpp file associated with the potential.
|
||||
|
||||
Similar to the :doc:`pair_coeff <pair_coeff>` command, I and J can be
|
||||
specified in one of two ways. Explicit numeric values can be used for
|
||||
each, as in the 1st example above. I <= J is required. LAMMPS sets
|
||||
the coefficients for the symmetric J,I interaction to the same
|
||||
values. A wild-card asterisk can be used in place of or in conjunction
|
||||
with the I,J arguments to set the coefficients for multiple pairs of
|
||||
atom types. This takes the form "*" or "*n" or "n*" or "m*n". If N =
|
||||
the number of atom types, then an asterisk with no numeric values
|
||||
means all types from 1 to N. A leading asterisk means all types from
|
||||
1 to n (inclusive). A trailing asterisk means all types from n to N
|
||||
(inclusive). A middle asterisk means all types from m to n
|
||||
(inclusive). Note that only type pairs with I <= J are considered; if
|
||||
asterisks imply type pairs where J < I, they are ignored.
|
||||
|
||||
If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is being
|
||||
used, then the *pstyle* will be a sub-style name. You must specify
|
||||
I,J arguments that correspond to type pair values defined (via the
|
||||
:doc:`pair_coeff <pair_coeff>` command) for that sub-style.
|
||||
|
||||
The *v_name* argument for keyword *pair* is the name of an
|
||||
:doc:`equal-style variable <variable>` which will be evaluated each time
|
||||
this compute is invoked. It should be specified as v_name, where name
|
||||
is the variable name.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *atom* attribute enables atom properties to be changed. The
|
||||
*aparam* argument is the name of the parameter to change. This is the
|
||||
current list of atom parameters that can be used with this compute:
|
||||
|
||||
* charge = charge on particle
|
||||
|
||||
The *v_name* argument for keyword *pair* is the name of an
|
||||
:doc:`equal-style variable <variable>` which will be evaluated each time
|
||||
this compute is invoked. It should be specified as v_name, where name
|
||||
is the variable name.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The *tail* keyword controls the calculation of the tail correction to
|
||||
"van der Waals" pair energies beyond the cutoff, if this has been
|
||||
activated via the :doc:`pair_modify <pair_modify>` command. If the
|
||||
perturbation is small, the tail contribution to the energy difference
|
||||
between the reference and perturbed systems should be negligible.
|
||||
|
||||
If the keyword *volume* = *yes*, then the Boltzmann term is multiplied
|
||||
by the volume so that correct ensemble averaging can be performed over
|
||||
trajectories during which the volume fluctuates or changes :ref:`(Allen and Tildesley) <AllenTildesley>`:
|
||||
|
||||
.. image:: Eqs/compute_fep_vol.jpg
|
||||
:align: center
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global vector of length 3 which contains the
|
||||
energy difference (*U*<sub>1</sub>-*U*<sub>0</sub>) as c_ID[1], the
|
||||
Boltzmann factor exp(-(*U*<sub>1</sub>-*U*<sub>0</sub>)/*kT*), or
|
||||
*V*exp(-(*U*<sub>1</sub>-*U*<sub>0</sub>)/*kT*), as c_ID[2] and the
|
||||
volume of the simulation box *V* as c_ID[3]. *U*<sub>1</sub> is the
|
||||
pair potential energy obtained with the perturbed parameters and
|
||||
*U*<sub>0</sub> is the pair potential energy obtained with the
|
||||
unperturbed parameters. The energies include kspace terms if these
|
||||
are used in the simulation.
|
||||
|
||||
These output results can be used by any command that uses a global
|
||||
scalar or vector from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options. For example, the computed values can be averaged using :doc:`fix ave/time <fix_ave_time>`.
|
||||
|
||||
The values calculated by this compute are "extensive".
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is distributed as the USER-FEP package. It is only
|
||||
enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`fix adapt/fep <fix_adapt_fep>`, :doc:`fix ave/time <fix_ave_time>`,
|
||||
`pair_lj_soft_coul_soft <pair_lj_soft_coul_soft.txt>`_
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option defaults are *tail* = *no*, *volume* = *no*.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Pearlman:
|
||||
|
||||
|
||||
|
||||
**(Pearlman)** Pearlman, J Chem Phys, 98, 1487 (1994)
|
||||
|
||||
.. _Mezei:
|
||||
|
||||
|
||||
|
||||
**(Mezei)** Mezei, J Chem Phys, 86, 7084 (1987)
|
||||
|
||||
.. _Bennet:
|
||||
|
||||
|
||||
|
||||
**(Bennet)** Bennet, J Comput Phys, 22, 245 (1976)
|
||||
|
||||
.. _BoreschKarplus:
|
||||
|
||||
|
||||
|
||||
**(BoreschKarplus)** Boresch and Karplus, J Phys Chem A, 103, 103 (1999)
|
||||
|
||||
.. _AllenTildesley:
|
||||
|
||||
|
||||
|
||||
**(AllenTildesley)** Allen and Tildesley, Computer Simulation of
|
||||
Liquids, Oxford University Press (1987)
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,144 @@
|
|||
.. index:: compute group/group
|
||||
|
||||
compute group/group command
|
||||
===========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID group/group group2-ID keyword value ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* group/group = style name of this compute command
|
||||
* group2-ID = group ID of second (or same) group
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *pair* or *kspace* or *boundary*
|
||||
.. parsed-literal::
|
||||
|
||||
*pair* value = *yes* or *no*
|
||||
*kspace* value = *yes* or *no*
|
||||
*boundary* value = *yes* or *no*
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 lower group/group upper
|
||||
compute 1 lower group/group upper kspace yes
|
||||
compute mine fluid group/group wall
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the total energy and force
|
||||
interaction between two groups of atoms: the compute group and the
|
||||
specified group2. The two groups can be the same.
|
||||
|
||||
If the *pair* keyword is set to *yes*, which is the default, then the
|
||||
the interaction energy will include a pair component which is defined
|
||||
as the pairwise energy between all pairs of atoms where one atom in
|
||||
the pair is in the first group and the other is in the second group.
|
||||
Likewise, the interaction force calculated by this compute will
|
||||
include the force on the compute group atoms due to pairwise
|
||||
interactions with atoms in the specified group2.
|
||||
|
||||
If the *kspace* keyword is set to *yes*, which is not the default, and
|
||||
if a :doc:`kspace_style <kspace_style>` is defined, then the interaction
|
||||
energy will include a Kspace component which is the long-range
|
||||
Coulombic energy between all the atoms in the first group and all the
|
||||
atoms in the 2nd group. Likewise, the interaction force calculated by
|
||||
this compute will include the force on the compute group atoms due to
|
||||
long-range Coulombic interactions with atoms in the specified group2.
|
||||
|
||||
Normally the long-range Coulombic energy converges only when the net
|
||||
charge of the unit cell is zero. However, one can assume the net
|
||||
charge of the system is neutralized by a uniform background plasma,
|
||||
and a correction to the system energy can be applied to reduce
|
||||
artifacts. For more information see :ref:`(Bogusz) <Bogusz>`. If the
|
||||
*boundary* keyword is set to *yes*, which is the default, and *kspace*
|
||||
contributions are included, then this energy correction term will be
|
||||
added to the total group-group energy. This correction term does not
|
||||
affect the force calculation and will be zero if one or both of the
|
||||
groups are charge neutral. This energy correction term is the same as
|
||||
that included in the regular Ewald and PPPM routines.
|
||||
|
||||
This compute does not calculate any bond or angle or dihedral or
|
||||
improper interactions between atoms in the two groups.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The pairwise contributions to the group-group interactions are
|
||||
calculated by looping over a neighbor list. The Kspace contribution
|
||||
to the group-group interactions require essentially the same amount of
|
||||
work (FFTs, Ewald summation) as computing long-range forces for the
|
||||
entire system. Thus it can be costly to invoke this compute too
|
||||
frequently.
|
||||
|
||||
If you desire a breakdown of the interactions into a pairwise and
|
||||
Kspace component, simply invoke the compute twice with the appropriate
|
||||
yes/no settings for the *pair* and *kspace* keywords. This is no more
|
||||
costly than using a single compute with both keywords set to *yes*.
|
||||
The individual contributions can be summed in a
|
||||
:doc:`variable <variable>` if desired.
|
||||
|
||||
This `document <PDF/kspace.pdf>`_ describes how the long-range
|
||||
group-group calculations are performed.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the energy) and a global
|
||||
vector of length 3 (force), which can be accessed by indices 1-3.
|
||||
These values can be used by any command that uses global scalar or
|
||||
vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
Both the scalar and vector values calculated by this compute are
|
||||
"extensive". The scalar value will be in energy :doc:`units <units>`.
|
||||
The vector values will be in force :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
Not all pair styles can be evaluated in a pairwise mode as required by
|
||||
this compute. For example, 3-body and other many-body potentials,
|
||||
such as :doc:`Tersoff <pair_tersoff>` and
|
||||
:doc:`Stillinger-Weber <pair_sw>` cannot be used. :doc:`EAM <pair_eam>`
|
||||
potentials only include the pair potential portion of the EAM
|
||||
interaction when used by this compute, not the embedding term.
|
||||
|
||||
Not all Kspace styles support calculation of group/group interactions.
|
||||
The *ewald* and *pppm* styles do.
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option defaults are pair = yes, kspace = no, and boundary = yes.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Bogusz:
|
||||
|
||||
|
||||
|
||||
Bogusz et al, J Chem Phys, 108, 7070 (1998)
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,83 @@
|
|||
.. index:: compute gyration
|
||||
|
||||
compute gyration command
|
||||
========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID gyration
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* gyration = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 molecule gyration
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the radius of gyration Rg of the
|
||||
group of atoms, including all effects due to atoms passing thru
|
||||
periodic boundaries.
|
||||
|
||||
Rg is a measure of the size of the group of atoms, and is computed as
|
||||
the square root of the Rg^2 value in this formula
|
||||
|
||||
.. image:: Eqs/compute_gyration.jpg
|
||||
:align: center
|
||||
|
||||
where M is the total mass of the group, Rcm is the center-of-mass
|
||||
position of the group, and the sum is over all atoms in the group.
|
||||
|
||||
A Rg^2 tensor, stored as a 6-element vector, is also calculated by
|
||||
this compute. The formula for the components of the tensor is the
|
||||
same as the above formula, except that (Ri - Rcm)^2 is replaced by
|
||||
(Rix - Rcmx) * (Riy - Rcmy) for the xy component, etc. The 6
|
||||
components of the vector are ordered xx, yy, zz, xy, xz, yz. Note
|
||||
that unlike the scalar Rg, each of the 6 values of the tensor is
|
||||
effectively a "squared" value, since the cross-terms may be negative
|
||||
and taking a sqrt() would be invalid.
|
||||
|
||||
.. note::
|
||||
|
||||
The coordinates of an atom contribute to Rg 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 compute by
|
||||
using the :doc:`set image <set>` command.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (Rg) and a global vector of
|
||||
length 6 (Rg^2 tensor), which can be accessed by indices 1-6. These
|
||||
values can be used by any command that uses a global scalar value or
|
||||
vector values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The scalar and vector values calculated by this compute are
|
||||
"intensive". The scalar and vector values will be in distance and
|
||||
distance^2 :doc:`units <units>` respectively.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute gyration/chunk <compute_gyration_chunk>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,122 @@
|
|||
.. index:: compute gyration/chunk
|
||||
|
||||
compute gyration/chunk command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID gyration/chunk chunkID keyword value ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* gyration/chunk = style name of this compute command
|
||||
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *tensor*
|
||||
.. parsed-literal::
|
||||
|
||||
*tensor* value = none
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 molecule gyration/chunk molchunk
|
||||
compute 2 molecule gyration/chunk molchunk tensor
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the radius of gyration Rg for
|
||||
multiple chunks of atoms.
|
||||
|
||||
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
|
||||
to a single chunk (or no chunk). The ID for this command is specified
|
||||
as chunkID. For example, a single chunk could be the atoms in a
|
||||
molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
|
||||
defined and examples of how they can be used to measure properties of
|
||||
a system.
|
||||
|
||||
This compute calculates the radius of gyration Rg for each chunk,
|
||||
which includes all effects due to atoms passing thru periodic
|
||||
boundaries.
|
||||
|
||||
Rg is a measure of the size of a chunk, and is computed by this
|
||||
formula
|
||||
|
||||
.. image:: Eqs/compute_gyration.jpg
|
||||
:align: center
|
||||
|
||||
where M is the total mass of the chunk, Rcm is the center-of-mass
|
||||
position of the chunk, and the sum is over all atoms in the
|
||||
chunk.
|
||||
|
||||
Note that only atoms in the specified group contribute to the
|
||||
calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
defines its own group; atoms will have a chunk ID = 0 if they are not
|
||||
in that group, signifying they are not assigned to a chunk, and will
|
||||
thus also not contribute to this calculation. You can specify the
|
||||
"all" group for this command if you simply want to include atoms with
|
||||
non-zero chunk IDs.
|
||||
|
||||
If the *tensor* keyword is specified, then the scalar Rg value is not
|
||||
calculated, but an Rg tensor is instead calculated for each chunk.
|
||||
The formula for the components of the tensor is the same as the above
|
||||
formula, except that (Ri - Rcm)^2 is replaced by (Rix - Rcmx) * (Riy -
|
||||
Rcmy) for the xy component, etc. The 6 components of the tensor are
|
||||
ordered xx, yy, zz, xy, xz, yz.
|
||||
|
||||
.. note::
|
||||
|
||||
The coordinates of an atom contribute to Rg 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 compute by
|
||||
using the :doc:`set image <set>` command.
|
||||
|
||||
The simplest way to output the results of the compute gyration/chunk
|
||||
calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
|
||||
command, for example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute cc1 all chunk/atom molecule
|
||||
compute myChunk all gyration/chunk cc1
|
||||
fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global vector if the *tensor* keyword is not
|
||||
specified and a global array if it is. The length of the vector or
|
||||
number of rows in the array = the number of chunks *Nchunk* as
|
||||
calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. If the *tensor* keyword
|
||||
is specified, the global array has 6 columns. The vector or array can
|
||||
be accessed by any command that uses global values from a compute as
|
||||
input. See :ref:`this section <howto_15>` for an overview
|
||||
of LAMMPS output options.
|
||||
|
||||
All the vector or array values calculated by this compute are
|
||||
"intensive". The vector or array values will be in distance
|
||||
:doc:`units <units>`, since they are the square root of values
|
||||
represented by the formula above.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
:doc:`compute gyration <compute_gyration>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,225 @@
|
|||
.. index:: compute heat/flux
|
||||
|
||||
compute heat/flux command
|
||||
=========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID heat/flux ke-ID pe-ID stress-ID
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* heat/flux = style name of this compute command
|
||||
* ke-ID = ID of a compute that calculates per-atom kinetic energy
|
||||
* pe-ID = ID of a compute that calculates per-atom potential energy
|
||||
* stress-ID = ID of a compute that calculates per-atom stress
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute myFlux all heat/flux myKE myPE myStress
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the heat flux vector based on
|
||||
contributions from atoms in the specified group. This can be used by
|
||||
itself to measure the heat flux into or out of a reservoir of atoms,
|
||||
or to calculate a thermal conductivity using the Green-Kubo formalism.
|
||||
|
||||
See the :doc:`fix thermal/conductivity <fix_thermal_conductivity>`
|
||||
command for details on how to compute thermal conductivity in an
|
||||
alternate way, via the Muller-Plathe method. See the :doc:`fix heat <fix_heat>` command for a way to control the heat added or
|
||||
subtracted to a group of atoms.
|
||||
|
||||
The compute takes three arguments which are IDs of other
|
||||
:doc:`computes <compute>`. One calculates per-atom kinetic energy
|
||||
(*ke-ID*), one calculates per-atom potential energy (*pe-ID)*, and the
|
||||
third calcualtes per-atom stress (*stress-ID*). These should be
|
||||
defined for the same group used by compute heat/flux, though LAMMPS
|
||||
does not check for this.
|
||||
|
||||
The Green-Kubo formulas relate the ensemble average of the
|
||||
auto-correlation of the heat flux J to the thermal conductivity kappa:
|
||||
|
||||
.. image:: Eqs/heat_flux_J.jpg
|
||||
:align: center
|
||||
|
||||
.. image:: Eqs/heat_flux_k.jpg
|
||||
:align: center
|
||||
|
||||
Ei in the first term of the equation for J is the per-atom energy
|
||||
(potential and kinetic). This is calculated by the computes *ke-ID*
|
||||
and *pe-ID*. Si in the second term of the equation for J is the
|
||||
per-atom stress tensor calculated by the compute *stress-ID*. The
|
||||
tensor multiplies Vi as a 3x3 matrix-vector multiply to yield a
|
||||
vector. Note that as discussed below, the 1/V scaling factor in the
|
||||
equation for J is NOT included in the calculation performed by this
|
||||
compute; you need to add it for a volume appropriate to the atoms
|
||||
included in the calculation.
|
||||
|
||||
.. note::
|
||||
|
||||
The :doc:`compute pe/atom <compute_pe_atom>` and :doc:`compute stress/atom <compute_stress_atom>` commands have options for which
|
||||
terms to include in their calculation (pair, bond, etc). The heat
|
||||
flux calculation will thus include exactly the same terms. Normally
|
||||
you should use :doc:`compute stress/atom virial <compute_stress_atom>`
|
||||
so as not to include a kinetic energy term in the heat flux.
|
||||
|
||||
This compute calculates 6 quantities and stores them in a 6-component
|
||||
vector. The first 3 components are the x, y, z components of the full
|
||||
heat flux vector, i.e. (Jx, Jy, Jz). The next 3 components are the x,
|
||||
y, z components of just the convective portion of the flux, i.e. the
|
||||
first term in the equation for J above.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The heat flux can be output every so many timesteps (e.g. via the
|
||||
:doc:`thermo_style custom <thermo_style>` command). Then as a
|
||||
post-processing operation, an autocorrelation can be performed, its
|
||||
integral estimated, and the Green-Kubo formula above evaluated.
|
||||
|
||||
The :doc:`fix ave/correlate <fix_ave_correlate>` command can calclate
|
||||
the autocorrelation. The trap() function in the
|
||||
:doc:`variable <variable>` command can calculate the integral.
|
||||
|
||||
An example LAMMPS input script for solid Ar is appended below. The
|
||||
result should be: average conductivity ~0.29 in W/mK.
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global vector of length 6 (total heat flux
|
||||
vector, followed by convective heat flux vector), which can be
|
||||
accessed by indices 1-6. These values can be used by any command that
|
||||
uses global vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The vector values calculated by this compute are "extensive", meaning
|
||||
they scale with the number of atoms in the simulation. They can be
|
||||
divided by the appropriate volume to get a flux, which would then be
|
||||
an "intensive" value, meaning independent of the number of atoms in
|
||||
the simulation. Note that if the compute is "all", then the
|
||||
appropriate volume to divide by is the simulation box volume.
|
||||
However, if a sub-group is used, it should be the volume containing
|
||||
those atoms.
|
||||
|
||||
The vector values will be in energy*velocity :doc:`units <units>`. Once
|
||||
divided by a volume the units will be that of flux, namely
|
||||
energy/area/time :doc:`units <units>`
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`fix thermal/conductivity <fix_thermal_conductivity>`,
|
||||
:doc:`fix ave/correlate <fix_ave_correlate>`,
|
||||
:doc:`variable <variable>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# Sample LAMMPS input script for thermal conductivity of solid Ar
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
units real
|
||||
variable T equal 70
|
||||
variable V equal vol
|
||||
variable dt equal 4.0
|
||||
variable p equal 200 # correlation length
|
||||
variable s equal 10 # sample interval
|
||||
variable d equal $p*$s # dump interval
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# convert from LAMMPS real units to SI
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
variable kB equal 1.3806504e-23 # [J/K] Boltzmann
|
||||
variable kCal2J equal 4186.0/6.02214e23
|
||||
variable A2m equal 1.0e-10
|
||||
variable fs2s equal 1.0e-15
|
||||
variable convert equal ${kCal2J}*${kCal2J}/${fs2s}/${A2m}
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# setup problem
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
dimension 3
|
||||
boundary p p p
|
||||
lattice fcc 5.376 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1
|
||||
region box block 0 4 0 4 0 4
|
||||
create_box 1 box
|
||||
create_atoms 1 box
|
||||
mass 1 39.948
|
||||
pair_style lj/cut 13.0
|
||||
pair_coeff * * 0.2381 3.405
|
||||
timestep ${dt}
|
||||
thermo $d
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# equilibration and thermalization
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
velocity all create $T 102486 mom yes rot yes dist gaussian
|
||||
fix NVT all nvt temp $T $T 10 drag 0.2
|
||||
run 8000
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
# thermal conductivity calculation, switch to NVE if desired
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
#unfix NVT
|
||||
#fix NVE all nve
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
reset_timestep 0
|
||||
compute myKE all ke/atom
|
||||
compute myPE all pe/atom
|
||||
compute myStress all stress/atom NULL virial
|
||||
compute flux all heat/flux myKE myPE myStress
|
||||
variable Jx equal c_flux[1]/vol
|
||||
variable Jy equal c_flux[2]/vol
|
||||
variable Jz equal c_flux[3]/vol
|
||||
fix JJ all ave/correlate $s $p $d &
|
||||
c_flux[1] c_flux[2] c_flux[3] type auto file J0Jt.dat ave running
|
||||
variable scale equal ${convert}/${kB}/$T/$T/$V*$s*${dt}
|
||||
variable k11 equal trap(f_JJ[3])*${scale}
|
||||
variable k22 equal trap(f_JJ[4])*${scale}
|
||||
variable k33 equal trap(f_JJ[5])*${scale}
|
||||
thermo_style custom step temp v_Jx v_Jy v_Jz v_k11 v_k22 v_k33
|
||||
run 100000
|
||||
variable k equal (v_k11+v_k22+v_k33)/3.0
|
||||
variable ndens equal count(all)/vol
|
||||
print "average conductivity: $k[W/mK] @ $T K, ${ndens} /A^3"
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,136 @@
|
|||
.. index:: compute hexorder/atom
|
||||
|
||||
compute hexorder/atom command
|
||||
=============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID hexorder/atom keyword values ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* hexorder/atom = style name of this compute command
|
||||
* one or more keyword/value pairs may be appended
|
||||
.. parsed-literal::
|
||||
|
||||
keyword = *degree* or *nnn* or *cutoff*
|
||||
*cutoff* value = distance cutoff
|
||||
*nnn* value = number of nearest neighbors
|
||||
*degree* value = degree *n* of order parameter
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all hexorder/atom
|
||||
compute 1 all hexorder/atom degree 4 nnn 4 cutoff 1.2
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates *qn* the bond-orientational
|
||||
order parameter for each atom in a group. The hexatic (*n* = 6) order
|
||||
parameter was introduced by :ref:`Nelson and Halperin <Nelson>` as a way to detect
|
||||
hexagonal symmetry in two-dimensional systems. For each atom, *qn*
|
||||
is a complex number (stored as two real numbers) defined as follows:
|
||||
|
||||
.. image:: Eqs/hexorder.jpg
|
||||
:align: center
|
||||
|
||||
where the sum is over the *nnn* nearest neighbors
|
||||
of the central atom. The angle theta
|
||||
is formed by the bond vector rij and the *x* axis. theta is calculated
|
||||
only using the *x* and *y* components, whereas the distance from the
|
||||
central atom is calculated using all three
|
||||
*x*, *y*, and *z* components of the bond vector.
|
||||
Neighbor atoms not in the group
|
||||
are included in the order parameter of atoms in the group.
|
||||
|
||||
The optional keyword *cutoff* defines the distance cutoff
|
||||
used when searching for neighbors. The default value, also
|
||||
the maximum allowable value, is the cutoff specified
|
||||
by the pair style.
|
||||
|
||||
The optional keyword *nnn* defines the number of nearest
|
||||
neighbors used to calculate *qn*. The default value is 6.
|
||||
If the value is NULL, then all neighbors up to the
|
||||
distance cutoff are used.
|
||||
|
||||
The optional keyword *degree* sets the degree *n* of the order parameter.
|
||||
The default value is 6. For a perfect hexagonal lattice with
|
||||
*nnn* = 6,
|
||||
*q*6 = exp(6 i phi) for all atoms, where the constant 0 < phi < pi/3
|
||||
depends only on the orientation of the lattice relative to the *x* axis.
|
||||
In an isotropic liquid, local neighborhoods may still exhibit
|
||||
weak hexagonal symmetry, but because the orientational correlation
|
||||
decays quickly with distance, the value of phi will be different for
|
||||
different atoms, and so when *q*6 is averaged over all the atoms
|
||||
in the system, |<*q*6>| << 1.
|
||||
|
||||
The value of *qn* is set to zero for atoms not in the
|
||||
specified compute group, as well as for atoms that have less than
|
||||
*nnn* neighbors within the distance cutoff.
|
||||
|
||||
The neighbor list needed to compute this quantity is constructed each
|
||||
time the calculation is performed (i.e. each time a snapshot of atoms
|
||||
is dumped). Thus it can be inefficient to compute/dump this quantity
|
||||
too frequently.
|
||||
|
||||
.. note::
|
||||
|
||||
If you have a bonded system, then the settings of
|
||||
:doc:`special_bonds <special_bonds>` command can remove pairwise
|
||||
interactions between atoms in the same bond, angle, or dihedral. This
|
||||
is the default setting for the :doc:`special_bonds <special_bonds>`
|
||||
command, and means those pairwise interactions do not appear in the
|
||||
neighbor list. Because this fix uses the neighbor list, it also means
|
||||
those pairs will not be included in the order parameter. This
|
||||
difficulty can be circumvented by writing a dump file, and using the
|
||||
:doc:`rerun <rerun>` command to compute the order parameter for
|
||||
snapshots in the dump file. The rerun script can use a
|
||||
:doc:`special_bonds <special_bonds>` command that includes all pairs in
|
||||
the neighbor list.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom array with 2 columns, giving the
|
||||
real and imaginary parts *qn*, a complex number restricted to the
|
||||
unit disk of the complex plane i.e. Re(*qn*)^2 + Im(*qn*)^2 <= 1 .
|
||||
|
||||
These values can be accessed by any command that uses
|
||||
per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute orientorder/atom <compute_orientorder_atom>`, :doc:`compute coord/atom <compute_coord_atom>`, :doc:`compute centro/atom <compute_centro_atom>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option defaults are *cutoff* = pair style cutoff, *nnn* = 6, *degree* = 6
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _Nelson:
|
||||
|
||||
|
||||
|
||||
**(Nelson)** Nelson, Halperin, Phys Rev B, 19, 2457 (1979).
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,79 @@
|
|||
.. index:: compute improper/local
|
||||
|
||||
compute improper/local command
|
||||
==============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID improper/local input1 input2 ...
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* improper/local = style name of this compute command
|
||||
* one or more keywords may be appended
|
||||
* keyword = *chi*
|
||||
.. parsed-literal::
|
||||
|
||||
*chi* = tabulate improper angles
|
||||
|
||||
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all improper/local chi
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates properties of individual improper
|
||||
interactions. The number of datums generated, aggregated across all
|
||||
processors, equals the number of impropers in the system, modified by
|
||||
the group parameter as explained below.
|
||||
|
||||
The local data stored by this command is generated by looping over all
|
||||
the atoms owned on a processor and their impropers. An improper will
|
||||
only be included if all 4 atoms in the improper are in the specified
|
||||
compute group.
|
||||
|
||||
Note that as atoms migrate from processor to processor, there will be
|
||||
no consistent ordering of the entries within the local vector or array
|
||||
from one timestep to the next. The only consistency that is
|
||||
guaranteed is that the ordering on a particular timestep will be the
|
||||
same for local vectors or arrays generated by other compute commands.
|
||||
For example, improper output from the :doc:`compute property/local <compute_property_local>` command can be combined
|
||||
with data from this command and output by the :doc:`dump local <dump>`
|
||||
command in a consistent way.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a local vector or local array depending on the
|
||||
number of keywords. The length of the vector or number of rows in the
|
||||
array is the number of impropers. If a single keyword is specified, a
|
||||
local vector is produced. If two or more keywords are specified, a
|
||||
local array is produced where the number of columns = the number of
|
||||
keywords. The vector or array can be accessed by any command that
|
||||
uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The output for *chi* will be in degrees.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,96 @@
|
|||
.. index:: compute inertia/chunk
|
||||
|
||||
compute inertia/chunk command
|
||||
=============================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID inertia/chunk chunkID
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* inertia/chunk = style name of this compute command
|
||||
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 fluid inertia/chunk molchunk
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the inertia tensor for multiple
|
||||
chunks of atoms.
|
||||
|
||||
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
|
||||
to a single chunk (or no chunk). The ID for this command is specified
|
||||
as chunkID. For example, a single chunk could be the atoms in a
|
||||
molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
|
||||
defined and examples of how they can be used to measure properties of
|
||||
a system.
|
||||
|
||||
This compute calculates the 6 components of the symmetric intertia
|
||||
tensor for each chunk, ordered Ixx,Iyy,Izz,Ixy,Iyz,Ixz. The
|
||||
calculation includes all effects due to atoms passing thru periodic
|
||||
boundaries.
|
||||
|
||||
Note that only atoms in the specified group contribute to the
|
||||
calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
defines its own group; atoms will have a chunk ID = 0 if they are not
|
||||
in that group, signifying they are not assigned to a chunk, and will
|
||||
thus also not contribute to this calculation. You can specify the
|
||||
"all" group for this command if you simply want to include atoms with
|
||||
non-zero chunk IDs.
|
||||
|
||||
.. note::
|
||||
|
||||
The coordinates of an atom contribute to the chunk's inertia
|
||||
tensor 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 compute by using the :doc:`set image <set>` command.
|
||||
|
||||
The simplest way to output the results of the compute inertia/chunk
|
||||
calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
|
||||
command, for example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute cc1 all chunk/atom molecule
|
||||
compute myChunk all inertia/chunk cc1
|
||||
fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global array where the number of rows = the
|
||||
number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
|
||||
6 for the 6 components of the inertia tensor for each chunk, ordered
|
||||
as listed above. These values can be accessed by any command that
|
||||
uses global array values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The array values are "intensive". The array values will be in
|
||||
mass*distance^2 :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`variable inertia() function <variable>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,69 @@
|
|||
.. index:: compute ke
|
||||
|
||||
compute ke command
|
||||
==================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID ke
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* ke = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all ke
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the translational kinetic energy
|
||||
of a group of particles.
|
||||
|
||||
The kinetic energy of each particle is computed as 1/2 m v^2, where m
|
||||
and v are the mass and velocity of the particle.
|
||||
|
||||
There is a subtle difference between the quantity calculated by this
|
||||
compute and the kinetic energy calculated by the *ke* or *etotal*
|
||||
keyword used in thermodynamic output, as specified by the
|
||||
:doc:`thermo_style <thermo_style>` command. For this compute, kinetic
|
||||
energy is "translational" kinetic energy, calculated by the simple
|
||||
formula above. For thermodynamic output, the *ke* keyword infers
|
||||
kinetic energy from the temperature of the system with 1/2 Kb T of
|
||||
energy for each degree of freedom. For the default temperature
|
||||
computation via the :doc:`compute temp <compute_temp>` command, these
|
||||
are the same. But different computes that calculate temperature can
|
||||
subtract out different non-thermal components of velocity and/or
|
||||
include different degrees of freedom (translational, rotational, etc).
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the summed KE). This value
|
||||
can be used by any command that uses a global scalar value from a
|
||||
compute as input. See :ref:`Section_howto 15 <howto_15>`
|
||||
for an overview of LAMMPS output options.
|
||||
|
||||
The scalar value calculated by this compute is "extensive". The
|
||||
scalar value will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute erotate/sphere <compute_erotate_sphere>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,58 @@
|
|||
.. index:: compute ke/atom
|
||||
|
||||
compute ke/atom command
|
||||
=======================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID ke/atom
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* ke/atom = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all ke/atom
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the per-atom translational
|
||||
kinetic energy for each atom in a group.
|
||||
|
||||
The kinetic energy is simply 1/2 m v^2, where m is the mass and v is
|
||||
the velocity of each atom.
|
||||
|
||||
The value of the kinetic energy will be 0.0 for atoms not in the
|
||||
specified compute group.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a per-atom vector, which can be accessed by
|
||||
any command that uses per-atom values from a compute as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
none
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump custom <dump>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,88 @@
|
|||
.. index:: compute ke/atom/eff
|
||||
|
||||
compute ke/atom/eff command
|
||||
===========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID ke/atom/eff
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* ke/atom/eff = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all ke/atom/eff
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the per-atom translational
|
||||
(nuclei and electrons) and radial kinetic energy (electron only) in a
|
||||
group. The particles are assumed to be nuclei and electrons modeled
|
||||
with the :doc:`electronic force field <pair_eff>`.
|
||||
|
||||
The kinetic energy for each nucleus is computed as 1/2 m v^2, where m
|
||||
corresponds to the corresponding nuclear mass, and the kinetic energy
|
||||
for each electron is computed as 1/2 (me v^2 + 3/4 me s^2), where me
|
||||
and v correspond to the mass and translational velocity of each
|
||||
electron, and s to its radial velocity, respectively.
|
||||
|
||||
There is a subtle difference between the quantity calculated by this
|
||||
compute and the kinetic energy calculated by the *ke* or *etotal*
|
||||
keyword used in thermodynamic output, as specified by the
|
||||
:doc:`thermo_style <thermo_style>` command. For this compute, kinetic
|
||||
energy is "translational" plus electronic "radial" kinetic energy,
|
||||
calculated by the simple formula above. For thermodynamic output, the
|
||||
*ke* keyword infers kinetic energy from the temperature of the system
|
||||
with 1/2 Kb T of energy for each (nuclear-only) degree of freedom in
|
||||
eFF.
|
||||
|
||||
.. note::
|
||||
|
||||
The temperature in eFF should be monitored via the :doc:`compute temp/eff <compute_temp_eff>` command, which can be printed with
|
||||
thermodynamic output by using the :doc:`thermo_modify <thermo_modify>`
|
||||
command, as shown in the following example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute effTemp all temp/eff
|
||||
thermo_style custom step etotal pe ke temp press
|
||||
thermo_modify temp effTemp
|
||||
|
||||
The value of the kinetic energy will be 0.0 for atoms (nuclei or
|
||||
electrons) not in the specified compute group.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a scalar quantity for each atom, which can be
|
||||
accessed by any command that uses per-atom computes as input. See
|
||||
:ref:`Section_howto 15 <howto_15>` for an overview of
|
||||
LAMMPS output options.
|
||||
|
||||
The per-atom vector values will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the USER-EFF package. It is only enabled if
|
||||
LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`dump custom <dump>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,87 @@
|
|||
.. index:: compute ke/eff
|
||||
|
||||
compute ke/eff command
|
||||
======================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID ke/eff
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* ke/eff = style name of this compute command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all ke/eff
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the kinetic energy of motion of a
|
||||
group of eFF particles (nuclei and electrons), as modeled with the
|
||||
:doc:`electronic force field <pair_eff>`.
|
||||
|
||||
The kinetic energy for each nucleus is computed as 1/2 m v^2 and the
|
||||
kinetic energy for each electron is computed as 1/2(me v^2 + 3/4 me
|
||||
s^2), where m corresponds to the nuclear mass, me to the electron
|
||||
mass, v to the translational velocity of each particle, and s to the
|
||||
radial velocity of the electron, respectively.
|
||||
|
||||
There is a subtle difference between the quantity calculated by this
|
||||
compute and the kinetic energy calculated by the *ke* or *etotal*
|
||||
keyword used in thermodynamic output, as specified by the
|
||||
:doc:`thermo_style <thermo_style>` command. For this compute, kinetic
|
||||
energy is "translational" and "radial" (only for electrons) kinetic
|
||||
energy, calculated by the simple formula above. For thermodynamic
|
||||
output, the *ke* keyword infers kinetic energy from the temperature of
|
||||
the system with 1/2 Kb T of energy for each degree of freedom. For
|
||||
the eFF temperature computation via the :doc:`compute temp_eff <compute_temp_eff>` command, these are the same. But
|
||||
different computes that calculate temperature can subtract out
|
||||
different non-thermal components of velocity and/or include other
|
||||
degrees of freedom.
|
||||
|
||||
IMPRORTANT NOTE: The temperature in eFF models should be monitored via
|
||||
the :doc:`compute temp/eff <compute_temp_eff>` command, which can be
|
||||
printed with thermodynamic output by using the
|
||||
:doc:`thermo_modify <thermo_modify>` command, as shown in the following
|
||||
example:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute effTemp all temp/eff
|
||||
thermo_style custom step etotal pe ke temp press
|
||||
thermo_modify temp effTemp
|
||||
|
||||
See :doc:`compute temp/eff <compute_temp_eff>`.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the KE). This value can be
|
||||
used by any command that uses a global scalar value from a compute as
|
||||
input. See :ref:`Section_howto 15 <howto_15>` for an
|
||||
overview of LAMMPS output options.
|
||||
|
||||
The scalar value calculated by this compute is "extensive". The
|
||||
scalar value will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the USER-EFF package. It is only enabled if
|
||||
LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
**Related commands:** none
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
|
@ -0,0 +1,67 @@
|
|||
.. index:: compute ke/rigid
|
||||
|
||||
compute ke/rigid command
|
||||
========================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute ID group-ID ke/rigid fix-ID
|
||||
|
||||
* ID, group-ID are documented in :doc:`compute <compute>` command
|
||||
* ke = style name of this compute command
|
||||
* fix-ID = ID of rigid body fix
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
compute 1 all ke/rigid myRigid
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Define a computation that calculates the translational kinetic energy
|
||||
of a collection of rigid bodies, as defined by one of the :doc:`fix rigid <fix_rigid>` command variants.
|
||||
|
||||
The kinetic energy of each rigid body is computed as 1/2 M Vcm^2,
|
||||
where M is the total mass of the rigid body, and Vcm is its
|
||||
center-of-mass velocity.
|
||||
|
||||
The *fix-ID* should be the ID of one of the :doc:`fix rigid <fix_rigid>`
|
||||
commands which defines the rigid bodies. The group specified in the
|
||||
compute command is ignored. The kinetic energy of all the rigid
|
||||
bodies defined by the fix rigid command in included in the
|
||||
calculation.
|
||||
|
||||
**Output info:**
|
||||
|
||||
This compute calculates a global scalar (the summed KE of all the
|
||||
rigid bodies). This value can be used by any command that uses a
|
||||
global scalar value from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
|
||||
options.
|
||||
|
||||
The scalar value calculated by this compute is "extensive". The
|
||||
scalar value will be in energy :doc:`units <units>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
|
||||
This compute is part of the RIGID package. It is only enabled if
|
||||
LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`compute erotate/rigid <compute_erotate_rigid>`
|
||||
|
||||
**Default:** none
|
||||
|
||||
|
||||
.. _lws: http://lammps.sandia.gov
|
||||
.. _ld: Manual.html
|
||||
.. _lc: Section_commands.html#comm
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue