Merge branch 'develop' into type-labels

This commit is contained in:
Axel Kohlmeyer
2022-09-09 16:31:38 -04:00
121 changed files with 51653 additions and 1544 deletions

View File

@ -6,10 +6,13 @@ else()
endif() endif()
option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an already installed one" ${DOWNLOAD_MDI_DEFAULT}) option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an already installed one" ${DOWNLOAD_MDI_DEFAULT})
if(DOWNLOAD_MDI) if(DOWNLOAD_MDI)
message(STATUS "MDI download requested - we will build our own") message(STATUS "MDI download requested - we will build our own")
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.1.tar.gz" CACHE STRING "URL for MDI tarball") set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.10.tar.gz" CACHE STRING "URL for MDI tarball")
set(MDI_MD5 "f9505fccd4c79301a619f6452dad4ad9" CACHE STRING "MD5 checksum for MDI tarball") set(MDI_MD5 "1c203b7fd462d9934834f643f09f3c06" CACHE STRING "MD5 checksum for MDI tarball")
mark_as_advanced(MDI_URL) mark_as_advanced(MDI_URL)
mark_as_advanced(MDI_MD5) mark_as_advanced(MDI_MD5)
enable_language(C) enable_language(C)

View File

@ -6,7 +6,7 @@ page. The accelerated styles take the same arguments and should
produce the same results, except for round-off and precision issues. produce the same results, except for round-off and precision issues.
These accelerated styles are part of the GPU, INTEL, KOKKOS, These accelerated styles are part of the GPU, INTEL, KOKKOS,
OPENMP and OPT packages, respectively. They are only enabled if OPENMP, and OPT packages, respectively. They are only enabled if
LAMMPS was built with those packages. See the :doc:`Build package <Build_package>` page for more info. LAMMPS was built with those packages. See the :doc:`Build package <Build_package>` page for more info.
You can specify the accelerated styles explicitly in your input script You can specify the accelerated styles explicitly in your input script

View File

@ -55,24 +55,24 @@ dump command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
dump ID group-ID style N file args dump ID group-ID style N file args
* ID = user-assigned name for the dump * ID = user-assigned name for the dump
* group-ID = ID of the group of atoms to be dumped * group-ID = ID of the group of atoms to be dumped
* style = *atom* or *atom/gz* or *atom/zstd* or *atom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *dcd* or *h5md* or *image* or *local* or *local/gz* or *local/zstd* or *molfile* or *movie* or *netcdf* or *netcdf/mpiio* or *vtk* or *xtc* or *xyz* or *xyz/gz* or *xyz/zstd* or *xyz/mpiio* or *yaml* * style = *atom* or *atom/adios* or *atom/gz* or *atom/zstd* or *atom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *custom/adios* or *dcd* or *h5md* or *image* or *local* or *local/gz* or *local/zstd* or *molfile* or *movie* or *netcdf* or *netcdf/mpiio* or *vtk* or *xtc* or *xyz* or *xyz/gz* or *xyz/zstd* or *xyz/mpiio* or *yaml*
* N = dump on timesteps which are a multiple of N * N = dump on timesteps which are multiples of N
* file = name of file to write dump info to * file = name of file to write dump info to
* args = list of arguments for a particular style * args = list of arguments for a particular style
.. parsed-literal:: .. parsed-literal::
*atom* args = none *atom* args = none
*atom/adios* args = none, discussed on :doc:`dump atom/adios <dump_adios>` page
*atom/gz* args = none *atom/gz* args = none
*atom/zstd* args = none *atom/zstd* args = none
*atom/mpiio* args = none *atom/mpiio* args = none
*atom/adios* args = none, discussed on :doc:`dump atom/adios <dump_adios>` page
*cfg* args = same as *custom* args, see below *cfg* args = same as *custom* args, see below
*cfg/gz* args = same as *custom* args, see below *cfg/gz* args = same as *custom* args, see below
*cfg/zstd* args = same as *custom* args, see below *cfg/zstd* args = same as *custom* args, see below
@ -224,7 +224,7 @@ page for details.
The *atom/gz*, *cfg/gz*, *custom/gz*, *local/gz*, and *xyz/gz* styles The *atom/gz*, *cfg/gz*, *custom/gz*, *local/gz*, and *xyz/gz* styles
are identical in command syntax to the corresponding styles without are identical in command syntax to the corresponding styles without
"gz", however, they generate compressed files using the zlib "gz," however, they generate compressed files using the zlib
library. Thus the filename suffix ".gz" is mandatory. This is an library. Thus the filename suffix ".gz" is mandatory. This is an
alternative approach to writing compressed files via a pipe, as done alternative approach to writing compressed files via a pipe, as done
by the regular dump styles, which may be required on clusters where by the regular dump styles, which may be required on clusters where
@ -288,13 +288,13 @@ where xlo,xhi are the maximum extents of the simulation box in the
:math:`x`-dimension, and similarly for :math:`y` and :math:`z`. The :math:`x`-dimension, and similarly for :math:`y` and :math:`z`. The
"xx yy zz" terms are six characters that encode the style of boundary for each "xx yy zz" terms are six characters that encode the style of boundary for each
of the six simulation box boundaries (xlo,xhi; ylo,yhi; and zlo,zhi). Each of of the six simulation box boundaries (xlo,xhi; ylo,yhi; and zlo,zhi). Each of
the six characters is either p (periodic), f (fixed), s (shrink wrap), the six characters is one of *p* (periodic), *f* (fixed), *s* (shrink wrap),
or m (shrink wrapped with a minimum value). See the or *m* (shrink wrapped with a minimum value). See the
:doc:`boundary <boundary>` command for details. :doc:`boundary <boundary>` command for details.
For triclinic simulation boxes (non-orthogonal), an orthogonal For triclinic simulation boxes (non-orthogonal), an orthogonal
bounding box which encloses the triclinic simulation box is output, bounding box which encloses the triclinic simulation box is output,
along with the 3 tilt factors (*xy*, *xz*, *yz*) of the triclinic box, along with the three tilt factors (*xy*, *xz*, *yz*) of the triclinic box,
formatted as follows: formatted as follows:
.. parsed-literal:: .. parsed-literal::
@ -333,8 +333,8 @@ added for each atom via dump_modify.
Style *custom* allows you to specify a list of atom attributes to be Style *custom* allows you to specify a list of atom attributes to be
written to the dump file for each atom. Possible attributes are written to the dump file for each atom. Possible attributes are
listed above and will appear in the order specified. You cannot listed above and will appear in the order specified. You cannot
specify a quantity that is not defined for a particular simulation - specify a quantity that is not defined for a particular simulation---such as
such as *q* for atom style *bond*, since that atom style does not *q* for atom style *bond*, since that atom style does not
assign charges. Dumps occur at the very end of a timestep, so atom assign charges. Dumps occur at the very end of a timestep, so atom
attributes will include effects due to fixes that are applied during attributes will include effects due to fixes that are applied during
the timestep. An explanation of the possible dump custom attributes the timestep. An explanation of the possible dump custom attributes
@ -575,7 +575,7 @@ files. You can use the ".bin" or ".lammpsbin" suffix described below in an
MPI-IO dump file; again this file will be written in parallel and have the MPI-IO dump file; again this file will be written in parallel and have the
same binary format as if it were written without MPI-IO. same binary format as if it were written without MPI-IO.
If the filename ends with ".bin" or ".lammpsbin", the dump file (or files, if If the filename ends with ".bin" or ".lammpsbin," the dump file (or files, if
"\*" or "%" is also used) is written in binary format. A binary dump file "\*" or "%" is also used) is written in binary format. A binary dump file
will be about the same size as a text version, but will typically will be about the same size as a text version, but will typically
write out much faster. Of course, when post-processing, you will need write out much faster. Of course, when post-processing, you will need
@ -584,7 +584,7 @@ write your own code to read the binary file. The format of the binary file can
be understood by looking at the :file:`tools/binary2txt.cpp` file. This option be understood by looking at the :file:`tools/binary2txt.cpp` file. This option
is only available for the *atom* and *custom* styles. is only available for the *atom* and *custom* styles.
If the filename ends with ".gz", the dump file (or files, if "\*" or "%" If the filename ends with ".gz," the dump file (or files, if "\*" or "%"
is also used) is written in gzipped format. A gzipped dump file will be about is also used) is written in gzipped format. A gzipped dump file will be about
:math:`3\times` smaller than the text version, but will also take longer :math:`3\times` smaller than the text version, but will also take longer
to write. This option is not available for the *dcd* and *xtc* styles. to write. This option is not available for the *dcd* and *xtc* styles.
@ -692,8 +692,8 @@ of atom velocity and force and atomic charge.
There are several options for outputting atom coordinates. The *x*, There are several options for outputting atom coordinates. The *x*,
*y*, and *z* attributes write atom coordinates "unscaled," in the *y*, and *z* attributes write atom coordinates "unscaled," in the
appropriate distance :doc:`units <units>` (:math:`\mathrm{\mathring A}`, appropriate distance :doc:`units <units>` (:math:`\mathrm{\mathring A}`,
:math:`\sigma`, etc.). Use *xs*, *ys*, *zs* if you want the coordinates :math:`\sigma`, etc.). Use *xs*, *ys*, and *zs* if you want the coordinates
"scaled" to the box size, so that each value is 0.0 to 1.0. If the simulation "scaled" to the box size so that each value is 0.0 to 1.0. If the simulation
box is triclinic (tilted), then all atom coords will still be between 0.0 and box is triclinic (tilted), then all atom coords will still be between 0.0 and
1.0. The actual unscaled :math:`(x,y,z)` coordinate is 1.0. The actual unscaled :math:`(x,y,z)` coordinate is
:math:`x_s a + y_s b + z_s c`, where :math:`(a,b,c)` are the non-orthogonal :math:`x_s a + y_s b + z_s c`, where :math:`(a,b,c)` are the non-orthogonal
@ -736,7 +736,7 @@ The *angmomx*, *angmomy*, and *angmomz* attributes are specific to
finite-size aspherical particles that have an angular momentum. Only finite-size aspherical particles that have an angular momentum. Only
the *ellipsoid* atom style defines this quantity. the *ellipsoid* atom style defines this quantity.
The *tqx*, *tqy*, *tqz* attributes are for finite-size particles that The *tqx*, *tqy*, and *tqz* attributes are for finite-size particles that
can sustain a rotational torque due to interactions with other can sustain a rotational torque due to interactions with other
particles. particles.
@ -775,8 +775,8 @@ If *f_ID* is used as a attribute, then the per-atom vector calculated
by the fix is printed. If *f_ID[i]* is used, then :math:`i` must be in the by the fix is printed. If *f_ID[i]* is used, then :math:`i` must be in the
range from 1 to :math:`M`, which will print the :math:`i`\ th column of the range from 1 to :math:`M`, which will print the :math:`i`\ th column of the
per-atom array with :math:`M` columns calculated by the fix. See the per-atom array with :math:`M` columns calculated by the fix. See the
discussion above for how :math:`i` can be specified with a wildcard asterisk to discussion above for how :math:`i` can be specified with a wildcard asterisk
effectively specify multiple values. to effectively specify multiple values.
The *v_name* attribute allows per-atom vectors calculated by a The *v_name* attribute allows per-atom vectors calculated by a
:doc:`variable <variable>` to be output. The name in the attribute :doc:`variable <variable>` to be output. The name in the attribute

View File

@ -10,10 +10,9 @@ dump custom/adios command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
dump ID group-ID atom/adios N file.bp dump ID group-ID atom/adios N file.bp
dump ID group-ID custom/adios N file.bp args dump ID group-ID custom/adios N file.bp args
* ID = user-assigned name for the dump * ID = user-assigned name for the dump
@ -21,7 +20,7 @@ Syntax
* adios = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page) * adios = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
* N = dump every this many timesteps * N = dump every this many timesteps
* file.bp = name of file/stream to write to * file.bp = name of file/stream to write to
* args = same options as in :doc:`\ *dump custom*\ <dump>` command * args = same options as in :doc:`dump custom <dump>` command
Examples Examples
"""""""" """"""""
@ -35,10 +34,10 @@ Examples
Description Description
""""""""""" """""""""""
Dump a snapshot of atom coordinates every N timesteps in the `ADIOS Dump a snapshot of atom coordinates every :math:`N` timesteps in the `ADIOS
<adios_>`_ based "BP" file format, or using different I/O solutions in <adios_>`_-based "BP" file format, or using different I/O solutions in
ADIOS, to a stream that can be read on-line by another program. ADIOS, to a stream that can be read on-line by another program.
ADIOS-BP files are binary, portable and self-describing. ADIOS-BP files are binary, portable, and self-describing.
.. _adios: https://github.com/ornladios/ADIOS2 .. _adios: https://github.com/ornladios/ADIOS2
@ -67,7 +66,7 @@ create a new file at each individual dump.
Restrictions Restrictions
"""""""""""" """"""""""""
The number of atoms per snapshot CAN change with the adios style. The number of atoms per snapshot **can** change with the adios style.
When using the ADIOS tool 'bpls' to list the content of a .bp file, When using the ADIOS tool 'bpls' to list the content of a .bp file,
bpls will print *__* for the size of the output table indicating that bpls will print *__* for the size of the output table indicating that
its size is changing every step. its size is changing every step.

View File

@ -6,7 +6,7 @@ dump cfg/uef command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
dump ID group-ID cfg/uef N file mass type xs ys zs args dump ID group-ID cfg/uef N file mass type xs ys zs args
@ -32,9 +32,8 @@ Description
This command is used to dump atomic coordinates in the This command is used to dump atomic coordinates in the
reference frame of the applied flow field when reference frame of the applied flow field when
:doc:`fix nvt/uef <fix_nh_uef>` or :doc:`fix nvt/uef <fix_nh_uef>` or :doc:`fix npt/uef <fix_nh_uef>` is used.
:doc:`fix npt/uef <fix_nh_uef>` or is used. Only the atomic Only the atomic coordinates and frame-invariant scalar quantities
coordinates and frame-invariant scalar quantities
will be in the flow frame. If velocities are selected will be in the flow frame. If velocities are selected
as output, for example, they will not be in the same as output, for example, they will not be in the same
reference frame as the atomic positions. reference frame as the atomic positions.
@ -43,7 +42,8 @@ Restrictions
"""""""""""" """"""""""""
This fix is part of the UEF package. It is only enabled if LAMMPS This fix is part of the UEF package. It is only enabled if LAMMPS
was built with that package. See the :doc:`Build package <Build_package>` page for more info. was built with that package. See the :doc:`Build package <Build_package>`
page for more info.
This command can only be used when :doc:`fix nvt/uef <fix_nh_uef>` This command can only be used when :doc:`fix nvt/uef <fix_nh_uef>`
or :doc:`fix npt/uef <fix_nh_uef>` is active. or :doc:`fix npt/uef <fix_nh_uef>` is active.

View File

@ -12,7 +12,7 @@ dump movie command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
dump ID group-ID style N file color diameter keyword value ... dump ID group-ID style N file color diameter keyword value ...
@ -28,7 +28,7 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*atom* = yes/no = do or do not draw atoms *atom* = *yes* or *no* = do or do not draw atoms
*adiam* size = numeric value for atom diameter (distance units) *adiam* size = numeric value for atom diameter (distance units)
*bond* values = color width = color and width of bonds *bond* values = color width = color and width of bonds
color = *atom* or *type* or *none* color = *atom* or *type* or *none*
@ -68,21 +68,20 @@ Syntax
*box* values = yes/no diam = draw outline of simulation box *box* values = yes/no diam = draw outline of simulation box
yes/no = do or do not draw simulation box lines yes/no = do or do not draw simulation box lines
diam = diameter of box lines as fraction of shortest box length diam = diameter of box lines as fraction of shortest box length
*axes* values = yes/no length diam = draw xyz axes *axes* values = axes length diam = draw xyz axes
yes/no = do or do not draw xyz axes lines next to simulation box axes = *yes* or *no = do or do not draw xyz axes lines next to simulation box
length = length of axes lines as fraction of respective box lengths length = length of axes lines as fraction of respective box lengths
diam = diameter of axes lines as fraction of shortest box length diam = diameter of axes lines as fraction of shortest box length
*subbox* values = yes/no diam = draw outline of processor sub-domains *subbox* values = lines diam = draw outline of processor sub-domains
yes/no = do or do not draw sub-domain lines lines = *yes* or *no* = do or do not draw sub-domain lines
diam = diameter of sub-domain lines as fraction of shortest box length diam = diameter of sub-domain lines as fraction of shortest box length
*shiny* value = sfactor = shinyness of spheres and cylinders *shiny* value = sfactor = shinyness of spheres and cylinders
sfactor = shinyness of spheres and cylinders from 0.0 to 1.0 sfactor = shinyness of spheres and cylinders from 0.0 to 1.0
*ssao* value = yes/no seed dfactor = SSAO depth shading *ssao* value = shading seed dfactor = SSAO depth shading
yes/no = turn depth shading on/off shading = *yes* or *no* = turn depth shading on/off
seed = random # seed (positive integer) seed = random # seed (positive integer)
dfactor = strength of shading from 0.0 to 1.0 dfactor = strength of shading from 0.0 to 1.0
.. _dump_modify_image: .. _dump_modify_image:
dump_modify options for dump image/movie dump_modify options for dump image/movie
@ -162,7 +161,7 @@ Examples
Description Description
""""""""""" """""""""""
Dump a high-quality rendered image of the atom configuration every N Dump a high-quality rendered image of the atom configuration every :math:`N`
timesteps and save the images either as a sequence of JPEG or PNG or timesteps and save the images either as a sequence of JPEG or PNG or
PPM files, or as a single movie file. The options for this command as PPM files, or as a single movie file. The options for this command as
well as the :doc:`dump_modify <dump_modify>` command control what is well as the :doc:`dump_modify <dump_modify>` command control what is
@ -179,7 +178,7 @@ has been run, using the :doc:`rerun <rerun>` command to read snapshots
from an existing dump file, and using these dump commands in the rerun from an existing dump file, and using these dump commands in the rerun
script to generate the images/movie. script to generate the images/movie.
Here are two sample images, rendered as 1024x1024 JPEG files. Here are two sample images, rendered as :math:`1024\times 1024` JPEG files.
.. |dump1| image:: img/dump1.jpg .. |dump1| image:: img/dump1.jpg
:width: 48% :width: 48%
@ -197,8 +196,8 @@ Only atoms in the specified group are rendered in the image. The
alter what atoms are included in the image. alter what atoms are included in the image.
The filename suffix determines whether a JPEG, PNG, or PPM file is The filename suffix determines whether a JPEG, PNG, or PPM file is
created with the *image* dump style. If the suffix is ".jpg" or created with the *image* dump style. If the suffix is ".jpg" or
".jpeg", then a `JPEG format <jpeg_format_>`_ file is created, if the ".jpeg," then a `JPEG format <jpeg_format_>`_ file is created, if the
suffix is ".png", then a `PNG format <png_format_>`_ is created, else suffix is ".png," then a `PNG format <png_format_>`_ is created, else
a `PPM (aka NETPBM) format <ppm_format_>`_ file is created. a `PPM (aka NETPBM) format <ppm_format_>`_ file is created.
The JPEG and PNG files are binary; PPM has a text mode header followed The JPEG and PNG files are binary; PPM has a text mode header followed
by binary data. JPEG images have lossy compression, PNG has lossless by binary data. JPEG images have lossy compression, PNG has lossless
@ -232,22 +231,22 @@ details.
---------- ----------
Dumps are performed on timesteps that are a multiple of N (including Dumps are performed on timesteps that are a multiple of :math:`N` (including
timestep 0) and on the last timestep of a minimization if the timestep 0) and on the last timestep of a minimization if the
minimization converges. Note that this means a dump will not be minimization converges. Note that this means a dump will not be
performed on the initial timestep after the dump command is invoked, performed on the initial timestep after the dump command is invoked,
if the current timestep is not a multiple of N. This behavior can be if the current timestep is not a multiple of :math:`N`. This behavior can be
changed via the :doc:`dump_modify first <dump_modify>` command, which changed via the :doc:`dump_modify first <dump_modify>` command, which
can be useful if the dump command is invoked after a minimization can be useful if the dump command is invoked after a minimization
ended on an arbitrary timestep. N can be changed between runs by ended on an arbitrary timestep. :math:`N` can be changed between runs by
using the :doc:`dump_modify every <dump_modify>` command. using the :doc:`dump_modify every <dump_modify>` command.
Dump *image* filenames must contain a wildcard character "\*", so that Dump *image* filenames must contain a wildcard character "\*" so that
one image file per snapshot is written. The "\*" character is replaced one image file per snapshot is written. The "\*" character is replaced
with the timestep value. For example, tmp.dump.\*.jpg becomes with the timestep value. For example, tmp.dump.\*.jpg becomes
tmp.dump.0.jpg, tmp.dump.10000.jpg, tmp.dump.20000.jpg, etc. Note tmp.dump.0.jpg, tmp.dump.10000.jpg, tmp.dump.20000.jpg, etc. Note
that the :doc:`dump_modify pad <dump_modify>` command can be used to that the :doc:`dump_modify pad <dump_modify>` command can be used to
insure all timestep numbers are the same length (e.g. 00010), which insure all timestep numbers are the same length (e.g., 00010), which
can make it easier to convert a series of images into a movie in the can make it easier to convert a series of images into a movie in the
correct ordering. correct ordering.
@ -262,7 +261,7 @@ atoms rendered in the image. They can be any atom attribute defined
for the :doc:`dump custom <dump>` command, including *type* and for the :doc:`dump custom <dump>` command, including *type* and
*element*\ . This includes per-atom quantities calculated by a *element*\ . This includes per-atom quantities calculated by a
:doc:`compute <compute>`, :doc:`fix <fix>`, or :doc:`variable <variable>`, :doc:`compute <compute>`, :doc:`fix <fix>`, or :doc:`variable <variable>`,
which are prefixed by "c\_", "f\_", or "v\_" respectively. Note that the which are prefixed by "c\_," "f\_," or "v\_," respectively. Note that the
*diameter* setting can be overridden with a numeric value applied to *diameter* setting can be overridden with a numeric value applied to
all atoms by the optional *adiam* keyword. all atoms by the optional *adiam* keyword.
@ -277,7 +276,7 @@ to colors is as follows:
* type 5 = aqua * type 5 = aqua
* type 6 = cyan * type 6 = cyan
and repeats itself for types > 6. This mapping can be changed by the and repeats itself for types :math:`> 6`. This mapping can be changed by the
"dump_modify acolor" command, as described below. "dump_modify acolor" command, as described below.
If *type* is specified for the *diameter* setting then the diameter of If *type* is specified for the *diameter* setting then the diameter of
@ -298,18 +297,18 @@ and sizes used by the `AtomEye <atomeye_>`_ visualization package.
If other atom attributes are used for the *color* or *diameter* If other atom attributes are used for the *color* or *diameter*
settings, they are interpreted in the following way. settings, they are interpreted in the following way.
If "vx", for example, is used as the *color* setting, then the color If "vx," for example, is used as the *color* setting, then the color
of the atom will depend on the x-component of its velocity. The of the atom will depend on the x-component of its velocity. The
association of a per-atom value with a specific color is determined by association of a per-atom value with a specific color is determined by
a "color map", which can be specified via the dump_modify command, as a "color map," which can be specified via the dump_modify command, as
described below. The basic idea is that the atom-attribute will be described below. The basic idea is that the atom-attribute will be
within a range of values, and every value within the range is mapped within a range of values, and every value within the range is mapped
to a specific color. Depending on how the color map is defined, that to a specific color. Depending on how the color map is defined, that
mapping can take place via interpolation so that a value of -3.2 is mapping can take place via interpolation so that a value of -3.2 is
halfway between "red" and "blue", or discretely so that the value of halfway between "red" and "blue," or discretely so that the value of
-3.2 is "orange". -3.2 is "orange".
If "vx", for example, is used as the *diameter* setting, then the atom If "vx," for example, is used as the *diameter* setting, then the atom
will be rendered using the x-component of its velocity as the will be rendered using the x-component of its velocity as the
diameter. If the per-atom value <= 0.0, them the atom will not be diameter. If the per-atom value <= 0.0, them the atom will not be
drawn. Note that finite-size spherical particles, as defined by drawn. Note that finite-size spherical particles, as defined by
@ -773,10 +772,11 @@ the number 5.0 would be used. But for a fractional map, the number
The *delta* setting must be specified for all styles, but is only used The *delta* setting must be specified for all styles, but is only used
for the sequential style; otherwise the value is ignored. It for the sequential style; otherwise the value is ignored. It
specifies the bin size to use within the range for assigning specifies the bin size to use within the range for assigning
consecutive colors to. For example, if the range is from -10.0 to consecutive colors to. For example, if the range is from :math:`-10.0` to
10.0 and a *delta* of 1.0 is used, then 20 colors will be assigned to :math:`10.0` and a *delta* of :math:`1.0` is used, then 20 colors will be
the range. The first will be from -10.0 <= color1 < -9.0, then second assigned to the range. The first will be from
from -9.0 <= color2 < -8.0, etc. :math:`-10.0 \le \text{color1} < -9.0`, then second from
:math:`-9.0 \le color2 < -8.0`, etc.
The *N* setting is how many entries follow. The format of the entries The *N* setting is how many entries follow. The format of the entries
depends on whether the color map style is continuous, discrete or depends on whether the color map style is continuous, discrete or
@ -793,13 +793,13 @@ as absolute numbers or as fractions (0.0 to 1.0) of the range,
depending on the "a" or "f" in the style setting for the color map. depending on the "a" or "f" in the style setting for the color map.
Here is how the entries are used to determine the color of an Here is how the entries are used to determine the color of an
individual atom, given the value X of its atom attribute. X will fall individual atom, given the value :math:`X` of its atom attribute.
between 2 of the entry values. The color of the atom is linearly :math:`X` will fall between 2 of the entry values. The color of the atom is
interpolated (in each of the RGB values) between the 2 colors linearly interpolated (in each of the RGB values) between the 2 colors
associated with those entries. For example, if X = -5.0 and the 2 associated with those entries. For example, if :math:`X = -5.0` and the two
surrounding entries are "red" at -10.0 and "blue" at 0.0, then the surrounding entries are "red" at :math:`-10.0` and "blue" at :math:`0.0`,
atom's color will be halfway between "red" and "blue", which happens then the atom's color will be halfway between "red" and "blue," which happens
to be "purple". to be "purple."
For discrete color maps, each entry has a *lo* and *hi* value and a For discrete color maps, each entry has a *lo* and *hi* value and a
*color*\ . The *lo* and *hi* settings are either numbers within the *color*\ . The *lo* and *hi* settings are either numbers within the
@ -864,20 +864,20 @@ The *bcolor* keyword can be used with the dump image command, with its
*bond* keyword, when its color setting is *type*, to set the color *bond* keyword, when its color setting is *type*, to set the color
that bonds of each type will be drawn in the image. that bonds of each type will be drawn in the image.
The specified *type* should be an integer from 1 to Nbondtypes = the The specified *type* should be an integer from 1 to :math:`N`, where :math:`N`
number of bond types. A wildcard asterisk can be used in place of or is the number of bond types. A wildcard asterisk can be used in place of or
in conjunction with the *type* argument to specify a range of bond in conjunction with the *type* argument to specify a range of bond
types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = types. This takes the form "\*" or "\*n" or "m\*" or "m\*n." If :math:`N`
the number of bond types, then an asterisk with no numeric values is the number of bond types, then an asterisk with no numerical values
means all types from 1 to N. A leading asterisk means all types from means all types from 1 to :math:`N`. A leading asterisk means all types from
1 to n (inclusive). A trailing asterisk means all types from n to N 1 to n (inclusive). A trailing asterisk means all types from m to :math:`N`
(inclusive). A middle asterisk means all types from m to n (inclusive). A middle asterisk means all types from m to n
(inclusive). (inclusive).
The specified *color* can be a single color which is any of the 140 The specified *color* can be a single color which is any of the 140
pre-defined colors (see below) or a color name defined by the pre-defined colors (see below) or a color name defined by the
dump_modify color option. Or it can be two or more colors separated dump_modify color option. Or it can be two or more colors separated
by a "/" character, e.g. red/green/blue. In the former case, that by a "/" character (e.g., red/green/blue). In the former case, that
color is assigned to all the specified bond types. In the latter color is assigned to all the specified bond types. In the latter
case, the list of colors are assigned in a round-robin fashion to each case, the list of colors are assigned in a round-robin fashion to each
of the specified bond types. of the specified bond types.
@ -885,13 +885,13 @@ of the specified bond types.
---------- ----------
The *bdiam* keyword can be used with the dump image command, with its The *bdiam* keyword can be used with the dump image command, with its
*bond* keyword, when its diam setting is *type*, to set the diameter *bond* keyword, when its *diam* setting is *type*, to set the diameter
that bonds of each type will be drawn in the image. The specified that bonds of each type will be drawn in the image. The specified
*type* should be an integer from 1 to Nbondtypes. As with the *type* should be an integer from 1 to Nbondtypes. As with the
*bcolor* keyword, a wildcard asterisk can be used as part of the *bcolor* keyword, a wildcard asterisk can be used as part of the
*type* argument to specify a range of bond types. The specified *type* argument to specify a range of bond types. The specified
*diam* is the size in whatever distance :doc:`units <units>` you are *diam* is the size in whatever distance :doc:`units <units>` you are
using, e.g. Angstroms. using (e.g., Angstroms).
---------- ----------
@ -922,7 +922,7 @@ dump_modify color option.
---------- ----------
The *color* keyword allows definition of a new color name, in addition The *color* keyword allows definition of a new color name, in addition
to the 140-predefined colors (see below), and associates 3 to the 140-predefined colors (see below), and associates three
red/green/blue RGB values with that color name. The color name can red/green/blue RGB values with that color name. The color name can
then be used with any other dump_modify keyword that takes a color then be used with any other dump_modify keyword that takes a color
name as a value. The RGB values should each be floating point values name as a value. The RGB values should each be floating point values
@ -959,15 +959,15 @@ PNG library.
To write *movie* dumps, you must use the -DLAMMPS_FFMPEG switch when To write *movie* dumps, you must use the -DLAMMPS_FFMPEG switch when
building LAMMPS and have the FFmpeg executable available on the building LAMMPS and have the FFmpeg executable available on the
machine where LAMMPS is being run. Typically it's name is lowercase, machine where LAMMPS is being run. Typically its name is lowercase
i.e. ffmpeg. (i.e., "ffmpeg").
See the :doc:`Build settings <Build_settings>` page for details. See the :doc:`Build settings <Build_settings>` page for details.
Note that since FFmpeg is run as an external program via a pipe, Note that since FFmpeg is run as an external program via a pipe,
LAMMPS has limited control over its execution and no knowledge about LAMMPS has limited control over its execution and no knowledge about
errors and warnings printed by it. Those warnings and error messages errors and warnings printed by it. Those warnings and error messages
will be printed to the screen only. Due to the way image data is will be printed to the screen only. Due to the way image data are
communicated to FFmpeg, it will often print the message communicated to FFmpeg, it will often print the message
.. parsed-literal:: .. parsed-literal::
@ -976,7 +976,7 @@ communicated to FFmpeg, it will often print the message
which can be safely ignored. Other warnings which can be safely ignored. Other warnings
and errors have to be addressed according to the FFmpeg documentation. and errors have to be addressed according to the FFmpeg documentation.
One known issue is that certain movie file formats (e.g. MPEG level 1 One known issue is that certain movie file formats (e.g., MPEG level 1
and 2 format streams) have video bandwidth limits that can be crossed and 2 format streams) have video bandwidth limits that can be crossed
when rendering too large of image sizes. Typical warnings look like when rendering too large of image sizes. Typical warnings look like
this: this:
@ -987,10 +987,9 @@ this:
[mpeg @ 0x98b5e0] buffer underflow st=0 bufi=281407 size=285018 [mpeg @ 0x98b5e0] buffer underflow st=0 bufi=281407 size=285018
[mpeg @ 0x98b5e0] buffer underflow st=0 bufi=283448 size=285018 [mpeg @ 0x98b5e0] buffer underflow st=0 bufi=283448 size=285018
In this case it is recommended to either reduce the size of the image In this case it is recommended either to reduce the size of the image
or encode in a different format that is also supported by your copy of or to encode in a different format that is also supported by your copy of
FFmpeg, and which does not have this limitation (e.g. .avi, .mkv, FFmpeg and which does not have this limitation (e.g., .avi, .mkv, mp4).
mp4).
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -6,13 +6,13 @@ dump vtk command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
dump ID group-ID vtk N file args dump ID group-ID vtk N file args
* ID = user-assigned name for the dump * ID = user-assigned name for the dump
* group-ID = ID of the group of atoms to be dumped * group-ID = ID of the group of atoms to be dumped
* vtk = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page) * vtk = style of dump command (other styles such as *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
* N = dump every this many timesteps * N = dump every this many timesteps
* file = name of file to write dump info to * file = name of file to write dump info to
* args = same as arguments for :doc:`dump_style custom <dump>` * args = same as arguments for :doc:`dump_style custom <dump>`
@ -28,17 +28,18 @@ Examples
Description Description
""""""""""" """""""""""
Dump a snapshot of atom quantities to one or more files every N Dump a snapshot of atom quantities to one or more files every :math:`N`
timesteps in a format readable by the `VTK visualization toolkit <http://www.vtk.org>`_ or other visualization tools that use it, timesteps in a format readable by the `VTK visualization toolkit <http://www.vtk.org>`_ or other visualization tools that use it,
e.g. `ParaView <http://www.paraview.org>`_. The timesteps on which dump such as `ParaView <http://www.paraview.org>`_. The time steps on which dump
output is written can also be controlled by a variable; see the output is written can also be controlled by a variable; see the
:doc:`dump_modify every <dump_modify>` command for details. :doc:`dump_modify every <dump_modify>` command for details.
This dump style is similar to :doc:`dump_style custom <dump>` but uses This dump style is similar to :doc:`dump_style custom <dump>` but uses
the VTK library to write data to VTK simple legacy or XML format the VTK library to write data to VTK simple legacy or XML format,
depending on the filename extension specified for the dump file. This depending on the filename extension specified for the dump file. This
can be either *\*.vtk* for the legacy format or *\*.vtp* and *\*.vtu*, can be either *\*.vtk* for the legacy format or *\*.vtp* and *\*.vtu*,
respectively, for XML format; see the `VTK homepage <http://www.vtk.org/VTK/img/file-formats.pdf>`_ for a detailed respectively, for XML format; see the
`VTK homepage <http://www.vtk.org/VTK/img/file-formats.pdf>`_ for a detailed
description of these formats. Since this naming convention conflicts description of these formats. Since this naming convention conflicts
with the way binary output is usually specified (see below), the with the way binary output is usually specified (see below), the
:doc:`dump_modify binary <dump_modify>` command allows setting of a :doc:`dump_modify binary <dump_modify>` command allows setting of a

View File

@ -6,8 +6,7 @@ fix accelerate/cos command
Syntax Syntax
"""""" """"""
.. code-block:: LAMMPS
.. parsed-literal::
fix ID group-ID accelerate value fix ID group-ID accelerate value
@ -19,7 +18,6 @@ Syntax
Examples Examples
"""""""" """"""""
.. code-block:: LAMMPS .. code-block:: LAMMPS
fix 1 all accelerate/cos 0.02e-5 fix 1 all accelerate/cos 0.02e-5
@ -34,8 +32,8 @@ The acceleration is a periodic function along the z-direction:
a_{x}(z) = A \cos \left(\frac{2 \pi z}{l_{z}}\right) a_{x}(z) = A \cos \left(\frac{2 \pi z}{l_{z}}\right)
where :math:`A` is the acceleration amplitude, :math:`l_z` is the z-length where :math:`A` is the acceleration amplitude, :math:`l_z` is the
of the simulation box. :math:`z`-length of the simulation box.
At steady state, the acceleration generates a velocity profile: At steady state, the acceleration generates a velocity profile:
.. math:: .. math::
@ -49,17 +47,18 @@ shear viscosity :math:`\eta` by:
V = \frac{A \rho}{\eta}\left(\frac{l_{z}}{2 \pi}\right)^{2} V = \frac{A \rho}{\eta}\left(\frac{l_{z}}{2 \pi}\right)^{2}
and it can be obtained from ensemble average of the velocity profile: and it can be obtained from ensemble average of the velocity profile:
.. math:: .. math::
V = \frac{\sum_i 2 m_{i} v_{i, x} \cos \left(\frac{2 \pi z_i}{l_{z}}\right)}{\sum_i m_{i}} V = \frac{\sum\limits_i 2 m_{i} v_{i, x} \cos \left(\frac{2 \pi z_i}{l_{z}}\right)}{\sum\limits_i m_{i}},
where :math:`m_i`, :math:`v_{i,x}` and :math:`z_i` are the mass, where :math:`m_i`, :math:`v_{i,x}`, and :math:`z_i` are the mass,
x-component velocity and z coordinate of a particle. :math:`x`-component velocity, and :math:`z`-coordinate of a particle,
respectively.
The velocity amplitude :math:`V` can be calculated with :doc:`compute viscosity/cos <compute_viscosity_cos>`, The velocity amplitude :math:`V` can be calculated with
:doc:`compute viscosity/cos <compute_viscosity_cos>`,
which enables viscosity calculation with periodic perturbation method, which enables viscosity calculation with periodic perturbation method,
as described by :ref:`Hess<Hess2>`. as described by :ref:`Hess<Hess2>`.
Because the applied acceleration drives the system away from equilibration, Because the applied acceleration drives the system away from equilibration,
@ -79,15 +78,17 @@ Restart, fix_modify, output, run start/stop, minimize info
No information about this fix is written to binary restart files. No information about this fix is written to binary restart files.
None of the fix_modify options are relevant to this fix. None of the fix_modify options are relevant to this fix.
No global or per-atom quantities are stored by this fix for access by various output commands. No global or per-atom quantities are stored by this fix for access by various
No parameter of this fix can be used with the start/stop keywords of the run command. output commands. No parameter of this fix can be used with the start/stop
keywords of the run command.
This fix is not invoked during energy minimization. This fix is not invoked during energy minimization.
Restrictions Restrictions
"""""""""""" """"""""""""
This command is only available when LAMMPS was built with the MISC package. This command is only available when LAMMPS was built with the MISC package.
Since this fix depends on the z-coordinate of atoms, it cannot be used in 2d simulations. Since this fix depends on the :math:`z`-coordinate of atoms, it cannot be used
in 2d simulations.
Related commands Related commands
"""""""""""""""" """"""""""""""""
@ -96,10 +97,10 @@ Related commands
Default Default
""""""" """""""
none none
---------- ----------
.. _Hess2: .. _Hess2:
**(Hess)** Hess, B. The Journal of Chemical Physics 2002, 116 (1), 209-217. **(Hess)** Hess, B. Journal of Chemical Physics 2002, 116 (1), 209--217.

View File

@ -9,7 +9,7 @@ Accelerator Variants: *acks2/reaxff/kk*
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID acks2/reaxff Nevery cutlo cuthi tolerance params args fix ID group-ID acks2/reaxff Nevery cutlo cuthi tolerance params args
@ -37,10 +37,10 @@ Examples
Description Description
""""""""""" """""""""""
Perform the atom-condensed Kohn-Sham DFT to second order (ACKS2) charge Perform the atom-condensed Kohn--Sham DFT to second order (ACKS2) charge
equilibration method as described in :ref:`(Verstraelen) <Verstraelen>`. equilibration method as described in :ref:`(Verstraelen) <Verstraelen>`.
ACKS2 impedes unphysical long-range charge transfer sometimes seen with ACKS2 impedes unphysical long-range charge transfer sometimes seen with
QEq (e.g. for dissociation of molecules), at increased computational QEq (e.g., for dissociation of molecules), at increased computational
cost. It is typically used in conjunction with the ReaxFF force field cost. It is typically used in conjunction with the ReaxFF force field
model as implemented in the :doc:`pair_style reaxff <pair_reaxff>` model as implemented in the :doc:`pair_style reaxff <pair_reaxff>`
command, but it can be used with any potential in LAMMPS, so long as it command, but it can be used with any potential in LAMMPS, so long as it
@ -71,7 +71,8 @@ potential in eV, *gamma*, the valence orbital exponent, and *bcut*, the
bond cutoff distance. Note that these 4 quantities are also in the bond cutoff distance. Note that these 4 quantities are also in the
ReaxFF potential file, except that eta is defined here as twice the eta ReaxFF potential file, except that eta is defined here as twice the eta
value in the ReaxFF file. Note that unlike the rest of LAMMPS, the units value in the ReaxFF file. Note that unlike the rest of LAMMPS, the units
of this fix are hard-coded to be A, eV, and electronic charge. of this fix are hard-coded to be :math:`\mathrm{\mathring{A}}`, eV, and
electronic charge.
The optional *maxiter* keyword allows changing the max number The optional *maxiter* keyword allows changing the max number
of iterations in the linear solver. The default value is 200. of iterations in the linear solver. The default value is 200.
@ -110,7 +111,7 @@ LAMMPS was built with that package. See the :doc:`Build package
This fix does not correctly handle interactions involving multiple This fix does not correctly handle interactions involving multiple
periodic images of the same atom. Hence, it should not be used for periodic images of the same atom. Hence, it should not be used for
periodic cell dimensions less than 10 angstroms. periodic cell dimensions less than :math:`10~\mathrm{\mathring{A}}`.
This fix may be used in combination with :doc:`fix efield <fix_efield>` This fix may be used in combination with :doc:`fix efield <fix_efield>`
and will apply the external electric field during charge equilibration, and will apply the external electric field during charge equilibration,
@ -132,7 +133,7 @@ maxiter 200
.. _O'Hearn: .. _O'Hearn:
**(O'Hearn)** O'Hearn, Alperen, Aktulga, SIAM J. Sci. Comput., 42(1), C1-C22 (2020). **(O'Hearn)** O'Hearn, Alperen, Aktulga, SIAM J. Sci. Comput., 42(1), C1--C22 (2020).
.. _Verstraelen: .. _Verstraelen:

View File

@ -6,7 +6,7 @@ fix adapt command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID adapt N attribute args ... keyword value ... fix ID group-ID adapt N attribute args ... keyword value ...
@ -19,24 +19,24 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*pair* args = pstyle pparam I J v_name *pair* args = pstyle pparam I J v_name
pstyle = pair style name, e.g. lj/cut pstyle = pair style name (e.g., lj/cut)
pparam = parameter to adapt over time pparam = parameter to adapt over time
I,J = type pair(s) to set parameter for I,J = type pair(s) to set parameter for
v_name = variable with name that calculates value of pparam v_name = variable with name that calculates value of pparam
*bond* args = bstyle bparam I v_name *bond* args = bstyle bparam I v_name
bstyle = bond style name, e.g. harmonic bstyle = bond style name (e.g., harmonic)
bparam = parameter to adapt over time bparam = parameter to adapt over time
I = type bond to set parameter for I = type bond to set parameter for
v_name = variable with name that calculates value of bparam v_name = variable with name that calculates value of bparam
*angle* args = astyle aparam I v_name *angle* args = astyle aparam I v_name
astyle = angle style name, e.g. harmonic astyle = angle style name (e.g., harmonic)
aparam = parameter to adapt over time aparam = parameter to adapt over time
I = type angle to set parameter for I = type angle to set parameter for
v_name = variable with name that calculates value of aparam v_name = variable with name that calculates value of aparam
*kspace* arg = v_name *kspace* arg = v_name
v_name = variable with name that calculates scale factor on K-space terms v_name = variable with name that calculates scale factor on :math:`k`-space terms
*atom* args = atomparam v_name *atom* args = atomparam v_name
atomparam = parameter to adapt over time atomparam = *charge* or *diameter* or *diameter/disc* = parameter to adapt over time
v_name = variable with name that calculates value of atomparam v_name = variable with name that calculates value of atomparam
* zero or more keyword/value pairs may be appended * zero or more keyword/value pairs may be appended
@ -70,22 +70,22 @@ Examples
Description Description
""""""""""" """""""""""
Change or adapt one or more specific simulation attributes or settings Change or adapt one or more specific simulation attributes or settings over
over time as a simulation runs. Pair potential and K-space and atom time as a simulation runs. Pair potential and :math:`k`-space and atom
attributes which can be varied by this fix are discussed below. Many attributes which can be varied by this fix are discussed below. Many other
other fixes can also be used to time-vary simulation parameters, fixes can also be used to time-vary simulation parameters (e.g., the
e.g. the "fix deform" command will change the simulation box :doc:`fix deform <fix_deform>` command will change the simulation box
size/shape and the "fix move" command will change atom positions and size/shape and the :doc:`fix move <fix_move>` command will change atom
velocities in a prescribed manner. Also note that many commands allow positions and velocities in a prescribed manner). Also note that many commands
variables as arguments for specific parameters, if described in that allow variables as arguments for specific parameters, if described in that
manner on their doc pages. An equal-style variable can calculate a manner on their doc pages. An equal-style variable can calculate a
time-dependent quantity, so this is another way to vary a simulation time-dependent quantity, so this is another way to vary a simulation parameter
parameter over time. over time.
If *N* is specified as 0, the specified attributes are only changed If :math:`N` is specified as 0, the specified attributes are only changed
once, before the simulation begins. This is all that is needed if the once, before the simulation begins. This is all that is needed if the
associated variables are not time-dependent. If *N* > 0, then changes associated variables are not time-dependent. If :math:`N > 0`, then changes
are made every *N* steps during the simulation, presumably with a are made every :math:`N` steps during the simulation, presumably with a
variable that is time-dependent. variable that is time-dependent.
Depending on the value of the *reset* keyword, attributes changed by Depending on the value of the *reset* keyword, attributes changed by
@ -98,9 +98,9 @@ If the *scale* keyword is set to *no*, which is the default, then
the value of the altered parameter will be whatever the variable the value of the altered parameter will be whatever the variable
generates. If the *scale* keyword is set to *yes*, then the value generates. If the *scale* keyword is set to *yes*, then the value
of the altered parameter will be the initial value of that parameter of the altered parameter will be the initial value of that parameter
multiplied by whatever the variable generates. I.e. the variable is multiplied by whatever the variable generates (i.e., the variable is
now a "scale factor" applied in (presumably) a time-varying fashion to now a "scale factor" applied in (presumably) a time-varying fashion to
the parameter. the parameter).
Note that whether scale is *no* or *yes*, internally, the parameters Note that whether scale is *no* or *yes*, internally, the parameters
themselves are actually altered by this fix. Make sure you use the themselves are actually altered by this fix. Make sure you use the
@ -120,9 +120,9 @@ The *pstyle* argument is the name of the pair style. If
:doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is used, :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is used,
*pstyle* should be a sub-style name. If there are multiple *pstyle* should be a sub-style name. If there are multiple
sub-styles using the same pair style, then *pstyle* should be specified sub-styles using the same pair style, then *pstyle* should be specified
as "style:N" where N is which instance of the pair style you wish to as "style:N", where :math:`N` is which instance of the pair style you wish to
adapt, e.g. the first, second, etc. For example, *pstyle* could be adapt (e.g., the first or second). For example, *pstyle* could be
specified as "soft" or "lubricate" or "lj/cut:1" or "lj/cut:2". The specified as "soft" or "lubricate" or "lj/cut:1" or "lj/cut:2." The
*pparam* argument is the name of the parameter to change. This is the *pparam* argument is the name of the parameter to change. This is the
current list of pair styles and parameters that can be varied by this current list of pair styles and parameters that can be varied by this
fix. See the doc pages for individual pair styles and their energy fix. See the doc pages for individual pair styles and their energy
@ -216,45 +216,46 @@ formulas for the meaning of these parameters:
to this list. All it typically takes is adding an extract() method to to this list. All it typically takes is adding an extract() method to
the pair\_\*.cpp file associated with the potential. the pair\_\*.cpp file associated with the potential.
Some parameters are global settings for the pair style, e.g. the Some parameters are global settings for the pair style (e.g., the
viscosity setting "mu" for :doc:`pair_style lubricate <pair_lubricate>`. viscosity setting "mu" for :doc:`pair_style lubricate <pair_lubricate>`).
Other parameters apply to atom type pairs within the pair style, Other parameters apply to atom type pairs within the pair style (e.g., the
e.g. the prefactor "a" for :doc:`pair_style soft <pair_soft>`. prefactor :math:`a` for :doc:`pair_style soft <pair_soft>`).
Note that for many of the potentials, the parameter that can be varied Note that for many of the potentials, the parameter that can be varied
is effectively a prefactor on the entire energy expression for the is effectively a prefactor on the entire energy expression for the
potential, e.g. the lj/cut epsilon. The parameters listed as "scale" potential (e.g., the lj/cut epsilon). The parameters listed as "scale"
are exactly that, since the energy expression for the are exactly that, since the energy expression for the
:doc:`coul/cut <pair_coul>` potential (for example) has no labeled :doc:`coul/cut <pair_coul>` potential (for example) has no labeled
prefactor in its formula. To apply an effective prefactor to some prefactor in its formula. To apply an effective prefactor to some
potentials, multiple parameters need to be altered. For example, the potentials, multiple parameters need to be altered. For example, the
:doc:`Buckingham potential <pair_buck>` needs both the A and C terms :doc:`Buckingham potential <pair_buck>` needs both the :math:`A` and
altered together. To scale the Buckingham potential, you should thus :math:`C` terms altered together. To scale the Buckingham potential, you
list the pair style twice, once for A and once for C. should thus list the pair style twice, once for :math:`A` and once for
:math:`C`.
If a type pair parameter is specified, the *I* and *J* settings should If a type pair parameter is specified, the :math:`I` and :math:`J` settings
be specified to indicate which type pairs to apply it to. If a global should be specified to indicate which type pairs to apply it to. If a global
parameter is specified, the *I* and *J* settings still need to be parameter is specified, the :math:`I` and :math:`J` settings still need to be
specified, but are ignored. specified, but are ignored.
Similar to the :doc:`pair_coeff command <pair_coeff>`, I and J can be Similar to the :doc:`pair_coeff command <pair_coeff>`, :math:`I` and :math:`J`
specified in one of two ways. Explicit numeric values can be used for can be specified in one of two ways. Explicit numeric values can be used for
each, as in the first example above. I <= J is required. LAMMPS sets each, as in the first example above. :math:`I \le J` is required. LAMMPS sets
the coefficients for the symmetric J,I interaction to the same values. the coefficients for the symmetric :math:`J,I` interaction to the same values.
A wild-card asterisk can be used in place of or in conjunction with 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 the :math:`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 = types. This takes the form "\*" or "\*n" or "m\*" or "m\*n." If :math:`N`
the number of atom types, then an asterisk with no numeric values is 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 means all types from 1 to :math:`N`. A leading asterisk means all types from
1 to n (inclusive). A trailing asterisk means all types from n to N 1 to n (inclusive). A trailing asterisk means all types from m to :math:`N`
(inclusive). A middle asterisk means all types from m 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 (inclusive). Note that only type pairs with :math:`I \le J` are considered; if
asterisks imply type pairs where J < I, they are ignored. asterisks imply type pairs where :math:`J < I`, they are ignored.
IMPROTANT NOTE: If :doc:`pair_style hybrid or hybrid/overlay IMPORTANT NOTE: If :doc:`pair_style hybrid or hybrid/overlay
<pair_hybrid>` is being used, then the *pstyle* will be a sub-style <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 name. You must specify :math:`I,J` arguments that correspond to type pair
values defined (via the :doc:`pair_coeff <pair_coeff>` command) for values defined (via the :doc:`pair_coeff <pair_coeff>` command) for
that sub-style. that sub-style.
@ -289,12 +290,11 @@ given bond type is adapted.
A wild-card asterisk can be used in place of or in conjunction with A wild-card asterisk can be used in place of or in conjunction with
the bond type argument to set the coefficients for multiple bond the bond type argument to set the coefficients for multiple bond
types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = types. This takes the form "\*" or "\*n" or "m\*" or "m\*n." If :math:`N`
the number of bond types, then an asterisk with no numeric values is 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 means all types from 1 to :math:`N`. A leading asterisk means all types from
1 to n (inclusive). A trailing asterisk means all types from n to N 1 to n (inclusive). A trailing asterisk means all types from m to :math:`N`
(inclusive). A middle asterisk means all types from m to n (inclusive). A middle asterisk means all types from m to n (inclusive).
(inclusive).
Currently *bond* does not support bond_style hybrid nor bond_style Currently *bond* does not support bond_style hybrid nor bond_style
hybrid/overlay as bond styles. The bond styles that currently work hybrid/overlay as bond styles. The bond styles that currently work
@ -325,12 +325,11 @@ given angle type is adapted.
A wild-card asterisk can be used in place of or in conjunction with A wild-card asterisk can be used in place of or in conjunction with
the angle type argument to set the coefficients for multiple angle the angle type argument to set the coefficients for multiple angle
types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = types. This takes the form "\*" or "\*n" or "m\*" or "m\*n." If :math:`N`
the number of angle types, then an asterisk with no numeric values is 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 means all types from 1 to :math:`N`. A leading asterisk means all types from
1 to n (inclusive). A trailing asterisk means all types from n to N 1 to n (inclusive). A trailing asterisk means all types from m to :math:`N`
(inclusive). A middle asterisk means all types from m to n (inclusive). A middle asterisk means all types from m to n (inclusive).
(inclusive).
Currently *angle* does not support angle_style hybrid nor angle_style Currently *angle* does not support angle_style hybrid nor angle_style
hybrid/overlay as angle styles. The angle styles that currently work hybrid/overlay as angle styles. The angle styles that currently work
@ -348,7 +347,7 @@ this fix uses to reset theta0 needs to generate values in radians.
---------- ----------
The *kspace* keyword used the specified variable as a scale factor on The *kspace* keyword used the specified variable as a scale factor on
the energy, forces, virial calculated by whatever K-Space solver is the energy, forces, virial calculated by whatever :math:`k`-space solver is
defined by the :doc:`kspace_style <kspace_style>` command. If the defined by the :doc:`kspace_style <kspace_style>` command. If the
variable has a value of 1.0, then the solver is unaltered. variable has a value of 1.0, then the solver is unaltered.
@ -373,17 +372,17 @@ with equal-style variables. The new value is assigned to the
corresponding attribute for all atoms in the fix group. corresponding attribute for all atoms in the fix group.
If the atom parameter is *diameter* and per-atom density and per-atom If the atom parameter is *diameter* and per-atom density and per-atom
mass are defined for particles (e.g. :doc:`atom_style granular mass are defined for particles (e.g., :doc:`atom_style granular
<atom_style>`), then the mass of each particle is, by default, also <atom_style>`), then the mass of each particle is, by default, also
changed when the diameter changes. The mass is set from the particle changed when the diameter changes. The mass is set from the particle
volume for 3d systems (density is assumed to stay constant). For 2d, volume for 3d systems (density is assumed to stay constant). For 2d,
the default is for LAMMPS to model particles with a radius attribute the default is for LAMMPS to model particles with a radius attribute
as spheres. However, if the atom parameter is *diameter/disc*, then the as spheres. However, if the atom parameter is *diameter/disc*, then the
mass is set from the particle area (the density is assumed to be in mass is set from the particle area (the density is assumed to be in
mass/distance^2 units). The mass of the particle may also be kept constant mass/distance\ :math:`^2` units). The mass of the particle may also be kept
if the *mass* keyword is set to *no*. This can be useful to account for constant if the *mass* keyword is set to *no*. This can be useful to account
diameter changes that do not involve mass changes, e.g., thermal expansion. for diameter changes that do not involve mass changes (e.g., thermal
expansion).
For example, these commands would shrink the diameter of all granular For example, these commands would shrink the diameter of all granular
particles in the "center" group from 1.0 to 0.1 in a linear fashion particles in the "center" group from 1.0 to 0.1 in a linear fashion
@ -405,11 +404,11 @@ their original values at the end of the last restarted run.
Note that all the parameters changed by this fix are written into a Note that all the parameters changed by this fix are written into a
restart file in their current changed state. A new restarted restart file in their current changed state. A new restarted
simulation does not know their original time=0 values, unless the simulation does not know the original time=0 values, unless the
input script explicitly resets the parameters (after the restart file input script explicitly resets the parameters (after the restart file
is read), to their original values. is read) to the original values.
Also note, that the time-dependent variable(s) used in the restart Also note that the time-dependent variable(s) used in the restart
script should typically be written as a function of time elapsed since script should typically be written as a function of time elapsed since
the original simulation began. the original simulation began.
@ -430,8 +429,8 @@ the one used in the original script.
In a restarted run, if the *reset* keyword is set to *yes*, and the In a restarted run, if the *reset* keyword is set to *yes*, and the
run ends in this script (as opposed to just writing more restart run ends in this script (as opposed to just writing more restart
files, parameters will be restored to the values they were at the files), parameters will be restored to the values they were at the
beginning of the run command in the restart script. Which as beginning of the run command in the restart script, which as
explained above, may or may not be the original values of the explained above, may or may not be the original values of the
parameters. Again, an exception is if the *atom* keyword is being parameters. Again, an exception is if the *atom* keyword is being
used with *reset yes* (in all the runs). In that case, the original used with *reset yes* (in all the runs). In that case, the original

View File

@ -6,7 +6,7 @@ fix adapt/fep command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID adapt/fep N attribute args ... keyword value ... fix ID group-ID adapt/fep N attribute args ... keyword value ...
@ -19,7 +19,7 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*pair* args = pstyle pparam I J v_name *pair* args = pstyle pparam I J v_name
pstyle = pair style name, e.g. lj/cut pstyle = pair style name (e.g., lj/cut)
pparam = parameter to adapt over time pparam = parameter to adapt over time
I,J = type pair(s) to set parameter for I,J = type pair(s) to set parameter for
v_name = variable with name that calculates value of pparam v_name = variable with name that calculates value of pparam
@ -66,12 +66,12 @@ Change or adapt one or more specific simulation attributes or settings
over time as a simulation runs. over time as a simulation runs.
This is an enhanced version of the :doc:`fix adapt <fix_adapt>` command This is an enhanced version of the :doc:`fix adapt <fix_adapt>` command
with two differences, with two differences:
* It is possible to modify the charges of chosen atom types only, * It is possible to modify the charges of chosen atom types only,
instead of scaling all the charges in the system. instead of scaling all the charges in the system.
* There is a new option *after* for better compatibility with "fix * There is a new option *after* for better compatibility with
ave/time". :doc:`fix ave/time <fix_ave_time>`.
This version is suited for free energy calculations using This version is suited for free energy calculations using
:doc:`compute ti <compute_ti>` or :doc:`compute fep <compute_fep>`. :doc:`compute ti <compute_ti>` or :doc:`compute fep <compute_fep>`.
@ -92,8 +92,8 @@ If the *scale* keyword is set to *no*, then the value the parameter is
set to will be whatever the variable generates. If the *scale* set to will be whatever the variable generates. If the *scale*
keyword is set to *yes*, then the value of the altered parameter will keyword is set to *yes*, then the value of the altered parameter will
be the initial value of that parameter multiplied by whatever the be the initial value of that parameter multiplied by whatever the
variable generates. I.e. the variable is now a "scale factor" applied variable generates (i.e., the variable is now a "scale factor" applied
in (presumably) a time-varying fashion to the parameter. Internally, in (presumably) a time-varying fashion to the parameter). Internally,
the parameters themselves are actually altered; make sure you use the the parameters themselves are actually altered; make sure you use the
*reset yes* option if you want the parameters to be restored to their *reset yes* option if you want the parameters to be restored to their
initial values after the run. initial values after the run.
@ -115,7 +115,7 @@ overrides the parameters.
The *pstyle* argument is the name of the pair style. If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is used, *pstyle* should be The *pstyle* argument is the name of the pair style. If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is used, *pstyle* should be
a sub-style name. For example, *pstyle* could be specified as "soft" a sub-style name. For example, *pstyle* could be specified as "soft"
or "lubricate". The *pparam* argument is the name of the parameter to or "lubricate." The *pparam* argument is the name of the parameter to
change. This is the current list of pair styles and parameters that change. This is the current list of pair styles and parameters that
can be varied by this fix. See the doc pages for individual pair can be varied by this fix. See the doc pages for individual pair
styles and their energy formulas for the meaning of these parameters: styles and their energy formulas for the meaning of these parameters:
@ -188,7 +188,7 @@ styles and their energy formulas for the meaning of these parameters:
Note that for many of the potentials, the parameter that can be varied Note that for many of the potentials, the parameter that can be varied
is effectively a prefactor on the entire energy expression for the is effectively a prefactor on the entire energy expression for the
potential, e.g. the lj/cut epsilon. The parameters listed as "scale" potential (e.g., the lj/cut epsilon). The parameters listed as "scale"
are exactly that, since the energy expression for the are exactly that, since the energy expression for the
:doc:`coul/cut <pair_coul>` potential (for example) has no labeled :doc:`coul/cut <pair_coul>` potential (for example) has no labeled
prefactor in its formula. To apply an effective prefactor to some prefactor in its formula. To apply an effective prefactor to some
@ -204,23 +204,23 @@ specified, but are ignored.
Similar to the :doc:`pair_coeff command <pair_coeff>`, I and J can be Similar to the :doc:`pair_coeff command <pair_coeff>`, I and J can be
specified in one of two ways. Explicit numeric values can be used for specified in one of two ways. Explicit numeric values can be used for
each, as in the first example above. I <= J is required. LAMMPS sets each, as in the first example above. :math:`I \le J` is required. LAMMPS sets
the coefficients for the symmetric J,I interaction to the same values. 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 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 the :math:`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 types. This takes the form "\*" or "\*n" or "m\*" or "m\*n." If :math:`N` is
number of atom types, then an asterisk with no numeric values means 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 all types from 1 to :math:`N`. A leading asterisk means all types from 1 to n
(inclusive). A trailing asterisk means all types from n to N (inclusive). A trailing asterisk means all types from m to :math:`N`
(inclusive). A middle asterisk means all types from m 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 (inclusive). Note that only type pairs with :math:`I \le J` are considered; if
asterisks imply type pairs where J < I, they are ignored. asterisks imply type pairs where :math:`J < I`, they are ignored.
IMPROTANT NOTE: If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is being used, then the *pstyle* will IMPROTANT NOTE: If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is
be a sub-style name. You must specify I,J arguments that correspond being used, then the *pstyle* will be a sub-style name. You must specify
to type pair values defined (via the :doc:`pair_coeff <pair_coeff>` :math:`I,J` arguments that correspond to type pair values defined (via the
command) for that sub-style. :doc:`pair_coeff <pair_coeff>` command) for that sub-style.
The *v_name* argument for keyword *pair* is the name of an The *v_name* argument for keyword *pair* is the name of an
:doc:`equal-style variable <variable>` which will be evaluated each time :doc:`equal-style variable <variable>` which will be evaluated each time
@ -232,8 +232,7 @@ simulation box parameters and timestep and elapsed time. Thus it is
easy to specify parameters that change as a function of time or span easy to specify parameters that change as a function of time or span
consecutive runs in a continuous fashion. For the latter, see the consecutive runs in a continuous fashion. For the latter, see the
*start* and *stop* keywords of the :doc:`run <run>` command and the *start* and *stop* keywords of the :doc:`run <run>` command and the
*elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for *elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for details.
details.
For example, these commands would change the prefactor coefficient of For example, these commands would change the prefactor coefficient of
the :doc:`pair_style soft <pair_soft>` potential from 10.0 to 30.0 in a the :doc:`pair_style soft <pair_soft>` potential from 10.0 to 30.0 in a
@ -247,7 +246,7 @@ linear fashion over the course of a simulation:
---------- ----------
The *kspace* keyword used the specified variable as a scale factor on The *kspace* keyword used the specified variable as a scale factor on
the energy, forces, virial calculated by whatever K-Space solver is the energy, forces, virial calculated by whatever :math:`k`-space solver is
defined by the :doc:`kspace_style <kspace_style>` command. If the defined by the :doc:`kspace_style <kspace_style>` command. If the
variable has a value of 1.0, then the solver is unaltered. variable has a value of 1.0, then the solver is unaltered.
@ -263,8 +262,8 @@ current list of atom parameters that can be varied by this fix:
* charge = charge on particle * charge = charge on particle
* diameter = diameter of particle * diameter = diameter of particle
The *I* argument indicates which atom types are affected. A wild-card The :math:`I` argument indicates which atom types are affected. A wild-card
asterisk can be used in place of or in conjunction with the I argument asterisk can be used in place of or in conjunction with the :math:`I` argument
to set the coefficients for multiple atom types. to set the coefficients for multiple atom types.
The *v_name* argument of the *atom* keyword is the name of an The *v_name* argument of the *atom* keyword is the name of an
@ -276,9 +275,9 @@ variables. The new value is assigned to the corresponding attribute
for all atoms in the fix group. for all atoms in the fix group.
If the atom parameter is *diameter* and per-atom density and per-atom If the atom parameter is *diameter* and per-atom density and per-atom
mass are defined for particles (e.g. :doc:`atom_style granular <atom_style>`), then the mass of each particle is also mass are defined for particles (e.g., :doc:`atom_style granular <atom_style>`),
changed when the diameter changes (density is assumed to stay then the mass of each particle is also changed when the diameter changes
constant). (density is assumed to stay constant).
For example, these commands would shrink the diameter of all granular For example, these commands would shrink the diameter of all granular
particles in the "center" group from 1.0 to 0.1 in a linear fashion particles in the "center" group from 1.0 to 0.1 in a linear fashion
@ -297,11 +296,14 @@ parameters on the outermost rRESPA level.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to
:doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`. by this fix for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""
@ -310,7 +312,8 @@ Restrictions
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`compute fep <compute_fep>`, :doc:`fix adapt <fix_adapt>`, :doc:`compute ti <compute_ti>`, :doc:`pair_style \*/soft <pair_fep_soft>` :doc:`compute fep <compute_fep>`, :doc:`fix adapt <fix_adapt>`,
:doc:`compute ti <compute_ti>`, :doc:`pair_style \*/soft <pair_fep_soft>`
Default Default
""""""" """""""

View File

@ -6,7 +6,7 @@ fix addforce command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID addforce fx fy fz keyword value ... fix ID group-ID addforce fx fy fz keyword value ...
@ -24,7 +24,7 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*every* value = Nevery *every* value = Nevery
Nevery = add force every this many timesteps Nevery = add force every this many time steps
*region* value = region-ID *region* value = region-ID
region-ID = ID of region atoms must be in to have added force region-ID = ID of region atoms must be in to have added force
*energy* value = v_name *energy* value = v_name
@ -42,31 +42,31 @@ Examples
Description Description
""""""""""" """""""""""
Add fx,fy,fz to the corresponding component of force for each atom in Add :math:`(f_x,f_y,f_z)` to the corresponding component of the force for each
the group. This command can be used to give an additional push to atom in the group. This command can be used to give an additional push to
atoms in a simulation, such as for a simulation of Poiseuille flow in atoms in a simulation, such as for a simulation of Poiseuille flow in
a channel. a channel.
Any of the 3 quantities defining the force components can be specified Any of the three quantities defining the force components, namely :math:`f_x`,
as an equal-style or atom-style :doc:`variable <variable>`, namely *fx*, :math:`f_y`, and :math:`f_z`, can be specified as an equal-style or atom-style
*fy*, *fz*\ . If the value is a variable, it should be specified as :doc:`variable <variable>`. If the value is a variable, it should be specified
v_name, where name is the variable name. In this case, the variable as v_name, where name is the variable name. In this case, the variable
will be evaluated each timestep, and its value(s) used to determine will be evaluated each time step, and its value(s) will be used to determine
the force component. the force component(s).
Equal-style variables can specify formulas with various mathematical Equal-style variables can specify formulas with various mathematical
functions, and include :doc:`thermo_style <thermo_style>` command functions and include :doc:`thermo_style <thermo_style>` command
keywords for the simulation box parameters and timestep and elapsed keywords for the simulation box parameters, time step, and elapsed time.
time. Thus it is easy to specify a time-dependent force field. Thus, it is easy to specify a time-dependent force field.
Atom-style variables can specify the same formulas as equal-style Atom-style variables can specify the same formulas as equal-style
variables but can also include per-atom values, such as atom variables but can also include per-atom values, such as atom
coordinates. Thus it is easy to specify a spatially-dependent force coordinates. Thus, it is easy to specify a spatially-dependent force
field with optional time-dependence as well. field with optional time-dependence as well.
If the *every* keyword is used, the *Nevery* setting determines how If the *every* keyword is used, the *Nevery* setting determines how
often the forces are applied. The default value is 1, for every often the forces are applied. The default value is 1, for every
timestep. time step.
If the *region* keyword is used, the atom must also be in the If the *region* keyword is used, the atom must also be in the
specified geometric :doc:`region <region>` in order to have force added specified geometric :doc:`region <region>` in order to have force added
@ -83,10 +83,14 @@ potential energy to formulate a self-consistent minimization problem
(see below). (see below).
The *energy* keyword is not allowed if the added force is a constant The *energy* keyword is not allowed if the added force is a constant
vector F = (fx,fy,fz), with all components defined as numeric vector :math:`\vec F = (f_x,f_y,f_z)`, with all components defined as numeric
constants and not as variables. This is because LAMMPS can compute constants and not as variables. This is because LAMMPS can compute
the energy for each atom directly as E = -x dot F = -(x\*fx + y\*fy + the energy for each atom directly as
z\*fz), so that -Grad(E) = F.
.. math::
E = -\vec x \cdot \vec F = -(x f_x + y f_y + z f_z),
so that :math:`-\vec\nabla E = \vec F`.
The *energy* keyword is optional if the added force is defined with The *energy* keyword is optional if the added force is defined with
one or more variables, and if you are performing dynamics via the one or more variables, and if you are performing dynamics via the
@ -98,16 +102,16 @@ one or more variables, and you are performing energy minimization via
the "minimize" command. The keyword specifies the name of an the "minimize" command. The keyword specifies the name of an
atom-style :doc:`variable <variable>` which is used to compute the atom-style :doc:`variable <variable>` which is used to compute the
energy of each atom as function of its position. Like variables used energy of each atom as function of its position. Like variables used
for *fx*, *fy*, *fz*, the energy variable is specified as v_name, for :math:`f_x`, :math:`f_y`, :math:`f_z`, the energy variable is specified as
where name is the variable name. v_name, where name is the variable name.
Note that when the *energy* keyword is used during an energy Note that when the *energy* keyword is used during an energy
minimization, you must insure that the formula defined for the minimization, you must insure that the formula defined for the
atom-style :doc:`variable <variable>` is consistent with the force atom-style :doc:`variable <variable>` is consistent with the force
variable formulas, i.e. that -Grad(E) = F. For example, if the force variable formulas (i.e., that :math:`-\vec\nabla E = \vec F`).
were a spring-like F = kx, then the energy formula should be E = For example, if the force were a spring-like, :math:`\vec F = -k\vec x`, then
-0.5kx\^2. If you don't do this correctly, the minimization will not the energy formula should be :math:`E = \frac12 kx^2`. If you do not do this
converge properly. correctly, the minimization will not converge properly.
---------- ----------
@ -128,8 +132,8 @@ the global potential energy of the system as part of
this fix is :doc:`fix_modify energy no <fix_modify>`. Note that this this fix is :doc:`fix_modify energy no <fix_modify>`. Note that this
energy is a fictitious quantity but is needed so that the energy is a fictitious quantity but is needed so that the
:doc:`minimize <minimize>` command can include the forces added by :doc:`minimize <minimize>` command can include the forces added by
this fix in a consistent manner. I.e. there is a decrease in this fix in a consistent manner (i.e., there is a decrease in
potential energy when atoms move in the direction of the added force. potential energy when atoms move in the direction of the added force).
The :doc:`fix_modify <fix_modify>` *virial* option is supported by The :doc:`fix_modify <fix_modify>` *virial* option is supported by
this fix to add the contribution due to the added forces on atoms to this fix to add the contribution due to the added forces on atoms to
@ -144,12 +148,12 @@ fix. This allows to set at which level of the :doc:`r-RESPA
<run_style>` integrator the fix is adding its forces. Default is the <run_style>` integrator the fix is adding its forces. Default is the
outermost level. outermost level.
This fix computes a global scalar and a global 3-vector of forces, This fix computes a global scalar and a global three-vector of forces,
which can be accessed by various :doc:`output commands which can be accessed by various :doc:`output commands
<Howto_output>`. The scalar is the potential energy discussed above. <Howto_output>`. The scalar is the potential energy discussed above.
The vector is the total force on the group of atoms before the forces The vector is the total force on the group of atoms before the forces
on individual atoms are changed by the fix. The scalar and vector on individual atoms are changed by the fix. The scalar and vector
values calculated by this fix are "extensive". values calculated by this fix are "extensive."
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. the :doc:`run <run>` command.
@ -157,7 +161,7 @@ the :doc:`run <run>` command.
The forces due to this fix are imposed during an energy minimization, The forces due to this fix are imposed during an energy minimization,
invoked by the :doc:`minimize <minimize>` command. You should not invoked by the :doc:`minimize <minimize>` command. You should not
specify force components with a variable that has time-dependence for specify force components with a variable that has time-dependence for
use with a minimizer, since the minimizer increments the timestep as use with a minimizer, since the minimizer increments the time step as
the iteration count during the minimization. the iteration count during the minimization.
.. note:: .. note::

View File

@ -6,7 +6,7 @@ fix addtorque command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID addtorque Tx Ty Tz fix ID group-ID addtorque Tx Ty Tz
@ -30,13 +30,13 @@ Add a set of forces to each atom in
the group such that: the group such that:
* the components of the total torque applied on the group (around its * the components of the total torque applied on the group (around its
center of mass) are Tx,Ty,Tz center of mass) are :math:`T_x`, :math:`T_y`, and :math:`T_z`
* the group would move as a rigid body in the absence of other * the group would move as a rigid body in the absence of other
forces. forces.
This command can be used to drive a group of atoms into rotation. This command can be used to drive a group of atoms into rotation.
Any of the 3 quantities defining the torque components can be specified Any of the three quantities defining the torque components can be specified
as an equal-style :doc:`variable <variable>`, namely *Tx*, as an equal-style :doc:`variable <variable>`, namely *Tx*,
*Ty*, *Tz*\ . If the value is a variable, it should be specified as *Ty*, *Tz*\ . If the value is a variable, it should be specified as
v_name, where name is the variable name. In this case, the variable v_name, where name is the variable name. In this case, the variable
@ -53,7 +53,8 @@ time. Thus it is easy to specify a time-dependent torque.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. No information about this fix is written to
:doc:`binary restart files <restart>`.
The :doc:`fix_modify <fix_modify>` *energy* option is supported by The :doc:`fix_modify <fix_modify>` *energy* option is supported by
this fix to add the potential "energy" inferred by the added torques this fix to add the potential "energy" inferred by the added torques
@ -62,8 +63,8 @@ to the global potential energy of the system as part of
this fix is :doc:`fix_modify energy no <fix_modify>`. Note that this this fix is :doc:`fix_modify energy no <fix_modify>`. Note that this
is a fictitious quantity but is needed so that the :doc:`minimize is a fictitious quantity but is needed so that the :doc:`minimize
<minimize>` command can include the forces added by this fix in a <minimize>` command can include the forces added by this fix in a
consistent manner. I.e. there is a decrease in potential energy when consistent manner (i.e., there is a decrease in potential energy when
atoms move in the direction of the added forces. atoms move in the direction of the added forces).
The :doc:`fix_modify <fix_modify>` *respa* option is supported by The :doc:`fix_modify <fix_modify>` *respa* option is supported by
this fix. This allows to set at which level of the :doc:`r-RESPA <run_style>` this fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
@ -74,7 +75,7 @@ accessed by various :doc:`output commands <Howto_output>`. The scalar
is the potential energy discussed above. The vector is the total is the potential energy discussed above. The vector is the total
torque on the group of atoms before the forces on individual atoms are torque on the group of atoms before the forces on individual atoms are
changed by the fix. The scalar and vector values calculated by this changed by the fix. The scalar and vector values calculated by this
fix are "extensive". fix are "extensive."
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. the :doc:`run <run>` command.
@ -99,9 +100,9 @@ invoked by the :doc:`minimize <minimize>` command.
Restrictions Restrictions
"""""""""""" """"""""""""
This fix is part of the EXTRA-FIX package. It is only enabled if This fix is part of the EXTRA-FIX package. It is only enabled if LAMMPS was
LAMMPS was built with that package. See the :doc:`Build package built with that package. See the :doc:`Build package <Build_package>` page for
<Build_package>` page for more info. more info.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -6,7 +6,7 @@ fix amoeba/bitorsion command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ameoba/bitorsion filename fix ID group-ID ameoba/bitorsion filename
@ -55,8 +55,8 @@ should have a line like this in its header section:
N bitorsions N bitorsions
where N is the number of bitorsion 5-body interactions. It should where :math:`N` is the number of bitorsion 5-body interactions. It should
also have a section in the body of the data file like this with N also have a section in the body of the data file like this with :math:`N`
lines: lines:
.. parsed-literal:: .. parsed-literal::
@ -68,7 +68,7 @@ lines:
[...] [...]
N 3 314 315 317 318 330 N 3 314 315 317 318 330
The first column is an index from 1 to N to enumerate the bitorsion The first column is an index from 1 to :math:`N` to enumerate the bitorsion
5-atom tuples; it is ignored by LAMMPS. The second column is the 5-atom tuples; it is ignored by LAMMPS. The second column is the
*type* of the interaction; it is an index into the bitorsion force *type* of the interaction; it is an index into the bitorsion force
field file. The remaining 5 columns are the atom IDs of the atoms in field file. The remaining 5 columns are the atom IDs of the atoms in
@ -124,7 +124,7 @@ setting for this fix is :doc:`fix_modify virial yes <fix_modify>`.
This fix computes a global scalar which can be accessed by various This fix computes a global scalar which can be accessed by various
:doc:`output commands <Howto_output>`. The scalar is the potential :doc:`output commands <Howto_output>`. The scalar is the potential
energy discussed above. The scalar value calculated by this fix is energy discussed above. The scalar value calculated by this fix is
"extensive". "extensive."
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. the :doc:`run <run>` command.

View File

@ -6,7 +6,7 @@ fix amoeba/pitorsion command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ameoba/pitorsion fix ID group-ID ameoba/pitorsion
@ -29,14 +29,16 @@ Description
This command enables 6-body pitorsion interactions to be added to This command enables 6-body pitorsion interactions to be added to
simulations which use the AMOEBA and HIPPO force fields. It matches simulations which use the AMOEBA and HIPPO force fields. It matches
how the Tinker MD code computes its pitorsion interactions for the how the Tinker MD code computes its pitorsion interactions for the
AMOEBA and HIPPO force fields. See the :doc:`Howto amoeba AMOEBA and HIPPO force fields. See the :doc:`Howto amoeba <Howto_amoeba>`
<Howto_amoeba>` doc page for more information about the implementation doc page for more information about the implementation of AMOEBA and HIPPO in
of AMOEBA and HIPPO in LAMMPS. LAMMPS.
Pitorsion interactions add additional potential energy contributions Pitorsion interactions add additional potential energy contributions
to 6-tuples of atoms IJKLMN which have a bond between atoms K and L, to 6-tuples of atoms :math:`IJKLMN` that have a bond between atoms
where both K and L are additionally bonded to exactly two other atoms. :math:`K` and :math:`L`, where both :math:`K` and :math:`L` are additionally
Namely K is also bonded to I and J. And L is also bonded to M and N. bonded to exactly two other atoms. Namely, :math:`K` is also bonded to
:math:`I` and :math:`J`, and :math:`L` is also bonded to :math:`M` and
:math:`N`.
The examples/amoeba directory has a sample input script and data file The examples/amoeba directory has a sample input script and data file
for ubiquitin, which illustrates use of the fix amoeba/pitorsion for ubiquitin, which illustrates use of the fix amoeba/pitorsion
@ -47,7 +49,7 @@ file that contains a listing of pitorsion interactions.
The data file read by the :doc:`read_data <read_data>` command must The data file read by the :doc:`read_data <read_data>` command must
contain the topology of all the pitorsion interactions, similar to the contain the topology of all the pitorsion interactions, similar to the
topology data for bonds, angles, dihedrals, etc. Specifically it topology data for bonds, angles, dihedrals, etc. Specifically, it
should have two lines like these in its header section: should have two lines like these in its header section:
.. parsed-literal:: .. parsed-literal::
@ -55,9 +57,9 @@ should have two lines like these in its header section:
M pitorsion types M pitorsion types
N pitorsions N pitorsions
where N is the number of pitorsion 5-body interactions and M is the where :math:`N` is the number of pitorsion 5-body interactions and :math:`M` is
number of pitorsion types. It should also have two sections in the body the number of pitorsion types. It should also have two sections in the body
of the data file like these with M and N lines each: of the data file like these with :math:`M` and :math:`N` lines each:
.. parsed-literal:: .. parsed-literal::
@ -77,11 +79,11 @@ of the data file like these with M and N lines each:
[...] [...]
N 3 314 315 317 318 330 N 3 314 315 317 318 330
For PiTorsion Coeffs, the first column is an index from 1 to M to For PiTorsion Coeffs, the first column is an index from 1 to :math:`M` to
enumerate the pitorsion types. The second column is the single enumerate the pitorsion types. The second column is the single
prefactor coefficient needed for each type. prefactor coefficient needed for each type.
For PiTorsions, the first column is an index from 1 to N to enumerate For PiTorsions, the first column is an index from 1 to :math:`N` to enumerate
the pitorsion 5-atom tuples; it is ignored by LAMMPS. The second the pitorsion 5-atom tuples; it is ignored by LAMMPS. The second
column is the "type" of the interaction; it is an index into the column is the "type" of the interaction; it is an index into the
PiTorsion Coeffs. The remaining 5 columns are the atom IDs of the PiTorsion Coeffs. The remaining 5 columns are the atom IDs of the
@ -90,8 +92,8 @@ atoms in the two 4-atom dihedrals that overlap to create the pitorsion
Note that the *pitorsion types* and *pitorsions* and *PiTorsion Note that the *pitorsion types* and *pitorsions* and *PiTorsion
Coeffs* and *PiTorsions* keywords for the header and body sections of Coeffs* and *PiTorsions* keywords for the header and body sections of
the data file match those specified in the :doc:`read_data the data file match those specified in the :doc:`read_data <read_data>`
<read_data>` command following the data file name. command following the data file name.
The data file should be generated by using the The data file should be generated by using the
tools/tinker/tinker2lmp.py conversion script which creates a LAMMPS tools/tinker/tinker2lmp.py conversion script which creates a LAMMPS
@ -136,7 +138,7 @@ setting for this fix is :doc:`fix_modify virial yes <fix_modify>`.
This fix computes a global scalar which can be accessed by various This fix computes a global scalar which can be accessed by various
:doc:`output commands <Howto_output>`. The scalar is the potential :doc:`output commands <Howto_output>`. The scalar is the potential
energy discussed above. The scalar value calculated by this fix is energy discussed above. The scalar value calculated by this fix is
"extensive". "extensive."
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. the :doc:`run <run>` command.
@ -161,8 +163,8 @@ Restrictions
"""""""""""" """"""""""""
To function as expected this fix command must be issued *before* a To function as expected this fix command must be issued *before* a
:doc:`read_data <read_data>` command but *after* a :doc:`read_restart :doc:`read_data <read_data>` command but *after* a
<read_restart>` command. :doc:`read_restart <read_restart>` command.
This fix can only be used if LAMMPS was built with the AMOEBA package. This fix can only be used if LAMMPS was built with the AMOEBA package.
See the :doc:`Build package <Build_package>` page for more info. See the :doc:`Build package <Build_package>` page for more info.

View File

@ -6,7 +6,7 @@ fix append/atoms command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID append/atoms face ... keyword value ... fix ID group-ID append/atoms face ... keyword value ...
@ -66,7 +66,7 @@ specific basis atoms as they are created. See the
defined for the unit cell of the lattice. By default, all created defined for the unit cell of the lattice. By default, all created
atoms are assigned type = 1 unless this keyword specifies differently. atoms are assigned type = 1 unless this keyword specifies differently.
The *size* keyword defines the size in z of the chunk of material to The *size* keyword defines the size in :math:`z` of the chunk of material to
be added. be added.
The *random* keyword will give the atoms random displacements around The *random* keyword will give the atoms random displacements around
@ -79,7 +79,8 @@ measured from zhi and is set with the *extent* argument.
The *units* keyword determines the meaning of the distance units used The *units* keyword determines the meaning of the distance units used
to define a wall position, but only when a numeric constant is used. to define a wall position, but only when a numeric constant is used.
A *box* value selects standard distance units as defined by the A *box* value selects standard distance units as defined by the
:doc:`units <units>` command, e.g. Angstroms for units = real or metal. :doc:`units <units>` command (e.g., :math:`\mathrm{\mathring A}`
for units = real or metal.
A *lattice* value means the distance units are in lattice spacings. A *lattice* value means the distance units are in lattice spacings.
The :doc:`lattice <lattice>` command must have been previously used to The :doc:`lattice <lattice>` command must have been previously used to
define the lattice spacings. define the lattice spacings.
@ -89,17 +90,21 @@ define the lattice spacings.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to
:doc:`binary restart files <restart>`. None of the
:doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`. by this fix for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""
This fix style is part of the SHOCK package. It is only enabled if This fix style is part of the SHOCK package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info. LAMMPS was built with that package. See the
:doc:`Build package <Build_package>` page for more info.
The boundary on which atoms are added with append/atoms must be The boundary on which atoms are added with append/atoms must be
shrink/minimum. The opposite boundary may be any boundary type other shrink/minimum. The opposite boundary may be any boundary type other

View File

@ -6,7 +6,7 @@ fix atc command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix <fixID> <group> atc <type> <parameter_file> fix <fixID> <group> atc <type> <parameter_file>
@ -40,8 +40,8 @@ This fix is the beginning to creating a coupled FE/MD simulation and/or
an on-the-fly estimation of continuum fields. The coupled versions of an on-the-fly estimation of continuum fields. The coupled versions of
this fix do Verlet integration and the post-processing does not. After this fix do Verlet integration and the post-processing does not. After
instantiating this fix, several other fix_modify commands will be instantiating this fix, several other fix_modify commands will be
needed to set up the problem, e.g. define the finite element mesh and needed to set up the problem (i.e., define the finite element mesh and
prescribe initial and boundary conditions. prescribe initial and boundary conditions).
.. image:: JPG/atc_nanotube.jpg .. image:: JPG/atc_nanotube.jpg
:align: center :align: center
@ -135,7 +135,7 @@ fix are listed below.
This fix computes a global scalar which can be accessed by various This fix computes a global scalar which can be accessed by various
:doc:`output commands <Howto_output>`. The scalar is the energy :doc:`output commands <Howto_output>`. The scalar is the energy
discussed in the previous paragraph. The scalar value is "extensive". discussed in the previous paragraph. The scalar value is "extensive."
No parameter of this fix can be used with the No parameter of this fix can be used with the
*start/stop* keywords of the :doc:`run <run>` command. This fix is not *start/stop* keywords of the :doc:`run <run>` command. This fix is not
@ -147,7 +147,7 @@ Restrictions
Thermal and two_temperature (coupling) types use a Verlet Thermal and two_temperature (coupling) types use a Verlet
time-integration algorithm. The hardy type does not contain its own time-integration algorithm. The hardy type does not contain its own
time-integrator and must be used with a separate fix that does contain time-integrator and must be used with a separate fix that does contain
one, e.g. nve, nvt, etc. In addition, currently: one (e.g., nve, nvt). In addition, currently:
* the coupling is restricted to thermal physics * the coupling is restricted to thermal physics
* the FE computations are done in serial on each processor. * the FE computations are done in serial on each processor.
@ -159,8 +159,8 @@ Related commands
After specifying this fix in your input script, several After specifying this fix in your input script, several
:doc:`fix_modify AtC <fix_modify>` commands are used to setup the :doc:`fix_modify AtC <fix_modify>` commands are used to setup the
problem, e.g. define the finite element mesh and prescribe initial and problem (e.g., define the finite element mesh and prescribe initial and
boundary conditions. Each of these options has its own doc page. boundary conditions). Each of these options has its own doc page.
*fix_modify* commands for setup: *fix_modify* commands for setup:
@ -311,6 +311,6 @@ and Computation (2011), 7:1736.
as a field variable from molecular dynamics simulations." Journal of as a field variable from molecular dynamics simulations." Journal of
Chemical Physics (2013), 139:054115. Chemical Physics (2013), 139:054115.
Please refer to the standard finite element (FE) texts, e.g. T.J.R Please refer to the standard finite element (FE) texts (e.g., T.J.R.
Hughes " The finite element method ", Dover 2003, for the basics of FE Hughes, *The Finite Element Method,* Dover 2003) for the basics of FE
simulation. simulations.

View File

@ -6,7 +6,7 @@ fix atom/swap command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID atom/swap N X seed T keyword values ... fix ID group-ID atom/swap N X seed T keyword values ...
@ -45,10 +45,10 @@ Description
""""""""""" """""""""""
This fix performs Monte Carlo swaps of atoms of one given atom type This fix performs Monte Carlo swaps of atoms of one given atom type
with atoms of the other given atom types. The specified T is used in with atoms of the other given atom types. The specified :math:`T` is used in
the Metropolis criterion dictating swap probabilities. the Metropolis criterion dictating swap probabilities.
Perform X swaps of atoms of one type with atoms of another type Perform :math:`X` swaps of atoms of one type with atoms of another type
according to a Monte Carlo probability. Swap candidates must be in the according to a Monte Carlo probability. Swap candidates must be in the
fix group, must be in the region (if specified), and must be of one of fix group, must be in the region (if specified), and must be of one of
the listed types. Swaps are attempted between candidates that are the listed types. Swaps are attempted between candidates that are
@ -57,7 +57,7 @@ atoms. Swaps are not attempted between atoms of the same type since
nothing would happen. nothing would happen.
All atoms in the simulation domain can be moved using regular time All atoms in the simulation domain can be moved using regular time
integration displacements, e.g. via :doc:`fix nvt <fix_nh>`, resulting integration displacements (e.g., via :doc:`fix nvt <fix_nh>`), resulting
in a hybrid MC+MD simulation. A smaller-than-usual timestep size may in a hybrid MC+MD simulation. A smaller-than-usual timestep size may
be needed when running such a hybrid simulation, especially if the be needed when running such a hybrid simulation, especially if the
swapped atoms are not well equilibrated. swapped atoms are not well equilibrated.
@ -83,9 +83,8 @@ canonical ensemble, the composition of the system can change. Note
that when using *semi-grand*, atoms in the fix group whose type is not that when using *semi-grand*, atoms in the fix group whose type is not
listed in the *types* keyword are ineligible for attempted listed in the *types* keyword are ineligible for attempted
conversion. An attempt is made to switch the selected atom (if conversion. An attempt is made to switch the selected atom (if
eligible) to one of the other listed types with equal eligible) to one of the other listed types with equal probability.
probability. Acceptance of each attempt depends upon the Metropolis Acceptance of each attempt depends upon the Metropolis criterion.
criterion.
The *mu* keyword allows users to specify chemical potentials. This is The *mu* keyword allows users to specify chemical potentials. This is
required and allowed only when using *semi-grand*\ . All chemical required and allowed only when using *semi-grand*\ . All chemical
@ -97,8 +96,8 @@ amount will have no effect on the simulation.
This command may optionally use the *region* keyword to define swap This command may optionally use the *region* keyword to define swap
volume. The specified region must have been previously defined with a volume. The specified region must have been previously defined with a
:doc:`region <region>` command. It must be defined with side = *in*\ :doc:`region <region>` command. It must be defined with side = *in*\ .
. Swap attempts occur only between atoms that are both within the Swap attempts occur only between atoms that are both within the
specified region. Swaps are not otherwise attempted. specified region. Swaps are not otherwise attempted.
You should ensure you do not swap atoms belonging to a molecule, or You should ensure you do not swap atoms belonging to a molecule, or
@ -123,7 +122,7 @@ Since this fix computes total potential energies before and after
proposed swaps, so even complicated potential energy calculations are proposed swaps, so even complicated potential energy calculations are
OK, including the following: OK, including the following:
* long-range electrostatics (kspace) * long-range electrostatics (:math:`k`-space)
* many body pair styles * many body pair styles
* hybrid pair styles * hybrid pair styles
* eam pair styles * eam pair styles
@ -137,7 +136,7 @@ include: :doc:`efield <fix_efield>`, :doc:`gravity <fix_gravity>`,
<fix_temp_berendsen>`, :doc:`temp/rescale <fix_temp_rescale>`, and <fix_temp_berendsen>`, :doc:`temp/rescale <fix_temp_rescale>`, and
:doc:`wall fixes <fix_wall>`. For that energy to be included in the :doc:`wall fixes <fix_wall>`. For that energy to be included in the
total potential energy of the system (the quantity used when total potential energy of the system (the quantity used when
performing GCMC moves), you MUST enable the :doc:`fix_modify performing GCMC moves), you **must** enable the :doc:`fix_modify
<fix_modify>` *energy* option for that fix. The doc pages for <fix_modify>` *energy* option for that fix. The doc pages for
individual :doc:`fix <fix>` commands specify if this should be done. individual :doc:`fix <fix>` commands specify if this should be done.
@ -147,7 +146,7 @@ Restart, fix_modify, output, run start/stop, minimize info
This fix writes the state of the fix to :doc:`binary restart files This fix writes the state of the fix to :doc:`binary restart files
<restart>`. This includes information about the random number <restart>`. This includes information about the random number
generator seed, the next timestep for MC exchanges, the number of generator seed, the next timestep for MC exchanges, the number of
exchange attempts and successes etc. See the :doc:`read_restart exchange attempts and successes, etc. See the :doc:`read_restart
<read_restart>` command for info on how to re-specify a fix in an <read_restart>` command for info on how to re-specify a fix in an
input script that reads a restart file, so that the operation of the input script that reads a restart file, so that the operation of the
fix continues in an uninterrupted fashion. fix continues in an uninterrupted fashion.
@ -168,7 +167,7 @@ the following global cumulative quantities:
* 1 = swap attempts * 1 = swap attempts
* 2 = swap accepts * 2 = swap accepts
The vector values calculated by this fix are "extensive". The vector values calculated by this fix are "extensive."
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during the :doc:`run <run>` command. This fix is not invoked during

View File

@ -6,7 +6,7 @@ fix ave/atom command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ave/atom Nevery Nrepeat Nfreq value1 value2 ... fix ID group-ID ave/atom Nevery Nrepeat Nfreq value1 value2 ...
@ -15,8 +15,8 @@ Syntax
* Nevery = use input values every this many timesteps * Nevery = use input values every this many timesteps
* Nrepeat = # of times to use input values for calculating averages * Nrepeat = # of times to use input values for calculating averages
* Nfreq = calculate averages every this many timesteps * Nfreq = calculate averages every this many timesteps
one or more input values can be listed * one or more input values can be listed
* value = x, y, z, vx, vy, vz, fx, fy, fz, c_ID, c_ID[i], f_ID, f_ID[i], v_name * value = *x*, *y*, *z*, *vx*, *vy*, *vz*, *fx*, *fy*, *fz*, c_ID, c_ID[i], f_ID, f_ID[i], v_name
.. parsed-literal:: .. parsed-literal::
@ -41,7 +41,9 @@ Description
Use one or more per-atom vectors as inputs every few timesteps, and Use one or more per-atom vectors as inputs every few timesteps, and
average them atom by atom over longer timescales. The resulting average them atom by atom over longer timescales. The resulting
per-atom averages can be used by other :doc:`output commands <Howto_output>` such as the :doc:`fix ave/chunk <fix_ave_chunk>` or :doc:`dump custom <dump>` commands. per-atom averages can be used by other :doc:`output commands <Howto_output>`
such as the :doc:`fix ave/chunk <fix_ave_chunk>` or :doc:`dump custom <dump>`
commands.
The group specified with the command means only atoms within the group The group specified with the command means only atoms within the group
have their averages computed. Results are set to 0.0 for atoms not in have their averages computed. Results are set to 0.0 for atoms not in
@ -53,7 +55,8 @@ component) or can be the result of a :doc:`compute <compute>` or
:doc:`variable <variable>`. In the latter cases, the compute, fix, or :doc:`variable <variable>`. In the latter cases, the compute, fix, or
variable must produce a per-atom vector, not a global quantity or variable must produce a per-atom vector, not a global quantity or
local quantity. If you wish to time-average global quantities from a local quantity. If you wish to time-average global quantities from a
compute, fix, or variable, then see the :doc:`fix ave/time <fix_ave_time>` command. compute, fix, or variable, then see the :doc:`fix ave/time <fix_ave_time>`
command.
Each per-atom value of each input vector is averaged independently. Each per-atom value of each input vector is averaged independently.
@ -66,18 +69,18 @@ per-atom vectors.
Note that for values from a compute or fix, the bracketed index I can Note that for values from a compute or fix, the bracketed index I can
be specified using a wildcard asterisk with the index to effectively be specified using a wildcard asterisk with the index to effectively
specify multiple values. This takes the form "\*" or "\*n" or "n\*" or specify multiple values. This takes the form "\*" or "\*n" or "m\*" or
"m\*n". If N = the size of the vector (for *mode* = scalar) or the "m\*n." If :math:`N` is the size of the vector (for *mode* = scalar) or the
number of columns in the array (for *mode* = vector), then an asterisk number of columns in the array (for *mode* = vector), then an asterisk
with no numeric values means all indices from 1 to N. A leading with no numeric values means all indices from 1 to :math:`N`. A leading
asterisk means all indices from 1 to n (inclusive). A trailing asterisk means all indices from 1 to n (inclusive). A trailing
asterisk means all indices from n to N (inclusive). A middle asterisk asterisk means all indices from m to :math:`N` (inclusive). A middle asterisk
means all indices from m to n (inclusive). means all indices from m to n (inclusive).
Using a wildcard is the same as if the individual columns of the array Using a wildcard is the same as if the individual columns of the array
had been listed one by one. E.g. these 2 fix ave/atom commands are had been listed one by one. For example, these two fix ave/atom commands are
equivalent, since the :doc:`compute stress/atom <compute_stress_atom>` equivalent, since the :doc:`compute stress/atom <compute_stress_atom>`
command creates a per-atom array with 6 columns: command creates a per-atom array with six columns:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -89,61 +92,66 @@ command creates a per-atom array with 6 columns:
---------- ----------
The *Nevery*, *Nrepeat*, and *Nfreq* arguments specify on what The :math:`N_\text{every}`, :math:`N_\text{repeat}`, and :math:`N_\text{freq}`
timesteps the input values will be used in order to contribute to the arguments specify on what timesteps the input values will be used in order to
average. The final averaged quantities are generated on timesteps contribute to the average. The final averaged quantities are generated on
that are a multiple of *Nfreq*\ . The average is over *Nrepeat* timesteps that are a multiple of :math:`N_\text{freq}`\ . The average is over
quantities, computed in the preceding portion of the simulation every :math:`N_\text{repeat}` quantities, computed in the preceding portion of the
*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and simulation every :math:`N_\text{every}` timesteps. :math:`N_\text{freq}` must
*Nevery* must be non-zero even if *Nrepeat* is 1. Also, the timesteps be a multiple of :math:`N_\text{every}` and :math:`N_\text{every}` must be
contributing to the average value cannot overlap, non-zero even if :math:`N_\text{repeat}` is 1. Also, the timesteps
i.e. Nrepeat\*Nevery can not exceed Nfreq. contributing to the average value cannot overlap; that is,
:math:`N_\text{repeat} N_\text{every}` cannot exceed :math:`N_\text{freq}`.
For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on For example, if :math:`N_\text{every}=2`, :math:`N_\text{repeat}=6`, and
timesteps 90,92,94,96,98,100 will be used to compute the final average :math:`N_\text{freq}=100`, then values on timesteps 90, 92, 94, 96, 98, and 100
on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on will be used to compute the final average on time step 100. Similarly for
timestep 200, etc. timesteps 190, 192, 194, 196, 198, and 200 on time step 200, etc.
---------- ----------
The atom attribute values (x,y,z,vx,vy,vz,fx,fy,fz) are The atom attribute values (*x*, *y*, *z*, *vx*, *vy*, *vz*, *fx*, *fy*, and
self-explanatory. Note that other atom attributes can be used as *fz*) are self-explanatory. Note that other atom attributes can be used as
inputs to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying inputs to this fix by using the
an input value from that compute. :doc:`compute property/atom <compute_property_atom>` command and then
specifying an input value from that compute.
.. note:: .. note::
The x,y,z attributes are values that are re-wrapped inside the The *x*\ , *y*\ , and *z* attributes are values that are re-wrapped inside
periodic box whenever an atom crosses a periodic boundary. Thus if the periodic box whenever an atom crosses a periodic boundary. Thus, if
you time average an atom that spends half its time on either side of you time-average an atom that spends half of its time on either side of
the periodic box, you will get a value in the middle of the box. If the periodic box, you will get a value in the middle of the box. If
this is not what you want, consider averaging unwrapped coordinates, this is not what you want, consider averaging unwrapped coordinates,
which can be provided by the :doc:`compute property/atom <compute_property_atom>` command via its xu,yu,zu which can be provided by the
attributes. :doc:`compute property/atom <compute_property_atom>`
command via its *xu*, *yu*, and *zu* attributes.
If a value begins with "c\_", a compute ID must follow which has been If a value begins with "c\_," a compute ID must follow which has been
previously defined in the input script. If no bracketed term is previously defined in the input script. If no bracketed term is
appended, the per-atom vector calculated by the compute is used. If a appended, the per-atom vector calculated by the compute is used. If a
bracketed term containing an index I is appended, the Ith column of bracketed term containing an index :math:`I` is appended, the
the per-atom array calculated by the compute is used. Users can also :math:`I^\text{th}` column of the per-atom array calculated by the compute is
write code for their own compute styles and :doc:`add them to LAMMPS <Modify>`. See the discussion above for how I can used. Users can also write code for their own compute styles and
be specified with a wildcard asterisk to effectively specify multiple :doc:`add them to LAMMPS <Modify>`. See the discussion above for how
values. :math:`I` can be specified with a wildcard asterisk to effectively specify
multiple values.
If a value begins with "f\_", a fix ID must follow which has been If a value begins with "f\_," a fix ID must follow which has been previously
previously defined in the input script. If no bracketed term is defined in the input script. If no bracketed term is appended, the per-atom
appended, the per-atom vector calculated by the fix is used. If a vector calculated by the fix is used. If a bracketed term containing an index
bracketed term containing an index I is appended, the Ith column of :math:`I` is appended, the :math:`I^\text{th}` column of the per-atom array
the per-atom array calculated by the fix is used. Note that some calculated by the fix is used. Note that some fixes only produce their values
fixes only produce their values on certain timesteps, which must be on certain timesteps, which must be compatible with :math:`N_\text{every}`,
compatible with *Nevery*, else an error will result. Users can also else an error will result. Users can also write code for their own fix styles
write code for their own fix styles and :doc:`add them to LAMMPS <Modify>`. See the discussion above for how I can be and :doc:`add them to LAMMPS <Modify>`. See the discussion above for how
specified with a wildcard asterisk to effectively specify multiple :math:`I` can be specified with a wildcard asterisk to effectively specify
values. multiple values.
If a value begins with "v\_", a variable name must follow which has If a value begins with "v\_," a variable name must follow which has
been previously defined in the input script as an :doc:`atom-style variable <variable>` Variables of style *atom* can reference been previously defined in the input script as an
thermodynamic keywords, or invoke other computes, fixes, or variables :doc:`atom-style variable <variable>`. Variables of style *atom* can reference
thermodynamic keywords or invoke other computes, fixes, or variables
when they are evaluated, so this is a very general means of generating when they are evaluated, so this is a very general means of generating
per-atom quantities to time average. per-atom quantities to time average.
@ -152,19 +160,22 @@ per-atom quantities to time average.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to
are relevant to this fix. No global scalar or vector quantities are :doc:`binary restart files <restart>`. None of the
stored by this fix for access by various :doc:`output commands <Howto_output>`. :doc:`fix_modify <fix_modify>` options are relevant to this fix.
No global scalar or vector quantities are stored by this fix for access by
various :doc:`output commands <Howto_output>`.
This fix produces a per-atom vector or array which can be accessed by This fix produces a per-atom vector or array which can be accessed by
various :doc:`output commands <Howto_output>`. A vector is produced if various :doc:`output commands <Howto_output>`. A vector is produced if
only a single quantity is averaged by this fix. If two or more only a single quantity is averaged by this fix. If two or more
quantities are averaged, then an array of values is produced. The quantities are averaged, then an array of values is produced. The
per-atom values can only be accessed on timesteps that are multiples per-atom values can only be accessed on timesteps that are multiples
of *Nfreq* since that is when averaging is performed. of :math:`N_\text{freq}` since that is when averaging is performed.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""
@ -173,7 +184,8 @@ Restrictions
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`compute <compute>`, :doc:`fix ave/histo <fix_ave_histo>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/time <fix_ave_time>`, :doc:`compute <compute>`, :doc:`fix ave/histo <fix_ave_histo>`,
:doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/time <fix_ave_time>`,
:doc:`variable <variable>`, :doc:`variable <variable>`,
Default Default

View File

@ -6,7 +6,7 @@ fix ave/chunk command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ave/chunk Nevery Nrepeat Nfreq chunkID value1 value2 ... keyword args ... fix ID group-ID ave/chunk Nevery Nrepeat Nfreq chunkID value1 value2 ... keyword args ...
@ -17,7 +17,7 @@ Syntax
* Nfreq = calculate averages every this many timesteps * Nfreq = calculate averages every this many timesteps
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command * chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
* one or more input values can be listed * one or more input values can be listed
* value = vx, vy, vz, fx, fy, fz, density/mass, density/number, mass, temp, c_ID, c_ID[I], f_ID, f_ID[I], v_name * value = *vx*, *vy*, *vz*, *fx*, *fy*, *fz*, *density/mass*, *density/number*, *mass*, *temp*, c_ID, c_ID[I], f_ID, f_ID[I], v_name
.. parsed-literal:: .. parsed-literal::
@ -143,19 +143,19 @@ produce global quantities.
Note that for values from a compute or fix, the bracketed index I can Note that for values from a compute or fix, the bracketed index I can
be specified using a wildcard asterisk with the index to effectively be specified using a wildcard asterisk with the index to effectively
specify multiple values. This takes the form "\*" or "\*n" or "n\*" or specify multiple values. This takes the form "\*" or "\*n" or "m\*" or
"m\*n". If N = the size of the vector (for *mode* = scalar) or the "m\*n". If :math:`N` is the size of the vector (for *mode* = scalar) or the
number of columns in the array (for *mode* = vector), then an asterisk number of columns in the array (for *mode* = vector), then an asterisk
with no numeric values means all indices from 1 to N. A leading with no numeric values means all indices from 1 to :math:`N`. A leading
asterisk means all indices from 1 to n (inclusive). A trailing asterisk means all indices from 1 to n (inclusive). A trailing
asterisk means all indices from n to N (inclusive). A middle asterisk asterisk means all indices from m to :math:`N` (inclusive). A middle asterisk
means all indices from m to n (inclusive). means all indices from m to n (inclusive).
Using a wildcard is the same as if the individual columns of the array Using a wildcard is the same as if the individual columns of the array
had been listed one by one. E.g. these 2 fix ave/chunk commands are had been listed one by one. For example, these two fix ave/chunk commands are
equivalent, since the :doc:`compute property/atom equivalent, since the :doc:`compute property/atom
<compute_property_atom>` command creates, in this case, a per-atom <compute_property_atom>` command creates, in this case, a per-atom
array with 3 columns: array with three columns:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -165,105 +165,109 @@ array with 3 columns:
.. note:: .. note::
This fix works by creating an array of size *Nchunk* by Nvalues This fix works by creating an array of size
on each processor. *Nchunk* is the number of chunks which is defined :math:`N_\text{chunk} \times N_\text{values}` on each processor.
by the :doc:`compute chunk/atom <compute_chunk_atom>` command. :math:`N_\text{chunk}` is the number of chunks, which is defined by the
Nvalues is the number of input values specified. Each processor loops :doc:`compute chunk/atom <compute_chunk_atom>` command.
over its atoms, tallying its values to the appropriate chunk. Then :math:`N_\text{values}` is the number of input values specified.
the entire array is summed across all processors. This means that Each processor loops over its atoms, tallying its values to the appropriate
using a large number of chunks will incur an overhead in memory and chunk. Then the entire array is summed across all processors. This means
that using a large number of chunks will incur an overhead in memory and
computational cost (summing across processors), so be careful to computational cost (summing across processors), so be careful to
define a reasonable number of chunks. define a reasonable number of chunks.
---------- ----------
The *Nevery*, *Nrepeat*, and *Nfreq* arguments specify on what The :math:`N_\text{every}`, :math:`N_\text{repeat}`, and :math:`N_\text{freq}`
timesteps the input values will be accessed and contribute to the arguments specify on what time steps the input values will be accessed and
average. The final averaged quantities are generated on timesteps contribute to the average. The final averaged quantities are generated on time
that are a multiples of *Nfreq*\ . The average is over *Nrepeat* steps that are a multiples of :math:`N_\text{freq}`\ . The average is over
quantities, computed in the preceding portion of the simulation every :math:`N_\text{repeat}` quantities, computed in the preceding portion of the
*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and simulation every :math:`N_\text{every}` time steps. :math:`N_\text{freq}`
*Nevery* must be non-zero even if *Nrepeat* is 1. Also, the timesteps must be a multiple of :math:`N_\text{every}` and :math:`N_\text{every}` must be
contributing to the average value cannot overlap, i.e. Nrepeat\*Nevery non-zero even if :math:`N_\text{repeat} = 1`\ . Also, the time steps
can not exceed Nfreq. contributing to the average value cannot overlap (i.e.,
:math:`N_\text{repeat}N_\text{every}` cannot exceed :math:`N_\text{freq}`).
For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on For example, if :math:`N_\text{every}=2`, :math:`N_\text{repeat}=6`, and
timesteps 90,92,94,96,98,100 will be used to compute the final average :math:`N_\text{freq}=100`, then values on
on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on time steps 90, 92, 94, 96, 98, 100 will be used to compute the final average
timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time on time step 100. Similarly for time steps 190, 192, 194, 196, 198, 200 on
averaging is done; values are simply generated on timesteps time step 200, etc. If :math:`N_\text{repeat}=1` and
100,200,etc. :math:`N_\text{freq} = 100`, then no time averaging is done; values are simply
generated on time steps 100, 200, etc.
Each input value can also be averaged over the atoms in each chunk. Each input value can also be averaged over the atoms in each chunk.
The way the averaging is done across the *Nrepeat* timesteps to The way the averaging is done across the :math:`N_\text{repeat}` time steps to
produce output on the *Nfreq* timesteps, and across multiple *Nfreq* produce output on the :math:`N_\text{freq}` time steps, and across multiple
outputs, is determined by the *norm* and *ave* keyword settings, as :math:`N_\text{freq}` outputs, is determined by the *norm* and *ave* keyword
discussed below. settings, as discussed below.
.. note:: .. note::
To perform per-chunk averaging within a *Nfreq* time window, the To perform per-chunk averaging within a :math:`N_\text{freq}` time window,
number of chunks *Nchunk* defined by the :doc:`compute chunk/atom the number of chunks :math:`N_\text{chunk}` defined by the
<compute_chunk_atom>` command must remain constant. If the *ave* :doc:`compute chunk/atom <compute_chunk_atom>` command must remain
keyword is set to *running* or *window* then *Nchunk* must remain constant. If the *ave* keyword is set to *running* or *window* then
constant for the duration of the simulation. This fix forces the :math:`N_\text{chunk}` must remain constant for the duration of the
chunk/atom compute specified by chunkID to hold *Nchunk* constant simulation. This fix forces the chunk/atom compute specified by chunkID to
for the appropriate time windows, by not allowing it to hold :math:`N_\text{chunk}` constant for the appropriate time windows,
re-calculate *Nchunk*, which can also affect how it assigns chunk by not allowing it to re-calculate :math:`N_\text{chunk}`, which can also
IDs to atoms. This is particularly important to understand if the affect how it assigns chunk IDs to atoms. This is particularly important to
chunks defined by the :doc:`compute chunk/atom understand if the chunks defined by the :doc:`compute chunk/atom
<compute_chunk_atom>` command are spatial bins. If its *units* <compute_chunk_atom>` command are spatial bins. If its *units*
keyword is set to *box* or *lattice*, then the number of bins keyword is set to *box* or *lattice*, then the number of bins
*Nchunk* and size of each bin will be fixed over the *Nfreq* time :math:`N_\text{chunk}` and size of each bin will be fixed over the
window, which can affect which atoms are discarded if the :math:`N_\text{freq}` time window, which can affect which atoms are
simulation box size changes. If its *units* keyword is set to discarded if the simulation box size changes. If its *units* keyword is set
*reduced*, then the number of bins *Nchunk* will still be fixed, to *reduced*, then the number of bins :math:`N_\text{chunk}` will still be
but the size of each bin can vary at each timestep if the fixed, but the size of each bin can vary at each time step if the
simulation box size changes, e.g. for an NPT simulation. simulation box size changes (e.g., for an NPT simulation).
---------- ----------
The atom attribute values (vx,vy,vz,fx,fy,fz,mass) are The atom attribute values (*vx*, *vy*, *vz*, *fx*, *fy*, *fz*, *mass*) are
self-explanatory. As noted above, any other atom attributes can be self-explanatory. As noted above, any other atom attributes can be
used as input values to this fix by using the :doc:`compute used as input values to this fix by using the :doc:`compute
property/atom <compute_property_atom>` command and then specifying an property/atom <compute_property_atom>` command and then specifying an
input value from that compute. input value from that compute.
The *density/number* value means the number density is computed for The *density/number* value means the number density is computed for
each chunk, i.e. number/volume. The *density/mass* value means the each chunk (i.e., number/volume). The *density/mass* value means the
mass density is computed for each chunk, i.e. total-mass/volume. The mass density is computed for each chunk (i.e., total-mass/volume). The
output values are in units of 1/volume or density (mass/volume). See output values are in units of 1/volume or mass density (mass/volume). See
the :doc:`units <units>` command page for the definition of density the :doc:`units <units>` command page for the definition of density
for each choice of units, e.g. gram/cm\^3. If the chunks defined by for each choice of units (e.g., g/cm\ :math:`^3`). If the chunks defined by
the :doc:`compute chunk/atom <compute_chunk_atom>` command are spatial the :doc:`compute chunk/atom <compute_chunk_atom>` command are spatial
bins, the volume is the bin volume. Otherwise it is the volume of the bins, the volume is the bin volume. Otherwise, it is the volume of the
entire simulation box. entire simulation box.
The *temp* value means the temperature is computed for each chunk, by The *temp* value means the temperature is computed for each chunk,
the formula by the formula
.. math:: .. math::
\text{KE} = \frac{\text{DOF}}{2} k_B T, \text{KE} = \frac{\text{DOF}}{2} k_B T,
where KE = total kinetic energy of the chunk of atoms (sum of where KE is the total kinetic energy of the chunk of atoms (sum of
:math:`\frac{1}{2} m v^2`), DOF = the total number of degrees of freedom :math:`\frac{1}{2} m v^2`), DOF is the the total number of degrees of freedom
for all atoms in the chunk, :math:`k_B` = Boltzmann constant, and for all atoms in the chunk, :math:`k_B` is the Boltzmann constant, and
:math:`T` = temperature. :math:`T` is the absolute temperature.
The DOF is calculated as N\*adof + cdof, where N = number of atoms in The DOF is calculated as :math:`N`\ \*adof + cdof, where :math:`N` is the
the chunk, adof = degrees of freedom per atom, and cdof = degrees of number of atoms in the chunk, adof is the number of degrees of freedom per
freedom per chunk. By default adof = 2 or 3 = dimensionality of atom, and cdof is the number of degrees of freedom per chunk. By default,
system, as set via the :doc:`dimension <dimension>` command, and cdof = adof = 2 or 3 = dimensionality of system,
0.0. This gives the usual formula for temperature. as set via the :doc:`dimension <dimension>` command, and cdof = 0.0.
This gives the usual formula for temperature.
Note that currently this temperature only includes translational Note that currently this temperature only includes translational
degrees of freedom for each atom. No rotational degrees of freedom degrees of freedom for each atom. No rotational degrees of freedom
are included for finite-size particles. Also no degrees of freedom are included for finite-size particles. Also, no degrees of freedom
are subtracted for any velocity bias or constraints that are applied, are subtracted for any velocity bias or constraints that are applied,
such as :doc:`compute temp/partial <compute_temp_partial>`, or such as :doc:`compute temp/partial <compute_temp_partial>`,
:doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is :doc:`fix shake <fix_shake>`, or :doc:`fix rigid <fix_rigid>`. This is
because those degrees of freedom (e.g. a constrained bond) could apply because those degrees of freedom (e.g., a constrained bond) could apply
to sets of atoms that are both included and excluded from a specific to sets of atoms that are both included and excluded from a specific
chunk, and hence the concept is somewhat ill-defined. In some cases, chunk, and hence the concept is somewhat ill-defined. In some cases,
you can use the *adof* and *cdof* keywords to adjust the calculated you can use the *adof* and *cdof* keywords to adjust the calculated
@ -279,32 +283,32 @@ Note that the per-chunk temperature calculated by this fix and the
different. The compute calculates the temperature for each chunk for different. The compute calculates the temperature for each chunk for
a single snapshot. This fix can do that but can also time average a single snapshot. This fix can do that but can also time average
those values over many snapshots, or it can compute a temperature as those values over many snapshots, or it can compute a temperature as
if the atoms in the chunk on different timesteps were collected if the atoms in the chunk on different time steps were collected
together as one set of atoms to calculate their temperature. The together as one set of atoms to calculate their temperature. The
compute allows the center-of-mass velocity of each chunk to be compute allows the center-of-mass velocity of each chunk to be
subtracted before calculating the temperature; this fix does not. subtracted before calculating the temperature; this fix does not.
If a value begins with "c\_", a compute ID must follow which has been If a value begins with "c\_," a compute ID must follow which has been
previously defined in the input script. If no bracketed integer is previously defined in the input script. If no bracketed integer is
appended, the per-atom vector calculated by the compute is used. If a 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 bracketed integer is appended, the Ith column of the per-atom array
calculated by the compute is used. Users can also write code for calculated by the compute is used. Users can also write code for
their own compute styles and :doc:`add them to LAMMPS <Modify>`. See their own compute styles and :doc:`add them to LAMMPS <Modify>`.
the discussion above for how I can be specified with a wildcard See the discussion above for how I can be specified with a wildcard
asterisk to effectively specify multiple values. asterisk to effectively specify multiple values.
If a value begins with "f\_", a fix ID must follow which has been If a value begins with "f\_," a fix ID must follow which has been
previously defined in the input script. If no bracketed integer is previously defined in the input script. If no bracketed integer is
appended, the per-atom vector calculated by the fix is used. If a 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 bracketed integer is appended, the Ith column of the per-atom array
calculated by the fix is used. Note that some fixes only produce calculated by the fix is used. Note that some fixes only produce
their values on certain timesteps, which must be compatible with their values on certain time steps, which must be compatible with
*Nevery*, else an error results. Users can also write code for their :math:`N_\text{every}`, else an error results. Users can also write code for
own fix styles and :doc:`add them to LAMMPS <Modify>`. See the their own fix styles and :doc:`add them to LAMMPS <Modify>`. See the
discussion above for how I can be specified with a wildcard asterisk discussion above for how I can be specified with a wildcard asterisk
to effectively specify multiple values. to effectively specify multiple values.
If a value begins with "v\_", a variable name must follow which has If a value begins with "v\_," a variable name must follow which has
been previously defined in the input script. Variables of style been previously defined in the input script. Variables of style
*atom* can reference thermodynamic keywords and various per-atom *atom* can reference thermodynamic keywords and various per-atom
attributes, or invoke other computes, fixes, or variables when they attributes, or invoke other computes, fixes, or variables when they
@ -317,107 +321,107 @@ Additional optional keywords also affect the operation of this fix
and its outputs. and its outputs.
The *norm* keyword affects how averaging is done for the per-chunk The *norm* keyword affects how averaging is done for the per-chunk
values that are output every *Nfreq* timesteps. values that are output every :math:`N_\text{freq}` time steps.
It the *norm* setting is *all*, which is the default, a chunk value is It the *norm* setting is *all*, which is the default, a chunk value is summed
summed over all atoms in all *Nrepeat* samples, as is the count of over all atoms in all :math:`N_\text{repeat}` samples, as is the count of
atoms in the chunk. The averaged output value for the chunk on the atoms in the chunk. The averaged output value for the chunk on the
*Nfreq* timesteps is Total-sum / Total-count. In other words it is an :math:`N_\text{freq}` time steps is Total-sum / Total-count. In other words it
average over atoms across the entire *Nfreq* timescale. For the is an average over atoms across the entire :math:`N_\text{freq}` timescale.
*density/number* and *density/mass* values, the volume (bin volume or For the *density/number* and *density/mass* values, the volume (bin volume or
system volume) used in the final normalization will be the volume at system volume) used in the final normalization will be the volume at
the final *Nfreq* timestep. For the *temp* values, degrees of freedom the final :math:`N_\text{freq}` time step. For the *temp* values, degrees of
and kinetic energy are summed separately across the entire *Nfreq* freedom and kinetic energy are summed separately across the entire
timescale, and the output value is calculated by dividing those two :math:`N_\text{freq}` timescale, and the output value is calculated by dividing
sums. those two sums.
If the *norm* setting is *sample*, the chunk value is summed over If the *norm* setting is *sample*, the chunk value is summed over
atoms for each sample, as is the count, and an "average sample value" atoms for each sample, as is the count, and an "average sample value"
is computed for each sample, i.e. Sample-sum / Sample-count. The is computed for each sample (i.e., Sample-sum / Sample-count). The
output value for the chunk on the *Nfreq* timesteps is the average of output value for the chunk on the :math:`N_\text{freq}` time steps is the
the *Nrepeat* "average sample values", i.e. the sum of *Nrepeat* average of the :math:`N_\text{repeat}` "average sample values" (i.e., the sum
"average sample values" divided by *Nrepeat*\ . In other words it is an of :math:`N_\text{repeat}` "average sample values" divided by
average of an average. For the *density/number* and *density/mass* :math:`N_\text{repeat}`\ ). In other words, it is an average of an average.
values, the volume (bin volume or system volume) used in the For the *density/number* and *density/mass* values, the volume (bin volume or
per-sample normalization will be the current volume at each sampling system volume) used in the per-sample normalization will be the current volume
step. at each sampling step.
If the *norm* setting is *none*, a similar computation as for the If the *norm* setting is *none*, a similar computation as for the
*sample* setting is done, except the individual "average sample *sample* setting is done, except the individual "average sample
values" are "summed sample values". A summed sample value is simply values" are "summed sample values." A summed sample value is simply
the chunk value summed over atoms in the sample, without dividing by the chunk value summed over atoms in the sample, without dividing by
the number of atoms in the sample. The output value for the chunk on the number of atoms in the sample. The output value for the chunk on
the *Nfreq* timesteps is the average of the *Nrepeat* "summed sample the :math:`N_\text{freq}` timesteps is the average of the
values", i.e. the sum of *Nrepeat* "summed sample values" divided by :math:`N_\text{repeat}` "summed sample values" (i.e., the sum of
*Nrepeat*\ . For the *density/number* and *density/mass* values, the :math:`N_\text{repeat}` "summed sample values" divided by
:math:`N_\text{repeat}`\ ).
For the *density/number* and *density/mass* values, the
volume (bin volume or system volume) used in the per-sample sum volume (bin volume or system volume) used in the per-sample sum
normalization will be the current volume at each sampling step. normalization will be the current volume at each sampling step.
The *ave* keyword determines how the per-chunk values produced every The *ave* keyword determines how the per-chunk values produced every
*Nfreq* steps are averaged with values produced on previous steps that :math:`N_\text{freq}` steps are averaged with values produced on previous steps
were multiples of *Nfreq*, before they are accessed by another output that were multiples of :math:`N_\text{freq}`, before they are accessed by
command or written to a file. another output command or written to a file.
If the *ave* setting is *one*, which is the default, then the chunk If the *ave* setting is *one*, which is the default, then the chunk
values produced on timesteps that are multiples of *Nfreq* are values produced on timesteps that are multiples of :math:`N_\text{freq}` are
independent of each other; they are output as-is without further independent of each other; they are output as-is without further averaging.
averaging.
If the *ave* setting is *running*, then the chunk values produced on If the *ave* setting is *running*, then the chunk values produced on
timesteps that are multiples of *Nfreq* are summed and averaged in a timesteps that are multiples of :math:`N_\text{freq}` are summed and averaged
cumulative sense before being output. Each output chunk value is thus in a cumulative sense before being output. Each output chunk value is thus
the average of the chunk value produced on that timestep with all the average of the chunk value produced on that timestep with all
preceding values for the same chunk. This running average begins when preceding values for the same chunk. This running average begins when
the fix is defined; it can only be restarted by deleting the fix via the fix is defined; it can only be restarted by deleting the fix via
the :doc:`unfix <unfix>` command, or re-defining the fix by the :doc:`unfix <unfix>` command, or re-defining the fix by re-specifying it.
re-specifying it.
If the *ave* setting is *window*, then the chunk values produced on If the *ave* setting is *window*, then the chunk values produced on
timesteps that are multiples of *Nfreq* are summed and averaged within timesteps that are multiples of :math:`N_\text{freq}` are summed and averaged
a moving "window" of time, so that the last M values for the same within a moving "window" of time, so that the last :math:`M` values for the
chunk are used to produce the output. E.g. if M = 3 and Nfreq = 1000, same chunk are used to produce the output. For example, if :math:`M = 3` and
then the output on step 10000 will be the average of the individual :math:`N_\text{freq} = 1000`, then the output on step 10000 will be the average
chunk values on steps 8000,9000,10000. Outputs on early steps will of the individual chunk values on time steps 8000, 9000, and 10000. Outputs on
average over less than M values if they are not available. early steps will average over less than :math:`M` values if they are not
available.
The *bias* keyword specifies the ID of a temperature compute that The *bias* keyword specifies the ID of a temperature compute that
removes a "bias" velocity from each atom, specified as *bias-ID*\ . It removes a "bias" velocity from each atom, specified as *bias-ID*\ .
is only used when the *temp* value is calculated, to compute the It is only used when the *temp* value is calculated, to compute the
thermal temperature of each chunk after the translational kinetic thermal temperature of each chunk after the translational kinetic
energy components have been altered in a prescribed way, e.g. to energy components have been altered in a prescribed way (e.g., to
remove a flow velocity profile. See the doc pages for individual remove a flow velocity profile). See the doc pages for individual
computes that calculate a temperature to see which ones implement a computes that calculate a temperature to see which ones implement a bias.
bias.
The *adof* and *cdof* keywords define the values used in the degree of The *adof* and *cdof* keywords define the values used in the degree of
freedom (DOF) formula described above for temperature calculation freedom (DOF) formula described above for temperature calculation
for each chunk. They are only used when the *temp* value is for each chunk. They are only used when the *temp* value is
calculated. They can be used to calculate a more appropriate calculated. They can be used to calculate a more appropriate
temperature for some kinds of chunks. Here are 3 examples: temperature for some kinds of chunks. Here are three examples:
If spatially binned chunks contain some number of water molecules and If spatially binned chunks contain some number of water molecules and
:doc:`fix shake <fix_shake>` is used to make each molecule rigid, then :doc:`fix shake <fix_shake>` is used to make each molecule rigid, then
you could calculate a temperature with 6 degrees of freedom (DOF) (3 you could calculate a temperature with six degrees of freedom (DOF) (three
translational, 3 rotational) per molecule by setting *adof* to 2.0. translational, three rotational) per molecule by setting *adof* to 2.0.
If :doc:`compute temp/partial <compute_temp_partial>` is used with the If :doc:`compute temp/partial <compute_temp_partial>` is used with the
*bias* keyword to only allow the x component of velocity to contribute *bias* keyword to only allow the :math:`x` component of velocity to contribute
to the temperature, then *adof* = 1.0 would be appropriate. to the temperature, then *adof* = 1.0 would be appropriate.
If each chunk consists of a large molecule, with some number of its If each chunk consists of a large molecule, with some number of its
bonds constrained by :doc:`fix shake <fix_shake>` or the entire molecule bonds constrained by :doc:`fix shake <fix_shake>` or the entire molecule
by :doc:`fix rigid/small <fix_rigid>`, *adof* = 0.0 and *cdof* could be by :doc:`fix rigid/small <fix_rigid>`, *adof* = 0.0 and *cdof* could be
set to the remaining degrees of freedom for the entire molecule set to the remaining degrees of freedom for the entire molecule
(entire chunk in this case), e.g. 6 for 3d, or 3 for 2d, for a rigid (entire chunk in this case), that is, 6 for 3d or 3 for 2d for a rigid
molecule. molecule.
The *file* keyword allows a filename to be specified. Every *Nfreq* The *file* keyword allows a filename to be specified. Every
timesteps, a section of chunk info will be written to a text file in :math:`N_\text{freq}` timesteps, a section of chunk info will be written to a
the following format. A line with the timestep and number of chunks text file in the following format. A line with the timestep and number of
is written. Then one line per chunk is written, containing the chunk chunks is written. Then one line per chunk is written, containing the chunk
ID (1-Nchunk), an optional original ID value, optional coordinate ID :math:`(1-N_\text{chunk}),` an optional original ID value, optional
values for chunks that represent spatial bins, the number of atoms in coordinate values for chunks that represent spatial bins, the number of atoms
the chunk, and one or more calculated values. More explanation of the in the chunk, and one or more calculated values. More explanation of the
optional values is given below. The number of values in each line optional values is given below. The number of values in each line
corresponds to the number of values specified in the fix ave/chunk corresponds to the number of values specified in the fix ave/chunk
command. The number of atoms and the value(s) are summed or average command. The number of atoms and the value(s) are summed or average
@ -430,10 +434,10 @@ output. This option can only be used with the *ave running* setting.
The *format* keyword sets the numeric format of each value when it is The *format* keyword sets the numeric format of each value when it is
printed to a file via the *file* keyword. Note that all values are printed to a file via the *file* keyword. Note that all values are
floating point quantities. The default format is %g. You can specify floating point quantities. The default format is %g. You can specify
a higher precision if desired, e.g. %20.16g. a higher precision if desired (e.g., %20.16g).
The *title1* and *title2* and *title3* keywords allow specification of The *title1* and *title2* and *title3* keywords allow specification of
the strings that will be printed as the first 3 lines of the output the strings that will be printed as the first three lines of the output
file, assuming the *file* keyword was used. LAMMPS uses default file, assuming the *file* keyword was used. LAMMPS uses default
values for each of these, so they do not need to be specified. values for each of these, so they do not need to be specified.
@ -448,34 +452,33 @@ By default, these header lines are as follows:
In the first line, ID and name are replaced with the fix-ID and group In the first line, ID and name are replaced with the fix-ID and group
name. The second line describes the two values that are printed at name. The second line describes the two values that are printed at
the first of each section of output. In the third line the values are the first of each section of output. In the third line the values are
replaced with the appropriate value names, e.g. fx or c_myCompute[2]. replaced with the appropriate value names (e.g., *fx* or c_myCompute[2]).
The words in parenthesis only appear with corresponding columns if the The words in parenthesis only appear with corresponding columns if the
chunk style specified for the :doc:`compute chunk/atom chunk style specified for the :doc:`compute chunk/atom
<compute_chunk_atom>` command supports them. The OrigID column is <compute_chunk_atom>` command supports them. The OrigID column is
only used if the *compress* keyword was set to *yes* for the only used if the *compress* keyword was set to *yes* for the
:doc:`compute chunk/atom <compute_chunk_atom>` command. This means :doc:`compute chunk/atom <compute_chunk_atom>` command. This means
that the original chunk IDs (e.g. molecule IDs) will have been that the original chunk IDs (e.g., molecule IDs) will have been
compressed to remove chunk IDs with no atoms assigned to them. Thus a compressed to remove chunk IDs with no atoms assigned to them. Thus a
compressed chunk ID of 3 may correspond to an original chunk ID or compressed chunk ID of 3 may correspond to an original chunk ID or
molecule ID of molecule ID of 415. The OrigID column will list 415 for the third chunk.
415. The OrigID column will list 415 for the third chunk.
The CoordN columns only appear if a *binning* style was used in the The CoordN columns only appear if a *binning* style was used in the
:doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*, :doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*,
*bin/2d*, and *bin/3d* styles the column values are the center point *bin/2d*, and *bin/3d* styles the column values are the center point
of the bin in the corresponding dimension. Just Coord1 is used for of the bin in the corresponding dimension. Just Coord1 is used for
*bin/1d*, Coord2 is added for *bin/2d*, Coord3 is added for *bin/3d*\ *bin/1d*, Coord2 is added for *bin/2d*, Coord3 is added for *bin/3d*\ .
. For *bin/sphere*, just Coord1 is used, and it is the radial For *bin/sphere*, just Coord1 is used, and it is the radial
coordinate. For *bin/cylinder*, Coord1 and Coord2 are used. Coord1 coordinate. For *bin/cylinder*, Coord1 and Coord2 are used. Coord1
is the radial coordinate (away from the cylinder axis), and coord2 is is the radial coordinate (away from the cylinder axis), and coord2 is
the coordinate along the cylinder axis. the coordinate along the cylinder axis.
Note that if the value of the *units* keyword used in the Note that if the value of the *units* keyword used in the
:doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or
*lattice*, the coordinate values will be in distance :doc:`units *lattice*, the coordinate values will be in distance :doc:`units <units>`.
<units>`. If the value of the *units* keyword is *reduced*, the If the value of the *units* keyword is *reduced*, the
coordinate values will be in unitless reduced units (0-1). This is coordinate values will be in unitless reduced units (0--1). This is
not true for the Coord1 value of style *bin/sphere* or *bin/cylinder* not true for the Coord1 value of style *bin/sphere* or *bin/cylinder*
which both represent radial dimensions. Those values are always in which both represent radial dimensions. Those values are always in
distance :doc:`units <units>`. distance :doc:`units <units>`.
@ -491,20 +494,21 @@ relevant to this fix.
This fix computes a global array of values which can be accessed by This fix computes a global array of values which can be accessed by
various :doc:`output commands <Howto_output>`. The values can only be various :doc:`output commands <Howto_output>`. The values can only be
accessed on timesteps that are multiples of *Nfreq* since that is when accessed on timesteps that are multiples of :math:`N_\text{freq}`, since that
averaging is performed. The global array has # of rows = the number is when averaging is performed. The global array has # of rows = the number
of chunks *Nchunk* as calculated by the specified :doc:`compute of chunks :math:`N_\text{chunk}`, as calculated by the specified
chunk/atom <compute_chunk_atom>` command. The # of columns = :doc:`compute chunk/atom <compute_chunk_atom>` command. The # of columns is
M+1+Nvalues, where M = 1 to 4, depending on whether the optional :math:`M+1+N_\text{values}`, where :math:`M \in \{1,\dotsc,4\}`,
depending on whether the optional
columns for OrigID and CoordN are used, as explained above. Following columns for OrigID and CoordN are used, as explained above. Following
the optional columns, the next column contains the count of atoms in the optional columns, the next column contains the count of atoms in
the chunk, and the remaining columns are the Nvalue quantities. When the chunk, and the remaining columns are the Nvalue quantities. When
the array is accessed with a row I that exceeds the current number of the array is accessed with a row :math:`I` that exceeds the current number of
chunks, than a 0.0 is returned by the fix instead of an error, since chunks, than a 0.0 is returned by the fix instead of an error, since
the number of chunks can vary as a simulation runs depending on how the number of chunks can vary as a simulation runs depending on how
that value is computed by the compute chunk/atom command. that value is computed by the compute chunk/atom command.
The array values calculated by this fix are treated as "intensive", The array values calculated by this fix are treated as "intensive,"
since they are typically already normalized by the count of atoms in since they are typically already normalized by the count of atoms in
each chunk. each chunk.
@ -519,7 +523,8 @@ Restrictions
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/histo <fix_ave_histo>`, :doc:`fix ave/time <fix_ave_time>`, :doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`,
:doc:`fix ave/histo <fix_ave_histo>`, :doc:`fix ave/time <fix_ave_time>`,
:doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>` :doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`
Default Default

View File

@ -6,7 +6,7 @@ fix ave/correlate command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ave/correlate Nevery Nrepeat Nfreq value1 value2 ... keyword args ... fix ID group-ID ave/correlate Nevery Nrepeat Nfreq value1 value2 ... keyword args ...
@ -73,10 +73,12 @@ Description
Use one or more global scalar values as inputs every few timesteps, Use one or more global scalar values as inputs every few timesteps,
calculate time correlations between them at varying time intervals, calculate time correlations between them at varying time intervals,
and average the correlation data over longer timescales. The and average the correlation data over longer timescales. The resulting
resulting correlation values can be time integrated by correlation values can be time integrated by
:doc:`variables <variable>` or used by other :doc:`output commands <Howto_output>` such as :doc:`thermo_style custom <thermo_style>`, and can also be written to a file. See the :doc:`variables <variable>` or used by other
:doc:`fix ave/correlate/long <fix_ave_correlate_long>` command for an :doc:`output commands <Howto_output>` such as
:doc:`thermo_style custom <thermo_style>`, and can also be written to a file.
See the :doc:`fix ave/correlate/long <fix_ave_correlate_long>` command for an
alternate method for computing correlation functions efficiently over alternate method for computing correlation functions efficiently over
very long time windows. very long time windows.
@ -89,9 +91,11 @@ Each listed value can be the result of a :doc:`compute <compute>` or
:doc:`variable <variable>`. In each case, the compute, fix, or variable :doc:`variable <variable>`. In each case, the compute, fix, or variable
must produce a global quantity, not a per-atom or local quantity. If must produce a global quantity, not a per-atom or local quantity. If
you wish to spatial- or time-average or histogram per-atom quantities you wish to spatial- or time-average or histogram per-atom quantities
from a compute, fix, or variable, then see the :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/atom <fix_ave_atom>`, or from a compute, fix, or variable, then see the
:doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/atom <fix_ave_atom>`, or
:doc:`fix ave/histo <fix_ave_histo>` commands. If you wish to convert a :doc:`fix ave/histo <fix_ave_histo>` commands. If you wish to convert a
per-atom quantity into a single global value, see the :doc:`compute reduce <compute_reduce>` command. per-atom quantity into a single global value, see the
:doc:`compute reduce <compute_reduce>` command.
The input values must be all scalars. What kinds of The input values must be all scalars. What kinds of
correlations between input values are calculated is determined by the correlations between input values are calculated is determined by the
@ -110,16 +114,16 @@ be used, since they produce per-atom values.
For input values from a compute or fix or variable , the bracketed For input values from a compute or fix or variable , the bracketed
index I can be specified using a wildcard asterisk with the index to index I can be specified using a wildcard asterisk with the index to
effectively specify multiple values. This takes the form "\*" or effectively specify multiple values. This takes the form "\*" or
"\*n" or "n\*" or "m\*n". If N = the size of the vector, then an "\*n" or "m\*" or "m\*n". If :math:`N` is the size of the vector, then an
asterisk with no numeric values means all indices from 1 to N. A asterisk with no numeric values means all indices from 1 to :math:`N`. A
leading asterisk means all indices from 1 to n (inclusive). A leading asterisk means all indices from 1 to n (inclusive). A
trailing asterisk means all indices from n to N (inclusive). A middle trailing asterisk means all indices from m to :math:`N` (inclusive).
asterisk means all indices from m to n (inclusive). A middle asterisk means all indices from m to n (inclusive).
Using a wildcard is the same as if the individual elements of the Using a wildcard is the same as if the individual elements of the
vector had been listed one by one. E.g. these 2 fix ave/correlate vector had been listed one by one. For example, the following two fix
commands are equivalent, since the :doc:`compute pressure ave/correlate commands are equivalent, since the :doc:`compute pressure
<compute_pressure>` command creates a global vector with 6 values. <compute_pressure>` command creates a global vector with six values:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -139,151 +143,161 @@ commands are equivalent, since the :doc:`compute pressure
---------- ----------
The *Nevery*, *Nrepeat*, and *Nfreq* arguments specify on what The :math:`N_\text{every}`, :math:`N_\text{repeat}`, and :math:`N_\text{freq}`
timesteps the input values will be used to calculate correlation data. arguments specify on what timesteps the input values will be used to calculate
The input values are sampled every *Nevery* timesteps. The correlation data. The input values are sampled every :math:`N_\text{every}`
correlation data for the preceding samples is computed on timesteps time steps. The correlation data for the preceding samples is computed on
that are a multiple of *Nfreq*\ . Consider a set of samples from some time steps that are a multiple of :math:`N_\text{freq}`\ . Consider a set of
initial time up to an output timestep. The initial time could be the samples from some initial time up to an output timestep. The initial time
beginning of the simulation or the last output time; see the *ave* could be the beginning of the simulation or the last output time; see the *ave*
keyword for options. For the set of samples, the correlation value keyword for options. For the set of samples, the correlation value
Cij is calculated as: :math:`C_{ij}` is calculated as:
.. parsed-literal:: .. math::
Cij(delta) = ave(Vi(t)\*Vj(t+delta)) C_{ij}(\Delta t) = \left\langle V_i(t) V_j(t+\Delta t)\right\rangle,
which is the correlation value between input values Vi and Vj, which is the correlation value between input values :math:`V_i` and
separated by time delta. Note that the second value Vj in the pair is :math:`V_j`, separated by time :math:`\Delta t`. Note that the second value
always the one sampled at the later time. The ave() represents an :math:`V_j` in the pair is always the one sampled at the later time. The
average over every pair of samples in the set that are separated by average is an average over every pair of samples in the set that are separated
time delta. The maximum delta used is of size (\ *Nrepeat*\ -1)\*\ *Nevery*\ . by time :math:`\Delta t`. The maximum :math:`\Delta t` used is of size
Thus the correlation between a pair of input values yields *Nrepeat* :math:`(N_\text{repeat} - 1) N_\text{every}`\ .
correlation datums: Thus the correlation between a pair of input values yields
:math:`N_\text{repeat}` correlation data:
.. parsed-literal:: .. math::
Cij(0), Cij(Nevery), Cij(2\*Nevery), ..., Cij((Nrepeat-1)\*Nevery) C_{ij}(0), C_{ij}(N_\text{every}), C_{ij}(2N_\text{every}), \dotsc,
C_{ij}\bigl((N_\text{repeat}-1) N_\text{every}\bigr)
For example, if Nevery=5, Nrepeat=6, and Nfreq=100, then values on For example, if :math:`N_\text{every}=5`, :math:`N_\text{repeat}=6`, and
timesteps 0,5,10,15,...,100 will be used to compute the final averages :math:`N_\text{freq}=100`, then values on time steps
on timestep 100. Six averages will be computed: Cij(0), Cij(5), :math:`0, 5, 10, 15,\dotsc,100` will be used to compute the final averages
Cij(10), Cij(15), Cij(20), and Cij(25). Cij(10) on timestep 100 will on time step 100. Six averages will be computed: :math:`C_{ij}(0)`,
be the average of 19 samples, namely Vi(0)\*Vj(10), Vi(5)\*Vj(15), :math:`C_{ij}(5)`, :math:`C_{ij}(10)`, :math:`C_{ij}(15)`, :math:`C_{ij}(20)`,
Vi(10)\*V j20), Vi(15)\*Vj(25), ..., Vi(85)\*Vj(95), Vi(90)\*Vj(100). and :math:`C_{ij}(25)`. :math:`C_{ij}(10)` on time step 100 will
be the average of 19 samples, namely :math:`V_i(0) V_j(10)`,
:math:`V_i(5) V_j(15)`, :math:`V_i(10) V_j(20)`,
:math:`V_i(15) V_j(25), \dotsc,`
:math:`V_i(85) V_j(95)`, and :math:`V_i(90) V_j(100)`.
*Nfreq* must be a multiple of *Nevery*\ ; *Nevery* and *Nrepeat* must be :math:`N_\text{freq}` must be a multiple of :math:`N_\text{every}`;
non-zero. Also, if the *ave* keyword is set to *one* which is the :math:`N_\text{every}` and :math:`N_\text{repeat}` must be non-zero.
default, then *Nfreq* >= (\ *Nrepeat*\ -1)\*\ *Nevery* is required. Also, if the *ave* keyword is set to *one* which is the default, then
:math:`N_\text{freq} \ge (N_\text{repeat} -1) N_\text{every}` is required.
---------- ----------
If a value begins with "c\_", a compute ID must follow which has been If a value begins with "c\_," a compute ID must follow which has been
previously defined in the input script. If no bracketed term is previously defined in the input script. If no bracketed term is
appended, the global scalar calculated by the compute is used. If a appended, the global scalar calculated by the compute is used. If a
bracketed term is appended, the Ith element of the global vector bracketed term is appended, the :math:`I^\text{th}` element of the global
calculated by the compute is used. See the discussion above for how I vector calculated by the compute is used. See the discussion above for how
can be specified with a wildcard asterisk to effectively specify :math:`I` can be specified with a wildcard asterisk to effectively specify
multiple values. multiple values.
Note that there is a :doc:`compute reduce <compute_reduce>` command Note that there is a :doc:`compute reduce <compute_reduce>` command
which can sum per-atom quantities into a global scalar or vector which that can sum per-atom quantities into a global scalar or vector which
can thus be accessed by fix ave/correlate. Or it can be a compute can then be accessed by fix ave/correlate. It can also be a compute defined
defined not in your input script, but by :doc:`thermodynamic output <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>` not in your input script, but by :doc:`thermodynamic output <thermo_style>`
or other fixes such as :doc:`fix nvt <fix_nh>`
or :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for or :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for
these commands which give the IDs of these computes. Users can also these commands which give the IDs of these computes. Users can also
write code for their own compute styles and :doc:`add them to LAMMPS <Modify>`. write code for their own compute styles and :doc:`add them to LAMMPS <Modify>`.
If a value begins with "f\_", a fix ID must follow which has been If a value begins with "f\_," a fix ID must follow which has been
previously defined in the input script. If no bracketed term is previously defined in the input script. If no bracketed term is
appended, the global scalar calculated by the fix is used. If a appended, the global scalar calculated by the fix is used. If a
bracketed term is appended, the Ith element of the global vector bracketed term is appended, the :math:`I^\text{th}` element of the global
calculated by the fix is used. See the discussion above for how I can vector calculated by the fix is used. See the discussion above for how
be specified with a wildcard asterisk to effectively specify multiple :math:`I` can be specified with a wildcard asterisk to effectively specify
values. multiple values.
Note that some fixes only produce their values on certain timesteps, Note that some fixes only produce their values on certain timesteps,
which must be compatible with *Nevery*, else an error will result. which must be compatible with :math:`N_\text{every}`, else an error will
Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Modify>`. result. Users can also write code for their own fix styles and
:doc:`add them to LAMMPS <Modify>`.
If a value begins with "v\_", a variable name must follow which has If a value begins with "v\_," a variable name must follow which has been
been previously defined in the input script. Only equal-style or previously defined in the input script. Only equal-style or vector-style
vector-style variables can be referenced; the latter requires a variables can be referenced; the latter requires a bracketed term to specify
bracketed term to specify the Ith element of the vector calculated by the :math:`I^\text{th}` element of the vector calculated by the variable.
the variable. See the :doc:`variable <variable>` command for details. See the :doc:`variable <variable>` command for details. Note that variables of
Note that variables of style *equal* or *vector* define a formula style *equal* or *vector* define a formula which can reference individual atom
which can reference individual atom properties or thermodynamic properties or thermodynamic keywords, or they can invoke other computes, fixes,
keywords, or they can invoke other computes, fixes, or variables when or variables when they are evaluated, so this is a very general means of
they are evaluated, so this is a very general means of specifying specifying quantities to time correlate.
quantities to time correlate.
---------- ----------
Additional optional keywords also affect the operation of this fix. Additional optional keywords also affect the operation of this fix.
The *type* keyword determines which pairs of input values are The *type* keyword determines which pairs of input values are
correlated with each other. For N input values Vi, for i = 1 to N, correlated with each other. For :math:`N` input values :math:`V_i`,
let the number of pairs = Npair. Note that the second value in the with :math:`i \in \{1,\dotsc,N\}`, let the number of pairs be
pair Vi(t)\*Vj(t+delta) is always the one sampled at the later time. :math:`N_\text{pair}`. Note that the second value in the
pair, :math:`V_i(t) V_j(t+\Delta t)`, is always the one sampled at the later
time.
* If *type* is set to *auto* then each input value is correlated with * If *type* is set to *auto* then each input value is correlated with
itself. I.e. Cii = Vi\*Vi, for i = 1 to N, so Npair = N. itself (i.e., :math:`C_{ii} = V_i^2` for :math:`i \in \{1,\dotsc,N\}`,
* If *type* is set so :math:`N_\text{pair} = N`).
to *upper* then each input value is correlated with every succeeding * If *type* is set to *upper* then each input value is correlated with every
value. I.e. Cij = Vi\*Vj, for i < j, so Npair = N\*(N-1)/2. succeeding value (i.e., :math:`C_{ij} = V_i V_j` for :math:`i < j`, so
* If *type* is set :math:`N_\text{pair} = N (N-1)/2`).
to *lower* then each input value is correlated with every preceding * If *type* is set to *lower* then each input value is correlated with every
value. I.e. Cij = Vi\*Vj, for i > j, so Npair = N\*(N-1)/2. preceding value (i.e., :math:`C_{ij} = V_i V_j` for :math:`i > j`, so
:math:`N_\text{pair} = N(N-1)/2`).
* If *type* is set to *auto/upper* then each input value is correlated * If *type* is set to *auto/upper* then each input value is correlated
with itself and every succeeding value. I.e. Cij = Vi\*Vj, for i >= j, with itself and every succeeding value (i.e., :math:`C_{ij} = V_i V_j`
so Npair = N\*(N+1)/2. for :math:`i \ge j`, so :math:`N_\text{pair} = N(N+1)/2`).
* If *type* is set to *auto/lower* then each input value is correlated * If *type* is set to *auto/lower* then each input value is correlated
with itself and every preceding value. I.e. Cij = Vi\*Vj, for i <= j, with itself and every preceding value (i.e., :math:`C_{ij} = V_i V_j`
so Npair = N\*(N+1)/2. for :math:`i \le j`, so :math:`N_\text{pair} = N(N+1)/2`).
* If *type* is set to *full* then each input value is correlated with * If *type* is set to *full* then each input value is correlated with
itself and every other value. I.e. Cij = Vi\*Vj, for i,j = 1,N so itself and every other value (i.e., :math:`C_{ij} = V_i V_j` for
Npair = N\^2. :math:`\{i,j\} = \{1,N\}`, so :math:`N_\text{pair} = N^2`).
The *ave* keyword determines what happens to the accumulation of The *ave* keyword determines what happens to the accumulation of correlation
correlation samples every *Nfreq* timesteps. If the *ave* setting is samples every :math:`N_\text{freq}` timesteps. If the *ave* setting is *one*,
*one*, then the accumulation is restarted or zeroed every *Nfreq* then the accumulation is restarted or zeroed every :math:`N_\text{freq}`
timesteps. Thus the outputs on successive *Nfreq* timesteps are timesteps. Thus the outputs on successive :math:`N_\text{freq}` timesteps are
essentially independent of each other. The exception is that the essentially independent of each other. The exception is that the
Cij(0) = Vi(T)\*Vj(T) value at a timestep T, where T is a multiple of :math:`C_{ij}(0) = V_i(t) V_j(t)` value at a time step :math:`t,` where
*Nfreq*, contributes to the correlation output both at time T and at :math:`t` is a multiple of :math:`N_\text{freq}`, contributes to the
time T+Nfreq. correlation output both at time :math:`t` and at time :math:`t+N_\text{freq}`.
If the *ave* setting is *running*, then the accumulation is never If the *ave* setting is *running*, then the accumulation is never zeroed.
zeroed. Thus the output of correlation data at any timestep is the Thus the output of correlation data at any timestep is the average over samples
average over samples accumulated every *Nevery* steps since the fix accumulated every :math:`N_\text{every}` steps since the fix was defined.
was defined. it can only be restarted by deleting the fix via the It can only be restarted by deleting the fix via the :doc:`unfix <unfix>`
:doc:`unfix <unfix>` command, or by re-defining the fix by re-specifying command, or by re-defining the fix by re-specifying it.
it.
The *start* keyword specifies what timestep the accumulation of The *start* keyword specifies what time step the accumulation of
correlation samples will begin on. The default is step 0. Setting it correlation samples will begin on. The default is step 0. Setting it
to a larger value can avoid adding non-equilibrated data to the to a larger value can avoid adding non-equilibrated data to the
correlation averages. correlation averages.
The *prefactor* keyword specifies a constant which will be used as a The *prefactor* keyword specifies a constant which will be used as a multiplier
multiplier on the correlation data after it is averaged. It is on the correlation data after it is averaged. It is effectively a scale factor
effectively a scale factor on Vi\*Vj, which can be used to account for on :math:`V_i V_j`, which can be used to account for the size of the time
the size of the time window or other unit conversions. window or other unit conversions.
The *file* keyword allows a filename to be specified. Every *Nfreq* The *file* keyword allows a filename to be specified. Every
steps, an array of correlation data is written to the file. The :math:`N_\text{freq}` steps, an array of correlation data is written to the
number of rows is *Nrepeat*, as described above. The number of file. The number of rows is :math:`N_\text{repeat}`, as described above.
columns is the Npair+2, also as described above. Thus the file ends The number of columns is :math:`N_\text{pair}+2`, also as described above.
up to be a series of these array sections. Thus the file ends up to be a series of these array sections.
The *overwrite* keyword will continuously overwrite the output file The *overwrite* keyword will continuously overwrite the output file
with the latest output, so that it only contains one timestep worth of with the latest output, so that it only contains one timestep worth of
output. This option can only be used with the *ave running* setting. output. This option can only be used with the *ave running* setting.
The *title1* and *title2* and *title3* keywords allow specification of The *title1*, *title2*, and *title3* keywords allow specification of
the strings that will be printed as the first 3 lines of the output the strings that will be printed as the first three lines of the output file,
file, assuming the *file* keyword was used. LAMMPS uses default assuming the *file* keyword was used. LAMMPS uses default values for each of
values for each of these, so they do not need to be specified. these, so they do not need to be specified.
By default, these header lines are as follows: By default, these header lines are as follows:
@ -300,18 +314,19 @@ appropriate fields from the fix ave/correlate command.
---------- ----------
Let Sij = a set of time correlation data for input values I and J, Let :math:`S_{ij}` be a set of time correlation data for input values
namely the *Nrepeat* values: :math:`I` and :math:`J`, namely the :math:`N_\text{repeat}` values:
.. parsed-literal:: .. math::
Sij = Cij(0), Cij(Nevery), Cij(2\*Nevery), ..., Cij(\*Nrepeat-1)\*Nevery) S_{ij} = C_{ij}(0), C_{ij}(N_\text{every}), C_{ij}(2N_\text{every}),
\dotsc, C_{ijI}\bigl((N_\text{repeat}-1) N_\text{every}\bigr)
As explained below, these datums are output as one column of a global As explained below, these data are output as one column of a global
array, which is effectively the correlation matrix. array, which is effectively the correlation matrix.
The *trap* function defined for :doc:`equal-style variables <variable>` The *trap* function defined for :doc:`equal-style variables <variable>`
can be used to perform a time integration of this vector of datums, can be used to perform a time integration of this vector of data,
using a trapezoidal rule. This is useful for calculating various using a trapezoidal rule. This is useful for calculating various
quantities which can be derived from time correlation data. If a quantities which can be derived from time correlation data. If a
normalization factor is needed for the time integration, it can be normalization factor is needed for the time integration, it can be
@ -322,40 +337,43 @@ included in the variable formula or via the *prefactor* keyword.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to
are relevant to this fix. :doc:`binary restart files <restart>`. None of the
:doc:`fix_modify <fix_modify>` options are relevant to this fix.
This fix computes a global array of values which can be accessed by This fix computes a global array of values which can be accessed by
various :doc:`output commands <Howto_output>`. The values can only be various :doc:`output commands <Howto_output>`. The values can only be
accessed on timesteps that are multiples of *Nfreq* since that is when accessed on timesteps that are multiples of :math:`N_\text{freq}` since that is
averaging is performed. The global array has # of rows = *Nrepeat* when averaging is performed. The global array has # of rows
and # of columns = Npair+2. The first column has the time delta (in :math:`N_\text{repeat}` and # of columns :math:`N_\text{pair}+2`. The first
timesteps) between the pairs of input values used to calculate the column has the time :math:`\Delta t` (in time steps) between the pairs of input
correlation, as described above. The second column has the number of values used to calculate the correlation, as described above. The second
samples contributing to the correlation average, as described above. column has the number of samples contributing to the correlation average, as
The remaining Npair columns are for I,J pairs of the N input values, described above. The remaining Npair columns are for :math:`I,J` pairs of the
as determined by the *type* keyword, as described above. :math:`N` input values, as determined by the *type* keyword, as described
above.
* For *type* = *auto*, the Npair = N columns are ordered: C11, C22, ..., * For *type* = *auto*, the :math:`N_\text{pair} = N` columns are ordered:
CNN. :math:`C_{11}, C_{22}, \dotsc, C_{NN}`
* For *type* = *upper*, the Npair = N\*(N-1)/2 columns are ordered: C12, * For *type* = *upper*, the :math:`N_\text{pair} = N(N-1)/2` columns are
C13, ..., C1N, C23, ..., C2N, C34, ..., CN-1N. ordered: :math:`C_{12}, C_{13}, \dotsc, C_{1N}, C_{23}, \dotsc, C_{2N},
* For *type* = *lower*, the Npair = N\*(N-1)/2 columns are ordered: C21, C_{34}, \dotsc, C_{N-1,N}`
C31, C32, C41, C42, C43, ..., CN1, CN2, ..., CNN-1. * For *type* = *lower*, the :math:`N_\text{pair} = N(N-1)/2` columns are
* For *type* = *auto/upper*, the Npair = N\*(N+1)/2 columns are ordered: ordered: :math:`C_{21}, C_{31}, C_{32}, C_{41}, C_{42}, C_{43I}, \dotsc,
C11, C12, C13, ..., C1N, C22, C23, ..., C2N, C33, C34, ..., CN-1N, C_{N1}, C_{N2}, \dotsc, C_{N,N-1}`
CNN. * For *type* = *auto/upper*, the :math:`N_\text{pair} = N(N+1)/2` columns are
* For *type* = *auto/lower*, the Npair = N\*(N+1)/2 columns are ordered: ordered: :math:`C_{11}, C_{12}, C_{13}, \dotsc, C_{1N}, C_{22}, C_{23},
C11, C21, C22, C31, C32, C33, C41, ..., C44, CN1, CN2, ..., CNN-1, \dotsc, C_{2N}, C_{33}, C_{34}, \dotsc, C_{N-1,N}, C_{NN}`
CNN. * For *type* = *auto/lower*, the :math:`N_\text{pair} = N(N+1)/2` columns are
* For *type* = *full*, the Npair = N\^2 columns are ordered: C11, C12, ordered: :math:`C_{11}, C_{21}, C_{22}, C_{31}, C_{32}, C_{33}, C_{41},
..., C1N, C21, C22, ..., C2N, C31, ..., C3N, ..., CN1, ..., CNN-1, \dotsc, C_{44}, C_{N1}, C_{N2}, \dotsc, C_{N,N-1}, C_{NN}`
CNN. * For *type* = *full*, the :math:`N_\text{pair} = N^2` columns are ordered:
:math:`C_{11}, C_{12}, \dotsc, C_{1N}, C_{21}, C_{22}, \dotsc, C_{2N},
C_{31}, \dotsc, C_{3N}, \dotsc, C_{N1}, \dotsc, C_{N,N-1}, C_{NN}`
The array values calculated by this fix are treated as intensive. If The array values calculated by this fix are treated as extensive. If
you need to divide them by the number of atoms, you must do this in a you need to divide them by the number of atoms, you must do this in a
later processing step, e.g. when using them in a later processing step (e.g., when using them in a :doc:`variable <variable>`).
:doc:`variable <variable>`.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
@ -368,7 +386,8 @@ Related commands
"""""""""""""""" """"""""""""""""
:doc:`fix ave/correlate/long <fix_ave_correlate_long>`, :doc:`fix ave/correlate/long <fix_ave_correlate_long>`,
:doc:`compute <compute>`, :doc:`fix ave/time <fix_ave_time>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`compute <compute>`, :doc:`fix ave/time <fix_ave_time>`,
:doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`,
:doc:`fix ave/histo <fix_ave_histo>`, :doc:`variable <variable>` :doc:`fix ave/histo <fix_ave_histo>`, :doc:`variable <variable>`
Default Default

View File

@ -6,14 +6,14 @@ fix ave/correlate/long command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ave/correlate/long Nevery Nfreq value1 value2 ... keyword args ... fix ID group-ID ave/correlate/long Nevery Nfreq value1 value2 ... keyword args ...
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* ave/correlate/long = style name of this fix command * ave/correlate/long = style name of this fix command
* Nevery = use input values every this many timesteps * Nevery = use input values every this many time steps
* Nfreq = save state of the time correlation functions every this many timesteps * Nfreq = save state of the time correlation functions every this many time steps
* one or more input values can be listed * one or more input values can be listed
* value = c_ID, c_ID[N], f_ID, f_ID[N], v_name * value = c_ID, c_ID[N], f_ID, f_ID[N], v_name
@ -38,7 +38,7 @@ Syntax
auto/lower = auto + lower auto/lower = auto + lower
full = correlate each value with every other value, including itself = auto + upper + lower full = correlate each value with every other value, including itself = auto + upper + lower
*start* args = Nstart *start* args = Nstart
Nstart = start accumulating correlations on this timestep Nstart = start accumulating correlations on this time step
*file* arg = filename *file* arg = filename
filename = name of file to output correlation data to filename = name of file to output correlation data to
*overwrite* arg = none = overwrite output file with only latest output *overwrite* arg = none = overwrite output file with only latest output
@ -66,10 +66,11 @@ Examples
Description Description
""""""""""" """""""""""
This fix is similar in spirit and syntax to the :doc:`fix ave/correlate <fix_ave_correlate>`. This fix is similar in spirit and syntax to the
:doc:`fix ave/correlate <fix_ave_correlate>`.
However, this fix allows the efficient calculation of time correlation However, this fix allows the efficient calculation of time correlation
functions on-the-fly over extremely long time windows with little functions on-the-fly over extremely long time windows with little
additional CPU overhead, using a multiple-tau method additional CPU overhead, using a multiple-:math:`\tau` method
:ref:`(Ramirez) <Ramirez>` that decreases the resolution of the stored :ref:`(Ramirez) <Ramirez>` that decreases the resolution of the stored
correlation function with time. It is not a full drop-in replacement. correlation function with time. It is not a full drop-in replacement.
@ -78,37 +79,41 @@ specified values may represent calculations performed by computes and
fixes which store their own "group" definitions. fixes which store their own "group" definitions.
Each listed value can be the result of a compute or fix or the Each listed value can be the result of a compute or fix or the
evaluation of an equal-style variable. See the :doc:`fix ave/correlate <fix_ave_correlate>` page for details. evaluation of an equal-style variable. See the
:doc:`fix ave/correlate <fix_ave_correlate>` page for details.
The *Nevery* and *Nfreq* arguments specify on what timesteps the input The *Nevery* and *Nfreq* arguments specify on what time steps the input
values will be used to calculate correlation data, and the frequency values will be used to calculate correlation data and the frequency
with which the time correlation functions will be output to a file. with which the time correlation functions will be output to a file,
Note that there is no *Nrepeat* argument, unlike the :doc:`fix ave/correlate <fix_ave_correlate>` command. respectively.
Note that there is no *Nrepeat* argument, unlike the
:doc:`fix ave/correlate <fix_ave_correlate>` command.
The optional keywords *ncorr*, *nlen*, and *ncount* are unique to this The optional keywords *ncorr*, *nlen*, and *ncount* are unique to this
command and determine the number of correlation points calculated and command and determine the number of correlation points calculated and
the memory and CPU overhead used by this calculation. *Nlen* and the memory and CPU overhead used by this calculation. *Nlen* and
*ncount* determine the amount of averaging done at longer correlation *ncount* determine the amount of averaging done at longer correlation
times. The default values *nlen=16*, *ncount=2* ensure that the times. The default values *nlen* = 16 and *ncount* = 2 ensure that the
systematic error of the multiple-tau correlator is always below the systematic error of the multiple-:math:`\tau` correlator is always below the
level of the statistical error of a typical simulation (which depends level of the statistical error of a typical simulation (which depends
on the ensemble size and the simulation length). on the ensemble size and the simulation length).
The maximum correlation time (in time steps) that can be reached is The maximum correlation time (in time steps) that can be reached is
given by the formula (nlen-1) \* ncount\^(ncorr-1). Longer correlation given by the formula :math:`(nlen-1) ncount^{(ncorr-1)}`. Longer correlation
times are discarded and not calculated. With the default values of times are discarded and not calculated. With the default values of
the parameters (ncorr=20, nlen=16 and ncount=2), this corresponds to the parameters (:math:`ncorr=20`, :math:`nlen=16` and :math:`ncount=2`),
7864320 time steps. If longer correlation times are needed, the value this corresponds to 7864320 time steps. If longer correlation times are
of ncorr should be increased. Using nlen=16 and ncount=2, with needed, the value of ncorr should be increased. Using :math:`nlen=16` and
ncorr=30, the maximum number of steps that can be correlated is :math:`ncount=2`, with :math:`ncorr=30`, the maximum number of steps that can
80530636808. If ncorr=40, correlation times in excess of 8e12 time be correlated is 80530636808. If :math:`ncorr=40`, correlation times in excess
steps can be calculated. of :math:`8\times 10^{12}` time steps can be calculated.
The total memory needed for each correlation pair is roughly The total memory needed for each correlation pair is roughly
4\*ncorr\*nlen\*8 bytes. With the default values of the parameters, this :math:`4 \times ncorr\times nlen \times 8` bytes.
corresponds to about 10 KB. With the default values of the parameters, this corresponds to about 10 KB.
For the meaning of the additional optional keywords, see the :doc:`fix ave/correlate <fix_ave_correlate>` doc page. For the meaning of the additional optional keywords, see the
:doc:`fix ave/correlate <fix_ave_correlate>` doc page.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@ -128,7 +133,8 @@ Restrictions
"""""""""""" """"""""""""
This compute is part of the EXTRA-FIX package. It is only enabled if This compute is part of the EXTRA-FIX package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info. LAMMPS was built with that package. See the
:doc:`Build package <Build_package>` page for more info.
Related commands Related commands
"""""""""""""""" """"""""""""""""
@ -140,8 +146,9 @@ Default
none none
The option defaults for keywords that are also keywords for the :doc:`fix ave/correlate <fix_ave_correlate>` command are as follows: type = The option defaults for keywords that are also keywords for the
auto, start = 0, no file output, title 1,2 = strings as described on :doc:`fix ave/correlate <fix_ave_correlate>` command are as follows:
type = auto, start = 0, no file output, title 1,2 = strings as described on
the :doc:`fix ave/correlate <fix_ave_correlate>` doc page. the :doc:`fix ave/correlate <fix_ave_correlate>` doc page.
The option defaults for keywords unique to this command are as The option defaults for keywords unique to this command are as

View File

@ -10,7 +10,7 @@ fix ave/histo/weight command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID style Nevery Nrepeat Nfreq lo hi Nbin value1 value2 ... keyword args ... fix ID group-ID style Nevery Nrepeat Nfreq lo hi Nbin value1 value2 ... keyword args ...
@ -22,7 +22,7 @@ Syntax
* lo,hi = lo/hi bounds within which to histogram * lo,hi = lo/hi bounds within which to histogram
* Nbin = # of histogram bins * Nbin = # of histogram bins
* one or more input values can be listed * one or more input values can be listed
* value = x, y, z, vx, vy, vz, fx, fy, fz, c_ID, c_ID[N], f_ID, f_ID[N], v_name * value = *x*, *y*, *z*, *vx*, *vy*, *vz*, *fx*, *fy*, *fz*, c_ID, c_ID[N], f_ID, f_ID[N], v_name
.. parsed-literal:: .. parsed-literal::
@ -126,26 +126,27 @@ length. The first value (a scalar or vector) is what is histogrammed
into bins, in the same manner the fix ave/histo command operates. The into bins, in the same manner the fix ave/histo command operates. The
second value (a scalar or vector) is used as a "weight". This means second value (a scalar or vector) is used as a "weight". This means
that instead of each value tallying a "1" to its bin, the that instead of each value tallying a "1" to its bin, the
corresponding weight is tallied. E.g. The Nth entry (weight) in the corresponding weight is tallied. For example, the :math:`N^\text{th}` entry
second vector is tallied to the bin corresponding to the Nth entry in (weight) in the second vector is tallied to the bin corresponding to the
the first vector. :math:`N^\text{th}` entry in the first vector.
---------- ----------
For input values from a compute or fix or variable, the bracketed For input values from a compute or fix or variable, the bracketed
index I can be specified using a wildcard asterisk with the index to index I can be specified using a wildcard asterisk with the index to
effectively specify multiple values. This takes the form "\*" or effectively specify multiple values. This takes the form "\*" or
"\*n" or "n\*" or "m\*n". If N = the size of the vector (for *mode* = "\*n" or "m\*" or "m\*n". If :math:`N` is the size of the vector
scalar) or the number of columns in the array (for *mode* = vector), (for *mode* = scalar) or the number of columns in the array
then an asterisk with no numeric values means all indices from 1 to N. (for *mode* = vector), then an asterisk with no numeric values means all
indices from 1 to :math:`N`\ .
A leading asterisk means all indices from 1 to n (inclusive). A A leading asterisk means all indices from 1 to n (inclusive). A
trailing asterisk means all indices from n to N (inclusive). A middle trailing asterisk means all indices from m to :math:`N` (inclusive). A middle
asterisk means all indices from m to n (inclusive). asterisk means all indices from m to n (inclusive).
Using a wildcard is the same as if the individual elements of the Using a wildcard is the same as if the individual elements of the
vector or columns of the array had been listed one by one. E.g. these vector or columns of the array had been listed one by one. For example, the
2 fix ave/histo commands are equivalent, since the :doc:`compute following two fix ave/histo commands are equivalent, since the :doc:`compute
com/chunk <compute_com_chunk>` command creates a global array with 3 com/chunk <compute_com_chunk>` command creates a global array with three
columns: columns:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -164,31 +165,35 @@ columns:
---------- ----------
The *Nevery*, *Nrepeat*, and *Nfreq* arguments specify on what The :math:`N_\text{every}`, :math:`N_\text{repeat}`, and :math:`N_\text{freq}`
timesteps the input values will be used in order to contribute to the arguments specify on what time steps the input values will be used in order to
histogram. The final histogram is generated on timesteps that are contribute to the histogram. The final histogram is generated on time steps
multiple of *Nfreq*\ . It is averaged over *Nrepeat* histograms, that are multiple of :math:`N_\text{freq}`\ . It is averaged over
computed in the preceding portion of the simulation every *Nevery* :math:`N_\text{repeat}` histograms, computed in the preceding portion of the
timesteps. *Nfreq* must be a multiple of *Nevery* and *Nevery* must simulation every :math:`N_\text{every}` time steps.
be non-zero even if *Nrepeat* is 1. Also, the timesteps :math:`N_\text{freq}` must be a multiple of :math:`N_\text{every}` and
contributing to the histogram value cannot overlap, :math:`N_\text{every}` must be non-zero even if :math:`N_\text{repeat}` is 1.
i.e. Nrepeat\*Nevery can not exceed Nfreq. Also, the time steps contributing to the histogram value cannot overlap
(i.e., :math:`N_\text{repeat}\times N_\text{every}` cannot exceed
:math:`N_\text{freq}`).
For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then input values For example, if :math:`N_\text{every}=2`, :math:`N_\text{repeat}=6`, and
on timesteps 90,92,94,96,98,100 will be used to compute the final :math:`N_\text{freq}=100`, then input values on time steps 90, 92, 94, 96, 98,
histogram on timestep 100. Similarly for timesteps and 100 will be used to compute the final histogram on timestep 100.
190,192,194,196,198,200 on timestep 200, etc. If Nrepeat=1 and Nfreq Similarly for timesteps 190, 192, 194, 196, 198, and 200 on timestep 200, etc.
= 100, then no time averaging of the histogram is done; a histogram is If :math:`N_\text{repeat}=1` and :math:`N_\text{freq} = 100`, then no time
simply generated on timesteps 100,200,etc. averaging of the histogram is done; a histogram is simply generated on
timesteps 100, 200, etc.
---------- ----------
The atom attribute values (x,y,z,vx,vy,vz,fx,fy,fz) are The atom attribute values (*x*, *y*, *z*, *vx*, *vy*, *vz*, *fx*, *fy*, and
self-explanatory. Note that other atom attributes can be used as *fz*) are self-explanatory. Note that other atom attributes can be used as
inputs to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying inputs to this fix by using the
an input value from that compute. :doc:`compute property/atom <compute_property_atom>` command and then
specifying an input value from that compute.
If a value begins with "c\_", a compute ID must follow which has been If a value begins with "c\_," a compute ID must follow which has been
previously defined in the input script. If *mode* = scalar, then if previously defined in the input script. If *mode* = scalar, then if
no bracketed term is appended, the global scalar calculated by the no bracketed term is appended, the global scalar calculated by the
compute is used. If a bracketed term is appended, the Ith element of compute is used. If a bracketed term is appended, the Ith element of
@ -201,35 +206,38 @@ how I can be specified with a wildcard asterisk to effectively specify
multiple values. multiple values.
Note that there is a :doc:`compute reduce <compute_reduce>` command Note that there is a :doc:`compute reduce <compute_reduce>` command
which can sum per-atom quantities into a global scalar or vector which that can sum per-atom quantities into a global scalar or vector, which
can thus be accessed by fix ave/histo. Or it can be a compute defined can then be accessed by fix ave/histo. It can also be a compute defined
not in your input script, but by :doc:`thermodynamic output <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>` not in your input script, but by :doc:`thermodynamic output <thermo_style>`
or other fixes such as :doc:`fix nvt <fix_nh>`
or :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for or :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for
these commands which give the IDs of these computes. Users can also these commands which give the IDs of these computes. Users can also
write code for their own compute styles and :doc:`add them to LAMMPS <Modify>`. write code for their own compute styles and
:doc:`add them to LAMMPS <Modify>`.
If a value begins with "f\_", a fix ID must follow which has been If a value begins with "f\_," a fix ID must follow which has been
previously defined in the input script. If *mode* = scalar, then if previously defined in the input script. If *mode* = scalar, then if
no bracketed term is appended, the global scalar calculated by the fix no bracketed term is appended, the global scalar calculated by the fix
is used. If a bracketed term is appended, the Ith element of the is used. If a bracketed term is appended, the Ith element of the
global vector calculated by the fix is used. If *mode* = vector, then global vector calculated by the fix is used. If *mode* = vector, then
if no bracketed term is appended, the global or per-atom or local if no bracketed term is appended, the global or per-atom or local
vector calculated by the fix is used. If a bracketed term is vector calculated by the fix is used. If a bracketed term is
appended, the Ith column of the global or per-atom or local array appended, the :math:`I^\text{th}` column of the global or per-atom or local
calculated by the fix is used. See the discussion above for how I can array calculated by the fix is used. See the discussion above for how
be specified with a wildcard asterisk to effectively specify multiple :math:`I` can be specified with a wildcard asterisk to effectively specify
values. multiple values.
Note that some fixes only produce their values on certain timesteps, Note that some fixes only produce their values on certain timesteps,
which must be compatible with *Nevery*, else an error will result. which must be compatible with :math:`N_\text{every}`, else an error will
Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Modify>`. result. Users can also write code for their own fix styles and
:doc:`add them to LAMMPS <Modify>`.
If a value begins with "v\_", a variable name must follow which has If a value begins with "v\_," a variable name must follow which has
been previously defined in the input script. If *mode* = scalar, then been previously defined in the input script. If *mode* = scalar, then
only equal-style or vector-style variables can be used, which both only equal-style or vector-style variables can be used, which both
produce global values. In this mode, a vector-style variable requires produce global values. In this mode, a vector-style variable requires
a bracketed term to specify the Ith element of the vector calculated a bracketed term to specify the :math:`I^\text{th}` element of the vector
by the variable. If *mode* = vector, then only vector-style or calculated by the variable. If *mode* = vector, then only vector-style or
atom-style variables can be used, which produce a global or per-atom atom-style variables can be used, which produce a global or per-atom
vector respectively. The vector-style variable must be used without a vector respectively. The vector-style variable must be used without a
bracketed term. See the :doc:`variable <variable>` command for details. bracketed term. See the :doc:`variable <variable>` command for details.
@ -259,44 +267,44 @@ keyword should be used to specify which output will be used. The
remaining input arguments must still be consistent. remaining input arguments must still be consistent.
The *beyond* keyword determines how input values that fall outside the The *beyond* keyword determines how input values that fall outside the
*lo* to *hi* bounds are treated. Values such that *lo* <= value <= *lo* to *hi* bounds are treated. Values such that *lo* :math:`\le` value
*hi* are assigned to one bin. Values on a bin boundary are assigned :math:`\le` *hi* are assigned to one bin. Values on a bin boundary are
to the lower of the 2 bins. If *beyond* is set to *ignore* then assigned to the lower of the two bins. If *beyond* is set to *ignore* then
values < *lo* and values > *hi* are ignored, i.e. they are not binned. values :math:`<` *lo* and values :math:`>` *hi* are ignored (i.e., they are not
If *beyond* is set to *end* then values < *lo* are counted in the binned). If *beyond* is set to *end*, then values :math:`<` *lo* are counted in
first bin and values > *hi* are counted in the last bin. If *beyond* the first bin and values :math:`>` *hi* are counted in the last bin.
is set to *extend* then two extra bins are created, so that there are If *beyond* is set to *extend*, then two extra bins are created so that there
Nbins+2 total bins. Values < *lo* are counted in the first bin and are :math:`N_\text{bins}+2` total bins. Values :math:`<` *lo* are counted in
values > *hi* are counted in the last bin (Nbins+2). Values between the first bin and values :math:`>` *hi* are counted in the last bin
*lo* and *hi* (inclusive) are counted in bins 2 through Nbins+1. The :math:`(N_\text{bins}+2)`\ . Values between
"coordinate" stored and printed for these two extra bins is *lo* and *lo* and *hi* (inclusive) are counted in bins 2 through
*hi*\ . :math:`N_\text{bins}+1`\ . The "coordinate" stored and printed for these two
extra bins is *lo* and *hi*\ .
The *ave* keyword determines how the histogram produced every *Nfreq* The *ave* keyword determines how the histogram produced every
steps are averaged with histograms produced on previous steps that :math:`N_\text{freq}` steps are averaged with histograms produced on previous
were multiples of *Nfreq*, before they are accessed by another output steps that were multiples of :math:`N_\text{freq}`, before they are accessed by
command or written to a file. another output command or written to a file.
If the *ave* setting is *one*, then the histograms produced on If the *ave* setting is *one*, then the histograms produced on
timesteps that are multiples of *Nfreq* are independent of each other; timesteps that are multiples of :math:`N_\text{freq}` are independent of each
they are output as-is without further averaging. other; they are output as-is without further averaging.
If the *ave* setting is *running*, then the histograms produced on If the *ave* setting is *running*, then the histograms produced on
timesteps that are multiples of *Nfreq* are summed and averaged in a timesteps that are multiples of :math:`N_\text{freq}` are summed and averaged
cumulative sense before being output. Each bin value in the histogram in a cumulative sense before being output. Each bin value in the histogram
is thus the average of the bin value produced on that timestep with is thus the average of the bin value produced on that timestep with all
all preceding values for the same bin. This running average begins preceding values for the same bin. This running average begins when the fix is
when the fix is defined; it can only be restarted by deleting the fix defined; it can only be restarted by deleting the fix via the
via the :doc:`unfix <unfix>` command, or by re-defining the fix by :doc:`unfix <unfix>` command, or by re-defining the fix by re-specifying it.
re-specifying it.
If the *ave* setting is *window*, then the histograms produced on If the *ave* setting is *window*, then the histograms produced on
timesteps that are multiples of *Nfreq* are summed within a moving timesteps that are multiples of :math:`N_\text{freq}` are summed within a
"window" of time, so that the last M histograms are used to produce moving "window" of time, so that the last :math:`M` histograms are used to
the output. E.g. if M = 3 and Nfreq = 1000, then the output on step produce the output (e.g., if :math:`M = 3` and :math:`N_\text{freq} = 1000`,
10000 will be the combined histogram of the individual histograms on then the output on step 10000 will be the combined histogram of the individual
steps 8000,9000,10000. Outputs on early steps will be sums over less histograms on steps 8000, 9000, and 10000. Outputs on early steps will be sums
than M histograms if they are not available. over less than :math:`M` histograms if they are not available.
The *start* keyword specifies what timestep histogramming will begin The *start* keyword specifies what timestep histogramming will begin
on. The default is step 0. Often input values can be 0.0 at time 0, on. The default is step 0. Often input values can be 0.0 at time 0,
@ -321,8 +329,8 @@ The *overwrite* keyword will continuously overwrite the output file
with the latest output, so that it only contains one timestep worth of with the latest output, so that it only contains one timestep worth of
output. This option can only be used with the *ave running* setting. output. This option can only be used with the *ave running* setting.
The *title1* and *title2* and *title3* keywords allow specification of The *title1*, *title2*, and *title3* keywords allow specification of
the strings that will be printed as the first 3 lines of the output the strings that will be printed as the first three lines of the output
file, assuming the *file* keyword was used. LAMMPS uses default file, assuming the *file* keyword was used. LAMMPS uses default
values for each of these, so they do not need to be specified. values for each of these, so they do not need to be specified.
@ -336,7 +344,7 @@ By default, these header lines are as follows:
In the first line, ID is replaced with the fix-ID. The second line In the first line, ID is replaced with the fix-ID. The second line
describes the six values that are printed at the first of each section describes the six values that are printed at the first of each section
of output. The third describes the 4 values printed for each bin in of output. The third describes the four values printed for each bin in
the histogram. the histogram.
---------- ----------
@ -344,13 +352,14 @@ the histogram.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to
are relevant to this fix. :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options are relevant to this fix.
This fix produces a global vector and global array which can be This fix produces a global vector and global array which can be
accessed by various :doc:`output commands <Howto_output>`. The values accessed by various :doc:`output commands <Howto_output>`. The values
can only be accessed on timesteps that are multiples of *Nfreq* since can only be accessed on timesteps that are multiples of :math:`N_\text{freq}`
that is when a histogram is generated. The global vector has 4 since that is when a histogram is generated. The global vector has four
values: values:
* 1 = total counts in the histogram * 1 = total counts in the histogram
@ -358,19 +367,20 @@ values:
* 3 = min value of all input values, including ones not histogrammed * 3 = min value of all input values, including ones not histogrammed
* 4 = max value of all input values, including ones not histogrammed * 4 = max value of all input values, including ones not histogrammed
The global array has # of rows = Nbins and # of columns = 3. The The global array has :math:`N_\text{bins}` rows and three columns. The
first column has the bin coordinate, the second column has the count of first column has the bin coordinate, the second column has the count of
values in that histogram bin, and the third column has the bin count values in that histogram bin, and the third column has the bin count
divided by the total count (not including missing counts), so that the divided by the total count (not including missing counts), so that the
values in the third column sum to 1.0. values in the third column sum to 1.0.
The vector and array values calculated by this fix are all treated as The vector and array values calculated by this fix are all treated as
intensive. If this is not the case, e.g. due to histogramming intensive. If this is not the case (e.g., due to histogramming
per-atom input values, then you will need to account for that when per-atom input values), then you will need to account for that when
interpreting the values produced by this fix. interpreting the values produced by this fix.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command.
This fix is not invoked during :doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""
@ -379,7 +389,8 @@ Restrictions
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/time <fix_ave_time>`, :doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`,
:doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/time <fix_ave_time>`,
:doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`, :doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`,
Default Default

View File

@ -6,15 +6,15 @@ fix ave/time command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID ave/time Nevery Nrepeat Nfreq value1 value2 ... keyword args ... fix ID group-ID ave/time Nevery Nrepeat Nfreq value1 value2 ... keyword args ...
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* ave/time = style name of this fix command * ave/time = style name of this fix command
* Nevery = use input values every this many timesteps * Nevery = use input values every this many time steps
* Nrepeat = # of times to use input values for calculating averages * Nrepeat = # of times to use input values for calculating averages
* Nfreq = calculate averages every this many timesteps * Nfreq = calculate averages every this many time steps
* one or more input values can be listed * one or more input values can be listed
* value = c_ID, c_ID[N], f_ID, f_ID[N], v_name * value = c_ID, c_ID[N], f_ID, f_ID[N], v_name
@ -40,7 +40,7 @@ Syntax
running = output cumulative average of all previous Nfreq steps running = output cumulative average of all previous Nfreq steps
window M = output average of M most recent Nfreq steps window M = output average of M most recent Nfreq steps
*start* args = Nstart *start* args = Nstart
Nstart = start averaging on this timestep Nstart = start averaging on this time step
*off* arg = M = do not average this value *off* arg = M = do not average this value
M = value # from 1 to Nvalues M = value # from 1 to Nvalues
*file* arg = filename *file* arg = filename
@ -69,7 +69,7 @@ Examples
Description Description
""""""""""" """""""""""
Use one or more global values as inputs every few timesteps, and Use one or more global values as inputs every few time steps, and
average them over longer timescales. The resulting averages can be average them over longer timescales. The resulting averages can be
used by other :doc:`output commands <Howto_output>` such as used by other :doc:`output commands <Howto_output>` such as
:doc:`thermo_style custom <thermo_style>`, and can also be written to a :doc:`thermo_style custom <thermo_style>`, and can also be written to a
@ -86,9 +86,11 @@ Each listed value can be the result of a :doc:`compute <compute>` or
:doc:`variable <variable>`. In each case, the compute, fix, or variable :doc:`variable <variable>`. In each case, the compute, fix, or variable
must produce a global quantity, not a per-atom or local quantity. If must produce a global quantity, not a per-atom or local quantity. If
you wish to spatial- or time-average or histogram per-atom quantities you wish to spatial- or time-average or histogram per-atom quantities
from a compute, fix, or variable, then see the :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/atom <fix_ave_atom>`, from a compute, fix, or variable, then see the
:doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/atom <fix_ave_atom>`,
or :doc:`fix ave/histo <fix_ave_histo>` commands. If you wish to sum a or :doc:`fix ave/histo <fix_ave_histo>` commands. If you wish to sum a
per-atom quantity into a single global quantity, see the :doc:`compute reduce <compute_reduce>` command. per-atom quantity into a single global quantity, see the
:doc:`compute reduce <compute_reduce>` command.
:doc:`Computes <compute>` that produce global quantities are those which :doc:`Computes <compute>` that produce global quantities are those which
do not have the word *atom* in their style name. Only a few do not have the word *atom* in their style name. Only a few
@ -100,13 +102,13 @@ be used, since they produce per-atom values.
The input values must either be all scalars or all vectors depending The input values must either be all scalars or all vectors depending
on the setting of the *mode* keyword. In both cases, the averaging is on the setting of the *mode* keyword. In both cases, the averaging is
performed independently on each input value. I.e. each input scalar performed independently on each input value (i.e., each input scalar
is averaged independently or each element of each input vector is is averaged independently or each element of each input vector is
averaged independently. averaged independently).
If *mode* = scalar, then the input values must be scalars, or vectors If *mode* = scalar, then the input values must be scalars, or vectors
with a bracketed term appended, indicating the Ith value of the vector with a bracketed term appended, indicating the :math:`I^\text{th}` value of the
is used. vector is used.
If *mode* = vector, then the input values must be vectors, or arrays If *mode* = vector, then the input values must be vectors, or arrays
with a bracketed term appended, indicating the Ith column of the array with a bracketed term appended, indicating the Ith column of the array
@ -118,17 +120,17 @@ the vector or number of rows in the array.
For input values from a compute or fix or variable, the bracketed For input values from a compute or fix or variable, the bracketed
index I can be specified using a wildcard asterisk with the index to index I can be specified using a wildcard asterisk with the index to
effectively specify multiple values. This takes the form "\*" or effectively specify multiple values. This takes the form "\*" or
"\*n" or "n\*" or "m\*n". If N = the size of the vector (for *mode* = "\*n" or "m\*" or "m\*n". If :math:`N` is the size of the vector (for *mode* =
scalar) or the number of columns in the array (for *mode* = vector), scalar) or the number of columns in the array (for *mode* = vector),
then an asterisk with no numeric values means all indices from 1 to N. then an asterisk with no numeric values means all indices from 1 to :math:`N`.
A leading asterisk means all indices from 1 to n (inclusive). A A leading asterisk means all indices from 1 to n (inclusive). A trailing
trailing asterisk means all indices from n to N (inclusive). A middle asterisk means all indices from n to :math:`N` (inclusive). A middle asterisk
asterisk means all indices from m to n (inclusive). means all indices from m to n (inclusive).
Using a wildcard is the same as if the individual elements of the Using a wildcard is the same as if the individual elements of the
vector or columns of the array had been listed one by one. E.g. these vector or columns of the array had been listed one by one. For example, the
2 fix ave/time commands are equivalent, since the :doc:`compute rdf following two fix ave/time commands are equivalent, since the :doc:`compute rdf
<compute_rdf>` command creates, in this case, a global array with 3 <compute_rdf>` command creates, in this case, a global array with three
columns, each of length 50: columns, each of length 50:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -147,22 +149,24 @@ columns, each of length 50:
---------- ----------
The *Nevery*, *Nrepeat*, and *Nfreq* arguments specify on what The :math:`N_\text{every}`, :math:`N_\text{repeat}`, and :math:`N_\text{freq}`
timesteps the input values will be used in order to contribute to the arguments specify on what time steps the input values will be used in order to
average. The final averaged quantities are generated on timesteps contribute to the average. The final averaged quantities are generated on
that are a multiple of *Nfreq*\ . The average is over *Nrepeat* time steps that are a multiple of :math:`N_\text{freq}`\ . The average is over
quantities, computed in the preceding portion of the simulation every :math:`N_\text{repeat}` quantities, computed in the preceding portion of the
*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and simulation every :math:`N_\text{every}` time steps. :math:`N_\text{freq}` must
*Nevery* must be non-zero even if *Nrepeat* is 1. Also, the timesteps be a multiple of :math:`N_\text{every}` and :math:`N_\text{every}` must be
non-zero even if :math:`N_\text{repeat} = 1`. Also, the time steps
contributing to the average value cannot overlap, contributing to the average value cannot overlap,
i.e. Nrepeat\*Nevery can not exceed Nfreq. i.e. Nrepeat\*Nevery can not exceed Nfreq.
For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on For example, if :math:`N_\text{every}=2`, :math:`N_\text{repeat}=6`, and
timesteps 90,92,94,96,98,100 will be used to compute the final average :math:`N_\text{freq}=100`, then values on time steps 90, 92, 94, 96, 98, and
on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on 100 will be used to compute the final average on time step 100. Similarly for
timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time time steps 190, 192, 194, 196, 198, and 200 on time step 200, etc.
averaging is done; values are simply generated on timesteps If :math:`N_\text{repeat}=1` and :math:`N_\text{freq} = 100`, then no time
100,200,etc. averaging is done; values are simply generated on time steps
100, 200, etc.
---------- ----------
@ -178,8 +182,8 @@ See the discussion above for how I can be specified with a wildcard
asterisk to effectively specify multiple values. asterisk to effectively specify multiple values.
Note that there is a :doc:`compute reduce <compute_reduce>` command Note that there is a :doc:`compute reduce <compute_reduce>` command
which can sum per-atom quantities into a global scalar or vector which that can sum per-atom quantities into a global scalar or vector, which
can thus be accessed by fix ave/time. Or it can be a compute defined can then be accessed by fix ave/time. It can also be a compute defined
not in your input script, but by :doc:`thermodynamic output not in your input script, but by :doc:`thermodynamic output
<thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>` or <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>` or
:doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for
@ -198,7 +202,7 @@ global array calculated by the fix is used. See the discussion above
for how I can be specified with a wildcard asterisk to effectively for how I can be specified with a wildcard asterisk to effectively
specify multiple values. specify multiple values.
Note that some fixes only produce their values on certain timesteps, Note that some fixes only produce their values on certain time steps,
which must be compatible with *Nevery*, else an error will result. which must be compatible with *Nevery*, else an error will result.
Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Modify>`. Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Modify>`.
@ -228,32 +232,32 @@ vectors, or columns of global arrays. They can also be global arrays,
which are converted into a series of global vectors (one per column), which are converted into a series of global vectors (one per column),
as explained above. as explained above.
The *ave* keyword determines how the values produced every *Nfreq* The *ave* keyword determines how the values produced every
steps are averaged with values produced on previous steps that were :math:`N_\text{freq}` steps are averaged with values produced on previous steps
multiples of *Nfreq*, before they are accessed by another output that were multiples of :math:`N_\text{freq}`, before they are accessed by
command or written to a file. another output command or written to a file.
If the *ave* setting is *one*, then the values produced on timesteps If the *ave* setting is *one*, then the values produced on time steps
that are multiples of *Nfreq* are independent of each other; they are that are multiples of :math:`N_\text{freq}` are independent of each other; they
output as-is without further averaging. are output as-is without further averaging.
If the *ave* setting is *running*, then the values produced on If the *ave* setting is *running*, then the values produced on
timesteps that are multiples of *Nfreq* are summed and averaged in a time steps that are multiples of :math:`N_\text{freq}` are summed and averaged
cumulative sense before being output. Each output value is thus the in a cumulative sense before being output. Each output value is thus the
average of the value produced on that timestep with all preceding average of the value produced on that time step with all preceding
values. This running average begins when the fix is defined; it can values. This running average begins when the fix is defined; it can
only be restarted by deleting the fix via the :doc:`unfix <unfix>` only be restarted by deleting the fix via the :doc:`unfix <unfix>`
command, or by re-defining the fix by re-specifying it. command, or by re-defining the fix by re-specifying it.
If the *ave* setting is *window*, then the values produced on If the *ave* setting is *window*, then the values produced on
timesteps that are multiples of *Nfreq* are summed and averaged within time steps that are multiples of *Nfreq* are summed and averaged within
a moving "window" of time, so that the last M values are used to a moving "window" of time, so that the last M values are used to
produce the output. E.g. if M = 3 and Nfreq = 1000, then the output produce the output. For example, if :math:`M = 3` and
on step 10000 will be the average of the individual values on steps :math:`N_\text{freq} = 1000`, then the output on step 10000 will be the average
8000,9000,10000. Outputs on early steps will average over less than M of the individual values on steps 8000, 9000, and 10000. Outputs on early
values if they are not available. steps will average over less than :math:`M` values if they are not available.
The *start* keyword specifies what timestep averaging will begin on. The *start* keyword specifies what time step averaging will begin on.
The default is step 0. Often input values can be 0.0 at time 0, so The default is step 0. Often input values can be 0.0 at time 0, so
setting *start* to a larger value can avoid including a 0.0 in a setting *start* to a larger value can avoid including a 0.0 in a
running or windowed average. running or windowed average.
@ -262,9 +266,9 @@ The *off* keyword can be used to flag any of the input values. If a
value is flagged, it will not be time averaged. Instead the most value is flagged, it will not be time averaged. Instead the most
recent input value will always be stored and output. This is useful recent input value will always be stored and output. This is useful
if one of more of the inputs produced by a compute or fix or variable if one of more of the inputs produced by a compute or fix or variable
are effectively constant or are simply current values. E.g. they are are effectively constant or are simply current values (e.g., they are
being written to a file with other time-averaged values for purposes being written to a file with other time-averaged values for purposes
of creating well-formatted output. of creating well-formatted output).
The *file* keyword allows a filename to be specified. Every *Nfreq* The *file* keyword allows a filename to be specified. Every *Nfreq*
steps, one quantity or vector of quantities is written to the file for steps, one quantity or vector of quantities is written to the file for
@ -288,13 +292,13 @@ effort in Python using the *pyyaml*, *pandas*, and *matplotlib*
packages. packages.
The *overwrite* keyword will continuously overwrite the output file The *overwrite* keyword will continuously overwrite the output file
with the latest output, so that it only contains one timestep worth of with the latest output, so that it only contains one time step worth of
output. This option can only be used with the *ave running* setting. output. This option can only be used with the *ave running* setting.
The *format* keyword sets the numeric format of each value when it is The *format* keyword sets the numeric format of each value when it is
printed to a file via the *file* keyword. Note that all values are printed to a file via the *file* keyword. Note that all values are
floating point quantities. The default format is %g. You can specify floating point quantities. The default format is %g. You can specify
a higher precision if desired, e.g. %20.16g. a higher precision if desired (e.g., %20.16g).
The *title1* and *title2* and *title3* keywords allow specification of The *title1* and *title2* and *title3* keywords allow specification of
the strings that will be printed as the first 2 or 3 lines of the the strings that will be printed as the first 2 or 3 lines of the
@ -340,8 +344,8 @@ a YAML format file this name will be in the list of keywords.
This fix produces a global scalar or global vector or global array This fix produces a global scalar or global vector or global array
which can be accessed by various :doc:`output commands <Howto_output>`. which can be accessed by various :doc:`output commands <Howto_output>`.
The values can only be accessed on timesteps that are multiples of The values can only be accessed on time steps that are multiples of
*Nfreq* since that is when averaging is performed. :math:`N_\text{freq}` since that is when averaging is performed.
A scalar is produced if only a single input value is averaged and A scalar is produced if only a single input value is averaged and
*mode* = scalar. A vector is produced if multiple input values are *mode* = scalar. A vector is produced if multiple input values are
@ -354,17 +358,18 @@ of rows = length of the input vectors and # of columns = number of
inputs. inputs.
If the fix produces a scalar or vector, then the scalar and each If the fix produces a scalar or vector, then the scalar and each
element of the vector can be either "intensive" or "extensive", element of the vector can be either "intensive" or "extensive,"
depending on whether the values contributing to the scalar or vector depending on whether the values contributing to the scalar or vector
element are "intensive" or "extensive". If the fix produces an array, element are "intensive" or "extensive." If the fix produces an array,
then all elements in the array must be the same, either "intensive" or then all elements in the array must be the same, either "intensive" or
"extensive". If a compute or fix provides the value being time "extensive." If a compute or fix provides the value being time
averaged, then the compute or fix determines whether the value is averaged, then the compute or fix determines whether the value is
intensive or extensive; see the page for that compute or fix for intensive or extensive; see the page for that compute or fix for
further info. Values produced by a variable are treated as intensive. further info. Values produced by a variable are treated as intensive.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""
@ -373,7 +378,8 @@ Restrictions
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/histo <fix_ave_histo>`, :doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`,
:doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/histo <fix_ave_histo>`,
:doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`, :doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`,
Default Default

View File

@ -6,7 +6,7 @@ fix aveforce command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID aveforce fx fy fz keyword value ... fix ID group-ID aveforce fx fy fz keyword value ...
@ -48,13 +48,13 @@ component. The actual force on each atom is then set to the average
value plus the component specified in this command. This means each value plus the component specified in this command. This means each
atom in the group receives the same force. atom in the group receives the same force.
Any of the fx,fy,fz values can be specified as NULL which means the Any of the *fx*, *fy*, or *fz* values can be specified as :code:`NULL`, which
force in that dimension is not changed. Note that this is not the means the force in that dimension is not changed. Note that this is not the
same as specifying a 0.0 value, since that sets all forces to the same same as specifying a 0.0 value, since that sets all forces to the same
average value without adding in any additional force. average value without adding in any additional force.
Any of the 3 quantities defining the force components can be specified Any of the three quantities defining the force components, namely *fx*, *fy*,
as an equal-style :doc:`variable <variable>`, namely *fx*, *fy*, *fz*\ . and *fz*, can be specified as an equal-style :doc:`variable <variable>`\ .
If the value is a variable, it should be specified as v_name, where If the value is a variable, it should be specified as v_name, where
name is the variable name. In this case, the variable will be name is the variable name. In this case, the variable will be
evaluated each timestep, and its value used to determine the average evaluated each timestep, and its value used to determine the average
@ -78,17 +78,17 @@ to it.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. No information about this fix is written to
:doc:`binary restart files <restart>`.
The :doc:`fix_modify <fix_modify>` *respa* option is supported by this The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
fix. This allows to set at which level of the :doc:`r-RESPA <run_style>` fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
integrator the fix is adding its forces. Default is the outermost level. integrator the fix is adding its forces. Default is the outermost level.
This fix computes a global 3-vector of forces, which can be accessed This fix computes a global three-vector of forces, which can be accessed
by various :doc:`output commands <Howto_output>`. This is the total by various :doc:`output commands <Howto_output>`. This is the total
force on the group of atoms before the forces on individual atoms are force on the group of atoms before the forces on individual atoms are
changed by the fix. The vector values calculated by this fix are changed by the fix. The vector values calculated by this fix are "extensive".
"extensive".
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. the :doc:`run <run>` command.

View File

@ -6,7 +6,7 @@ fix balance command
Syntax Syntax
"""""" """"""
.. parsed-literal:: .. code-block:: LAMMPS
fix ID group-ID balance Nfreq thresh style args keyword args ... fix ID group-ID balance Nfreq thresh style args keyword args ...
@ -19,7 +19,7 @@ Syntax
.. parsed-literal:: .. parsed-literal::
shift args = dimstr Niter stopthresh shift args = dimstr Niter stopthresh
dimstr = sequence of letters containing "x" or "y" or "z", each not more than once 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 Niter = # of times to iterate within each dimension of dimstr sequence
stopthresh = stop balancing when this imbalance threshold is reached stopthresh = stop balancing when this imbalance threshold is reached
*rcb* args = none *rcb* args = none
@ -72,10 +72,10 @@ perform "static" balancing, before or between runs, see the
Load-balancing is typically most useful if the particles in the Load-balancing is typically most useful if the particles in the
simulation box have a spatially-varying density distribution or simulation box have a spatially-varying density distribution or
where the computational cost varies significantly between different where the computational cost varies significantly between different
atoms. E.g. a model of a vapor/liquid interface, or a solid with atoms (e.g., a model of a vapor/liquid interface, or a solid with
an irregular-shaped geometry containing void regions, or an irregular-shaped geometry containing void regions, or
:doc:`hybrid pair style simulations <pair_hybrid>` which combine :doc:`hybrid pair style simulations <pair_hybrid>` that combine
pair styles with different computational cost. In these cases, the pair styles with different computational cost). In these cases, the
LAMMPS default of dividing the simulation box volume into a LAMMPS default of dividing the simulation box volume into a
regular-spaced grid of 3d bricks, with one equal-volume sub-domain regular-spaced grid of 3d bricks, with one equal-volume sub-domain
per processor, may assign numbers of particles per processor in a per processor, may assign numbers of particles per processor in a
@ -92,28 +92,30 @@ processor.
.. note:: .. note::
The weighting options listed above are documented with the The weighting options listed above are documented with the
:doc:`balance <balance>` command in :ref:`this section of the balance command <weighted_balance>` doc page. That section :doc:`balance <balance>` command in :ref:`this section of the balance
command <weighted_balance>` doc page. That section
describes the various weighting options and gives a few examples of describes the various weighting options and gives a few examples of
how they can be used. The weighting options are the same for both the how they can be used. The weighting options are the same for both the
fix balance and :doc:`balance <balance>` commands. fix balance and :doc:`balance <balance>` commands.
Note that the :doc:`processors <processors>` command allows some control Note that the :doc:`processors <processors>` command allows some control
over how the box volume is split across processors. Specifically, for 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 a :math:`P_x \times P_y \times P_z` grid of processors, it allows choices of
Pz, subject to the constraint that Px \* Py \* Pz = P, the total number :math:`P_x`, :math:`P_y`, and :math:`P_z` subject to the constraint that
of processors. This is sufficient to achieve good load-balance for :math:`P_x P_y P_z = 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 some problems on some processor counts. However, all the processor
sub-domains will still have the same shape and same volume. sub-domains will still have the same shape and the same volume.
On a particular timestep, a load-balancing operation is only performed On a particular time step, a load-balancing operation is only performed
if the current "imbalance factor" in particles owned by each processor if the current "imbalance factor" in particles owned by each processor
exceeds the specified *thresh* parameter. The imbalance factor is exceeds the specified *thresh* parameter. The imbalance factor is
defined as the maximum number of particles (or weight) owned by any defined as the maximum number of particles (or weight) owned by any
processor, divided by the average number of particles (or weight) per processor, divided by the average number of particles (or weight) per
processor. Thus an imbalance factor of 1.0 is perfect balance. processor. Thus, an imbalance factor of 1.0 is perfect balance.
As an example, for 10000 particles running on 10 processors, if the As an example, for 10000 particles running on 10 processors, if the
most heavily loaded processor has 1200 particles, then the factor is most heavily loaded processor has 1200 particles, then the imbalance factor is
1.2, meaning there is a 20% imbalance. Note that re-balances can be 1.2, meaning there is a 20% imbalance. Note that re-balances can be
forced even if the current balance is perfect (1.0) be specifying a forced even if the current balance is perfect (1.0) be specifying a
*thresh* < 1.0. *thresh* < 1.0.
@ -125,28 +127,29 @@ forced even if the current balance is perfect (1.0) be specifying a
may not be achieved. For example, "grid" methods (defined below) that may not be achieved. For example, "grid" methods (defined below) that
create a logical 3d grid cannot achieve perfect balance for many create a logical 3d grid cannot achieve perfect balance for many
irregular distributions of particles. Likewise, if a portion of the irregular distributions of particles. Likewise, if a portion of the
system is a perfect lattice, e.g. the initial system is generated by system is a perfect, non-rotated lattice (e.g., the initial system is
the :doc:`create_atoms <create_atoms>` command, then "grid" methods may generated by the :doc:`create_atoms <create_atoms>` command with no
be unable to achieve exact balance. This is because entire lattice rotations), then "grid" methods may be unable to achieve exact balance.
planes will be owned or not owned by a single processor. This is because entire lattice planes will be owned or not owned by a single
processor.
.. note:: .. note::
The imbalance factor is also an estimate of the maximum speed-up The imbalance factor is also an estimate of the maximum speed-up
you can hope to achieve by running a perfectly balanced simulation you can hope to achieve by running a perfectly balanced simulation
versus an imbalanced one. In the example above, the 10000 particle versus an imbalanced one. In the example above, the 10000-particle
simulation could run up to 20% faster if it were perfectly balanced, simulation could run up to 20% faster if it were perfectly balanced,
versus when imbalanced. However, computational cost is not strictly versus when imbalanced. However, computational cost is not strictly
proportional to particle count, and changing the relative size and proportional to particle count, and changing the relative size and
shape of processor sub-domains may lead to additional computational shape of processor sub-domains may lead to additional computational
and communication overheads, e.g. in the PPPM solver used via the and communication overheads (e.g., in the PPPM solver used via the
:doc:`kspace_style <kspace_style>` command. Thus you should benchmark :doc:`kspace_style <kspace_style>` command). Thus, you should benchmark
the run times of a simulation before and after balancing. the run times of a simulation before and after balancing.
---------- ----------
The method used to perform a load balance is specified by one of the The method used to perform a load balance is specified by one of the
listed styles, which are described in detail below. There are 2 kinds listed styles, which are described in detail below. There are two kinds
of styles. of styles.
The *shift* style is a "grid" method which produces a logical 3d grid The *shift* style is a "grid" method which produces a logical 3d grid
@ -198,11 +201,12 @@ The *group-ID* is ignored. However the impact of balancing on
different groups of atoms can be affected by using the *group* weight different groups of atoms can be affected by using the *group* weight
style as described below. style as described below.
The *Nfreq* setting determines how often a re-balance is performed. If The :math:`N_\text{freq}` setting determines how often a re-balance is
*Nfreq* > 0, then re-balancing will occur every *Nfreq* steps. Each performed. If :math:`N_\text{freq} > 0`, then re-balancing will occur every
time a re-balance occurs, a reneighboring is triggered, so *Nfreq* :math:`N_\text{freq}` steps. Each time a re-balance occurs, a reneighboring is
should not be too small. If *Nfreq* = 0, then re-balancing will be triggered, so :math:`N_\text{freq}` should not be too small. If
done every time reneighboring normally occurs, as determined by the :math:`N_\text{freq} = 0`, then re-balancing will be done every time
reneighboring normally occurs, as determined by the
the :doc:`neighbor <neighbor>` and :doc:`neigh_modify <neigh_modify>` the :doc:`neighbor <neighbor>` and :doc:`neigh_modify <neigh_modify>`
command settings. command settings.
@ -216,7 +220,7 @@ above. It changes the positions of cutting planes between processors
in an iterative fashion, seeking to reduce the imbalance factor. in an iterative fashion, seeking to reduce the imbalance factor.
The *dimstr* argument is a string of characters, each of which must be The *dimstr* argument is a string of characters, each of which must be
an "x" or "y" or "z". Each character can appear zero or one time, *x* or *y* or *z*. Each character can appear zero or one time,
since there is no advantage to balancing on a dimension more than since there is no advantage to balancing on a dimension more than
once. You should normally only list dimensions where you expect there once. You should normally only list dimensions where you expect there
to be a density variation in the particles. to be a density variation in the particles.
@ -224,8 +228,8 @@ to be a density variation in the particles.
Balancing proceeds by adjusting the cutting planes in each of the Balancing proceeds by adjusting the cutting planes in each of the
dimensions listed in *dimstr*, one dimension at a time. For a single dimensions listed in *dimstr*, one dimension at a time. For a single
dimension, the balancing operation (described below) is iterated on up dimension, the balancing operation (described below) is iterated on up
to *Niter* times. After each dimension finishes, the imbalance factor to :math:`N_\text{iter}` times. After each dimension finishes, the imbalance
is re-computed, and the balancing operation halts if the *stopthresh* factor is re-computed, and the balancing operation halts if the *stopthresh*
criterion is met. criterion is met.
A re-balance operation in a single dimension is performed using a A re-balance operation in a single dimension is performed using a
@ -265,15 +269,15 @@ the normal reneighboring procedure.
by the extent of a processor's sub-domain in one dimension. The size by the extent of a processor's sub-domain in one dimension. The size
of this bracketing region shrinks based on the local density, as of this bracketing region shrinks based on the local density, as
described above, which should typically be 1/2 or more every described above, which should typically be 1/2 or more every
iteration. Thus if *Niter* is specified as 10, the cutting plane will iteration. Thus if :math:`N_\text{iter}` is specified as 10, the cutting
typically be positioned to better than 1 part in 1000 accuracy plane will typically be positioned to better than 1 part in 1000 accuracy
(relative to the perfect target position). For *Niter* = 20, it will (relative to the perfect target position). For :math:`N_\text{iter} = 20`,
be accurate to better than 1 part in a million. Thus there is no need it will be accurate to better than 1 part in a million. Thus there is no
to set *Niter* to a large value. This is especially true if you are need to set :math:`N_\text{iter}` to a large value. This is especially true
re-balancing often enough that each time you expect only an incremental if you are re-balancing often enough that each time you expect only an
adjustment in the cutting planes is necessary. LAMMPS will check if incremental adjustment in the cutting planes is necessary. LAMMPS will
the threshold accuracy is reached (in a dimension) is less iterations check if the threshold accuracy is reached (in a dimension) is less
than *Niter* and exit early. iterations than :math:`N_\text{iter}` and exit early.
---------- ----------
@ -281,12 +285,12 @@ The *rcb* style invokes a "tiled" method for balancing, as described
above. It performs a recursive coordinate bisectioning (RCB) of the above. It performs a recursive coordinate bisectioning (RCB) of the
simulation domain. The basic idea is as follows. simulation domain. The basic idea is as follows.
The simulation domain is cut into 2 boxes by an axis-aligned cut in The simulation domain is cut into two boxes by an axis-aligned cut in
the longest dimension, leaving one new box on either side of the cut. the longest dimension, leaving one new box on either side of the cut.
All the processors are also partitioned into 2 groups, half assigned All the processors are also partitioned into two groups, half assigned
to the box on the lower side of the cut, and half to the box on the 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 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 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 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 box should own for load balance to be perfect. This also makes load
balance for the upper box perfect. The positioning is done balance for the upper box perfect. The positioning is done
@ -309,7 +313,7 @@ results of each re-balancing operation. The file contains the bounds
of the sub-domain for each processor after the balancing operation of the sub-domain for each processor after the balancing operation
completes. The format of the file is compatible with the completes. The format of the file is compatible with the
`Pizza.py <pizza_>`_ *mdump* tool which has support for manipulating and `Pizza.py <pizza_>`_ *mdump* tool which has support for manipulating and
visualizing mesh files. An example is shown here for a balancing by 4 visualizing mesh files. An example is shown here for a balancing by four
processors for a 2d problem: processors for a 2d problem:
.. parsed-literal:: .. parsed-literal::
@ -349,27 +353,28 @@ processors for a 2d problem:
3 1 9 10 11 12 3 1 9 10 11 12
4 1 13 14 15 16 4 1 13 14 15 16
The coordinates of all the vertices are listed in the NODES section, 5 The coordinates of all the vertices are listed in the NODES section, five
per processor. Note that the 4 sub-domains share vertices, so there per processor. Note that the four sub-domains share vertices, so there
will be duplicate nodes in the list. will be duplicate nodes in the list.
The "SQUARES" section lists the node IDs of the 4 vertices in a The "SQUARES" section lists the node IDs of the four vertices in a
rectangle for each processor (1 to 4). rectangle for each processor (1 to 4).
For a 3d problem, the syntax is similar with 8 vertices listed for For a 3d problem, the syntax is similar but with eight vertices listed for
each processor, instead of 4, and "SQUARES" replaced by "CUBES". each processor instead of four, and "SQUARES" replaced by "CUBES."
---------- ----------
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to
are relevant to this fix. :doc:`binary restart files <restart>`. None of the
:doc:`fix_modify <fix_modify>` options are relevant to this fix.
This fix computes a global scalar which is the imbalance factor This fix computes a global scalar which is the imbalance factor
after the most recent re-balance and a global vector of length 3 with after the most recent re-balance and a global vector of length 3 with
additional information about the most recent re-balancing. The 3 additional information about the most recent re-balancing. The three
values in the vector are as follows: values in the vector are as follows:
* 1 = max # of particles per processor * 1 = max # of particles per processor
@ -380,22 +385,24 @@ As explained above, the imbalance factor is the ratio of the maximum
number of particles (or total weight) on any processor to the average number of particles (or total weight) on any processor to the average
number of particles (or total weight) per processor. number of particles (or total weight) per processor.
These quantities can be accessed by various :doc:`output commands <Howto_output>`. The scalar and vector values calculated These quantities can be accessed by various
by this fix are "intensive". :doc:`output commands <Howto_output>`. The scalar and vector values calculated
by this fix are "intensive."
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
---------- ----------
Restrictions Restrictions
"""""""""""" """"""""""""
For 2d simulations, the *z* style cannot be used. Nor can a "z" For 2d simulations, the *z* style cannot be used, nor can *z*
appear in *dimstr* for the *shift* style. appear in *dimstr* for the *shift* style.
Balancing through recursive bisectioning (\ *rcb* style) requires Balancing through recursive bisectioning (\ *rcb* style) requires
:doc:`comm_style tiled <comm_style>` :doc:`comm_style tiled <comm_style>`\ .
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -125,13 +125,14 @@ LAMMPS atom type corresponds to. This is specified by the atomic
number of the element, e.g. 13 for Al. An atomic number must be number of the element, e.g. 13 for Al. An atomic number must be
specified for each of the ntypes LAMMPS atom types. Ntypes is specified for each of the ntypes LAMMPS atom types. Ntypes is
typically specified via the create_box command or in the data file typically specified via the create_box command or in the data file
read by the read_data command. If this keyword is not specified, then read by the read_data command.
this fix will send the LAMMPS atom type for each atom to the MDI
engine. If both the LAMMPS driver and the MDI engine are initialized If this keyword is specified, then this fix will send the MDI
so that atom type values are consistent in both codes, then the ">ELEMENTS" command to the engine, to insure the two codes are
*elements* keyword is not needed. Otherwise the keyword can be used consistent in their definition of atomic species. If this keyword is
to insure the two codes are consistent in their definition of atomic not specified, then this fix will send the MDI >TYPES command to the
species. engine. This is fine if both the LAMMPS driver and the MDI engine are
initialized so that the atom type values are consistent in both codes.
---------- ----------

View File

@ -14,7 +14,7 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*engine* args = zero or more keyword arg pairs *engine* args = zero or more keyword/args pairs
keywords = *elements* keywords = *elements*
*elements* args = N_1 N_2 ... N_ntypes *elements* args = N_1 N_2 ... N_ntypes
N_1,N_2,...N_ntypes = atomic number for each of ntypes LAMMPS atom types N_1,N_2,...N_ntypes = atomic number for each of ntypes LAMMPS atom types
@ -24,7 +24,7 @@ Syntax
keywords = *mdi* or *infile* or *extra* or *command* keywords = *mdi* or *infile* or *extra* or *command*
*mdi* value = args passed to MDI for driver to operate with plugins (required) *mdi* value = args passed to MDI for driver to operate with plugins (required)
*infile* value = filename the engine will read at start-up (optional) *infile* value = filename the engine will read at start-up (optional)
*extra* value = aditional command-line args to pass to engine library when loaded *extra* value = aditional command-line args to pass to engine library when loaded (optional)
*command* value = a LAMMPS input script command to execute (required) *command* value = a LAMMPS input script command to execute (required)
*connect* args = none *connect* args = none
*exit* args = none *exit* args = none
@ -289,11 +289,11 @@ are required. The -name setting can be anything you choose. MDI
drivers and engines can query their names to verify they are values drivers and engines can query their names to verify they are values
they expect. they expect.
The *infile* keyword is also required. It is the name of an input The *infile* keyword is optional. It sets the name of an input script
script which the engine will open and process. MDI will pass it as a which the engine will open and process. MDI will pass it as a
command-line argument to the library when it is launched. The file command-line argument to the library when it is launched. The file
typically contains settings that an MD or QM code will use for its typically contains settings that an MD or QM code will use for its
subsequent calculations. calculations.
The *extra* keyword is optional. It contains additional command-line The *extra* keyword is optional. It contains additional command-line
arguments which MDI will pass to the library when it is launched. arguments which MDI will pass to the library when it is launched.
@ -309,12 +309,12 @@ could specify a filename with multiple LAMMPS commands.
.. note:: .. note::
When the single *command* is complete, LAMMPS will send an MDI When the *command* is complete, LAMMPS will send an MDI EXIT
EXIT command to the plugin engine and the plugin will be removed. command to the plugin engine and the plugin will be removed. The
The "mdi plugin" command will then exit and the next command "mdi plugin" command will then exit and the next command (if any)
(if any) in the LAMMPS input script will be processed. A subsequent in the LAMMPS input script will be processed. A subsequent "mdi
"mdi plugin" command could then load the same library plugin or plugin" command could then load the same or a different MDI
a different one if desired. plugin if desired.
---------- ----------

View File

@ -12,7 +12,7 @@ Syntax
restart N root keyword value ... restart N root keyword value ...
restart N file1 file2 keyword value ... restart N file1 file2 keyword value ...
* N = write a restart file every this many timesteps * N = write a restart file on timesteps which are multipls of N
* N can be a variable (see below) * N can be a variable (see below)
* root = filename to which timestep # is appended * root = filename to which timestep # is appended
* file1,file2 = two full filenames, toggle between them when writing file * file1,file2 = two full filenames, toggle between them when writing file
@ -42,13 +42,14 @@ Description
""""""""""" """""""""""
Write out a binary restart file with the current state of the Write out a binary restart file with the current state of the
simulation every so many timesteps, in either or both of two modes, as simulation on timesteps which are a multiple of N. A value of N = 0
a run proceeds. A value of 0 means do not write out any restart means do not write out any restart files, which is the default.
files. The two modes are as follows. If one filename is specified, a Restart files are written in one (or both) of two modes as a run
series of filenames will be created which include the timestep in the proceeds. If one filename is specified, a series of filenames will be
filename. If two filenames are specified, only 2 restart files will created which include the timestep in the filename. If two filenames
be created, with those names. LAMMPS will toggle between the 2 names are specified, only 2 restart files will be created, with those names.
as it writes successive restart files. LAMMPS will toggle between the 2 names as it writes successive restart
files.
Note that you can specify the restart command twice, once with a Note that you can specify the restart command twice, once with a
single filename and once with two filenames. This would allow you, single filename and once with two filenames. This would allow you,

View File

@ -6,7 +6,7 @@ LAMMPS_COMMANDS = ("angle_coeff", "angle_style", "atom_modify", "atom_style",
"clear", "comm_modify", "comm_style", "clear", "comm_modify", "comm_style",
"compute_modify", "create_atoms", "create_bonds", "create_box", "delete_atoms", "compute_modify", "create_atoms", "create_bonds", "create_box", "delete_atoms",
"delete_bonds", "dielectric", "dihedral_coeff", "dihedral_style", "dimension", "delete_bonds", "dielectric", "dihedral_coeff", "dihedral_style", "dimension",
"displace_atoms", "dump_modify", "dynamical_matrix", "echo", "displace_atoms", "dump_modify", "dynamical_matrix", "echo", "elif", "else",
"fix_modify", "group2ndx", "hyper", "if", "improper_coeff", "fix_modify", "group2ndx", "hyper", "if", "improper_coeff",
"improper_style", "include", "info", "jump", "kim", "improper_style", "include", "info", "jump", "kim",
"kspace_modify", "kspace_style", "label", "lattice", "kspace_modify", "kspace_style", "label", "lattice",
@ -16,8 +16,8 @@ LAMMPS_COMMANDS = ("angle_coeff", "angle_style", "atom_modify", "atom_style",
"partition", "prd", "print", "processors", "python", "quit", "read_data", "partition", "prd", "print", "processors", "python", "quit", "read_data",
"read_dump", "read_restart", "replicate", "rerun", "reset_ids", "read_dump", "read_restart", "replicate", "rerun", "reset_ids",
"reset_timestep", "restart", "run", "run_style", "server", "set", "shell", "reset_timestep", "restart", "run", "run_style", "server", "set", "shell",
"special_bonds", "suffix", "tad", "temper", "temper/grem", "temper/npt", "special_bonds", "suffix", "tad", "temper", "temper/grem", "temper/npt", "then",
"thermo", "thermo_modify", "thermo_style", "then", "third_order", "timer", "timestep", "thermo", "thermo_modify", "thermo_style", "third_order", "timer", "timestep",
"units", "velocity", "write_coeff", "units", "velocity", "write_coeff",
"write_data", "write_restart") "write_data", "write_restart")

View File

@ -13,7 +13,7 @@ Masses
2 1 2 1
3 1 3 1
Atoms # dielectric: id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature Atoms # dielectric : id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature
1 0 1 0 0 0 9.99798 0 0 1 0.866 8 6 6 0 1 0 1 0 0 0 9.99798 0 0 1 0.866 8 6 6 0
2 0 1 0 0.500101 0.866201 9.99798 0 0 1 0.866 8 6 6 0 2 0 1 0 0.500101 0.866201 9.99798 0 0 1 0.866 8 6 6 0

View File

@ -0,0 +1,24 @@
LAMMPS Description
6 atoms
2 atom types
0.0000000000000000 10.800000000000001 xlo xhi
0.0000000000000000 5.4000000000000004 ylo yhi
0.0000000000000000 5.4000000000000004 zlo zhi
3.3065463576978537E-016 3.3065463576978537E-016 3.3065463576978537E-016 xy xz yz
Masses
1 238.05078125000000
2 15.994915008544922
Atoms
1 1 1 0.0 2.70000 8.10000 0.00000
2 1 2 0.0 1.35000 9.45000 1.35000
3 1 2 0.0 4.05000 9.45000 1.35000
4 1 1 0.0 2.70000 10.80000 2.70000
5 1 2 0.0 1.35000 12.15000 4.05000
6 1 2 0.0 4.05000 12.15000 4.05000

View File

@ -0,0 +1,27 @@
LAMMPS Description
9 atoms
2 atom types
0.0000000000000000 16.199999999999999 xlo xhi
0.0000000000000000 5.4000000000000004 ylo yhi
0.0000000000000000 5.4000000000000004 zlo zhi
3.3065463576978537E-016 3.3065463576978537E-016 3.3065463576978537E-016 xy xz yz
Masses
1 238.05078125000000
2 15.994915008544922
Atoms
1 1 1 0.0 2.70000 8.10000 0.00000
2 1 2 0.0 1.35000 9.45000 1.35000
3 1 2 0.0 4.05000 9.45000 1.35000
4 1 1 0.0 2.70000 10.80000 2.70000
5 1 2 0.0 1.35000 12.15000 4.05000
6 1 2 0.0 4.05000 12.15000 4.05000
7 1 1 0.0 2.70000 13.50000 5.40000
8 1 2 0.0 1.35000 14.85000 6.75000
9 1 2 0.0 4.05000 14.85000 6.75000

View File

@ -0,0 +1,30 @@
LAMMPS Description
12 atoms
2 atom types
0.0000000000000000 10.800000000000001 xlo xhi
0.0000000000000000 10.800000000000001 ylo yhi
0.0000000000000000 5.4000000000000004 zlo zhi
6.6130927153957075E-016 3.3065463576978537E-016 3.3065463576978537E-016 xy xz yz
Masses
1 238.05078125000000
2 15.994915008544922
Atoms
1 1 1 0.0 2.70000 8.10000 0.00000
2 1 2 0.0 1.35000 9.45000 1.35000
3 1 2 0.0 4.05000 9.45000 1.35000
4 1 1 0.0 5.40000 8.10000 2.70000
5 1 2 0.0 4.05000 9.45000 4.05000
6 1 2 0.0 6.75000 9.45000 4.05000
7 1 1 0.0 2.70000 10.80000 2.70000
8 1 2 0.0 1.35000 12.15000 4.05000
9 1 2 0.0 4.05000 12.15000 4.05000
10 1 1 0.0 5.40000 10.80000 5.40000
11 1 2 0.0 4.05000 12.15000 6.75000
12 1 2 0.0 6.75000 12.15000 6.75000

149
examples/QM/LATTE/README Normal file
View File

@ -0,0 +1,149 @@
LATTE is a semi-empirical tight-binding quantum code, developed
primarily at Los Alamos National Labs.
See these links:
https://www.osti.gov/biblio/1526907-los-alamos-transferable-tight-binding-energetics-latte-version
https://github.com/lanl/LATTE
LAMMPS has 2 ways of working with LATTE:
(1) Via its LATTE package and the fix latte command
must run LAMMPS on a single processor, it calls LATTE as a library
(2) Via its MDI package and the code-coupling MDI library
(a) can run LAMMPS and LATTE as stand-alone codes
LAMMPS can be run on any number of procs
LATTE must run on a single proc, but can use OpenMP
(b) can run LAMMPS with LATTE as a plug-in library
must run LAMMPS on a single processor
Examples for use case (1) are in the examples/latte dir. Use case (2)
is illustrated in this dir.
NOTE: If you compare MDI runs in this dir to similar fix latte runs in
examples/latte, the answers for energy and virial will be differnt.
This is b/c the version of LATTE used by the fix latte command within
the LATTE package is older than the version of LATTE used here.
------------------
Building 3 codes needed to run these examples
(1) Download and build MDI
% git clone git@github.com:MolSSI-MDI/MDI_Library.git mdi
% cd mdi
% mkdir build; cd build
% cmake .. # includes support for all langauges (incl Fortran, Python)
% make
(2) Download and build LATTE with MDI support
% git clone git@github.com:lanl/LATTE.git latte
% cd latte
% git checkout skimLATTE-progress # goto branch with MDI support
% cp makefiles/makefile.CHOICES.mdi makefile.CHOICES # so can now edit
% edit makefile.CHOICES settings to have these settings:
MAKELIB = OFF, SHARED = ON, MDI = ON
MDI_PATH must point to CMake build of MDI in (1),
e.g. /home/sjplimp/mdi/build/MDI_Library
comment out 2 LIB lines with CUDA-CUDART_LIBRARY
% make clean
% make # creates liblatte.so and LATTE_DOUBLE with support for MDI
(3) Build LAMMPS with its MDI package
also with the MOLECULE package for these example scripts
Build with CMake (NOTE: do not use traditional make for this use case)
% cd lammps
% mkdir build; cd build
% cmake -D PKG_MDI=yes -D PKG_MOLECULE=yes ../cmake
% make # creates lmp
(4) Copy LAMMPS and LATTE executables into this dir
Copy the LAMMPS executable into this dir as lmp_mpi.
Copy the LATTE executable LATTE_DOUBLE into this dir.
The run commands below assume you have done this.
(5) Insure LD_LIBRARY_PATH includes the dir where MDI was built in (1)
with its libmdi.so file, e.g. mdi/build/MDI_Library. This is needed
so when LATTE_DOUBLE runs as an executable it will able to find
libmdi.so.
------------------
Notes on LATTE usage
You must run this version of LATTE on a single MPI processor.
However, you can use OpenMP with LATTE. To do this you need to build
LATTE with OpenMP support by editing the makefile.CHOICES file to
include -fopenmp with FFLAGS and LINKFLAGS. Also -lapack and -lblas
need to be added to LIB, and those libraries must be available on your
system. For best performance you should also build LATTE with its
PROGRESS and BML libraries. Building those libs is more complex,
see details here:
https://github.com/lanl/LATTE_SUPER/tree/allMachines/Laptop
At run time, you need to also first set an environment variable for
the number of OpenMP threads to use, e.g.
% export OMP_NUM_THREADS=12
By default LATTE reads the latte.in file for its parameters. That
file specifies other files LATTE will read. With MDI, the driver code
(e.g. LAMMPS) can use the >FNAME command to specify an alternate
filename to use instead of latte.in.
By default LATTE writes out a log.latte file with info about its
calculations. An "OUTFILE= logfile" setting in latte.in can rename
this file.
---------
Run example #1: AIMD
* Run with MPI: 1 proc each
mpirun -np 1 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
-in in.aimd -log log.aimd.lammps.mpi : \
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
* Run with MPI: 2 procs for LAMMPS, 1 for LATTE
mpirun -np 2 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
-in in.aimd -log log.aimd.lammps.mpi : \
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
* Run in plugin mode: 1 proc
lmp_mpi -mdi \
"-name LMP -role DRIVER -method LINK -plugin_path /home/sjplimp/latte/git" \
-in in.aimd.plugin -log log.aimd.lammps.plugin
NOTE: The -plugin_path needs to point to where LATTE was built in step
(2).
---------
Run example #2: sequence of configurations
* Run with MPI: 1 proc each
mpirun -np 1 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
-in in.series -log log.series.lammps.mpi : \
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
* Run with MPI: 2 procs for LAMMPS, 1 for LATTE
mpirun -np 2 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
-in in.series -log log.series.lammps.mpi : \
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
* Run in plugin mode: 1 proc
lmp_mpi -mdi \
"-name LMP -role DRIVER -method LINK -plugin_path /home/sjplimp/latte/git" \
-in in.series.plugin -log log.series.lammps.plugin
NOTE: The -plugin_path needs to point to where LATTE was built in step
(2).

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,315 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.7 2.7 0 -0.601491 0.335597 -0.87242 -2.27066e-14 -1.33391e-14 2.31141e-14
2 2 1.35 4.05 1.35 8.2897 4.55901 5.97376 2.35473 2.21578e-14 7.40069e-15
3 2 4.05 4.05 1.35 1.7742 6.51885 0.385522 -2.35473 2.97071e-15 -2.01341e-14
4 1 2.7 1.65327e-16 2.7 -0.325605 -1.03244 0.724324 -2.90278e-14 6.77422e-15 2.86766e-15
5 2 1.35 1.35 4.05 2.42711 -1.49109 -2.41596 2.35473 5.79901e-15 -1.19594e-14
6 2 4.05 1.35 4.05 1.30688 0.784281 -1.73922 -2.35473 -1.38761e-14 1.09382e-14
ITEM: TIMESTEP
1
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69985 2.70008 -0.000218105 -0.601467 0.335616 -0.872428 0.00470101 0.00380515 -0.00141625
2 2 1.35212 4.05114 1.35149 8.64389 4.55886 5.97363 2.34251 -0.00209926 -0.00172976
3 2 4.0504 4.05163 1.3501 1.41949 6.51866 0.385561 -2.34936 -0.00247497 0.00051716
4 1 2.69992 -0.00025811 2.70018 -0.325581 -1.03243 0.724334 0.00481137 0.00249244 0.00195665
5 2 1.35065 1.34963 4.0494 2.78199 -1.49112 -2.4159 2.3517 -0.00043711 0.000874754
6 2 4.05028 1.3502 4.04957 0.951796 0.784184 -1.73923 -2.35436 -0.00128625 -0.00020256
ITEM: TIMESTEP
2
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6997 2.70017 -0.000436214 -0.601396 0.335673 -0.872449 0.00939888 0.00756163 -0.00288164
2 2 1.35432 4.05228 1.35299 8.99615 4.55837 5.97323 2.32921 -0.00431846 -0.00355855
3 2 4.05071 4.05326 1.35019 1.06567 6.5181 0.385678 -2.34304 -0.00494314 0.00103532
4 1 2.69984 -0.000516214 2.70036 -0.325507 -1.03239 0.724364 0.00976944 0.00512657 0.00403686
5 2 1.35139 1.34925 4.04879 3.13634 -1.49122 -2.4157 2.34776 -0.000851489 0.00177498
6 2 4.05048 1.35039 4.04913 0.596838 0.783892 -1.73928 -2.3531 -0.00257512 -0.000406965
ITEM: TIMESTEP
3
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69955 2.70025 -0.00065433 -0.601277 0.335769 -0.872486 0.0141006 0.0112702 -0.00439552
2 2 1.35661 4.05342 1.35448 9.34633 4.55754 5.97255 2.31482 -0.00666433 -0.00549143
3 2 4.05093 4.05489 1.35029 0.712875 6.51717 0.385873 -2.33577 -0.00740896 0.00154764
4 1 2.69976 -0.000774304 2.70054 -0.325382 -1.03232 0.724417 0.0148831 0.00790884 0.00624833
5 2 1.35222 1.34888 4.04819 3.49003 -1.49137 -2.41536 2.3429 -0.0012407 0.00270313
6 2 4.05058 1.35059 4.0487 0.242138 0.783407 -1.73935 -2.35094 -0.00386511 -0.000612161
ITEM: TIMESTEP
4
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6994 2.70034 -0.000872457 -0.60111 0.335902 -0.872539 0.0188131 0.0149318 -0.00595718
2 2 1.359 4.05456 1.35597 9.69425 4.55635 5.97156 2.29933 -0.00914346 -0.00753331
3 2 4.05107 4.05652 1.35039 0.361248 6.51586 0.386144 -2.32753 -0.00987687 0.00204727
4 1 2.69967 -0.00103238 2.70072 -0.325204 -1.03223 0.724492 0.020161 0.0108455 0.00859866
5 2 1.35314 1.34851 4.04758 3.84292 -1.49159 -2.41488 2.33711 -0.00160232 0.00366164
6 2 4.0506 1.35078 4.04826 -0.112168 0.782727 -1.73946 -2.34789 -0.00515472 -0.000817084
ITEM: TIMESTEP
5
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69925 2.70042 -0.0010906 -0.600896 0.336071 -0.872607 0.0235434 0.0185473 -0.00756588
2 2 1.36146 4.0557 1.35747 10.0397 4.55478 5.97026 2.2827 -0.0117623 -0.00968894
3 2 4.05111 4.05815 1.35048 0.0109366 6.51419 0.386489 -2.31832 -0.0123511 0.00252727
4 1 2.69959 -0.00129042 2.70091 -0.324972 -1.0321 0.724592 0.0256115 0.0139425 0.0110953
5 2 1.35414 1.34814 4.04698 4.19487 -1.49186 -2.41425 2.33039 -0.00193394 0.0046529
6 2 4.05052 1.35098 4.04783 -0.465946 0.781852 -1.7396 -2.34393 -0.00644244 -0.00102066
ITEM: TIMESTEP
6
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6991 2.7005 -0.00130876 -0.600633 0.336277 -0.872692 0.0282985 0.0221175 -0.00922083
2 2 1.36401 4.05684 1.35896 10.3827 4.55279 5.96863 2.26494 -0.0145272 -0.0119629
3 2 4.05107 4.05978 1.35058 -0.337913 6.51214 0.386904 -2.30814 -0.0148362 0.00298071
4 1 2.69951 -0.00154843 2.70109 -0.324684 -1.03194 0.724717 0.0312427 0.0172058 0.0137455
5 2 1.35523 1.34776 4.04638 4.54573 -1.49217 -2.41347 2.32273 -0.00223319 0.00567932
6 2 4.05036 1.35117 4.04739 -0.819058 0.780784 -1.73977 -2.33906 -0.00772673 -0.00122181
ITEM: TIMESTEP
7
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69895 2.70059 -0.00152695 -0.600322 0.336519 -0.872794 0.0330853 0.0256435 -0.0109212
2 2 1.36665 4.05797 1.36045 10.7228 4.55038 5.96665 2.24601 -0.0174443 -0.0143597
3 2 4.05094 4.0614 1.35068 -0.685154 6.50971 0.387385 -2.29698 -0.0173365 0.00340068
4 1 2.69943 -0.00180639 2.70127 -0.324338 -1.03175 0.724871 0.0370626 0.020641 0.0165564
5 2 1.35641 1.34739 4.04577 4.89536 -1.49253 -2.41254 2.31411 -0.0024977 0.00674323
6 2 4.05012 1.35137 4.04696 -1.17137 0.779522 -1.73997 -2.33329 -0.00900604 -0.00141944
ITEM: TIMESTEP
8
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6988 2.70067 -0.00174516 -0.599962 0.336797 -0.872914 0.0379108 0.0291262 -0.0126661
2 2 1.36938 4.05911 1.36194 11.06 4.54752 5.96429 2.2259 -0.0205196 -0.0168834
3 2 4.05073 4.06303 1.35077 -1.03064 6.50691 0.387927 -2.28482 -0.0198564 0.00378025
4 1 2.69935 -0.0020643 2.70145 -0.323932 -1.03153 0.725054 0.0430788 0.0242538 0.0195348
5 2 1.35768 1.34702 4.04517 5.24362 -1.49292 -2.41144 2.30452 -0.0027252 0.00784692
6 2 4.04978 1.35156 4.04652 -1.52274 0.778068 -1.7402 -2.32659 -0.0102788 -0.00161245
ITEM: TIMESTEP
9
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69865 2.70076 -0.0019634 -0.599553 0.337109 -0.873051 0.0427817 0.0325667 -0.0144547
2 2 1.37218 4.06025 1.36343 11.3941 4.54418 5.96155 2.20459 -0.023759 -0.019538
3 2 4.05043 4.06466 1.35087 -1.37421 6.50372 0.388522 -2.27166 -0.0224003 0.00411244
4 1 2.69927 -0.00232215 2.70163 -0.323464 -1.03126 0.725268 0.0492987 0.0280495 0.0226874
5 2 1.35904 1.34664 4.04457 5.59036 -1.49335 -2.41017 2.29396 -0.00291347 0.00899259
6 2 4.04935 1.35176 4.04609 -1.87303 0.776422 -1.74045 -2.31898 -0.0115434 -0.00179972
ITEM: TIMESTEP
10
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6985 2.70084 -0.00218168 -0.599095 0.337456 -0.873207 0.0477049 0.0359661 -0.0162858
2 2 1.37507 4.06138 1.36492 11.7248 4.54034 5.95839 2.18206 -0.0271682 -0.0223275
3 2 4.05004 4.06628 1.35097 -1.71572 6.50015 0.389163 -2.25748 -0.0249726 0.0043903
4 1 2.69919 -0.00257993 2.70181 -0.322932 -1.03096 0.725515 0.0557294 0.0320331 0.0260207
5 2 1.36048 1.34627 4.04397 5.93543 -1.4938 -2.40872 2.2824 -0.00306026 0.0101825
6 2 4.04884 1.35195 4.04565 -2.2221 0.774587 -1.74074 -2.31042 -0.0127983 -0.00198013
ITEM: TIMESTEP
11
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69835 2.70092 -0.00240001 -0.598586 0.337838 -0.873382 0.0526872 0.0393256 -0.0181586
2 2 1.37805 4.06252 1.36641 12.0521 4.53597 5.9548 2.15829 -0.0307526 -0.0252554
3 2 4.04957 4.06791 1.35106 -2.05501 6.49619 0.389841 -2.24228 -0.0275775 0.00460683
4 1 2.69911 -0.00283763 2.70199 -0.322334 -1.03061 0.725796 0.0623777 0.0362096 0.0295409
5 2 1.362 1.3459 4.04336 6.27868 -1.49427 -2.40709 2.26985 -0.00316333 0.0114188
6 2 4.04824 1.35215 4.04522 -2.56981 0.772563 -1.74105 -2.30093 -0.0140417 -0.00215255
ITEM: TIMESTEP
12
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6982 2.70101 -0.00261837 -0.598027 0.338253 -0.873575 0.0577351 0.0426463 -0.0200718
2 2 1.3811 4.06365 1.3679 12.3757 4.53105 5.95076 2.13326 -0.0345179 -0.0283253
3 2 4.04901 4.06953 1.35116 -2.39194 6.49183 0.390547 -2.22604 -0.0302194 0.00475506
4 1 2.69903 -0.00309524 2.70217 -0.321667 -1.03022 0.726114 0.06925 0.0405836 0.0332542
5 2 1.36362 1.34552 4.04276 6.61997 -1.49475 -2.40527 2.25627 -0.00322051 0.0127037
6 2 4.04756 1.35234 4.04478 -2.91602 0.770353 -1.74139 -2.29048 -0.0152721 -0.00231583
ITEM: TIMESTEP
13
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69805 2.70109 -0.00283679 -0.597416 0.338702 -0.873788 0.0628554 0.0459295 -0.0220243
2 2 1.38423 4.06478 1.36939 12.6954 4.52555 5.94625 2.10694 -0.0384688 -0.0315401
3 2 4.04837 4.07115 1.35126 -2.72634 6.48707 0.39127 -2.20874 -0.0329024 0.00482793
4 1 2.69895 -0.00335274 2.70236 -0.320929 -1.02979 0.726471 0.0763523 0.0451591 0.0371659
5 2 1.36531 1.34515 4.04216 6.95912 -1.49523 -2.40326 2.24165 -0.00322965 0.0140393
6 2 4.04678 1.35253 4.04434 -3.26057 0.767958 -1.74175 -2.27906 -0.0164877 -0.0024688
ITEM: TIMESTEP
14
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6979 2.70118 -0.00305527 -0.596753 0.339184 -0.874022 0.0680546 0.0491768 -0.0240145
2 2 1.38745 4.06591 1.37087 13.0111 4.51944 5.94124 2.07932 -0.0426096 -0.0349018
3 2 4.04765 4.07277 1.35136 -3.05804 6.4819 0.391997 -2.19038 -0.035631 0.00481829
4 1 2.69887 -0.00361013 2.70254 -0.320118 -1.0293 0.726868 0.0836894 0.0499393 0.0412807
5 2 1.3671 1.34478 4.04156 7.296 -1.49572 -2.40103 2.22598 -0.00318867 0.0154277
6 2 4.04593 1.35272 4.04391 -3.60334 0.765381 -1.74213 -2.26667 -0.0176868 -0.00261028
ITEM: TIMESTEP
15
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69775 2.70126 -0.0032738 -0.596036 0.339698 -0.874275 0.0733392 0.0523895 -0.0260413
2 2 1.39074 4.06704 1.37236 13.3225 4.51268 5.93571 2.05037 -0.0469451 -0.0384133
3 2 4.04685 4.07439 1.35146 -3.3869 6.47632 0.392716 -2.17093 -0.038409 0.00471919
4 1 2.69879 -0.00386739 2.70272 -0.319232 -1.02877 0.727309 0.0912666 0.0549279 0.0456036
5 2 1.36896 1.3444 4.04096 7.63043 -1.49619 -2.3986 2.20924 -0.00309551 0.0168709
6 2 4.04498 1.35291 4.04347 -3.94416 0.762625 -1.74253 -2.25329 -0.0188678 -0.0027391
ITEM: TIMESTEP
16
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6976 2.70135 -0.00349241 -0.595266 0.340245 -0.87455 0.0787153 0.055569 -0.0281032
2 2 1.39411 4.06817 1.37384 13.6294 4.50526 5.92964 2.02007 -0.0514799 -0.042077
3 2 4.04596 4.07601 1.35155 -3.71274 6.47031 0.393413 -2.15039 -0.0412405 0.00452364
4 1 2.69871 -0.00412452 2.7029 -0.318268 -1.02819 0.727794 0.0990893 0.0601283 0.0501398
5 2 1.37091 1.34403 4.04036 7.96225 -1.49665 -2.39594 2.19142 -0.00294819 0.0183708
6 2 4.04395 1.3531 4.04304 -4.28288 0.759692 -1.74296 -2.2389 -0.0200287 -0.00285406
ITEM: TIMESTEP
17
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69745 2.70143 -0.00371108 -0.594441 0.340824 -0.874845 0.0841889 0.0587168 -0.0301987
2 2 1.39755 4.0693 1.37532 13.9317 4.49714 5.92301 1.9884 -0.0562187 -0.0458954
3 2 4.04499 4.07763 1.35165 -4.0354 6.46388 0.394073 -2.12872 -0.0441293 0.0042247
4 1 2.69863 -0.00438149 2.70308 -0.317223 -1.02755 0.728326 0.107162 0.0655439 0.054894
5 2 1.37294 1.34365 4.03976 8.2913 -1.49708 -2.39305 2.17248 -0.00274479 0.0199293
6 2 4.04284 1.35329 4.0426 -4.61936 0.756586 -1.74339 -2.2235 -0.0211679 -0.00295392
ITEM: TIMESTEP
18
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69731 2.70152 -0.00392983 -0.593559 0.341435 -0.875162 0.0897661 0.0618346 -0.0323262
2 2 1.40107 4.07042 1.3768 14.229 4.48829 5.91578 1.95532 -0.0611659 -0.0498706
3 2 4.04394 4.07924 1.35175 -4.3547 6.457 0.394679 -2.10593 -0.0470792 0.0038154
4 1 2.69855 -0.00463829 2.70327 -0.316095 -1.02686 0.728907 0.11549 0.0711775 0.0598705
5 2 1.37506 1.34328 4.03916 8.61741 -1.49747 -2.38993 2.15241 -0.00248344 0.0215483
6 2 4.04164 1.35348 4.04217 -4.95344 0.753309 -1.74385 -2.20706 -0.0222835 -0.00303744
ITEM: TIMESTEP
19
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69716 2.7016 -0.00414866 -0.592621 0.342077 -0.8755 0.0954526 0.0649239 -0.0344841
2 2 1.40467 4.07154 1.37828 14.5213 4.47868 5.90795 1.92083 -0.0663258 -0.0540045
3 2 4.04281 4.08086 1.35185 -4.67049 6.44967 0.395215 -2.08198 -0.050094 0.00328881
4 1 2.69847 -0.00489492 2.70345 -0.314881 -1.02611 0.72954 0.124076 0.0770317 0.0650736
5 2 1.37725 1.3429 4.03857 8.94041 -1.49782 -2.38655 2.13119 -0.00216234 0.0232295
6 2 4.04036 1.35367 4.04173 -5.28496 0.749867 -1.74431 -2.18956 -0.0233735 -0.00310338
ITEM: TIMESTEP
20
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69701 2.70169 -0.00436758 -0.591624 0.342751 -0.875861 0.101254 0.0679866 -0.0366705
2 2 1.40833 4.07266 1.37976 14.8083 4.46827 5.89948 1.88489 -0.0717024 -0.0582989
3 2 4.0416 4.08247 1.35195 -4.98257 6.44189 0.395662 -2.05686 -0.0531772 0.00263798
4 1 2.69839 -0.00515135 2.70363 -0.313579 -1.0253 0.730227 0.132925 0.0831089 0.0705072
5 2 1.37953 1.34253 4.03797 9.26012 -1.49812 -2.38291 2.1088 -0.00177977 0.0249746
6 2 4.039 1.35386 4.04129 -5.61376 0.746262 -1.74478 -2.171 -0.0244362 -0.00315046

View File

@ -0,0 +1,315 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.7 2.7 0 -0.601491 0.335597 -0.87242 -2.27066e-14 -1.33391e-14 2.31141e-14
2 2 1.35 4.05 1.35 8.2897 4.55901 5.97376 2.35473 2.21578e-14 7.40069e-15
3 2 4.05 4.05 1.35 1.7742 6.51885 0.385522 -2.35473 2.97071e-15 -2.01341e-14
4 1 2.7 1.65327e-16 2.7 -0.325605 -1.03244 0.724324 -2.90278e-14 6.77422e-15 2.86766e-15
5 2 1.35 1.35 4.05 2.42711 -1.49109 -2.41596 2.35473 5.79901e-15 -1.19594e-14
6 2 4.05 1.35 4.05 1.30688 0.784281 -1.73922 -2.35473 -1.38761e-14 1.09382e-14
ITEM: TIMESTEP
1
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69985 2.70008 -0.000218105 -0.601467 0.335616 -0.872428 0.00470101 0.00380515 -0.00141625
2 2 1.35212 4.05114 1.35149 8.64389 4.55886 5.97363 2.34251 -0.00209926 -0.00172976
3 2 4.0504 4.05163 1.3501 1.41949 6.51866 0.385561 -2.34936 -0.00247497 0.00051716
4 1 2.69992 -0.00025811 2.70018 -0.325581 -1.03243 0.724334 0.00481137 0.00249244 0.00195665
5 2 1.35065 1.34963 4.0494 2.78199 -1.49112 -2.4159 2.3517 -0.00043711 0.000874754
6 2 4.05028 1.3502 4.04957 0.951796 0.784184 -1.73923 -2.35436 -0.00128625 -0.00020256
ITEM: TIMESTEP
2
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6997 2.70017 -0.000436214 -0.601396 0.335673 -0.872449 0.00939888 0.00756163 -0.00288164
2 2 1.35432 4.05228 1.35299 8.99615 4.55837 5.97323 2.32921 -0.00431846 -0.00355855
3 2 4.05071 4.05326 1.35019 1.06567 6.5181 0.385678 -2.34304 -0.00494314 0.00103532
4 1 2.69984 -0.000516214 2.70036 -0.325507 -1.03239 0.724364 0.00976944 0.00512657 0.00403686
5 2 1.35139 1.34925 4.04879 3.13634 -1.49122 -2.4157 2.34776 -0.000851489 0.00177498
6 2 4.05048 1.35039 4.04913 0.596838 0.783892 -1.73928 -2.3531 -0.00257512 -0.000406965
ITEM: TIMESTEP
3
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69955 2.70025 -0.00065433 -0.601277 0.335769 -0.872486 0.0141006 0.0112702 -0.00439552
2 2 1.35661 4.05342 1.35448 9.34633 4.55754 5.97255 2.31482 -0.00666433 -0.00549143
3 2 4.05093 4.05489 1.35029 0.712875 6.51717 0.385873 -2.33577 -0.00740896 0.00154764
4 1 2.69976 -0.000774304 2.70054 -0.325382 -1.03232 0.724417 0.0148831 0.00790884 0.00624833
5 2 1.35222 1.34888 4.04819 3.49003 -1.49137 -2.41536 2.3429 -0.0012407 0.00270313
6 2 4.05058 1.35059 4.0487 0.242138 0.783407 -1.73935 -2.35094 -0.00386511 -0.000612161
ITEM: TIMESTEP
4
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6994 2.70034 -0.000872457 -0.60111 0.335902 -0.872539 0.0188131 0.0149318 -0.00595718
2 2 1.359 4.05456 1.35597 9.69425 4.55635 5.97156 2.29933 -0.00914346 -0.00753331
3 2 4.05107 4.05652 1.35039 0.361248 6.51586 0.386144 -2.32753 -0.00987687 0.00204727
4 1 2.69967 -0.00103238 2.70072 -0.325204 -1.03223 0.724492 0.020161 0.0108455 0.00859866
5 2 1.35314 1.34851 4.04758 3.84292 -1.49159 -2.41488 2.33711 -0.00160232 0.00366164
6 2 4.0506 1.35078 4.04826 -0.112168 0.782727 -1.73946 -2.34789 -0.00515472 -0.000817084
ITEM: TIMESTEP
5
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69925 2.70042 -0.0010906 -0.600896 0.336071 -0.872607 0.0235434 0.0185473 -0.00756588
2 2 1.36146 4.0557 1.35747 10.0397 4.55478 5.97026 2.2827 -0.0117623 -0.00968894
3 2 4.05111 4.05815 1.35048 0.0109366 6.51419 0.386489 -2.31832 -0.0123511 0.00252727
4 1 2.69959 -0.00129042 2.70091 -0.324972 -1.0321 0.724592 0.0256115 0.0139425 0.0110953
5 2 1.35414 1.34814 4.04698 4.19487 -1.49186 -2.41425 2.33039 -0.00193394 0.0046529
6 2 4.05052 1.35098 4.04783 -0.465946 0.781852 -1.7396 -2.34393 -0.00644244 -0.00102066
ITEM: TIMESTEP
6
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6991 2.7005 -0.00130876 -0.600633 0.336277 -0.872692 0.0282985 0.0221175 -0.00922083
2 2 1.36401 4.05684 1.35896 10.3827 4.55279 5.96863 2.26494 -0.0145272 -0.0119629
3 2 4.05107 4.05978 1.35058 -0.337913 6.51214 0.386904 -2.30814 -0.0148362 0.00298071
4 1 2.69951 -0.00154843 2.70109 -0.324684 -1.03194 0.724717 0.0312427 0.0172058 0.0137455
5 2 1.35523 1.34776 4.04638 4.54573 -1.49217 -2.41347 2.32273 -0.00223319 0.00567932
6 2 4.05036 1.35117 4.04739 -0.819058 0.780784 -1.73977 -2.33906 -0.00772673 -0.00122181
ITEM: TIMESTEP
7
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69895 2.70059 -0.00152695 -0.600322 0.336519 -0.872794 0.0330853 0.0256435 -0.0109212
2 2 1.36665 4.05797 1.36045 10.7228 4.55038 5.96665 2.24601 -0.0174443 -0.0143597
3 2 4.05094 4.0614 1.35068 -0.685154 6.50971 0.387385 -2.29698 -0.0173365 0.00340068
4 1 2.69943 -0.00180639 2.70127 -0.324338 -1.03175 0.724871 0.0370626 0.020641 0.0165564
5 2 1.35641 1.34739 4.04577 4.89536 -1.49253 -2.41254 2.31411 -0.0024977 0.00674323
6 2 4.05012 1.35137 4.04696 -1.17137 0.779522 -1.73997 -2.33329 -0.00900604 -0.00141944
ITEM: TIMESTEP
8
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6988 2.70067 -0.00174516 -0.599962 0.336797 -0.872914 0.0379108 0.0291262 -0.0126661
2 2 1.36938 4.05911 1.36194 11.06 4.54752 5.96429 2.2259 -0.0205196 -0.0168834
3 2 4.05073 4.06303 1.35077 -1.03064 6.50691 0.387927 -2.28482 -0.0198564 0.00378025
4 1 2.69935 -0.0020643 2.70145 -0.323932 -1.03153 0.725054 0.0430788 0.0242538 0.0195348
5 2 1.35768 1.34702 4.04517 5.24362 -1.49292 -2.41144 2.30452 -0.0027252 0.00784692
6 2 4.04978 1.35156 4.04652 -1.52274 0.778068 -1.7402 -2.32659 -0.0102788 -0.00161245
ITEM: TIMESTEP
9
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69865 2.70076 -0.0019634 -0.599553 0.337109 -0.873051 0.0427817 0.0325667 -0.0144547
2 2 1.37218 4.06025 1.36343 11.3941 4.54418 5.96155 2.20459 -0.023759 -0.019538
3 2 4.05043 4.06466 1.35087 -1.37421 6.50372 0.388522 -2.27166 -0.0224003 0.00411244
4 1 2.69927 -0.00232215 2.70163 -0.323464 -1.03126 0.725268 0.0492987 0.0280495 0.0226874
5 2 1.35904 1.34664 4.04457 5.59036 -1.49335 -2.41017 2.29396 -0.00291347 0.00899259
6 2 4.04935 1.35176 4.04609 -1.87303 0.776422 -1.74045 -2.31898 -0.0115434 -0.00179972
ITEM: TIMESTEP
10
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6985 2.70084 -0.00218168 -0.599095 0.337456 -0.873207 0.0477049 0.0359661 -0.0162858
2 2 1.37507 4.06138 1.36492 11.7248 4.54034 5.95839 2.18206 -0.0271682 -0.0223275
3 2 4.05004 4.06628 1.35097 -1.71572 6.50015 0.389163 -2.25748 -0.0249726 0.0043903
4 1 2.69919 -0.00257993 2.70181 -0.322932 -1.03096 0.725515 0.0557294 0.0320331 0.0260207
5 2 1.36048 1.34627 4.04397 5.93543 -1.4938 -2.40872 2.2824 -0.00306026 0.0101825
6 2 4.04884 1.35195 4.04565 -2.2221 0.774587 -1.74074 -2.31042 -0.0127983 -0.00198013
ITEM: TIMESTEP
11
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69835 2.70092 -0.00240001 -0.598586 0.337838 -0.873382 0.0526872 0.0393256 -0.0181586
2 2 1.37805 4.06252 1.36641 12.0521 4.53597 5.9548 2.15829 -0.0307526 -0.0252554
3 2 4.04957 4.06791 1.35106 -2.05501 6.49619 0.389841 -2.24228 -0.0275775 0.00460683
4 1 2.69911 -0.00283763 2.70199 -0.322334 -1.03061 0.725796 0.0623777 0.0362096 0.0295409
5 2 1.362 1.3459 4.04336 6.27868 -1.49427 -2.40709 2.26985 -0.00316333 0.0114188
6 2 4.04824 1.35215 4.04522 -2.56981 0.772563 -1.74105 -2.30093 -0.0140417 -0.00215255
ITEM: TIMESTEP
12
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6982 2.70101 -0.00261837 -0.598027 0.338253 -0.873575 0.0577351 0.0426463 -0.0200718
2 2 1.3811 4.06365 1.3679 12.3757 4.53105 5.95076 2.13326 -0.0345179 -0.0283253
3 2 4.04901 4.06953 1.35116 -2.39194 6.49183 0.390547 -2.22604 -0.0302194 0.00475506
4 1 2.69903 -0.00309524 2.70217 -0.321667 -1.03022 0.726114 0.06925 0.0405836 0.0332542
5 2 1.36362 1.34552 4.04276 6.61997 -1.49475 -2.40527 2.25627 -0.00322051 0.0127037
6 2 4.04756 1.35234 4.04478 -2.91602 0.770353 -1.74139 -2.29048 -0.0152721 -0.00231583
ITEM: TIMESTEP
13
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69805 2.70109 -0.00283679 -0.597416 0.338702 -0.873788 0.0628554 0.0459295 -0.0220243
2 2 1.38423 4.06478 1.36939 12.6954 4.52555 5.94625 2.10694 -0.0384688 -0.0315401
3 2 4.04837 4.07115 1.35126 -2.72634 6.48707 0.39127 -2.20874 -0.0329024 0.00482793
4 1 2.69895 -0.00335274 2.70236 -0.320929 -1.02979 0.726471 0.0763523 0.0451591 0.0371659
5 2 1.36531 1.34515 4.04216 6.95912 -1.49523 -2.40326 2.24165 -0.00322965 0.0140393
6 2 4.04678 1.35253 4.04434 -3.26057 0.767958 -1.74175 -2.27906 -0.0164877 -0.0024688
ITEM: TIMESTEP
14
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6979 2.70118 -0.00305527 -0.596753 0.339184 -0.874022 0.0680546 0.0491768 -0.0240145
2 2 1.38745 4.06591 1.37087 13.0111 4.51944 5.94124 2.07932 -0.0426096 -0.0349018
3 2 4.04765 4.07277 1.35136 -3.05804 6.4819 0.391997 -2.19038 -0.035631 0.00481829
4 1 2.69887 -0.00361013 2.70254 -0.320118 -1.0293 0.726868 0.0836894 0.0499393 0.0412807
5 2 1.3671 1.34478 4.04156 7.296 -1.49572 -2.40103 2.22598 -0.00318867 0.0154277
6 2 4.04593 1.35272 4.04391 -3.60334 0.765381 -1.74213 -2.26667 -0.0176868 -0.00261028
ITEM: TIMESTEP
15
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69775 2.70126 -0.0032738 -0.596036 0.339698 -0.874275 0.0733392 0.0523895 -0.0260413
2 2 1.39074 4.06704 1.37236 13.3225 4.51268 5.93571 2.05037 -0.0469451 -0.0384133
3 2 4.04685 4.07439 1.35146 -3.3869 6.47632 0.392716 -2.17093 -0.038409 0.00471919
4 1 2.69879 -0.00386739 2.70272 -0.319232 -1.02877 0.727309 0.0912666 0.0549279 0.0456036
5 2 1.36896 1.3444 4.04096 7.63043 -1.49619 -2.3986 2.20924 -0.00309551 0.0168709
6 2 4.04498 1.35291 4.04347 -3.94416 0.762625 -1.74253 -2.25329 -0.0188678 -0.0027391
ITEM: TIMESTEP
16
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6976 2.70135 -0.00349241 -0.595266 0.340245 -0.87455 0.0787153 0.055569 -0.0281032
2 2 1.39411 4.06817 1.37384 13.6294 4.50526 5.92964 2.02007 -0.0514799 -0.042077
3 2 4.04596 4.07601 1.35155 -3.71274 6.47031 0.393413 -2.15039 -0.0412405 0.00452364
4 1 2.69871 -0.00412452 2.7029 -0.318268 -1.02819 0.727794 0.0990893 0.0601283 0.0501398
5 2 1.37091 1.34403 4.04036 7.96225 -1.49665 -2.39594 2.19142 -0.00294819 0.0183708
6 2 4.04395 1.3531 4.04304 -4.28288 0.759692 -1.74296 -2.2389 -0.0200287 -0.00285406
ITEM: TIMESTEP
17
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69745 2.70143 -0.00371108 -0.594441 0.340824 -0.874845 0.0841889 0.0587168 -0.0301987
2 2 1.39755 4.0693 1.37532 13.9317 4.49714 5.92301 1.9884 -0.0562187 -0.0458954
3 2 4.04499 4.07763 1.35165 -4.0354 6.46388 0.394073 -2.12872 -0.0441293 0.0042247
4 1 2.69863 -0.00438149 2.70308 -0.317223 -1.02755 0.728326 0.107162 0.0655439 0.054894
5 2 1.37294 1.34365 4.03976 8.2913 -1.49708 -2.39305 2.17248 -0.00274479 0.0199293
6 2 4.04284 1.35329 4.0426 -4.61936 0.756586 -1.74339 -2.2235 -0.0211679 -0.00295392
ITEM: TIMESTEP
18
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69731 2.70152 -0.00392983 -0.593559 0.341435 -0.875162 0.0897661 0.0618346 -0.0323262
2 2 1.40107 4.07042 1.3768 14.229 4.48829 5.91578 1.95532 -0.0611659 -0.0498706
3 2 4.04394 4.07924 1.35175 -4.3547 6.457 0.394679 -2.10593 -0.0470792 0.0038154
4 1 2.69855 -0.00463829 2.70327 -0.316095 -1.02686 0.728907 0.11549 0.0711775 0.0598705
5 2 1.37506 1.34328 4.03916 8.61741 -1.49747 -2.38993 2.15241 -0.00248344 0.0215483
6 2 4.04164 1.35348 4.04217 -4.95344 0.753309 -1.74385 -2.20706 -0.0222835 -0.00303744
ITEM: TIMESTEP
19
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69716 2.7016 -0.00414866 -0.592621 0.342077 -0.8755 0.0954526 0.0649239 -0.0344841
2 2 1.40467 4.07154 1.37828 14.5213 4.47868 5.90795 1.92083 -0.0663258 -0.0540045
3 2 4.04281 4.08086 1.35185 -4.67049 6.44967 0.395215 -2.08198 -0.050094 0.00328881
4 1 2.69847 -0.00489492 2.70345 -0.314881 -1.02611 0.72954 0.124076 0.0770317 0.0650736
5 2 1.37725 1.3429 4.03857 8.94041 -1.49782 -2.38655 2.13119 -0.00216234 0.0232295
6 2 4.04036 1.35367 4.04173 -5.28496 0.749867 -1.74431 -2.18956 -0.0233735 -0.00310338
ITEM: TIMESTEP
20
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69701 2.70169 -0.00436758 -0.591624 0.342751 -0.875861 0.101254 0.0679866 -0.0366705
2 2 1.40833 4.07266 1.37976 14.8083 4.46827 5.89948 1.88489 -0.0717024 -0.0582989
3 2 4.0416 4.08247 1.35195 -4.98257 6.44189 0.395662 -2.05686 -0.0531772 0.00263798
4 1 2.69839 -0.00515135 2.70363 -0.313579 -1.0253 0.730227 0.132925 0.0831089 0.0705072
5 2 1.37953 1.34253 4.03797 9.26012 -1.49812 -2.38291 2.1088 -0.00177977 0.0249746
6 2 4.039 1.35386 4.04129 -5.61376 0.746262 -1.74478 -2.171 -0.0244362 -0.00315046

View File

@ -0,0 +1,315 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.7 2.7 0 -0.601491 0.335597 -0.87242 -2.27066e-14 -1.33391e-14 2.31141e-14
2 2 1.35 4.05 1.35 8.2897 4.55901 5.97376 2.35473 2.21578e-14 7.40069e-15
3 2 4.05 4.05 1.35 1.7742 6.51885 0.385522 -2.35473 2.97071e-15 -2.01341e-14
4 1 2.7 1.65327e-16 2.7 -0.325605 -1.03244 0.724324 -2.90278e-14 6.77422e-15 2.86766e-15
5 2 1.35 1.35 4.05 2.42711 -1.49109 -2.41596 2.35473 5.79901e-15 -1.19594e-14
6 2 4.05 1.35 4.05 1.30688 0.784281 -1.73922 -2.35473 -1.38761e-14 1.09382e-14
ITEM: TIMESTEP
1
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69985 2.70008 -0.000218105 -0.601467 0.335616 -0.872428 0.00470101 0.00380515 -0.00141625
2 2 1.35212 4.05114 1.35149 8.64389 4.55886 5.97363 2.34251 -0.00209926 -0.00172976
3 2 4.0504 4.05163 1.3501 1.41949 6.51866 0.385561 -2.34936 -0.00247497 0.00051716
4 1 2.69992 -0.00025811 2.70018 -0.325581 -1.03243 0.724334 0.00481137 0.00249244 0.00195665
5 2 1.35065 1.34963 4.0494 2.78199 -1.49112 -2.4159 2.3517 -0.00043711 0.000874754
6 2 4.05028 1.3502 4.04957 0.951796 0.784184 -1.73923 -2.35436 -0.00128625 -0.00020256
ITEM: TIMESTEP
2
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6997 2.70017 -0.000436214 -0.601396 0.335673 -0.872449 0.00939888 0.00756163 -0.00288164
2 2 1.35432 4.05228 1.35299 8.99615 4.55837 5.97323 2.32921 -0.00431846 -0.00355855
3 2 4.05071 4.05326 1.35019 1.06567 6.5181 0.385678 -2.34304 -0.00494314 0.00103532
4 1 2.69984 -0.000516214 2.70036 -0.325507 -1.03239 0.724364 0.00976944 0.00512657 0.00403686
5 2 1.35139 1.34925 4.04879 3.13634 -1.49122 -2.4157 2.34776 -0.000851489 0.00177498
6 2 4.05048 1.35039 4.04913 0.596838 0.783892 -1.73928 -2.3531 -0.00257512 -0.000406965
ITEM: TIMESTEP
3
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69955 2.70025 -0.00065433 -0.601277 0.335769 -0.872486 0.0141006 0.0112702 -0.00439552
2 2 1.35661 4.05342 1.35448 9.34633 4.55754 5.97255 2.31482 -0.00666433 -0.00549143
3 2 4.05093 4.05489 1.35029 0.712875 6.51717 0.385873 -2.33577 -0.00740896 0.00154764
4 1 2.69976 -0.000774304 2.70054 -0.325382 -1.03232 0.724417 0.0148831 0.00790884 0.00624833
5 2 1.35222 1.34888 4.04819 3.49003 -1.49137 -2.41536 2.3429 -0.0012407 0.00270313
6 2 4.05058 1.35059 4.0487 0.242138 0.783407 -1.73935 -2.35094 -0.00386511 -0.000612161
ITEM: TIMESTEP
4
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6994 2.70034 -0.000872457 -0.60111 0.335902 -0.872539 0.0188131 0.0149318 -0.00595718
2 2 1.359 4.05456 1.35597 9.69425 4.55635 5.97156 2.29933 -0.00914346 -0.00753331
3 2 4.05107 4.05652 1.35039 0.361248 6.51586 0.386144 -2.32753 -0.00987687 0.00204727
4 1 2.69967 -0.00103238 2.70072 -0.325204 -1.03223 0.724492 0.020161 0.0108455 0.00859866
5 2 1.35314 1.34851 4.04758 3.84292 -1.49159 -2.41488 2.33711 -0.00160232 0.00366164
6 2 4.0506 1.35078 4.04826 -0.112168 0.782727 -1.73946 -2.34789 -0.00515472 -0.000817084
ITEM: TIMESTEP
5
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69925 2.70042 -0.0010906 -0.600896 0.336071 -0.872607 0.0235434 0.0185473 -0.00756588
2 2 1.36146 4.0557 1.35747 10.0397 4.55478 5.97026 2.2827 -0.0117623 -0.00968894
3 2 4.05111 4.05815 1.35048 0.0109366 6.51419 0.386489 -2.31832 -0.0123511 0.00252727
4 1 2.69959 -0.00129042 2.70091 -0.324972 -1.0321 0.724592 0.0256115 0.0139425 0.0110953
5 2 1.35414 1.34814 4.04698 4.19487 -1.49186 -2.41425 2.33039 -0.00193394 0.0046529
6 2 4.05052 1.35098 4.04783 -0.465946 0.781852 -1.7396 -2.34393 -0.00644244 -0.00102066
ITEM: TIMESTEP
6
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6991 2.7005 -0.00130876 -0.600633 0.336277 -0.872692 0.0282985 0.0221175 -0.00922083
2 2 1.36401 4.05684 1.35896 10.3827 4.55279 5.96863 2.26494 -0.0145272 -0.0119629
3 2 4.05107 4.05978 1.35058 -0.337913 6.51214 0.386904 -2.30814 -0.0148362 0.00298071
4 1 2.69951 -0.00154843 2.70109 -0.324684 -1.03194 0.724717 0.0312427 0.0172058 0.0137455
5 2 1.35523 1.34776 4.04638 4.54573 -1.49217 -2.41347 2.32273 -0.00223319 0.00567932
6 2 4.05036 1.35117 4.04739 -0.819058 0.780784 -1.73977 -2.33906 -0.00772673 -0.00122181
ITEM: TIMESTEP
7
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69895 2.70059 -0.00152695 -0.600322 0.336519 -0.872794 0.0330853 0.0256435 -0.0109212
2 2 1.36665 4.05797 1.36045 10.7228 4.55038 5.96665 2.24601 -0.0174443 -0.0143597
3 2 4.05094 4.0614 1.35068 -0.685154 6.50971 0.387385 -2.29698 -0.0173365 0.00340068
4 1 2.69943 -0.00180639 2.70127 -0.324338 -1.03175 0.724871 0.0370626 0.020641 0.0165564
5 2 1.35641 1.34739 4.04577 4.89536 -1.49253 -2.41254 2.31411 -0.0024977 0.00674323
6 2 4.05012 1.35137 4.04696 -1.17137 0.779522 -1.73997 -2.33329 -0.00900604 -0.00141944
ITEM: TIMESTEP
8
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6988 2.70067 -0.00174516 -0.599962 0.336797 -0.872914 0.0379108 0.0291262 -0.0126661
2 2 1.36938 4.05911 1.36194 11.06 4.54752 5.96429 2.2259 -0.0205196 -0.0168834
3 2 4.05073 4.06303 1.35077 -1.03064 6.50691 0.387927 -2.28482 -0.0198564 0.00378025
4 1 2.69935 -0.0020643 2.70145 -0.323932 -1.03153 0.725054 0.0430788 0.0242538 0.0195348
5 2 1.35768 1.34702 4.04517 5.24362 -1.49292 -2.41144 2.30452 -0.0027252 0.00784692
6 2 4.04978 1.35156 4.04652 -1.52274 0.778068 -1.7402 -2.32659 -0.0102788 -0.00161245
ITEM: TIMESTEP
9
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69865 2.70076 -0.0019634 -0.599553 0.337109 -0.873051 0.0427817 0.0325667 -0.0144547
2 2 1.37218 4.06025 1.36343 11.3941 4.54418 5.96155 2.20459 -0.023759 -0.019538
3 2 4.05043 4.06466 1.35087 -1.37421 6.50372 0.388522 -2.27166 -0.0224003 0.00411244
4 1 2.69927 -0.00232215 2.70163 -0.323464 -1.03126 0.725268 0.0492987 0.0280495 0.0226874
5 2 1.35904 1.34664 4.04457 5.59036 -1.49335 -2.41017 2.29396 -0.00291347 0.00899259
6 2 4.04935 1.35176 4.04609 -1.87303 0.776422 -1.74045 -2.31898 -0.0115434 -0.00179972
ITEM: TIMESTEP
10
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6985 2.70084 -0.00218168 -0.599095 0.337456 -0.873207 0.0477049 0.0359661 -0.0162858
2 2 1.37507 4.06138 1.36492 11.7248 4.54034 5.95839 2.18206 -0.0271682 -0.0223275
3 2 4.05004 4.06628 1.35097 -1.71572 6.50015 0.389163 -2.25748 -0.0249726 0.0043903
4 1 2.69919 -0.00257993 2.70181 -0.322932 -1.03096 0.725515 0.0557294 0.0320331 0.0260207
5 2 1.36048 1.34627 4.04397 5.93543 -1.4938 -2.40872 2.2824 -0.00306026 0.0101825
6 2 4.04884 1.35195 4.04565 -2.2221 0.774587 -1.74074 -2.31042 -0.0127983 -0.00198013
ITEM: TIMESTEP
11
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69835 2.70092 -0.00240001 -0.598586 0.337838 -0.873382 0.0526872 0.0393256 -0.0181586
2 2 1.37805 4.06252 1.36641 12.0521 4.53597 5.9548 2.15829 -0.0307526 -0.0252554
3 2 4.04957 4.06791 1.35106 -2.05501 6.49619 0.389841 -2.24228 -0.0275775 0.00460683
4 1 2.69911 -0.00283763 2.70199 -0.322334 -1.03061 0.725796 0.0623777 0.0362096 0.0295409
5 2 1.362 1.3459 4.04336 6.27868 -1.49427 -2.40709 2.26985 -0.00316333 0.0114188
6 2 4.04824 1.35215 4.04522 -2.56981 0.772563 -1.74105 -2.30093 -0.0140417 -0.00215255
ITEM: TIMESTEP
12
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6982 2.70101 -0.00261837 -0.598027 0.338253 -0.873575 0.0577351 0.0426463 -0.0200718
2 2 1.3811 4.06365 1.3679 12.3757 4.53105 5.95076 2.13326 -0.0345179 -0.0283253
3 2 4.04901 4.06953 1.35116 -2.39194 6.49183 0.390547 -2.22604 -0.0302194 0.00475506
4 1 2.69903 -0.00309524 2.70217 -0.321667 -1.03022 0.726114 0.06925 0.0405836 0.0332542
5 2 1.36362 1.34552 4.04276 6.61997 -1.49475 -2.40527 2.25627 -0.00322051 0.0127037
6 2 4.04756 1.35234 4.04478 -2.91602 0.770353 -1.74139 -2.29048 -0.0152721 -0.00231583
ITEM: TIMESTEP
13
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69805 2.70109 -0.00283679 -0.597416 0.338702 -0.873788 0.0628554 0.0459295 -0.0220243
2 2 1.38423 4.06478 1.36939 12.6954 4.52555 5.94625 2.10694 -0.0384688 -0.0315401
3 2 4.04837 4.07115 1.35126 -2.72634 6.48707 0.39127 -2.20874 -0.0329024 0.00482793
4 1 2.69895 -0.00335274 2.70236 -0.320929 -1.02979 0.726471 0.0763523 0.0451591 0.0371659
5 2 1.36531 1.34515 4.04216 6.95912 -1.49523 -2.40326 2.24165 -0.00322965 0.0140393
6 2 4.04678 1.35253 4.04434 -3.26057 0.767958 -1.74175 -2.27906 -0.0164877 -0.0024688
ITEM: TIMESTEP
14
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6979 2.70118 -0.00305527 -0.596753 0.339184 -0.874022 0.0680546 0.0491768 -0.0240145
2 2 1.38745 4.06591 1.37087 13.0111 4.51944 5.94124 2.07932 -0.0426096 -0.0349018
3 2 4.04765 4.07277 1.35136 -3.05804 6.4819 0.391997 -2.19038 -0.035631 0.00481829
4 1 2.69887 -0.00361013 2.70254 -0.320118 -1.0293 0.726868 0.0836894 0.0499393 0.0412807
5 2 1.3671 1.34478 4.04156 7.296 -1.49572 -2.40103 2.22598 -0.00318867 0.0154277
6 2 4.04593 1.35272 4.04391 -3.60334 0.765381 -1.74213 -2.26667 -0.0176868 -0.00261028
ITEM: TIMESTEP
15
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69775 2.70126 -0.0032738 -0.596036 0.339698 -0.874275 0.0733392 0.0523895 -0.0260413
2 2 1.39074 4.06704 1.37236 13.3225 4.51268 5.93571 2.05037 -0.0469451 -0.0384133
3 2 4.04685 4.07439 1.35146 -3.3869 6.47632 0.392716 -2.17093 -0.038409 0.00471919
4 1 2.69879 -0.00386739 2.70272 -0.319232 -1.02877 0.727309 0.0912666 0.0549279 0.0456036
5 2 1.36896 1.3444 4.04096 7.63043 -1.49619 -2.3986 2.20924 -0.00309551 0.0168709
6 2 4.04498 1.35291 4.04347 -3.94416 0.762625 -1.74253 -2.25329 -0.0188678 -0.0027391
ITEM: TIMESTEP
16
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.6976 2.70135 -0.00349241 -0.595266 0.340245 -0.87455 0.0787153 0.055569 -0.0281032
2 2 1.39411 4.06817 1.37384 13.6294 4.50526 5.92964 2.02007 -0.0514799 -0.042077
3 2 4.04596 4.07601 1.35155 -3.71274 6.47031 0.393413 -2.15039 -0.0412405 0.00452364
4 1 2.69871 -0.00412452 2.7029 -0.318268 -1.02819 0.727794 0.0990893 0.0601283 0.0501398
5 2 1.37091 1.34403 4.04036 7.96225 -1.49665 -2.39594 2.19142 -0.00294819 0.0183708
6 2 4.04395 1.3531 4.04304 -4.28288 0.759692 -1.74296 -2.2389 -0.0200287 -0.00285406
ITEM: TIMESTEP
17
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69745 2.70143 -0.00371108 -0.594441 0.340824 -0.874845 0.0841889 0.0587168 -0.0301987
2 2 1.39755 4.0693 1.37532 13.9317 4.49714 5.92301 1.9884 -0.0562187 -0.0458954
3 2 4.04499 4.07763 1.35165 -4.0354 6.46388 0.394073 -2.12872 -0.0441293 0.0042247
4 1 2.69863 -0.00438149 2.70308 -0.317223 -1.02755 0.728326 0.107162 0.0655439 0.054894
5 2 1.37294 1.34365 4.03976 8.2913 -1.49708 -2.39305 2.17248 -0.00274479 0.0199293
6 2 4.04284 1.35329 4.0426 -4.61936 0.756586 -1.74339 -2.2235 -0.0211679 -0.00295392
ITEM: TIMESTEP
18
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69731 2.70152 -0.00392983 -0.593559 0.341435 -0.875162 0.0897661 0.0618346 -0.0323262
2 2 1.40107 4.07042 1.3768 14.229 4.48829 5.91578 1.95532 -0.0611659 -0.0498706
3 2 4.04394 4.07924 1.35175 -4.3547 6.457 0.394679 -2.10593 -0.0470792 0.0038154
4 1 2.69855 -0.00463829 2.70327 -0.316095 -1.02686 0.728907 0.11549 0.0711775 0.0598705
5 2 1.37506 1.34328 4.03916 8.61741 -1.49747 -2.38993 2.15241 -0.00248344 0.0215483
6 2 4.04164 1.35348 4.04217 -4.95344 0.753309 -1.74385 -2.20706 -0.0222835 -0.00303744
ITEM: TIMESTEP
19
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69716 2.7016 -0.00414866 -0.592621 0.342077 -0.8755 0.0954526 0.0649239 -0.0344841
2 2 1.40467 4.07154 1.37828 14.5213 4.47868 5.90795 1.92083 -0.0663258 -0.0540045
3 2 4.04281 4.08086 1.35185 -4.67049 6.44967 0.395215 -2.08198 -0.050094 0.00328881
4 1 2.69847 -0.00489492 2.70345 -0.314881 -1.02611 0.72954 0.124076 0.0770317 0.0650736
5 2 1.37725 1.3429 4.03857 8.94041 -1.49782 -2.38655 2.13119 -0.00216234 0.0232295
6 2 4.04036 1.35367 4.04173 -5.28496 0.749867 -1.74431 -2.18956 -0.0233735 -0.00310338
ITEM: TIMESTEP
20
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z vx vy vz fx fy fz
1 1 2.69701 2.70169 -0.00436758 -0.591624 0.342751 -0.875861 0.101254 0.0679866 -0.0366705
2 2 1.40833 4.07266 1.37976 14.8083 4.46827 5.89948 1.88489 -0.0717024 -0.0582989
3 2 4.0416 4.08247 1.35195 -4.98257 6.44189 0.395662 -2.05686 -0.0531772 0.00263798
4 1 2.69839 -0.00515135 2.70363 -0.313579 -1.0253 0.730227 0.132925 0.0831089 0.0705072
5 2 1.37953 1.34253 4.03797 9.26012 -1.49812 -2.38291 2.1088 -0.00177977 0.0249746
6 2 4.039 1.35386 4.04129 -5.61376 0.746262 -1.74478 -2.171 -0.0244362 -0.00315046

View File

@ -0,0 +1,15 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 2.7 0 -2.27066e-14 -1.33391e-14 2.31141e-14
2 2 1.35 4.05 1.35 2.35473 2.21578e-14 7.40069e-15
3 2 4.05 4.05 1.35 -2.35473 2.97071e-15 -2.01341e-14
4 1 2.7 1.65327e-16 2.7 -2.90278e-14 6.77422e-15 2.86766e-15
5 2 1.35 1.35 4.05 2.35473 5.79901e-15 -1.19594e-14
6 2 4.05 1.35 4.05 -2.35473 -1.38761e-14 1.09382e-14

View File

@ -0,0 +1,18 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
9
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.6199999999999999e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 2.7 0 -1.27436e-13 0.760572 0.760572
2 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
3 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
4 1 2.7 1.65327e-16 2.7 -8.06311e-14 -1.57101 -1.57101
5 2 1.35 1.35 4.05 2.79365 0.684734 0.684734
6 2 4.05 1.35 4.05 -2.79365 0.684734 0.684734
7 1 2.7 2.7 0 -1.30843e-13 0.760572 0.760572
8 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
9 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901

View File

@ -0,0 +1,21 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
12
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 6.6130927153957075e-16
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 8.1 0 -0.433947 2.16479 1.55466
2 2 1.35 9.45 1.35 1.64718 -0.119006 0.375837
3 2 4.05 9.45 1.35 0.999862 -1.02573 0.037629
4 1 5.4 8.1 2.7 0.433947 2.16479 1.55466
5 2 4.05 9.45 4.05 -0.999862 -1.02573 0.037629
6 2 6.75 9.45 4.05 -1.64718 -0.119006 0.375837
7 1 2.7 1.65327e-16 2.7 -0.211437 1.63064 -0.0728897
8 2 1.35 1.35 4.05 0.461807 -1.3955 -1.94959
9 2 4.05 1.35 4.05 0.708573 -1.2552 0.0543549
10 1 5.4 0 0 0.211437 1.63064 -0.0728897
11 2 4.05 1.35 1.35 -0.708573 -1.2552 0.0543549
12 2 6.75 1.35 1.35 -0.461807 -1.3955 -1.94959

View File

@ -0,0 +1,15 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 2.7 0 -2.27066e-14 -1.33391e-14 2.31141e-14
2 2 1.35 4.05 1.35 2.35473 2.21578e-14 7.40069e-15
3 2 4.05 4.05 1.35 -2.35473 2.97071e-15 -2.01341e-14
4 1 2.7 1.65327e-16 2.7 -2.90278e-14 6.77422e-15 2.86766e-15
5 2 1.35 1.35 4.05 2.35473 5.79901e-15 -1.19594e-14
6 2 4.05 1.35 4.05 -2.35473 -1.38761e-14 1.09382e-14

View File

@ -0,0 +1,18 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
9
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.6199999999999999e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 2.7 0 -1.27436e-13 0.760572 0.760572
2 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
3 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
4 1 2.7 1.65327e-16 2.7 -8.06311e-14 -1.57101 -1.57101
5 2 1.35 1.35 4.05 2.79365 0.684734 0.684734
6 2 4.05 1.35 4.05 -2.79365 0.684734 0.684734
7 1 2.7 2.7 0 -1.30843e-13 0.760572 0.760572
8 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
9 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901

View File

@ -0,0 +1,21 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
12
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 6.6130927153957075e-16
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 8.1 0 -0.433947 2.16479 1.55466
2 2 1.35 9.45 1.35 1.64718 -0.119006 0.375837
3 2 4.05 9.45 1.35 0.999862 -1.02573 0.037629
4 1 5.4 8.1 2.7 0.433947 2.16479 1.55466
5 2 4.05 9.45 4.05 -0.999862 -1.02573 0.037629
6 2 6.75 9.45 4.05 -1.64718 -0.119006 0.375837
7 1 2.7 1.65327e-16 2.7 -0.211437 1.63064 -0.0728897
8 2 1.35 1.35 4.05 0.461807 -1.3955 -1.94959
9 2 4.05 1.35 4.05 0.708573 -1.2552 0.0543549
10 1 5.4 0 0 0.211437 1.63064 -0.0728897
11 2 4.05 1.35 1.35 -0.708573 -1.2552 0.0543549
12 2 6.75 1.35 1.35 -0.461807 -1.3955 -1.94959

View File

@ -0,0 +1,15 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 2.7 0 -2.27066e-14 -1.33391e-14 2.31141e-14
2 2 1.35 4.05 1.35 2.35473 2.21578e-14 7.40069e-15
3 2 4.05 4.05 1.35 -2.35473 2.97071e-15 -2.01341e-14
4 1 2.7 1.65327e-16 2.7 -2.90278e-14 6.77422e-15 2.86766e-15
5 2 1.35 1.35 4.05 2.35473 5.79901e-15 -1.19594e-14
6 2 4.05 1.35 4.05 -2.35473 -1.38761e-14 1.09382e-14

View File

@ -0,0 +1,18 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
9
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.6199999999999999e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 2.7 0 -1.27436e-13 0.760572 0.760572
2 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
3 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
4 1 2.7 1.65327e-16 2.7 -8.06311e-14 -1.57101 -1.57101
5 2 1.35 1.35 4.05 2.79365 0.684734 0.684734
6 2 4.05 1.35 4.05 -2.79365 0.684734 0.684734
7 1 2.7 2.7 0 -1.30843e-13 0.760572 0.760572
8 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
9 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901

View File

@ -0,0 +1,21 @@
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
12
ITEM: BOX BOUNDS xy xz yz pp pp pp
0.0000000000000000e+00 1.0800000000000001e+01 6.6130927153957075e-16
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
ITEM: ATOMS id type x y z fx fy fz
1 1 2.7 8.1 0 -0.433947 2.16479 1.55466
2 2 1.35 9.45 1.35 1.64718 -0.119006 0.375837
3 2 4.05 9.45 1.35 0.999862 -1.02573 0.037629
4 1 5.4 8.1 2.7 0.433947 2.16479 1.55466
5 2 4.05 9.45 4.05 -0.999862 -1.02573 0.037629
6 2 6.75 9.45 4.05 -1.64718 -0.119006 0.375837
7 1 2.7 1.65327e-16 2.7 -0.211437 1.63064 -0.0728897
8 2 1.35 1.35 4.05 0.461807 -1.3955 -1.94959
9 2 4.05 1.35 4.05 0.708573 -1.2552 0.0543549
10 1 5.4 0 0 0.211437 1.63064 -0.0728897
11 2 4.05 1.35 1.35 -0.708573 -1.2552 0.0543549
12 2 6.75 1.35 1.35 -0.461807 -1.3955 -1.94959

View File

@ -0,0 +1,15 @@
Noelem= 2
Element basis Numel Es Ep Ed Ef Mass HubbardU Wss Wpp Wdd Wff
U sdf 6.0 -4.08 0.0 0.816 -0.586 238.05078 9.0 0.0 0.0 0.0 0.0
O sp 6.0 -23.77 -8.85 0.0 0.0 15.994915 12.2 0.0 0.0 0.0 0.0
W spd 6.0 -4.52 0.53 -2.91 0.0 183.84 7.048 0.0 0.0 0.0 0.0
Mo sd 6.0 -3.29 0.0 -1.98 0.0 95.95 6.48 0.0 0.0 0.0 0.0
S sp 6.0 -14.00 -3.97 0.0 0.0 32.06 8.28 0.0 -0.4278 0.0 0.0
N sp 5.000000 -18.543798 -7.862407 0.000000 0.000000 14.006700 17.053958 0.000000 -0.6934 0.000000 0.000000
H s 1.000000 -6.237968 0.000000 0.000000 0.000000 1.007900 13.684855 -2.23400 0.000000 0.000000 0.000000
C sp 4.000000 -13.736556 -4.748938 0.000000 0.000000 12.010000 10.522540 0.000000 -0.618100 0.000000 0.000000
O sp 6.000000 -23.833752 -9.645001 0.000000 0.000000 15.999400 14.443874 0.000000 -0.757650 0.000000 0.000000

26
examples/QM/LATTE/in.aimd Normal file
View File

@ -0,0 +1,26 @@
# AIMD test of two UO2 molecules with LATTE in MDI stand-alone mode
units metal
atom_style full
atom_modify sort 0 0.0
read_data 2uo2.lmp
velocity all create 300.0 87287 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
timestep 0.00025
fix 1 all nve
fix 2 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
dump 1 all custom 1 dump.aimd.mpi &
id type x y z vx vy vz fx fy fz
run 20

View File

@ -0,0 +1,27 @@
# AIMD test of two UO2 molecules with LATTE in MDI plugin mode
units metal
atom_style full
atom_modify sort 0 0.0
read_data 2uo2.lmp
velocity all create 300.0 87287 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
timestep 0.00025
fix 1 all nve
fix 2 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
dump 1 all custom 1 dump.aimd.plugin &
id type x y z vx vy vz fx fy fz
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" &
command "run 20"

View File

@ -0,0 +1,37 @@
# Series of single-point calcs of 2,3,4 UO2 molecules
# with LATTE in MDI stand-alone mode
variable files index 2uo2 3uo2 4uo2
mdi connect
label LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
write_dump all custom dump.series.mpi.${files} &
id type x y z fx fy fz modify sort id
clear
next files
jump SELF LOOP
mdi exit

View File

@ -0,0 +1,32 @@
# Series of single-point calcs of 2,3,4 UO2 molecules
# with LATTE in MDI plugin mode
variable files index 2uo2 3uo2 4uo2
label LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
fix 1 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" &
command "run 0"
write_dump all custom dump.series.plugin.${files} &
id type x y z fx fy fz modify sort id
clear
next files
jump SELF LOOP

67
examples/QM/LATTE/latte.in Executable file
View File

@ -0,0 +1,67 @@
#General controls
CONTROL{
XCONTROL= 1
BASISTYPE= NONORTHO
PARAMPATH= './'
SCLTYPE= TABLE
DEBUGON= 0
FERMIM= 6
CGORLIB= 1 CGTOL= 1.0e-6
KBT= 1.0
NORECS= 5
ENTROPYKIND= 1
PPOTON= 2 VDWON= 0
SPINON= 0 SPINTOL= 1.0e-4
ELECTRO= 1 ELECMETH= 0 ELEC_ETOL= 0.001 ELEC_QTOL= 1.0e-12
COULACC= 1.0e-6 COULCUT= -500.0 COULR1= 500.0
MAXSCF= 250
BREAKTOL= 1.0E-12 MINSP2ITER= 22 SP2CONV= REL
FULLQCONV= 1 QITER= 0
QMIX= 0.05 SPINMIX= 0.05 MDMIX= 0.05
#QMIX= 0.25 SPINMIX= 0.25 MDMIX= 0.25
ORDERNMOL= 0
SPARSEON= 0 THRESHOLDON= 1 NUMTHRESH= 1.0e-6 FILLINSTOP= 100 BLKSZ= 4
MSPARSE= 3000
LCNON= 0 LCNITER= 4 CHTOL= 0.01
SKIN= 1.0
RELAX= 0 RELAXTYPE= SD MAXITER= 100 RLXFTOL= 0.001
MDON= 1
PBCON= 1
RESTART= 0
CHARGE= 0
XBO= 1
XBODISON= 1
XBODISORDER= 5
NGPU= 2
KON= 0
COMPFORCE= 1
DOSFIT= 0 INTS2FIT= 1 BETA= 1000.0 NFITSTEP= 5000 QFIT= 0 MCSIGMA= 0.2
PPFITON= 0
ALLFITON= 0
PPSTEP= 500 BISTEP= 500 PP2FIT= 2 BINT2FIT= 6
PPBETA= 1000.0 PPSIGMA= 0.01 PPNMOL= 10 PPNGEOM= 200
PARREP= 0
ER= 1.0
#DOKERNEL= T
}
MDCONTROL{
MAXITER= 2000
UDNEIGH= 1
DT= 0.5
TEMPERATURE= 1.0e-10 RNDIST= GAUSSIAN SEEDINIT= UNIFORM
DUMPFREQ= 250
RSFREQ= 500
WRTFREQ= 1
TOINITTEMP5= 1
THERMPER= 500
THERMRUN= 50000
NVTON= 0 NPTON= 0 AVEPER= 1000 FRICTION= 1000.0 SEED= 54
PTARGET= 0.0 NPTTYPE= ISO
SHOCKON= 0
SHOCKSTART= 100000
SHOCKDIR= 1
UPARTICLE= 500.0 USHOCK= -4590.0 C0= 1300.0
MDADAPT= 0
GETHUG= 0 E0= -795.725 V0= 896.984864 P0= 0.083149
}

View File

@ -0,0 +1,102 @@
LAMMPS (23 Jun 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# AIMD test of two UO2 molecules with LATTE in MDI stand-alone mode
units metal
atom_style full
atom_modify sort 0 0.0
read_data 2uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
6 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.003 seconds
velocity all create 300.0 87287 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
timestep 0.00025
fix 1 all nve
fix 2 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
dump 1 all custom 1 dump.aimd.mpi id type x y z vx vy vz fx fy fz
run 20
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 6.489 | 6.489 | 6.489 Mbytes
Step Temp PotEng TotEng Press
0 300 -50.539035 -50.345145 -120197.6
1 307.57345 -50.544722 -50.345937 -120123.27
2 316.3757 -50.551342 -50.346868 -120035.12
3 326.39203 -50.558885 -50.347938 -119933.11
4 337.60559 -50.567341 -50.349146 -119817.17
5 349.99734 -50.576697 -50.350493 -119687.24
6 363.54606 -50.586939 -50.351979 -119543.23
7 378.22834 -50.598054 -50.353605 -119385.07
8 394.0186 -50.610024 -50.355369 -119212.67
9 410.88903 -50.622831 -50.357273 -119025.94
10 428.80963 -50.636457 -50.359317 -118824.77
11 447.74819 -50.65088 -50.3615 -118609.06
12 467.67027 -50.666079 -50.363823 -118378.7
13 488.53922 -50.68203 -50.366287 -118133.58
14 510.31617 -50.698708 -50.36889 -117873.58
15 532.96002 -50.716086 -50.371633 -117598.57
16 556.42747 -50.734137 -50.374517 -117308.44
17 580.67298 -50.75283 -50.377541 -117003.05
18 605.64879 -50.772136 -50.380705 -116682.27
19 631.30497 -50.792023 -50.38401 -116345.95
20 657.58937 -50.812455 -50.387454 -115993.97
Loop time of 3.40001 on 1 procs for 20 steps with 6 atoms
Performance: 0.127 ns/day, 188.889 hours/ns, 5.882 timesteps/s
100.0% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 1.2223e-05 | 1.2223e-05 | 1.2223e-05 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 6.0971e-05 | 6.0971e-05 | 6.0971e-05 | 0.0 | 0.00
Output | 0.0009257 | 0.0009257 | 0.0009257 | 0.0 | 0.03
Modify | 3.3989 | 3.3989 | 3.3989 | 0.0 | 99.97
Other | | 6.824e-05 | | | 0.00
Nlocal: 6 ave 6 max 6 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2 ave 2 max 2 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03

View File

@ -0,0 +1,102 @@
LAMMPS (23 Jun 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# AIMD test of two UO2 molecules with LATTE in MDI stand-alone mode
units metal
atom_style full
atom_modify sort 0 0.0
read_data 2uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
2 by 1 by 1 MPI processor grid
reading atoms ...
6 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.005 seconds
velocity all create 300.0 87287 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
timestep 0.00025
fix 1 all nve
fix 2 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
dump 1 all custom 1 dump.aimd.mpi id type x y z vx vy vz fx fy fz
run 20
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.485 | 5.987 | 6.489 Mbytes
Step Temp PotEng TotEng Press
0 300 -50.539035 -50.345145 -120197.6
1 307.57345 -50.544722 -50.345937 -120123.27
2 316.3757 -50.551342 -50.346868 -120035.12
3 326.39203 -50.558885 -50.347938 -119933.11
4 337.60559 -50.567341 -50.349146 -119817.17
5 349.99734 -50.576697 -50.350493 -119687.24
6 363.54606 -50.586939 -50.351979 -119543.23
7 378.22834 -50.598054 -50.353605 -119385.07
8 394.0186 -50.610024 -50.355369 -119212.67
9 410.88903 -50.622831 -50.357273 -119025.94
10 428.80963 -50.636457 -50.359317 -118824.77
11 447.74819 -50.65088 -50.3615 -118609.06
12 467.67027 -50.666079 -50.363823 -118378.7
13 488.53922 -50.68203 -50.366287 -118133.58
14 510.31617 -50.698708 -50.36889 -117873.58
15 532.96002 -50.716086 -50.371633 -117598.57
16 556.42747 -50.734137 -50.374517 -117308.44
17 580.67298 -50.75283 -50.377541 -117003.05
18 605.64879 -50.772136 -50.380705 -116682.27
19 631.30497 -50.792023 -50.38401 -116345.95
20 657.58937 -50.812455 -50.387454 -115993.97
Loop time of 25.2055 on 2 procs for 20 steps with 6 atoms
Performance: 0.017 ns/day, 1400.306 hours/ns, 0.793 timesteps/s
99.9% CPU use with 2 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 1.746e-05 | 2.5213e-05 | 3.2966e-05 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 4.3862e-05 | 5.4267e-05 | 6.4671e-05 | 0.0 | 0.00
Output | 0.001642 | 0.0018189 | 0.0019957 | 0.4 | 0.01
Modify | 25.203 | 25.203 | 25.203 | 0.0 | 99.99
Other | | 0.000307 | | | 0.00
Nlocal: 3 ave 6 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Nghost: 1 ave 2 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Neighs: 0 ave 0 max 0 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:26

View File

@ -0,0 +1,103 @@
LAMMPS (23 Jun 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# AIMD test of two UO2 molecules with LATTE in MDI plugin mode
units metal
atom_style full
atom_modify sort 0 0.0
read_data 2uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
6 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.004 seconds
velocity all create 300.0 87287 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
timestep 0.00025
fix 1 all nve
fix 2 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
dump 1 all custom 1 dump.aimd.plugin id type x y z vx vy vz fx fy fz
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 20"
run 20
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 6.489 | 6.489 | 6.489 Mbytes
Step Temp PotEng TotEng Press
0 300 -50.539035 -50.345145 -120197.6
1 307.57345 -50.544722 -50.345937 -120123.27
2 316.3757 -50.551342 -50.346868 -120035.12
3 326.39203 -50.558885 -50.347938 -119933.11
4 337.60559 -50.567341 -50.349146 -119817.17
5 349.99734 -50.576697 -50.350493 -119687.24
6 363.54606 -50.586939 -50.351979 -119543.23
7 378.22834 -50.598054 -50.353605 -119385.07
8 394.0186 -50.610024 -50.355369 -119212.67
9 410.88903 -50.622831 -50.357273 -119025.94
10 428.80963 -50.636457 -50.359317 -118824.77
11 447.74819 -50.65088 -50.3615 -118609.06
12 467.67027 -50.666079 -50.363823 -118378.7
13 488.53922 -50.68203 -50.366287 -118133.58
14 510.31617 -50.698708 -50.36889 -117873.58
15 532.96002 -50.716086 -50.371633 -117598.57
16 556.42747 -50.734137 -50.374517 -117308.44
17 580.67298 -50.75283 -50.377541 -117003.05
18 605.64879 -50.772136 -50.380705 -116682.27
19 631.30497 -50.792023 -50.38401 -116345.95
20 657.58937 -50.812455 -50.387454 -115993.97
Loop time of 2.74435 on 1 procs for 20 steps with 6 atoms
Performance: 0.157 ns/day, 152.464 hours/ns, 7.288 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 1.299e-05 | 1.299e-05 | 1.299e-05 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 7.9198e-05 | 7.9198e-05 | 7.9198e-05 | 0.0 | 0.00
Output | 0.001118 | 0.001118 | 0.001118 | 0.0 | 0.04
Modify | 2.743 | 2.743 | 2.743 | 0.0 | 99.95
Other | | 0.0001456 | | | 0.01
Nlocal: 6 ave 6 max 6 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2 ave 2 max 2 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,263 @@
LAMMPS (23 Jun 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Series of single-point calcs of 2,3,4 UO2 molecules
# with LATTE in MDI stand-alone mode
variable files index 2uo2 3uo2 4uo2
mdi connect
label LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 2uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
6 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.003 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -50.539035 -50.539035 -120855.2
Loop time of 1.397e-06 on 1 procs for 0 steps with 6 atoms
71.6% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.397e-06 | | |100.00
Nlocal: 6 ave 6 max 6 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2 ave 2 max 2 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.mpi.2uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 3uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (16.2 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
9 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.002 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 16.2, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -78.155679 -78.155679 -99931.431
Loop time of 1.117e-06 on 1 procs for 0 steps with 9 atoms
89.5% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.117e-06 | | |100.00
Nlocal: 9 ave 9 max 9 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3 ave 3 max 3 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.mpi.3uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 4uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 10.8 5.4) with tilt (6.6130927e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
12 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.001 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -102.35713 -102.35713 -31036.168
Loop time of 1.466e-06 on 1 procs for 0 steps with 12 atoms
136.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.466e-06 | | |100.00
Nlocal: 12 ave 12 max 12 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 5 ave 5 max 5 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.mpi.4uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
mdi exit
Total wall time: 0:00:02

View File

@ -0,0 +1,263 @@
LAMMPS (23 Jun 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Series of single-point calcs of 2,3,4 UO2 molecules
# with LATTE in MDI stand-alone mode
variable files index 2uo2 3uo2 4uo2
mdi connect
label LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 2uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
2 by 1 by 1 MPI processor grid
reading atoms ...
6 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.004 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.234 | 5.236 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -50.539035 -50.539035 -120855.2
Loop time of 1.956e-06 on 2 procs for 0 steps with 6 atoms
127.8% CPU use with 2 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.956e-06 | | |100.00
Nlocal: 3 ave 6 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Nghost: 1 ave 2 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Neighs: 0 ave 0 max 0 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.mpi.2uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 3uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (16.2 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
2 by 1 by 1 MPI processor grid
reading atoms ...
9 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.001 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 16.2, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.234 | 5.236 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -78.155679 -78.155679 -99931.431
Loop time of 2.375e-06 on 2 procs for 0 steps with 9 atoms
147.4% CPU use with 2 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 2.375e-06 | | |100.00
Nlocal: 4.5 ave 9 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Nghost: 1.5 ave 3 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Neighs: 0 ave 0 max 0 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.mpi.3uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 4uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 10.8 5.4) with tilt (6.6130927e-16 3.3065464e-16 3.3065464e-16)
1 by 2 by 1 MPI processor grid
reading atoms ...
12 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.002 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
timestep 0.001
fix 1 all mdi/qm virial yes elements 92 8 connect no
thermo_style custom step temp pe etotal press
thermo 1
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -102.35713 -102.35713 -31036.168
Loop time of 2.4445e-06 on 2 procs for 0 steps with 12 atoms
122.7% CPU use with 2 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 2.444e-06 | | |100.00
Nlocal: 6 ave 6 max 6 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Nghost: 2.5 ave 4 max 1 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Neighs: 0 ave 0 max 0 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.mpi.4uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
mdi exit
Total wall time: 0:00:08

View File

@ -0,0 +1,256 @@
LAMMPS (23 Jun 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Series of single-point calcs of 2,3,4 UO2 molecules
# with LATTE in MDI plugin mode
variable files index 2uo2 3uo2 4uo2
label LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 2uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
6 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.004 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
fix 1 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 0"
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -50.539035 -50.539035 -120855.2
Loop time of 1.396e-06 on 1 procs for 0 steps with 6 atoms
143.3% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.396e-06 | | |100.00
Nlocal: 6 ave 6 max 6 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2 ave 2 max 2 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.plugin.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.plugin.2uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 3uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (16.2 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
9 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.002 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
fix 1 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 0"
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 16.2, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -78.155679 -78.155679 -99931.431
Loop time of 1.117e-06 on 1 procs for 0 steps with 9 atoms
89.5% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.117e-06 | | |100.00
Nlocal: 9 ave 9 max 9 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3 ave 3 max 3 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.plugin.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.plugin.3uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
units metal
atom_style full
atom_modify sort 0 0.0
read_data ${files}.lmp
read_data 4uo2.lmp
Reading data file ...
triclinic box = (0 0 0) to (10.8 10.8 5.4) with tilt (6.6130927e-16 3.3065464e-16 3.3065464e-16)
1 by 1 by 1 MPI processor grid
reading atoms ...
12 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
0 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.001 seconds
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
fix 1 all mdi/qm virial yes elements 92 8
thermo_style custom step temp pe etotal press
thermo 1
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 0"
run 0
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 0
ghost atom cutoff = 0
binsize = 10.8, bins = 1 1 1
0 neighbor lists, perpetual/occasional/extra = 0 0 0
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
Step Temp PotEng TotEng Press
0 0 -102.35713 -102.35713 -31036.168
Loop time of 1.048e-06 on 1 procs for 0 steps with 12 atoms
190.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.048e-06 | | |100.00
Nlocal: 12 ave 12 max 12 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 5 ave 5 max 5 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
write_dump all custom dump.series.plugin.${files} id type x y z fx fy fz modify sort id
write_dump all custom dump.series.plugin.4uo2 id type x y z fx fy fz modify sort id
clear
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
next files
jump SELF LOOP
Total wall time: 0:00:01

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,178 @@
3
U O
101
1.0000000000000000 53.452052832272599
1.0520000000000000 48.423668742582244
1.1040000000000001 43.721445018814535
1.1560000000000001 39.334296276283553
1.2080000000000000 35.251137130303420
1.2600000000000000 31.460882196188166
1.3120000000000001 27.952446089251964
1.3639999999999999 24.714743424808852
1.4159999999999999 21.736688818172937
1.4680000000000000 19.007196884658306
1.5200000000000000 16.515182239579076
1.5720000000000001 14.249559498249329
1.6240000000000001 12.199243275983154
1.6760000000000002 10.353148188094648
1.7280000000000000 8.7001888498979163
1.7800000000000000 7.2292798767070447
1.8320000000000001 5.9293358838361092
1.8839999999999999 4.7892714865992376
1.9359999999999999 3.7980013003104953
1.9880000000000000 2.9444399402839894
2.0400000000000000 2.2175020218338095
2.0920000000000001 1.6061021602740548
2.1440000000000001 1.0991549709188142
2.1960000000000002 0.68557506908218180
2.2480000000000002 0.35427707007825704
2.2999999999999998 9.4175589221130632E-002
2.3520000000000003 -0.10581475817510910
2.4039999999999999 -0.25677935679635860
2.4560000000000000 -0.36980359132853102
2.5080000000000000 -0.45596679597127698
2.5600000000000001 -0.52381995798172376
2.6120000000000001 -0.57548542297431915
2.6640000000000001 -0.61207888691334400
2.7160000000000002 -0.63471604576307783
2.7679999999999998 -0.64451259548780349
2.8200000000000003 -0.64258423205180126
2.8719999999999999 -0.63004665141935134
2.9240000000000004 -0.60801554955473625
2.9760000000000000 -0.57760662242223493
3.0280000000000000 -0.53993556598613002
3.0800000000000001 -0.49611807621070214
3.1320000000000001 -0.44726984906023193
3.1840000000000002 -0.39450658049900023
3.2359999999999998 -0.33894396649128961
3.2880000000000003 -0.28169770300137842
3.3399999999999999 -0.22388348599354982
3.3920000000000003 -0.16661701143208349
3.4440000000000000 -0.11101397528126161
3.4960000000000004 -5.8190073505363524E-002
3.5480000000000000 -9.2610020686722198E-003
3.6000000000000001 3.4657543064533058E-002
3.6519999999999997 7.2695102245010301E-002
3.7040000000000002 0.10496216108368017
3.7560000000000002 0.13181444150650151
3.8080000000000003 0.15360766543943441
3.8599999999999999 0.17069755480843840
3.9119999999999999 0.18343983153947352
3.9640000000000004 0.19219021755849935
4.0160000000000000 0.19730443479147558
4.0679999999999996 0.19913820516436204
4.1200000000000001 0.19804725060311840
4.1719999999999997 0.19438729303370450
4.2240000000000002 0.18851405438207983
4.2759999999999998 0.18078325657420447
4.3280000000000003 0.17155062153603778
4.3799999999999999 0.16117187119353987
4.4320000000000004 0.15000272747267010
4.4840000000000000 0.13839891229938861
4.5359999999999996 0.12671614759965491
4.5880000000000001 0.11531015529942858
4.6400000000000006 0.10450791010072910
4.6920000000000002 9.4401608127654982E-002
4.7439999999999998 8.4968801575229971E-002
4.7960000000000003 7.6186266463431560E-002
4.8480000000000008 6.8030778812237541E-002
4.9000000000000004 6.0479114641625663E-002
4.9520000000000000 5.3508049971573365E-002
5.0040000000000004 4.7094360822058187E-002
5.0560000000000000 4.1214823213057958E-002
5.1080000000000005 3.5846213164550077E-002
5.1600000000000001 3.0965306696512353E-002
5.2119999999999997 2.6548879828922314E-002
5.2640000000000002 2.2573708581757501E-002
5.3159999999999998 1.9016568974995669E-002
5.3680000000000003 1.5854237028614312E-002
5.4199999999999999 1.3063488762591162E-002
5.4719999999999995 1.0621100196903764E-002
5.5240000000000000 8.5038473515297100E-003
5.5760000000000005 6.6885062464466568E-003
5.6280000000000001 5.1518529016322447E-003
5.6799999999999997 3.8706633370640541E-003
5.7320000000000002 2.8217135727196876E-003
5.7840000000000007 1.9817796285767830E-003
5.8360000000000003 1.3276375246129659E-003
5.8879999999999999 8.3606328080583568E-004
5.9400000000000004 4.8383291713300426E-004
5.9920000000000009 2.4772245357209625E-004
6.0440000000000005 1.0450791010072858E-004
6.0960000000000001 3.0965306696512431E-005
6.1480000000000006 3.8706633370639547E-006
6.2000000000000002 0.0000000000000000
O O
20
0.59999999999999998 29923.073152218909
0.70000000000000007 4662.8666204588562
0.80000000000000004 849.06541460837946
0.90000000000000002 174.94775568214448
1.0000000000000000 39.499570511324919
1.1000000000000001 9.4630438308109763
1.2000000000000002 2.3294935751104737
1.3000000000000003 0.57058726754144162
1.4000000000000001 0.13466360499250576
1.5000000000000002 2.9654028763683022E-002
1.6000000000000001 5.9001110666872716E-003
1.7000000000000002 1.0271110256853976E-003
1.8000000000000003 1.5149315970664778E-004
1.9000000000000001 1.8332630772941197E-005
2.0000000000000000 1.7625863466525047E-006
2.1000000000000001 1.3037897449239816E-007
2.2000000000000002 7.1851191723432173E-009
2.3000000000000003 2.8567178835137876E-010
2.4000000000000004 7.9349720447872060E-012
2.5000000000000004 1.4910967552225071E-013
U U
50
0.10000000000000001 74348.981230147430
0.20000000000000001 40311.628875481227
0.30000000000000004 22512.215747793147
0.40000000000000002 12931.185562052075
0.50000000000000000 7629.3983056130000
0.59999999999999998 4617.1471175675460
0.70000000000000007 2862.1227331610016
0.80000000000000004 1814.8199558215895
0.90000000000000002 1175.4637167411634
1.0000000000000000 776.63138285251296
1.1000000000000001 522.69735907852555
1.2000000000000002 357.86149706462436
1.3000000000000003 248.89064787141209
1.4000000000000001 175.60252392080037
1.5000000000000002 125.51081146835013
1.6000000000000001 90.752660563379663
1.7000000000000002 66.292603562046978
1.8000000000000003 48.853749739571974
1.9000000000000001 36.270829284225563
2.0000000000000000 27.092149160250134
2.1000000000000001 20.330846347361575
2.2000000000000002 15.307107145388191
2.3000000000000003 11.546652254529212
2.4000000000000004 8.7145303726582952
2.5000000000000004 6.5713781993663156
2.6000000000000001 4.9441671799982290
2.7000000000000002 3.7064118746112378
2.8000000000000003 2.7646343058611356
2.9000000000000004 2.0490135318783476
3.0000000000000004 1.5068662861359490
3.1000000000000001 1.0980623443850352
3.2000000000000002 0.79177413418881881
3.3000000000000003 0.56415350027012756
3.4000000000000004 0.39665649152896415
3.5000000000000004 0.27482281511443302
3.6000000000000001 0.18737497023545538
3.7000000000000002 0.12554244470464804
3.8000000000000003 8.2544745767756542E-002
3.9000000000000004 5.3187278866042048E-002
4.0000000000000000 3.3538623216095062E-002
4.0999999999999996 2.0668142493140005E-002
4.2000000000000002 1.2430141080200409E-002
4.2999999999999998 7.2856566327403139E-003
4.3999999999999995 4.1560332011683883E-003
4.5000000000000000 2.3041281035584126E-003
4.5999999999999996 1.2397986929553748E-003
4.7000000000000002 6.4656516755885957E-004
4.7999999999999998 3.2635453161844339E-004
4.9000000000000004 1.5921458192287997E-004
5.0000000000000000 7.4970692168027886E-005

21
examples/QM/README Normal file
View File

@ -0,0 +1,21 @@
Each of the directories shows how to use LAMMPS in tandem with a
specific quantum code
LATTE = semi-empirical tight-binding code from LANL
https://www.osti.gov/biblio/1526907-los-alamos-transferable-tight-binding-energetics-latte-version
https://github.com/lanl/LATTE
To be added later (as of Aug 2022):
Quantum Espresso (QE) = DFT code for materials modeling
https://www.quantum-espresso.org/
DFT-FE = real-space DFT code from U Michigan
https://github.com/dftfeDevelopers/dftfe
INQ = DFT code from LLNL
https://github.com/LLNL/inq
NWChem = computational chemistry code from PNNL
focus here is on DFT portion of NWChem
https://www.nwchem-sw.org

View File

@ -189,6 +189,9 @@ corresponding doc page in the manual for more info. See the
https://docs.lammps.org/Build_package.html page for more info about https://docs.lammps.org/Build_package.html page for more info about
installing and building packages. installing and building packages.
The QM directory has examples of how to use LAMMPS in tandem with
several quantum codes.
The TIP4P directory has an example for testing forces computed on a The TIP4P directory has an example for testing forces computed on a
GPU. GPU.

View File

@ -2,15 +2,17 @@ These are examples that work the MDI package in LAMMPS which uses the
MolSSI MDI library for coupling codes together and communicating MolSSI MDI library for coupling codes together and communicating
between them with MDI messages. between them with MDI messages.
Within the MDI context, one code is the driver and another code is There are more examples of using LAMMPS with quantum codes via MDI in
the engine. The 2 codes can be written in any language; C++ (LAMMPS) the examples/QM directory.
and Python are illustrated here. The 2 codes can each be stand-alone
codes, in which case they can be run on different numbers of processors. Within the MDI context, one code is the driver and another code is the
The 2 engine. The 2 codes can be written in any language; C++ (LAMMPS) and
codes can communicate either via TCP (sockets) or via MPI. For the Python are illustrated here. The 2 codes can each be stand-alone
TCP case, the driver and engine need to be launched separately, codes, in which case they can be run on different numbers of
e.g. in 2 windows on your desktop machine. For the MPI case, a single processors. The 2 codes can communicate either via TCP (sockets) or
mpirun command launches both codes. via MPI. For the TCP case, the driver and engine need to be launched
separately, e.g. in 2 windows on your desktop machine. For the MPI
case, a single mpirun command launches both codes.
Alternatively the engine code can be a plugin library which the driver Alternatively the engine code can be a plugin library which the driver
code loads, in which case the driver and engine run on the same code loads, in which case the driver and engine run on the same
@ -19,17 +21,39 @@ processors.
LAMMPS supports operating in all these MDI modes. It can be an engine LAMMPS supports operating in all these MDI modes. It can be an engine
operating either as a stand-alone code or as a plugin. It can also be operating either as a stand-alone code or as a plugin. It can also be
a driver and couple to an engine that is either a stand-alone code or a driver and couple to an engine that is either a stand-alone code or
a plugin. Examples for all these use cases are in this directory. a plugin.
The Run.sh file shows how run in all the modes. Type "sh Run.sh"
to try them all out.
To use LAMMPS as a plugin engine, you must build it as a shared Examples for all these use cases, using LAMMPS as a driver and as an
library. Something like this with make, which also builds the normal engine are in this directory. The Run.sh file shows how run in all
LAMMPS executable lmp_mpi: the modes. Type "sh Run.sh" to try them all out.
cd src Examples for using LAMMPS as a driver with the tight-binding code
make yes-mdi LATTE are in the examples/QM/LATTE sub-directory. See its README file
make mode=shlib mpi for more info.
-------------------------------------------------
Here is how to build LAMMPS with MDI support. Both as an executable
and a shared library. The former is needed to use LAMMPS as an MDI
driver or as an MDI engine in stand-alone mode. The latter is needed
to use LAMMPS as an MDI engine in plugin mode.
Build via regular make:
% cd lammps/src
% make lib-mdi args="-m mpi" # download, install MDI in lib/mdi w/ MPI support
% make yes-mdi # include MDI package in LAMMPS build
% make mode=shlib mpi # creates lmp_mpi and liblammps.so
Build via CMake:
cd lammps
mkdir build; cd build
cmake -D PKG_MDI=yes -D BUILD_SHARED_LIBS=yes ../cmake
make # creates lmp and liblammps.so
Both of these build procedures build LAMMPS both as an executable
(lmp_mpi) and as a shared library (liblammps.so).
------------------------------------------------- -------------------------------------------------
@ -39,9 +63,9 @@ Python/mpi4py are using same the same version of MPI.
You will also need MDI installed in your Python. You cannot use the You will also need MDI installed in your Python. You cannot use the
LAMMPS build of the MDI library for this, b/c LAMMPS builds MDI as a LAMMPS build of the MDI library for this, b/c LAMMPS builds MDI as a
static library, not shared, which Python requires. static library, while Python requires a shared library.
You can install MDI in your Python via conda: Instead you can install MDI in your Python via conda:
% conda install -c conda-forge pymdi=1.4.1 % conda install -c conda-forge pymdi=1.4.1

View File

@ -316,6 +316,9 @@ class UCL_Device {
std::vector<CUstream> _cq; std::vector<CUstream> _cq;
CUdevice _cu_device; CUdevice _cu_device;
CUcontext _context; CUcontext _context;
#if GERYON_NVD_PRIMARY_CONTEXT
CUcontext _old_context;
#endif
}; };
// Grabs the properties for all devices // Grabs the properties for all devices
@ -391,8 +394,14 @@ int UCL_Device::set_platform(const int pid) {
int UCL_Device::set(int num) { int UCL_Device::set(int num) {
clear(); clear();
_device=_properties[num].device_id; _device=_properties[num].device_id;
#if GERYON_NVD_PRIMARY_CONTEXT
CU_SAFE_CALL_NS(cuCtxGetCurrent(&_old_context));
CU_SAFE_CALL_NS(cuDeviceGet(&_cu_device,_device));
CUresult err=cuDevicePrimaryCtxRetain(&_context,_cu_device);
#else
CU_SAFE_CALL_NS(cuDeviceGet(&_cu_device,_device)); CU_SAFE_CALL_NS(cuDeviceGet(&_cu_device,_device));
CUresult err=cuCtxCreate(&_context,0,_cu_device); CUresult err=cuCtxCreate(&_context,0,_cu_device);
#endif
if (err!=CUDA_SUCCESS) { if (err!=CUDA_SUCCESS) {
#ifndef UCL_NO_EXIT #ifndef UCL_NO_EXIT
std::cerr << "UCL Error: Could not access accelerator number " << num std::cerr << "UCL Error: Could not access accelerator number " << num
@ -401,13 +410,23 @@ int UCL_Device::set(int num) {
#endif #endif
return UCL_ERROR; return UCL_ERROR;
} }
#if GERYON_NVD_PRIMARY_CONTEXT
if (_context != _old_context) {
CU_SAFE_CALL_NS(cuCtxSetCurrent(_context));
}
#endif
return UCL_SUCCESS; return UCL_SUCCESS;
} }
void UCL_Device::clear() { void UCL_Device::clear() {
if (_device>-1) { if (_device>-1) {
for (int i=1; i<num_queues(); i++) pop_command_queue(); for (int i=1; i<num_queues(); i++) pop_command_queue();
cuCtxDestroy(_context); #if GERYON_NVD_PRIMARY_CONTEXT
CU_SAFE_CALL_NS(cuCtxSetCurrent(_old_context));
CU_SAFE_CALL_NS(cuDevicePrimaryCtxRelease(_cu_device));
#else
cuCtxDestroy(_context));
#endif
} }
_device=-1; _device=-1;
} }

View File

@ -7,6 +7,13 @@
#define CUDA_INT_TYPE size_t #define CUDA_INT_TYPE size_t
// Use the primary context for GPU access to enable compatibility with tools
// like OpenMPI accessing the GPU through the runtime interface.
// Set to 0 to revert to old behavior
#ifndef GERYON_NVD_PRIMARY_CONTEXT
#define GERYON_NVD_PRIMARY_CONTEXT 1
#endif
#ifdef MPI_GERYON #ifdef MPI_GERYON
#include "mpi.h" #include "mpi.h"
#define NVD_GERYON_EXIT do { \ #define NVD_GERYON_EXIT do { \

View File

@ -27,19 +27,17 @@ specify -m and optionally -e, order does not matter
Examples: Examples:
make lib-poems args="-m serial" # build POEMS lib with same settings as in the serial Makefile in src make lib-mdi args="-m mpi" # build MDI lib with same settings as in the mpi Makefile in src
make lib-colvars args="-m mpi" # build COLVARS lib with same settings as in the mpi Makefile in src
make lib-meam args="-m ifort" # build MEAM lib with custom Makefile.ifort (using Intel Fortran)
""" """
# settings # settings
version = "1.4.1" version = "1.4.10"
url = "https://github.com/MolSSI-MDI/MDI_Library/archive/v%s.tar.gz" % version url = "https://github.com/MolSSI-MDI/MDI_Library/archive/v%s.tar.gz" % version
# known checksums for different MDI versions. used to validate the download. # known checksums for different MDI versions. used to validate the download.
checksums = { \ checksums = { \
'1.4.1' : 'f9505fccd4c79301a619f6452dad4ad9', \ '1.4.10' : '1c203b7fd462d9934834f643f09f3c06', \
} }
# print error message or help # print error message or help

View File

@ -300,7 +300,7 @@ class ElemwiseModels(torch.nn.Module):
self.subnets = subnets self.subnets = subnets
self.n_types = n_types self.n_types = n_types
def forward(self, descriptors, elems): def forward(self, descriptors, elems, dtype=torch.float64):
""" """
Feeds descriptors to network model after adding zeros into Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types descriptor columns relating to different atom types
@ -319,8 +319,12 @@ class ElemwiseModels(torch.nn.Module):
Per atom attribute computed by the network model Per atom attribute computed by the network model
""" """
per_atom_attributes = torch.zeros(elems.size[0]) self.dtype=dtype
self.to(self.dtype)
per_atom_attributes = torch.zeros(elems.size(dim=0), dtype=self.dtype)
given_elems, elem_indices = torch.unique(elems, return_inverse=True) given_elems, elem_indices = torch.unique(elems, return_inverse=True)
for i, elem in enumerate(given_elems): for i, elem in enumerate(given_elems):
per_atom_attribute[elem_indices == i] = self.subnets[elem](descriptors[elem_indices == i]) self.subnets[elem].to(self.dtype)
per_atom_attributes[elem_indices == i] = self.subnets[elem](descriptors[elem_indices == i]).flatten()
return per_atom_attributes return per_atom_attributes

View File

@ -15,6 +15,10 @@
#include "atom.h" #include "atom.h"
#include "citeme.h" #include "citeme.h"
#include "error.h"
#include "force.h"
#include "pair.h"
#include "pair_hybrid.h"
#include <cmath> #include <cmath>
@ -87,6 +91,42 @@ AtomVecDielectric::AtomVecDielectric(LAMMPS *_lmp) : AtomVec(_lmp)
bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0; bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0;
} }
/* ---------------------------------------------------------------------- */
void AtomVecDielectric::init()
{
AtomVec::init();
// since atom style dielectric modifies the charge q, it will produce incorrect results
// with pair styles using coulomb without dielectric support.
std::string pair_style(force->pair_style);
if ((pair_style != "none") && (pair_style != "zero") && !utils::strmatch(force->pair_style,"/dielectric")) {
bool mismatch = false;
if (utils::strmatch(force->pair_style,"^reaxff")) mismatch = true;
if (utils::strmatch(force->pair_style,"^comb")) mismatch = true;
if (utils::strmatch(force->pair_style,"coul")) mismatch = true;
if (utils::strmatch(force->pair_style,"tip4p")) mismatch = true;
if (utils::strmatch(force->pair_style,"dipole")) mismatch = true;
if (utils::strmatch(force->pair_style,"^hybrid")) {
auto hybrid = dynamic_cast<PairHybrid *>(force->pair);
if (hybrid) {
for (int i = 0; i < hybrid->nstyles; i++) {
if (utils::strmatch(hybrid->keywords[i],"^reaxff")) mismatch = true;
if (utils::strmatch(hybrid->keywords[i],"^comb")) mismatch = true;
if (utils::strmatch(hybrid->keywords[i],"coul")) mismatch = true;
if (utils::strmatch(hybrid->keywords[i],"tip4p")) mismatch = true;
if (utils::strmatch(hybrid->keywords[i],"dipole")) mismatch = true;
}
}
}
if (mismatch)
error->all(FLERR, "Pair style {} is not compatible with atom style {}",
pair_style, atom->get_style());
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
set local copies of all grow ptrs used by this class, except defaults set local copies of all grow ptrs used by this class, except defaults
needed in replicate when 2 atom classes exist and it calls pack_restart() needed in replicate when 2 atom classes exist and it calls pack_restart()

View File

@ -31,6 +31,7 @@ class AtomVecDielectric : public AtomVec {
public: public:
AtomVecDielectric(class LAMMPS *); AtomVecDielectric(class LAMMPS *);
void init() override;
void grow_pointers() override; void grow_pointers() override;
void create_atom_post(int) override; void create_atom_post(int) override;
void data_atom_post(int) override; void data_atom_post(int) override;

View File

@ -38,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
PairCoulCutDielectric::PairCoulCutDielectric(LAMMPS *_lmp) : PairCoulCut(_lmp), efield(nullptr) PairCoulCutDielectric::PairCoulCutDielectric(LAMMPS *_lmp) : PairCoulCut(_lmp), efield(nullptr)
{ {
nmax = 0; nmax = 0;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -41,6 +41,7 @@ PairCoulLongDielectric::PairCoulLongDielectric(LAMMPS *_lmp) :
{ {
nmax = 0; nmax = 0;
single_enable = 0; single_enable = 0;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -40,6 +40,7 @@ PairLJCutCoulCutDielectric::PairLJCutCoulCutDielectric(LAMMPS *_lmp) : PairLJCut
efield = nullptr; efield = nullptr;
epot = nullptr; epot = nullptr;
nmax = 0; nmax = 0;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
@ -93,15 +94,16 @@ void PairLJCutCoulCutDielectric::compute(int eflag, int vflag)
for (ii = 0; ii < inum; ii++) { for (ii = 0; ii < inum; ii++) {
i = ilist[ii]; i = ilist[ii];
qtmp = q[i]; qtmp = q[i];
etmp = eps[i];
xtmp = x[i][0]; xtmp = x[i][0];
ytmp = x[i][1]; ytmp = x[i][1];
ztmp = x[i][2]; ztmp = x[i][2];
etmp = eps[i];
itype = type[i]; itype = type[i];
jlist = firstneigh[i]; jlist = firstneigh[i];
jnum = numneigh[i]; jnum = numneigh[i];
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
double curvature_threshold = sqrt(area[i]); double curvature_threshold = sqrt(area[i]);
if (curvature[i] < curvature_threshold) { if (curvature[i] < curvature_threshold) {
double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i];

View File

@ -40,6 +40,7 @@ PairLJCutCoulDebyeDielectric::PairLJCutCoulDebyeDielectric(LAMMPS *_lmp) : PairL
efield = nullptr; efield = nullptr;
epot = nullptr; epot = nullptr;
nmax = 0; nmax = 0;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -45,6 +45,7 @@ PairLJCutCoulLongDielectric::PairLJCutCoulLongDielectric(LAMMPS *_lmp) : PairLJC
efield = nullptr; efield = nullptr;
epot = nullptr; epot = nullptr;
nmax = 0; nmax = 0;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -47,6 +47,7 @@ PairLJCutCoulMSMDielectric::PairLJCutCoulMSMDielectric(LAMMPS *_lmp) : PairLJCut
nmax = 0; nmax = 0;
ftmp = nullptr; ftmp = nullptr;
efield = nullptr; efield = nullptr;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -45,6 +45,7 @@ PairLJLongCoulLongDielectric::PairLJLongCoulLongDielectric(LAMMPS *_lmp) : PairL
efield = nullptr; efield = nullptr;
epot = nullptr; epot = nullptr;
nmax = 0; nmax = 0;
no_virial_fdotr_compute = 1;
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------

View File

@ -33,8 +33,7 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
{ {
// check requirements for LAMMPS to work with MDI as an engine // check requirements for LAMMPS to work with MDI as an engine
if (atom->tag_enable == 0) if (atom->tag_enable == 0) error->all(FLERR, "Cannot use MDI engine without atom IDs");
error->all(FLERR, "Cannot use MDI engine without atom IDs");
if (atom->natoms && atom->tag_consecutive() == 0) if (atom->natoms && atom->tag_consecutive() == 0)
error->all(FLERR, "MDI engine requires consecutive atom IDs"); error->all(FLERR, "MDI engine requires consecutive atom IDs");
@ -55,41 +54,51 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
int iarg = 3; int iarg = 3;
while (iarg < narg) { while (iarg < narg) {
if (strcmp(arg[iarg],"virial") == 0) { if (strcmp(arg[iarg], "virial") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command"); if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
if (strcmp(arg[iarg+1],"yes") == 0) virialflag = 1; if (strcmp(arg[iarg + 1], "yes") == 0)
else if (strcmp(arg[iarg+1],"no") == 0) virialflag = 0; virialflag = 1;
else error->all(FLERR,"Illegal fix mdi/qm command"); else if (strcmp(arg[iarg + 1], "no") == 0)
virialflag = 0;
else
error->all(FLERR, "Illegal fix mdi/qm command");
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"add") == 0) { } else if (strcmp(arg[iarg], "add") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command"); if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
if (strcmp(arg[iarg+1],"yes") == 0) addflag = 1; if (strcmp(arg[iarg + 1], "yes") == 0)
else if (strcmp(arg[iarg+1],"no") == 0) addflag = 0; addflag = 1;
else error->all(FLERR,"Illegal fix mdi/qm command"); else if (strcmp(arg[iarg + 1], "no") == 0)
addflag = 0;
else
error->all(FLERR, "Illegal fix mdi/qm command");
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"every") == 0) { } else if (strcmp(arg[iarg], "every") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command"); if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
every = utils::inumeric(FLERR,arg[iarg+1],false,lmp); every = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
if (every <= 0) error->all(FLERR,"Illegal fix mdi/qm command"); if (every <= 0) error->all(FLERR, "Illegal fix mdi/qm command");
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"connect") == 0) { } else if (strcmp(arg[iarg], "connect") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command"); if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
if (strcmp(arg[iarg+1],"yes") == 0) connectflag = 1; if (strcmp(arg[iarg + 1], "yes") == 0)
else if (strcmp(arg[iarg+1],"no") == 0) connectflag = 0; connectflag = 1;
else error->all(FLERR,"Illegal fix mdi/qm command"); else if (strcmp(arg[iarg + 1], "no") == 0)
connectflag = 0;
else
error->all(FLERR, "Illegal fix mdi/qm command");
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"elements") == 0) { } else if (strcmp(arg[iarg], "elements") == 0) {
int ntypes = atom->ntypes; int ntypes = atom->ntypes;
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal fix mdi/qm command"); if (iarg + ntypes + 1 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
delete [] elements; delete[] elements;
elements = new int[ntypes+1]; elements = new int[ntypes + 1];
for (int i = 1; i <= ntypes; i++) { for (int i = 1; i <= ntypes; i++) {
elements[i] = utils::inumeric(FLERR,arg[iarg+i],false,lmp); elements[i] = utils::inumeric(FLERR, arg[iarg + i], false, lmp);
if (elements[i] < 1 || elements[i] > MAXELEMENT) if (elements[i] < 1 || elements[i] > MAXELEMENT)
error->all(FLERR,"Illegal fix mdi/qm command"); error->all(FLERR, "Illegal fix mdi/qm command");
} }
iarg += ntypes+1; iarg += ntypes + 1;
} else error->all(FLERR,"Illegal fix mdi/qm command"); } else
error->all(FLERR, "Illegal fix mdi/qm command");
} }
// fix output settings are based on optional keywords // fix output settings are based on optional keywords
@ -217,8 +226,7 @@ void FixMDIQM::init()
plugin = 1; plugin = 1;
int method; int method;
MDI_Get_method(&method, mdicomm); MDI_Get_method(&method, mdicomm);
if (method != MDI_PLUGIN) if (method != MDI_PLUGIN) error->all(FLERR, "MDI internal error for plugin engine");
error->all(FLERR, "MDI internal error for plugin engine");
} }
// connection should have been already made by "mdi connect" command // connection should have been already made by "mdi connect" command
@ -228,15 +236,16 @@ void FixMDIQM::init()
plugin = 0; plugin = 0;
if (lmp->mdicomm == nullptr) if (lmp->mdicomm == nullptr)
error->all(FLERR,"Fix mdi/qm is not connected to engine via mdi connect"); error->all(FLERR, "Fix mdi/qm is not connected to engine via mdi connect");
int nbytes = sizeof(MDI_Comm); int nbytes = sizeof(MDI_Comm);
char *ptrcomm = (char *) lmp->mdicomm; char *ptrcomm = (char *) lmp->mdicomm;
memcpy(&mdicomm,ptrcomm,nbytes); memcpy(&mdicomm, ptrcomm, nbytes);
} }
} }
// send natoms, atom types or elements, and simulation box to engine // send natoms, atom types or elements, and simulation box to engine
// confirm engine count of NATOMS is correct
// this will trigger setup of a new system // this will trigger setup of a new system
// subsequent calls in post_force() will be for same system until new init() // subsequent calls in post_force() will be for same system until new init()
@ -245,36 +254,41 @@ void FixMDIQM::init()
int natoms_exists; int natoms_exists;
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &natoms_exists); int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &natoms_exists);
if (ierr) error->all(FLERR, "MDI: >NATOMS command check"); if (ierr) error->all(FLERR, "MDI: >NATOMS command check");
if ( natoms_exists ) { MPI_Bcast(&natoms_exists, 1, MPI_INT, 0, world);
if (natoms_exists) {
ierr = MDI_Send_command(">NATOMS", mdicomm); ierr = MDI_Send_command(">NATOMS", mdicomm);
if (ierr) error->all(FLERR, "MDI: >NATOMS command"); if (ierr) error->all(FLERR, "MDI: >NATOMS command");
int n = static_cast<int> (atom->natoms); int n = static_cast<int>(atom->natoms);
ierr = MDI_Send(&n, 1, MDI_INT, mdicomm); ierr = MDI_Send(&n, 1, MDI_INT, mdicomm);
if (ierr) error->all(FLERR, "MDI: >NATOMS data"); if (ierr) error->all(FLERR, "MDI: >NATOMS data");
} else { // confirm that the engine's NATOMS is correct } else {
ierr = MDI_Send_command("<NATOMS", mdicomm); ierr = MDI_Send_command("<NATOMS", mdicomm);
if (ierr) error->all(FLERR, "MDI: <NATOMS command"); if (ierr) error->all(FLERR, "MDI: <NATOMS command");
int n; int n;
ierr = MDI_Recv(&n, 1, MDI_INT, mdicomm); ierr = MDI_Recv(&n, 1, MDI_INT, mdicomm);
if (ierr) error->all(FLERR, "MDI: <NATOMS data"); if (ierr) error->all(FLERR, "MDI: <NATOMS data");
if ( n != atom->natoms ) error->all(FLERR, "MDI: Engine has the wrong number of atoms, and does not support the >NATOMS command."); MPI_Bcast(&n, 1, MPI_INT, 0, world);
if (n != atom->natoms)
error->all(FLERR, "MDI: Engine has wrong atom count and does not support >NATOMS command");
} }
int elements_exists; int elements_exists;
int types_exists; int types_exists;
ierr = MDI_Check_command_exists("@DEFAULT", ">ELEMENTS", mdicomm, &elements_exists); ierr = MDI_Check_command_exists("@DEFAULT", ">ELEMENTS", mdicomm, &elements_exists);
if (ierr) error->all(FLERR, "MDI: >ELEMENTS command check"); if (ierr) error->all(FLERR, "MDI: >ELEMENTS command check");
MPI_Bcast(&elements_exists, 1, MPI_INT, 0, world);
ierr = MDI_Check_command_exists("@DEFAULT", ">TYPES", mdicomm, &types_exists); ierr = MDI_Check_command_exists("@DEFAULT", ">TYPES", mdicomm, &types_exists);
if (ierr) error->all(FLERR, "MDI: >TYPES command check"); if (ierr) error->all(FLERR, "MDI: >TYPES command check");
if ( elements && elements_exists ) { MPI_Bcast(&types_exists, 1, MPI_INT, 0, world);
if (elements && elements_exists)
send_elements(); send_elements();
} else if ( types_exists ) { else if (types_exists)
send_types(); send_types();
}
send_box(); send_box();
} }
@ -301,8 +315,7 @@ void FixMDIQM::post_force(int vflag)
// if simulation box dynamically changes, send current box to MDI engine // if simulation box dynamically changes, send current box to MDI engine
if (domain->box_change_size || domain->box_change_shape) if (domain->box_change_size || domain->box_change_shape) send_box();
send_box();
// gather all coords, ordered by atomID // gather all coords, ordered by atomID
@ -319,7 +332,7 @@ void FixMDIQM::post_force(int vflag)
buf3[3 * index + 2] = x[i][2] * lmp2mdi_length; buf3[3 * index + 2] = x[i][2] * lmp2mdi_length;
} }
int n = static_cast<int> (atom->natoms); int n = static_cast<int>(atom->natoms);
MPI_Reduce(buf3, buf3all, 3 * n, MPI_DOUBLE, MPI_SUM, 0, world); MPI_Reduce(buf3, buf3all, 3 * n, MPI_DOUBLE, MPI_SUM, 0, world);
// send current coords to MDI engine // send current coords to MDI engine
@ -358,7 +371,6 @@ void FixMDIQM::post_force(int vflag)
fqm[i][2] = buf3[3 * index + 2] * mdi2lmp_force; fqm[i][2] = buf3[3 * index + 2] * mdi2lmp_force;
} }
// optionally add forces to owned atoms // optionally add forces to owned atoms
// use atomID of local atoms to index into ordered buf3 // use atomID of local atoms to index into ordered buf3
@ -372,7 +384,8 @@ void FixMDIQM::post_force(int vflag)
} }
} }
// optionally request stress tensor from MDI engine, convert to virial // optionally request stress tensor from MDI engine, convert to 6-value virial
// MDI defines virial tensor as intensive (divided by volume), LAMMPS does not
// qm_virial = fix output for global QM virial // qm_virial = fix output for global QM virial
if (virialflag) { if (virialflag) {
@ -385,9 +398,9 @@ void FixMDIQM::post_force(int vflag)
qm_virial_symmetric[0] = qm_virial[0] * mdi2lmp_pressure; qm_virial_symmetric[0] = qm_virial[0] * mdi2lmp_pressure;
qm_virial_symmetric[1] = qm_virial[4] * mdi2lmp_pressure; qm_virial_symmetric[1] = qm_virial[4] * mdi2lmp_pressure;
qm_virial_symmetric[2] = qm_virial[8] * mdi2lmp_pressure; qm_virial_symmetric[2] = qm_virial[8] * mdi2lmp_pressure;
qm_virial_symmetric[3] = 0.5*(qm_virial[1]+qm_virial[3]) * mdi2lmp_pressure; qm_virial_symmetric[3] = 0.5 * (qm_virial[1] + qm_virial[3]) * mdi2lmp_pressure;
qm_virial_symmetric[4] = 0.5*(qm_virial[2]+qm_virial[6]) * mdi2lmp_pressure; qm_virial_symmetric[4] = 0.5 * (qm_virial[2] + qm_virial[6]) * mdi2lmp_pressure;
qm_virial_symmetric[5] = 0.5*(qm_virial[5]+qm_virial[7]) * mdi2lmp_pressure; qm_virial_symmetric[5] = 0.5 * (qm_virial[5] + qm_virial[7]) * mdi2lmp_pressure;
} }
// optionally set fix->virial // optionally set fix->virial
@ -402,8 +415,7 @@ void FixMDIQM::post_force(int vflag)
volume = domain->xprd * domain->yprd; volume = domain->xprd * domain->yprd;
else if (domain->dimension == 3) else if (domain->dimension == 3)
volume = domain->xprd * domain->yprd * domain->zprd; volume = domain->xprd * domain->yprd * domain->zprd;
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++) virial[i] = qm_virial_symmetric[i] * volume / nprocs;
virial[i] = qm_virial_symmetric[i]*volume/nprocs;
} }
} }
@ -447,10 +459,9 @@ void FixMDIQM::reallocate()
if (atom->natoms > maxbuf) { if (atom->natoms > maxbuf) {
bigint nsize = atom->natoms * 3; bigint nsize = atom->natoms * 3;
if (nsize > MAXSMALLINT) if (nsize > MAXSMALLINT) error->all(FLERR, "Natoms too large to use with fix mdi/qm");
error->all(FLERR, "Natoms too large to use with fix mdi/qm");
maxbuf = static_cast<int> (atom->natoms); maxbuf = static_cast<int>(atom->natoms);
memory->destroy(ibuf1); memory->destroy(ibuf1);
memory->destroy(buf3); memory->destroy(buf3);
memory->destroy(buf3all); memory->destroy(buf3all);
@ -467,7 +478,7 @@ void FixMDIQM::reallocate()
void FixMDIQM::send_types() void FixMDIQM::send_types()
{ {
int n = static_cast<int> (atom->natoms); int n = static_cast<int>(atom->natoms);
memset(ibuf1, 0, n * sizeof(int)); memset(ibuf1, 0, n * sizeof(int));
// use local atomID to index into ordered ibuf1 // use local atomID to index into ordered ibuf1
@ -496,7 +507,7 @@ void FixMDIQM::send_types()
void FixMDIQM::send_elements() void FixMDIQM::send_elements()
{ {
int n = static_cast<int> (atom->natoms); int n = static_cast<int>(atom->natoms);
memset(ibuf1, 0, n * sizeof(int)); memset(ibuf1, 0, n * sizeof(int));
// use local atomID to index into ordered ibuf1 // use local atomID to index into ordered ibuf1
@ -530,7 +541,9 @@ void FixMDIQM::send_box()
int celldispl_exists; int celldispl_exists;
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &celldispl_exists); int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &celldispl_exists);
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command check"); if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command check");
if ( celldispl_exists ) { MPI_Bcast(&celldispl_exists, 1, MPI_INT, 0, world);
if (celldispl_exists) {
ierr = MDI_Send_command(">CELL_DISPL", mdicomm); ierr = MDI_Send_command(">CELL_DISPL", mdicomm);
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command"); if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command");
cell[0] = domain->boxlo[0] * lmp2mdi_length; cell[0] = domain->boxlo[0] * lmp2mdi_length;
@ -608,18 +621,17 @@ void FixMDIQM::unit_conversions()
mdi2lmp_force = angstrom_to_bohr / ev_to_hartree; mdi2lmp_force = angstrom_to_bohr / ev_to_hartree;
} }
// pressure or stress units = force/area = energy/volume // stress units = force/area = energy/volume
mdi2lmp_pressure = 1.0; mdi2lmp_pressure = 1.0;
lmp2mdi_pressure = 1.0; lmp2mdi_pressure = 1.0;
if (lmpunits == REAL) { if (lmpunits == REAL) {
lmp2mdi_pressure = (kelvin_to_hartree / force->boltz) / lmp2mdi_pressure = (kelvin_to_hartree / force->boltz) /
(angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr) / force->nktv2p; (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr);
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure; mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
} else if (lmpunits == METAL) { } else if (lmpunits == METAL) {
lmp2mdi_pressure = lmp2mdi_pressure = ev_to_hartree / (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr);
ev_to_hartree / (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr) / force->nktv2p;
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure; mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
} }
} }

View File

@ -40,7 +40,7 @@ class FixMDIQM : public Fix {
private: private:
int nprocs; int nprocs;
int every,virialflag,addflag,connectflag; int every, virialflag, addflag, connectflag;
int plugin; int plugin;
int maxlocal; int maxlocal;
int sumflag; int sumflag;
@ -48,7 +48,7 @@ class FixMDIQM : public Fix {
double qm_energy; double qm_energy;
int lmpunits; int lmpunits;
double qm_virial[9],qm_virial_symmetric[6]; double qm_virial[9], qm_virial_symmetric[6];
double **fqm; double **fqm;
MDI_Comm mdicomm; MDI_Comm mdicomm;

View File

@ -23,12 +23,8 @@
#define LAMMPS_LIB_MPI 1 #define LAMMPS_LIB_MPI 1
#include "library.h" #include "library.h"
#include "mdi_engine.h"
#include <cstring> #include <cstring>
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
/** Initialize an instance of LAMMPS as an MDI plugin /** Initialize an instance of LAMMPS as an MDI plugin
@ -52,15 +48,16 @@ command-line argument, which must be provided by the MDI driver.
* \param class_obj pointer to an instance of an mdi/engine fix cast to ``void *``. * \param class_obj pointer to an instance of an mdi/engine fix cast to ``void *``.
* \return 0 on no error. */ * \return 0 on no error. */
int MDI_Plugin_init_lammps() int MDI_Plugin_init_lammps(void *plugin_state)
{ {
// initialize MDI // initialize MDI
int mdi_argc; int mdi_argc;
char **mdi_argv; char **mdi_argv;
if (MDI_Set_plugin_state(plugin_state)) MPI_Abort(MPI_COMM_WORLD, 1);
if (MDI_Plugin_get_argc(&mdi_argc)) MPI_Abort(MPI_COMM_WORLD, 1); if (MDI_Plugin_get_argc(&mdi_argc)) MPI_Abort(MPI_COMM_WORLD, 1);
if (MDI_Plugin_get_argv(&mdi_argv)) MPI_Abort(MPI_COMM_WORLD, 1); if (MDI_Plugin_get_argv(&mdi_argv)) MPI_Abort(MPI_COMM_WORLD, 1);
if (MDI_Init(&mdi_argc, &mdi_argv)) MPI_Abort(MPI_COMM_WORLD, 1);
// get the MPI intra-communicator for this code // get the MPI intra-communicator for this code
@ -90,14 +87,23 @@ int MDI_Plugin_init_lammps()
if (!found_filename) MPI_Abort(MPI_COMM_WORLD, 1); if (!found_filename) MPI_Abort(MPI_COMM_WORLD, 1);
// create and run a LAMMPS instance // create and run a LAMMPS instance
// lammps_open() expects a first arg (not used) which is executable name // need to add an initial pseudo arg to mdi_argc & mdi_argv
// same as if called from main.cpp // b/c lammps_open() expects first arg to be an executable name
// same as if it were called from main.cpp
int mdi_argc_extra = mdi_argc + 1;
char **mdi_argv_extra = new char *[mdi_argc_extra];
mdi_argv_extra[0] = (char *) "MDI_plugin_engine";
for (int i = 0; i < mdi_argc; i++) mdi_argv_extra[i + 1] = mdi_argv[i];
void *lmp = nullptr; void *lmp = nullptr;
if (lammps_config_has_mpi_support() > 0) if (lammps_config_has_mpi_support() > 0)
lmp = lammps_open(mdi_argc + 1, &mdi_argv[-1], mpi_world_comm, nullptr); lmp = lammps_open(mdi_argc_extra, mdi_argv_extra, mpi_world_comm, nullptr);
else else
lmp = lammps_open_no_mpi(mdi_argc + 1, &mdi_argv[-1], nullptr); lmp = lammps_open_no_mpi(mdi_argc_extra, mdi_argv_extra, nullptr);
delete[] mdi_argv_extra;
// process the specified input script // process the specified input script
// must contain "mdi engine" command // must contain "mdi engine" command
@ -110,25 +116,3 @@ int MDI_Plugin_init_lammps()
return 0; return 0;
} }
/* ---------------------------------------------------------------------- */
/** Execute an MDI command
*
\verbatim embed:rst
This function is called by the MolSSI Driver Interface Library (MDI)
when LAMMPS is run as a plugin, and should not otherwise be used.
The function executes a single command from an external MDI driver.
\endverbatim
* \param command string buffer corresponding to the command to be executed
* \param comm MDI communicator that can be used to communicated with the driver.
* \param class_obj pointer to an instance of an mdi/engine fix cast to ``void *``.
* \return 0 on no error, 1 on error. */
int lammps_execute_mdi_command(const char *command, MDI_Comm comm, void *class_obj)
{
auto mdi_engine = (MDIEngine *) class_obj;
return mdi_engine->execute_command(command, comm);
}

View File

@ -14,13 +14,12 @@
#ifndef LAMMPS_LIBRARY_MDI_H #ifndef LAMMPS_LIBRARY_MDI_H
#define LAMMPS_LIBRARY_MDI_H #define LAMMPS_LIBRARY_MDI_H
/* C style library calls to LAMMPS when a LAMMPS shared library is /* C style library call to LAMMPS when a LAMMPS shared library is
* used as a plugin through MolSSI Driver Interface (MDI). */ * used as a plugin through MolSSI Driver Interface (MDI) */
#include <mdi.h> #include <mdi.h>
extern "C" { extern "C" {
int MDI_Plugin_init_lammps(); int MDI_Plugin_init_lammps(void *plugin_state);
int lammps_execute_mdi_command(const char *, MDI_Comm, void *);
} }
#endif #endif

View File

@ -44,7 +44,7 @@ void MDICommand::command(int narg, char **arg)
} else if (strcmp(arg[0], "connect") == 0) { } else if (strcmp(arg[0], "connect") == 0) {
if (lmp->mdicomm != nullptr) if (lmp->mdicomm != nullptr)
error->all(FLERR,"MDI cannot connect to already connected engine"); error->all(FLERR, "MDI cannot connect to already connected engine");
MDI_Comm mdicomm; MDI_Comm mdicomm;
MDI_Get_communicator(&mdicomm, 0); MDI_Get_communicator(&mdicomm, 0);
@ -53,23 +53,23 @@ void MDICommand::command(int narg, char **arg)
MDI_Accept_communicator(&mdicomm); MDI_Accept_communicator(&mdicomm);
if (mdicomm == MDI_COMM_NULL) if (mdicomm == MDI_COMM_NULL)
error->all(FLERR, "MDI unable to connect to stand-alone engine"); error->all(FLERR, "MDI unable to connect to stand-alone engine");
} else error->all(FLERR, "Cannot use mdi connect with plugin engine"); } else
error->all(FLERR, "Cannot use mdi connect with plugin engine");
int nbytes = sizeof(MDI_Comm); int nbytes = sizeof(MDI_Comm);
char *ptrcomm = (char *) memory->smalloc(nbytes,"mdi:mdicomm"); char *ptrcomm = (char *) memory->smalloc(nbytes, "mdi:mdicomm");
memcpy(ptrcomm,&mdicomm,nbytes); memcpy(ptrcomm, &mdicomm, nbytes);
lmp->mdicomm = (void *) ptrcomm; lmp->mdicomm = (void *) ptrcomm;
} else if (strcmp(arg[0], "exit") == 0) { } else if (strcmp(arg[0], "exit") == 0) {
if (lmp->mdicomm == nullptr) if (lmp->mdicomm == nullptr) error->all(FLERR, "MDI cannot send exit to unconnected engine");
error->all(FLERR,"MDI cannot send exit to unconnected engine");
MDI_Comm mdicomm; MDI_Comm mdicomm;
int nbytes = sizeof(MDI_Comm); int nbytes = sizeof(MDI_Comm);
char *ptrcomm = (char *) lmp->mdicomm; char *ptrcomm = (char *) lmp->mdicomm;
memcpy(&mdicomm,ptrcomm,nbytes); memcpy(&mdicomm, ptrcomm, nbytes);
int ierr = MDI_Send_command("EXIT", mdicomm); int ierr = MDI_Send_command("EXIT", mdicomm);
if (ierr) error->all(FLERR, "MDI: EXIT command"); if (ierr) error->all(FLERR, "MDI: EXIT command");
@ -77,5 +77,6 @@ void MDICommand::command(int narg, char **arg)
memory->sfree(ptrcomm); memory->sfree(ptrcomm);
lmp->mdicomm = nullptr; lmp->mdicomm = nullptr;
} else error->all(FLERR, "Illegal mdi command"); } else
error->all(FLERR, "Illegal mdi command");
} }

View File

@ -65,7 +65,7 @@ enum { TYPE, CHARGE, MASS, COORD, VELOCITY, FORCE, ADDFORCE };
when EXIT command is received, mdi engine command exits when EXIT command is received, mdi engine command exits
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp) MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
{ {
// check requirements for LAMMPS to work with MDI as an engine // check requirements for LAMMPS to work with MDI as an engine
@ -80,18 +80,19 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
int iarg = 0; int iarg = 0;
while (iarg < narg) { while (iarg < narg) {
if (strcmp(arg[iarg],"elements") == 0) { if (strcmp(arg[iarg], "elements") == 0) {
int ntypes = atom->ntypes; int ntypes = atom->ntypes;
delete [] elements; delete[] elements;
elements = new int[ntypes+1]; elements = new int[ntypes + 1];
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal mdi engine command"); if (iarg + ntypes + 1 > narg) error->all(FLERR, "Illegal mdi engine command");
for (int i = 1; i <= ntypes; i++) { for (int i = 1; i <= ntypes; i++) {
elements[i] = utils::inumeric(FLERR,arg[iarg+i],false,lmp); elements[i] = utils::inumeric(FLERR, arg[iarg + i], false, lmp);
if (elements[i] < 0 || elements[i] > MAXELEMENT) if (elements[i] < 0 || elements[i] > MAXELEMENT)
error->all(FLERR,"Illegal mdi engine command"); error->all(FLERR, "Illegal mdi engine command");
} }
iarg += ntypes+1; iarg += ntypes + 1;
} else error->all(FLERR,"Illegal mdi engine command"); } else
error->all(FLERR, "Illegal mdi engine command");
} }
// error check an MDI element does not map to multiple atom types // error check an MDI element does not map to multiple atom types
@ -99,10 +100,10 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
if (elements) { if (elements) {
int ntypes = atom->ntypes; int ntypes = atom->ntypes;
for (int i = 1; i < ntypes; i++) for (int i = 1; i < ntypes; i++)
for (int j = i+1; j <= ntypes; j++) { for (int j = i + 1; j <= ntypes; j++) {
if (elements[i] == 0 || elements[j] == 0) continue; if (elements[i] == 0 || elements[j] == 0) continue;
if (elements[i] == elements[j]) if (elements[i] == elements[j])
error->all(FLERR,"MDI engine element cannot map to multiple types"); error->all(FLERR, "MDI engine element cannot map to multiple types");
} }
} }
@ -167,7 +168,7 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
ibuf1 = ibuf1all = nullptr; ibuf1 = ibuf1all = nullptr;
maxatom = 0; maxatom = 0;
sys_natoms = static_cast<int> (atom->natoms); sys_natoms = static_cast<int>(atom->natoms);
reallocate(); reallocate();
nsteps = 0; nsteps = 0;
@ -184,10 +185,10 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
mdi_commands(); mdi_commands();
// register the execute_command function with MDI // register a callback function with MDI used when engine runs in plugin mode
// only used when engine runs in plugin mode // execute_command_plugin_wrapper() must be a static method
MDI_Set_execute_command_func(lammps_execute_mdi_command, this); MDI_Set_execute_command_func(execute_command_plugin_wrapper, this);
// one-time operation to establish a connection with the driver // one-time operation to establish a connection with the driver
@ -291,11 +292,22 @@ void MDIEngine::engine_node(const char *node)
node_match = true; node_match = true;
} }
/* ----------------------------------------------------------------------
wrapper function on execute_command()
invoked as callback by MDI when engine operates in plugin mode
this is a static method in mdi_engine.h
---------------------------------------------------------------------- */
int MDIEngine::execute_command_plugin_wrapper(const char *command, MDI_Comm comm, void *class_obj)
{
auto mdi_engine = (MDIEngine *) class_obj;
return mdi_engine->execute_command(command, comm);
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
process a single driver command process a single driver command
called by engine_node() in loop called by engine_node() in loop when engine runs as stand-alone code
also called by MDI itself via lib::lammps_execute_mdi_command() called by execute_command_plugin_wrapper() when engine runs as plugin lib
when LAMMPS is running as a plugin
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm) int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
@ -334,8 +346,7 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
receive_coords(); receive_coords();
} else if (strcmp(command, ">ELEMENTS") == 0) { } else if (strcmp(command, ">ELEMENTS") == 0) {
if (!elements) if (!elements) error->all(FLERR, "MDI engine command did not define element list");
error->all(FLERR,"MDI engine command did not define element list");
receive_elements(); receive_elements();
} else if (strcmp(command, ">FORCES") == 0) { } else if (strcmp(command, ">FORCES") == 0) {
@ -998,9 +1009,9 @@ void MDIEngine::create_system()
// create list of 1 to sys_natoms IDs // create list of 1 to sys_natoms IDs
// optionally set charges if specified by ">CHARGES" // optionally set charges if specified by ">CHARGES"
tagint* sys_ids; tagint *sys_ids;
memory->create(sys_ids, sys_natoms, "mdi:sys_ids"); memory->create(sys_ids, sys_natoms, "mdi:sys_ids");
for (int i = 0; i < sys_natoms; i++) sys_ids[i] = i+1; for (int i = 0; i < sys_natoms; i++) sys_ids[i] = i + 1;
if (flag_velocities) if (flag_velocities)
lammps_create_atoms(lmp, sys_natoms, sys_ids, sys_types, sys_coords, sys_velocities, nullptr, lammps_create_atoms(lmp, sys_natoms, sys_ids, sys_types, sys_coords, sys_velocities, nullptr,
@ -1148,9 +1159,16 @@ void MDIEngine::receive_cell()
for (int icell = 0; icell < 9; icell++) sys_cell[icell] *= mdi2lmp_length; for (int icell = 0; icell < 9; icell++) sys_cell[icell] *= mdi2lmp_length;
// error check that edge vectors match LAMMPS triclinic requirement // error check that edge vectors match LAMMPS triclinic requirement
// 3,7,6 = xy, yz, xz tilt factors
if (sys_cell[1] != 0.0 || sys_cell[2] != 0.0 || sys_cell[5] != 0.0) if (sys_cell[1] != 0.0 || sys_cell[2] != 0.0 || sys_cell[5] != 0.0)
error->all(FLERR, "MDI: Received cell edges are not LAMMPS compatible"); error->all(FLERR, "MDI: Received cell edges are not an upper triangular matrix");
if (sys_cell[3] != 0.0 || sys_cell[7] != 0.0 || sys_cell[6] != 0.0)
if (!domain->triclinic)
error->all(FLERR,
"MDI: Received cell edges are for a triclinic box, "
"but LAMMPS is using an orthogonal box");
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -1227,8 +1245,7 @@ void MDIEngine::receive_elements()
break; break;
} }
} }
if (itype > ntypes) if (itype > ntypes) error->all(FLERR, "MDI element not found in element list");
error->all(FLERR,"MDI element not found in element list");
} }
} }
@ -1493,6 +1510,9 @@ void MDIEngine::send_pe()
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
<STRESS command <STRESS command
send 9-component stress tensor (no kinetic energy term) send 9-component stress tensor (no kinetic energy term)
should be intensive quantity (divided by volume in pressure compute)
MDI stress tensor units are energy/volume,
so conversion factor includes nktv2p to convert pressure back to virial
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void MDIEngine::send_stress() void MDIEngine::send_stress()
@ -1837,6 +1857,8 @@ void MDIEngine::unit_conversions()
} }
// pressure or stress units = force/area = energy/volume // pressure or stress units = force/area = energy/volume
// MDI energy/volume = Hartree/Bohr^3,
// so need to remove LAMMPS nktv2p from pressure
mdi2lmp_pressure = 1.0; mdi2lmp_pressure = 1.0;
lmp2mdi_pressure = 1.0; lmp2mdi_pressure = 1.0;

View File

@ -22,8 +22,6 @@ namespace LAMMPS_NS {
class MDIEngine : protected Pointers { class MDIEngine : protected Pointers {
public: public:
MDIEngine(class LAMMPS *, int, char **); MDIEngine(class LAMMPS *, int, char **);
int execute_command(const char *command, MDI_Comm mdicomm);
void engine_node(const char *node); void engine_node(const char *node);
private: private:
@ -87,9 +85,13 @@ class MDIEngine : protected Pointers {
class Irregular *irregular; // irregular comm if new COORDS class Irregular *irregular; // irregular comm if new COORDS
// are highly displaced // are highly displaced
// static method for MDI to callback to, when LAMMPS used as plugin engine
static int execute_command_plugin_wrapper(const char *, MDI_Comm, void *);
// class methods // class methods
void mdi_engine(int, char **); int execute_command(const char *, MDI_Comm);
void mdi_commands(); void mdi_commands();
void mdi_md(); void mdi_md();

View File

@ -72,18 +72,23 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
// error checks // error checks
if (!mdi_arg || !infile_arg || !lammps_command) if (!mdi_arg || !lammps_command)
error->all(FLERR, "MDI plugin must specify mdi, infile, command keywords"); error->all(FLERR, "MDI plugin must specify mdi and command keywords");
// build full plugin_args string for args to plugin library // build full plugin_args string for args to plugin library
int n = strlen(mdi_arg) + strlen(infile_arg) + strlen(extra_arg) + 16; int n = strlen(mdi_arg) + 16;
if (infile_arg) n += strlen(infile_arg);
if (extra_arg) n += strlen(extra_arg);
auto plugin_args = new char[n]; auto plugin_args = new char[n];
plugin_args[0] = 0; plugin_args[0] = 0;
strcat(plugin_args, "-mdi \""); strcat(plugin_args, "-mdi \"");
strcat(plugin_args, mdi_arg); strcat(plugin_args, mdi_arg);
strcat(plugin_args, "\" -in "); strcat(plugin_args, "\"");
if (infile_arg) {
strcat(plugin_args, " -in ");
strcat(plugin_args, infile_arg); strcat(plugin_args, infile_arg);
}
if (extra_arg) { if (extra_arg) {
strcat(plugin_args, " "); strcat(plugin_args, " ");
strcat(plugin_args, extra_arg); strcat(plugin_args, extra_arg);
@ -91,7 +96,8 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
// launch the MDI plugin library // launch the MDI plugin library
// path for lib was specified in -mdi command-line arg when LAMMPS started // path for lib was specified in -mdi command-line arg when LAMMPS started
// this calls back to plugin_wrapper, which must issue MDI EXIT at end // this calls back to plugin_wrapper(), which issues MDI EXIT at end & returns
// plugin_wrapper() must be a static method
MDI_Launch_plugin(plugin_name, plugin_args, &world, plugin_wrapper, (void *) this); MDI_Launch_plugin(plugin_name, plugin_args, &world, plugin_wrapper, (void *) this);
@ -99,8 +105,9 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
callback function from MDI_Launch_plugin() wrapper on entire interaction of LAMMPS as a driver with the plugin engine
this function wraps entire interaction of LAMMPS driver with the plugin invoked as a callback by MDI once plugin library engine is launched
this is a static method in mdi_plugin.h
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr) int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr)

View File

@ -26,6 +26,9 @@ class MDIPlugin : protected Pointers {
private: private:
char *lammps_command; char *lammps_command;
// static method for MDI to callback to
// when LAMMPS is a driver which launches a plugin engine
static int plugin_wrapper(void *, MDI_Comm, void *); static int plugin_wrapper(void *, MDI_Comm, void *);
}; };

View File

@ -26,6 +26,7 @@
#include "pair_mliap.h" #include "pair_mliap.h"
#include "python_compat.h" #include "python_compat.h"
#include "utils.h" #include "utils.h"
#include "comm.h"
#include <Python.h> #include <Python.h>
@ -104,7 +105,7 @@ void MLIAPModelPython::read_coeffs(char *fname)
if (loaded) { if (loaded) {
this->connect_param_counts(); this->connect_param_counts();
} else { } else {
utils::logmesg(lmp, "Loading python model deferred.\n"); if (comm->me == 0) utils::logmesg(lmp, "Loading python model deferred.\n");
} }
} }

View File

@ -23,6 +23,7 @@
#include "math_const.h" #include "math_const.h"
#include "memory.h" #include "memory.h"
#include "neigh_list.h" #include "neigh_list.h"
#include "suffix.h"
#include <cmath> #include <cmath>
@ -37,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *_lmp) : PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *_lmp) :
PairLJCutCoulCutDielectric(_lmp), ThrOMP(_lmp, THR_PAIR) PairLJCutCoulCutDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
{ {
suffix_flag |= Suffix::OMP;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
@ -99,7 +101,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
{ {
int i, j, ii, jj, jnum, itype, jtype; int i, j, ii, jj, jnum, itype, jtype;
double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul; double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul;
double fpair_i, fpair_j; double fpair_i;
double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj; double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj;
double efield_i, epot_i; double efield_i, epot_i;
int *ilist, *jlist, *numneigh, **firstneigh; int *ilist, *jlist, *numneigh, **firstneigh;
@ -130,10 +132,10 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
i = ilist[ii]; i = ilist[ii];
qtmp = q[i]; qtmp = q[i];
etmp = eps[i];
xtmp = x[i].x; xtmp = x[i].x;
ytmp = x[i].y; ytmp = x[i].y;
ztmp = x[i].z; ztmp = x[i].z;
etmp = eps[i];
itype = type[i]; itype = type[i];
jlist = firstneigh[i]; jlist = firstneigh[i];
jnum = numneigh[i]; jnum = numneigh[i];
@ -141,6 +143,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
extmp = eytmp = eztmp = 0.0; extmp = eytmp = eztmp = 0.0;
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
double curvature_threshold = sqrt(area[i]); double curvature_threshold = sqrt(area[i]);
if (curvature[i] < curvature_threshold) { if (curvature[i] < curvature_threshold) {
double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i];
@ -151,7 +154,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
efield[i][0] = efield[i][1] = efield[i][2] = 0; efield[i][0] = efield[i][1] = efield[i][2] = 0;
} }
epot[i] = 0; epot[i] = 0.0;
for (jj = 0; jj < jnum; jj++) { for (jj = 0; jj < jnum; jj++) {
j = jlist[jj]; j = jlist[jj];
@ -167,9 +170,10 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
if (rsq < cutsq[itype][jtype]) { if (rsq < cutsq[itype][jtype]) {
r2inv = 1.0 / rsq; r2inv = 1.0 / rsq;
const double rinv = sqrt(r2inv);
if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) { if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) {
efield_i = qqrd2e * q[j] * sqrt(r2inv); efield_i = qqrd2e * q[j] * rinv;
forcecoul = qtmp * efield_i; forcecoul = qtmp * efield_i;
epot_i = efield_i; epot_i = efield_i;
} else } else
@ -182,7 +186,6 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
forcelj = 0.0; forcelj = 0.0;
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv; fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
fxtmp += delx * fpair_i; fxtmp += delx * fpair_i;
fytmp += dely * fpair_i; fytmp += dely * fpair_i;
fztmp += delz * fpair_i; fztmp += delz * fpair_i;
@ -193,29 +196,18 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
eztmp += delz * efield_i; eztmp += delz * efield_i;
epot[i] += epot_i; epot[i] += epot_i;
if (NEWTON_PAIR || j >= nlocal) {
fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv;
f[j].x -= delx * fpair_j;
f[j].y -= dely * fpair_j;
f[j].z -= delz * fpair_j;
}
if (EFLAG) { if (EFLAG) {
if (rsq < cut_coulsq[itype][jtype]) { if (rsq < cut_coulsq[itype][jtype]) {
ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * sqrt(r2inv); ecoul = factor_coul * qqrd2e * qtmp * q[j] * 0.5 * (etmp + eps[j]) * rinv;
} else } else
ecoul = 0.0; ecoul = 0.0;
ecoul *= 0.5;
if (rsq < cut_ljsq[itype][jtype]) { if (rsq < cut_ljsq[itype][jtype]) {
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
evdwl *= factor_lj; evdwl *= factor_lj;
} else } else
evdwl = 0.0; evdwl = 0.0;
} }
if (EVFLAG) ev_tally_full_thr(this, i, evdwl, ecoul, fpair_i, delx, dely, delz, thr);
if (EVFLAG)
ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair_i, delx, dely, delz,
thr);
} }
} }
f[i].x += fxtmp; f[i].x += fxtmp;

View File

@ -23,6 +23,7 @@
#include "math_const.h" #include "math_const.h"
#include "memory.h" #include "memory.h"
#include "neigh_list.h" #include "neigh_list.h"
#include "suffix.h"
#include <cmath> #include <cmath>
@ -37,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
PairLJCutCoulDebyeDielectricOMP::PairLJCutCoulDebyeDielectricOMP(LAMMPS *_lmp) : PairLJCutCoulDebyeDielectricOMP::PairLJCutCoulDebyeDielectricOMP(LAMMPS *_lmp) :
PairLJCutCoulDebyeDielectric(_lmp), ThrOMP(_lmp, THR_PAIR) PairLJCutCoulDebyeDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
{ {
suffix_flag |= Suffix::OMP;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
@ -99,7 +101,7 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
{ {
int i, j, ii, jj, jnum, itype, jtype; int i, j, ii, jj, jnum, itype, jtype;
double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul; double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul;
double fpair_i, fpair_j; double fpair_i;
double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj, efield_i, epot_i; double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj, efield_i, epot_i;
double r, rinv, screening; double r, rinv, screening;
int *ilist, *jlist, *numneigh, **firstneigh; int *ilist, *jlist, *numneigh, **firstneigh;
@ -185,7 +187,6 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
forcelj = 0.0; forcelj = 0.0;
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv; fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
fxtmp += delx * fpair_i; fxtmp += delx * fpair_i;
fytmp += dely * fpair_i; fytmp += dely * fpair_i;
fztmp += delz * fpair_i; fztmp += delz * fpair_i;
@ -196,19 +197,11 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
eztmp += delz * efield_i; eztmp += delz * efield_i;
epot[i] += epot_i; epot[i] += epot_i;
if (NEWTON_PAIR || j >= nlocal) {
fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv;
f[j].x -= delx * fpair_j;
f[j].y -= dely * fpair_j;
f[j].z -= delz * fpair_j;
}
if (EFLAG) { if (EFLAG) {
if (rsq < cut_coulsq[itype][jtype]) { if (rsq < cut_coulsq[itype][jtype]) {
ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * rinv * screening; ecoul = factor_coul * qqrd2e * qtmp * q[j] * 0.5 * (etmp + eps[j]) * rinv * screening;
} else } else
ecoul = 0.0; ecoul = 0.0;
ecoul *= 0.5;
if (rsq < cut_ljsq[itype][jtype]) { if (rsq < cut_ljsq[itype][jtype]) {
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
evdwl *= factor_lj; evdwl *= factor_lj;
@ -216,9 +209,7 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
evdwl = 0.0; evdwl = 0.0;
} }
if (EVFLAG) if (EVFLAG) ev_tally_full_thr(this, i, evdwl, ecoul, fpair_i, delx, dely, delz, thr);
ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair_i, delx, dely, delz,
thr);
} }
} }
f[i].x += fxtmp; f[i].x += fxtmp;

View File

@ -24,6 +24,7 @@
#include "math_const.h" #include "math_const.h"
#include "memory.h" #include "memory.h"
#include "neigh_list.h" #include "neigh_list.h"
#include "suffix.h"
#include <cmath> #include <cmath>
@ -39,6 +40,7 @@ static constexpr double EPSILON = 1.0e-6;
PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *_lmp) : PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *_lmp) :
PairLJCutCoulLongDielectric(_lmp), ThrOMP(_lmp, THR_PAIR) PairLJCutCoulLongDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
{ {
suffix_flag |= Suffix::OMP;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
@ -229,10 +231,10 @@ void PairLJCutCoulLongDielectricOMP::eval(int iifrom, int iito, ThrData *const t
if (EFLAG) { if (EFLAG) {
if (rsq < cut_coulsq) { if (rsq < cut_coulsq) {
if (!ncoultablebits || rsq <= tabinnersq) if (!ncoultablebits || rsq <= tabinnersq)
ecoul = prefactor * (etmp + eps[j]) * erfc; ecoul = prefactor * 0.5 * (etmp + eps[j]) * erfc;
else { else {
table = etable[itable] + fraction * detable[itable]; table = etable[itable] + fraction * detable[itable];
ecoul = qtmp * q[j] * (etmp + eps[j]) * table; ecoul = qtmp * q[j] * 0.5 * (etmp + eps[j]) * table;
} }
if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor; if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor;
} else } else

View File

@ -597,9 +597,8 @@ void ThrOMP::ev_tally_full_thr(Pair * const pair, const int i, const double evdw
const double ecoul, const double fpair, const double delx, const double ecoul, const double fpair, const double delx,
const double dely, const double delz, ThrData * const thr) const double dely, const double delz, ThrData * const thr)
{ {
if (pair->eflag_either) if (pair->eflag_either)
e_tally_thr(pair, i, i+1, i, 0, evdwl, ecoul, thr); e_tally_thr(pair, i, /*j*/ i+1, /*nlocal*/ i+1, /*newton_pair*/ 0, evdwl, ecoul, thr);
if (pair->vflag_either) { if (pair->vflag_either) {
double v[6]; double v[6];
@ -610,7 +609,7 @@ void ThrOMP::ev_tally_full_thr(Pair * const pair, const int i, const double evdw
v[4] = delx*delz*fpair; v[4] = delx*delz*fpair;
v[5] = dely*delz*fpair; v[5] = dely*delz*fpair;
v_tally_thr(pair, i, i+1, i, 0, v, thr); v_tally_thr(pair, i, /*j*/ i+1, /*nlocal*/ i+1, /*newton_pair*/ 0, v, thr);
} }
if (pair->num_tally_compute > 0) { if (pair->num_tally_compute > 0) {

View File

@ -1729,7 +1729,9 @@ void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std:
// error checks applicable to all styles // error checks applicable to all styles
if (tag[nlocal] <= 0) error->one(FLERR, "Invalid atom ID in Atoms section of data file"); if (tag[nlocal] <= 0)
error->one(FLERR, "Invalid atom ID {} in line {} of Atoms section of data file",
tag[nlocal], nlocal+1);
// if needed, modify unpacked values or initialize other peratom values // if needed, modify unpacked values or initialize other peratom values

View File

@ -29,7 +29,7 @@ FixNVE::FixNVE(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg) Fix(lmp, narg, arg)
{ {
if (!utils::strmatch(style,"^nve/sphere") && narg < 3) if (!utils::strmatch(style,"^nve/sphere") && narg < 3)
error->all(FLERR,"Illegal fix nve command"); utils::missing_cmd_args(FLERR, "fix nve", error);
dynamic_group_allow = 1; dynamic_group_allow = 1;
time_integrate = 1; time_integrate = 1;

View File

@ -32,7 +32,7 @@ using namespace FixConst;
FixNVELimit::FixNVELimit(LAMMPS *lmp, int narg, char **arg) : FixNVELimit::FixNVELimit(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg) Fix(lmp, narg, arg)
{ {
if (narg != 4) error->all(FLERR,"Illegal fix nve/limit command"); if (narg != 4) utils::missing_cmd_args(FLERR, "fix nve/limit", error);
time_integrate = 1; time_integrate = 1;
scalar_flag = 1; scalar_flag = 1;

View File

@ -25,7 +25,7 @@ using namespace FixConst;
FixNVENoforce::FixNVENoforce(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) FixNVENoforce::FixNVENoforce(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
{ {
if (narg != 3) error->all(FLERR, "Illegal fix nve/noforce command"); if (narg != 3) utils::missing_cmd_args(FLERR, "fix nve/noforce", error);
time_integrate = 1; time_integrate = 1;
} }

Some files were not shown because too many files have changed in this diff Show More