Merge branch 'lammps:develop' into mliappy_unified

This commit is contained in:
Steven Anaya
2022-08-10 21:58:37 -06:00
committed by GitHub
245 changed files with 5731 additions and 5191 deletions

5
.github/CODEOWNERS vendored
View File

@ -13,20 +13,21 @@ lib/kim/* @ellio167
lib/mesont/* @iafoss
# whole packages
src/AMOEBA/* @sjplimp
src/COMPRESS/* @rbberger
src/GPU/* @ndtrung81
src/KOKKOS/* @stanmoore1
src/KIM/* @ellio167
src/LATTE/* @cnegre
src/MESSAGE/* @sjplimp
src/MLIAP/* @athomps
src/SNAP/* @athomps
src/SPIN/* @julient31
src/BROWNIAN/* @samueljmcameron
src/CG-DNA/* @ohenrich
src/CG-SDK/* @akohlmey
src/CG-SPICA/* @yskmiyazaki
src/COLVARS/* @giacomofiorin
src/DIELECTRIC/* @ndtrung81
src/ELECTRODE/* @ludwig-ahrens
src/FEP/* @agiliopadua
src/ML-HDNNP/* @singraber
src/INTEL/* @wmbrownintel

6
.github/codecov.yml vendored
View File

@ -7,7 +7,7 @@ coverage:
threshold: 10%
only_pulls: false
branches:
- "master"
- "develop"
flags:
- "unit"
paths:
@ -16,14 +16,14 @@ coverage:
project:
default:
branches:
- "master"
- "develop"
paths:
- "src"
informational: true
patch:
default:
branches:
- "master"
- "develop"
paths:
- "src"
informational: true

View File

@ -135,13 +135,11 @@ set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions")
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
# and prints lots of pointless warnings about "unsafe" functions
if(MSVC)
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel"))
add_compile_options(/Zc:__cplusplus)
add_compile_options(/wd4244)
add_compile_options(/wd4267)
if(LAMMPS_EXCEPTIONS)
add_compile_options(/EHsc)
endif()
add_compile_options(/EHsc)
endif()
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
endif()

View File

@ -242,6 +242,6 @@ $(MATHJAX):
$(ANCHORCHECK): $(VENV)
@( \
. $(VENV)/bin/activate; \
pip install -e utils/converters;\
pip $(PIP_OPTIONS) install -e utils/converters;\
deactivate;\
)

View File

@ -1,7 +1,7 @@
.TH LAMMPS "1" "23 June 2022" "2022-6-23"
.TH LAMMPS "1" "3 August 2022" "2022-8-3"
.SH NAME
.B LAMMPS
\- Molecular Dynamics Simulator. Version 23 June 2022
\- Molecular Dynamics Simulator. Version 3 August 2022
.SH SYNOPSIS
.B lmp
@ -161,7 +161,7 @@ list references for specific cite-able features used during a
run.
.TP
\fB\-pk <style> [options]\fR or \fB\-package <style> [options]\fR
Invoke the \fBpackage\R command with <style> and optional arguments.
Invoke the \fBpackage\fR command with <style> and optional arguments.
The syntax is the same as if the command appeared in an input script.
For example "-pk gpu 2" is the same as "package gpu 2" in the input
script. The possible styles and options are discussed in the

View File

@ -181,10 +181,10 @@ set appropriate environment variables. Some variables such as
and the linker to work correctly.
Using CHIP-SPV implementation of HIP is now supported. It allows one to run HIP
code on Intel GPUs via the OpenCL or Level Zero backends. To use CHIP-SPV, you must
set :code:`-DHIP_USE_DEVICE_SORT=OFF` in your CMake command line as CHIP-SPV does not
yet support hipCUB. The use of HIP for Intel GPUs is still experimental so you
should only use this option in preparations to run on Aurora system at ANL.
code on Intel GPUs via the OpenCL or Level Zero backends. To use CHIP-SPV, you must
set :code:`-DHIP_USE_DEVICE_SORT=OFF` in your CMake command line as CHIP-SPV does not
yet support hipCUB. The use of HIP for Intel GPUs is still experimental so you
should only use this option in preparations to run on Aurora system at ANL.
.. code:: bash

View File

@ -123,14 +123,15 @@ LAMMPS:
.. _six:
6. If you want text with spaces to be treated as a single argument, it
can be enclosed in either single or double or triple quotes. A long
single argument enclosed in single or double quotes can span multiple
lines if the "&" character is used, as described above. When the
lines are concatenated together (and the "&" characters and line
breaks removed), the text will become a single line. If you want
multiple lines of an argument to retain their line breaks, the text
can be enclosed in triple quotes, in which case "&" characters are
not needed. For example:
can be enclosed in either single (') or double (") or triple (""")
quotes. A long single argument enclosed in single or double quotes
can span multiple lines if the "&" character is used, as described
in :ref:`1 <one>` above. When the lines are concatenated together
by LAMMPS (and the "&" characters and line breaks removed), the
combined text will become a single line. If you want multiple lines
of an argument to retain their line breaks, the text can be enclosed
in triple quotes, in which case "&" characters are not needed and do
not function as line continuation character. For example:
.. code-block:: LAMMPS
@ -144,8 +145,9 @@ LAMMPS:
System temperature = $t
"""
In each case, the single, double, or triple quotes are removed when
the single argument they enclose is stored internally.
In each of these cases, the single, double, or triple quotes are
removed and the enclosed text stored internally as a single
argument.
See the :doc:`dump modify format <dump_modify>`, :doc:`print
<print>`, :doc:`if <if>`, and :doc:`python <python>` commands for

View File

@ -23,6 +23,7 @@ Available topics in mostly chronological order are:
- `Simplify customized error messages`_
- `Use of "override" instead of "virtual"`_
- `Simplified and more compact neighbor list requests`_
- `Split of fix STORE into fix STORE/GLOBAL and fix STORE/PERATOM`_
----
@ -287,7 +288,7 @@ New:
comm->forward_comm(this);
comm->reverse_comm(this);
This change is required or else the code will not compile.
This change is **required** or else the code will not compile.
Simplified and more compact neighbor list requests
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -321,4 +322,63 @@ New:
if (cutflag) req->set_cutoff(mycutneigh);
Public access to the ``NeighRequest`` class data members has been
removed so this update is *required* to avoid compilation failure.
removed so this update is **required** to avoid compilation failure.
Split of fix STORE into fix STORE/GLOBAL and fix STORE/PERATOM
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. versionchanged:: TBD
This change splits the GLOBAL and PERATOM modes of fix STORE into two
separate fixes STORE/GLOBAL and STORE/PERATOM. There was very little
shared code between the two fix STORE modes and the two different code
paths had to be prefixed with if statements. Furthermore, some flags
were used differently in the two modes leading to confusion. Splitting
the code into two fix styles, makes it more easily maintainable. Since
these are internal fixes, there is no user visible change.
Old:
.. code-block:: C++
#include "fix_store.h"
FixStore *fix = dynamic_cast<FixStore *>(
modify->add_fix(fmt::format("{} {} STORE peratom 1 13",id_pole,group->names[0]));
FixStore *fix = dynamic_cast<FixStore *>(modify->get_fix_by_id(id_pole));
New:
.. code-block:: C++
#include "fix_store_peratom.h"
FixStorePeratom *fix = dynamic_cast<FixStorePeratom *>(
modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 13",id_pole,group->names[0]));
FixStorePeratom *fix = dynamic_cast<FixStorePeratom *>(modify->get_fix_by_id(id_pole));
Old:
.. code-block:: C++
#include "fix_store.h"
FixStore *fix = dynamic_cast<FixStore *>(
modify->add_fix(fmt::format("{} {} STORE global 1 1",id_fix,group->names[igroup]));
FixStore *fix = dynamic_cast<FixStore *>(modify->get_fix_by_id(id_fix));
New:
.. code-block:: C++
#include "fix_store_global.h"
FixStoreGlobal *fix = dynamic_cast<FixStoreGlobal *>(
modify->add_fix(fmt::format("{} {} STORE/GLOBAL 1 1",id_fix,group->names[igroup]));
FixStoreGlobal *fix = dynamic_cast<FixStoreGlobal *>(modify->get_fix_by_id(id_fix));
This change is **required** or else the code will not compile.

View File

@ -208,7 +208,7 @@ Argument processing
Convenience functions
^^^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: logmesg(LAMMPS *lmp, const S &format, Args&&... args)
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &format, Args&&... args)
:project: progguide
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &mesg)

View File

@ -38,11 +38,11 @@ found together with equivalent examples in C and C++ in the
.. note::
A contributed (and complete!) Fortran interface that more
closely resembles the C-library interface is available
in the ``examples/COUPLE/fortran2`` folder. Please see the
``README`` file in that folder for more information about it
and how to contact its author and maintainer.
A contributed (and more complete!) Fortran interface that more
closely resembles the C-library interface is available in the
``examples/COUPLE/fortran2`` folder. Please see the ``README`` file
in that folder for more information about it and how to contact its
author and maintainer.
----------
@ -65,8 +65,9 @@ the optional logical argument set to ``.true.``. Here is a simple example:
PROGRAM testlib
USE LIBLAMMPS ! include the LAMMPS library interface
IMPLICIT NONE
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
CHARACTER(len=*), DIMENSION(*), PARAMETER :: args = &
CHARACTER(len=*), PARAMETER :: args(3) = &
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none' ]
! create a LAMMPS instance (and initialize MPI)
@ -78,6 +79,41 @@ the optional logical argument set to ``.true.``. Here is a simple example:
END PROGRAM testlib
It is also possible to pass command line flags from Fortran to C/C++ and
thus make the resulting executable behave similar to the standalone
executable (it will ignore the `-in/-i` flag, though). This allows to
use the command line to configure accelerator and suffix settings,
configure screen and logfile output, or to set index style variables
from the command line and more. Here is a correspondingly adapted
version of the previous example:
.. code-block:: fortran
PROGRAM testlib2
USE LIBLAMMPS ! include the LAMMPS library interface
IMPLICIT NONE
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
CHARACTER(len=128), ALLOCATABLE :: command_args(:)
INTEGER :: i, argc
! copy command line flags to `command_args()`
argc = COMMAND_ARGUMENT_COUNT()
ALLOCATE(command_args(0:argc))
DO i=0, argc
CALL GET_COMMAND_ARGUMENT(i, command_args(i))
END DO
! create a LAMMPS instance (and initialize MPI)
lmp = lammps(command_args)
! get and print numerical version code
PRINT*, 'Program name: ', command_args(0)
PRINT*, 'LAMMPS Version: ', lmp%version()
! delete LAMMPS instance (and shuts down MPI)
CALL lmp%close(.TRUE.)
DEALLOCATE(command_args)
END PROGRAM testlib2
--------------------
Executing LAMMPS commands
@ -102,7 +138,7 @@ Below is a small demonstration of the uses of the different functions:
USE LIBLAMMPS
TYPE(lammps) :: lmp
CHARACTER(len=512) :: cmds
CHARACTER(len=40),ALLOCATABLE :: cmdlist(:)
CHARACTER(len=40), ALLOCATABLE :: cmdlist(:)
CHARACTER(len=10) :: trimmed
INTEGER :: i
@ -111,10 +147,10 @@ Below is a small demonstration of the uses of the different functions:
CALL lmp%command('variable zpos index 1.0')
! define 10 groups of 10 atoms each
ALLOCATE(cmdlist(10))
DO i=1,10
DO i=1, 10
WRITE(trimmed,'(I10)') 10*i
WRITE(cmdlist(i),'(A,I1,A,I10,A,A)') &
'group g',i-1,' id ',10*(i-1)+1,':',ADJUSTL(trimmed)
'group g', i-1, ' id ', 10*(i-1)+1, ':', ADJUSTL(trimmed)
END DO
CALL lmp%commands_list(cmdlist)
! run multiple commands from multi-line string
@ -123,7 +159,7 @@ Below is a small demonstration of the uses of the different functions:
'create_box 1 box' // NEW_LINE('A') // &
'create_atoms 1 single 1.0 1.0 ${zpos}'
CALL lmp%commands_string(cmds)
CALL lmp%close()
CALL lmp%close(.TRUE.)
END PROGRAM testcmd
@ -137,9 +173,9 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
.. f:type:: lammps
Derived type that is the general class of the Fortran interface.
It holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class instance
that any of the included calls are forwarded to.
Derived type that is the general class of the Fortran interface. It
holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>`
class instance that any of the included calls are forwarded to.
:f c_ptr handle: reference to the LAMMPS class
:f close: :f:func:`close`
@ -202,7 +238,7 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
This method will call :cpp:func:`lammps_commands_list` to have LAMMPS
execute a list of input lines.
:p character(len=*) cmd(*): list of LAMMPS input lines
:p character(len=*) cmd(:): list of LAMMPS input lines
.. f:subroutine:: commands_string(str)
@ -210,4 +246,3 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
execute a block of commands from a string.
:p character(len=*) str: LAMMPS input in string

View File

@ -2,9 +2,9 @@ AMOEBA and HIPPO force fields
=============================
The AMOEBA and HIPPO polarizable force fields were developed by Jay
Ponder's group at the U Washington at St Louis. Their implementation
in LAMMPS was done using F90 code provided by the Ponder group from
their `Tinker MD code <https://dasher.wustl.edu/tinker/>`_.
Ponder's group at the U Washington at St Louis. The LAMMPS
implementation is based on Fortran 90 code provided by the Ponder
group in their `Tinker MD software <https://dasher.wustl.edu/tinker/>`_.
The current implementation (July 2022) of AMOEBA in LAMMPS matches the
version discussed in :ref:`(Ponder) <amoeba-Ponder>`, :ref:`(Ren)

View File

@ -3,10 +3,20 @@ Install LAMMPS
You can download LAMMPS as an executable or as source code.
With source code, you also have to :doc:`build LAMMPS <Build>`. But you
have more flexibility as to what features to include or exclude in the
build. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then you
need the source code.
When downloading the LAMMPS source code, you also have to :doc:`build
LAMMPS <Build>`. But you have more flexibility as to what features to
include or exclude in the build. When you download and install
pre-compiled LAMMPS executables, you are limited to install which
version of LAMMPS is available and which features are included of these
builds. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then
you **must** build LAMMPS from the source code.
.. note::
If you have questions about the pre-compiled LAMMPS executables, you
need to contact the people preparing those executables. The LAMMPS
developers have no control over their choices of how they configure
and build their packages and when they update them.
.. toctree::
:maxdepth: 1

View File

@ -38,3 +38,10 @@ up the Conda capability.
.. _openkim: https://openkim.org
.. _conda: https://docs.conda.io/en/latest/index.html
.. _mini_conda_install: https://docs.conda.io/en/latest/miniconda.html
.. note::
If you have questions about these pre-compiled LAMMPS executables,
you need to contact the people preparing those packages. The LAMMPS
developers have no control over their choices of how they configure
and build their packages and when they update them.

View File

@ -3,13 +3,19 @@ Download an executable for Linux
Binaries are available for different versions of Linux:
| :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
| :ref:`Pre-built Fedora Linux executables <fedora>`
| :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
| :ref:`Pre-built OpenSuse Linux executables <opensuse>`
| :ref:`Gentoo Linux executable <gentoo>`
| :ref:`Arch Linux build-script <arch>`
|
- :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
- :ref:`Pre-built Fedora Linux executables <fedora>`
- :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
- :ref:`Pre-built OpenSuse Linux executables <opensuse>`
- :ref:`Gentoo Linux executable <gentoo>`
- :ref:`Arch Linux build-script <arch>`
.. note::
If you have questions about these pre-compiled LAMMPS executables,
you need to contact the people preparing those packages. The LAMMPS
developers have no control over their choices of how they configure
and build their packages and when they update them.
----------
@ -18,41 +24,28 @@ Binaries are available for different versions of Linux:
Pre-built Ubuntu Linux executables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A pre-built LAMMPS executable suitable for running on the latest
Ubuntu Linux versions, can be downloaded as a Debian package. This
allows you to install LAMMPS with a single command, and stay
up-to-date with the current stable version of LAMMPS by simply updating
your operating system. Please note, that the repository below offers
two LAMMPS packages, ``lammps-daily`` and ``lammps-stable``. The
LAMMPS developers recommend to use the ``lammps-stable`` package for
any production simulations. The ``lammps-daily`` package is built
from the LAMMPS development sources, and those versions may have known
issues and bugs when new features are added and the software has not
undergone full release testing.
To install the appropriate personal-package archives (PPAs), do the
following once:
.. code-block:: bash
$ sudo add-apt-repository ppa:gladky-anton/lammps
$ sudo add-apt-repository ppa:openkim/latest
$ sudo apt-get update
A pre-built LAMMPS executable suitable for running on the latest Ubuntu
Linux versions, can be downloaded as a Debian package. This allows you
to install LAMMPS with a single command, and stay (mostly) up-to-date
with the current stable version of LAMMPS by simply updating your
operating system.
To install LAMMPS do the following once:
.. code-block:: bash
$ sudo apt-get install lammps-stable
$ sudo apt-get install lammps
This downloads an executable named ``lmp_stable`` to your box, which
can then be used in the usual way to run input scripts:
This downloads an executable named ``lmp`` to your box and multiple
packages with supporting data, examples and libraries as well as any
missing dependencies. This executable can then be used in the usual way
to run input scripts:
.. code-block:: bash
$ lmp_stable -in in.lj
$ lmp -in in.lj
To update LAMMPS to the most current stable version, do the following:
To update LAMMPS to the latest packaged version, do the following:
.. code-block:: bash
@ -60,44 +53,24 @@ To update LAMMPS to the most current stable version, do the following:
which will also update other packages on your system.
To get a copy of the current documentation and examples:
.. code-block:: bash
$ sudo apt-get install lammps-stable-doc
which will download the doc files in
``/usr/share/doc/lammps-stable-doc/doc`` and example problems in
``/usr/share/doc/lammps-doc/examples``.
To get a copy of the current potentials files:
.. code-block:: bash
$ sudo apt-get install lammps-stable-data
which will download the potentials files to
``/usr/share/lammps-stable/potentials``. The ``lmp_stable`` binary is
hard-coded to look for potential files in this directory (it does not
use the ``LAMMPS_POTENTIALS`` environment variable, as described
in :doc:`pair_coeff <pair_coeff>` command).
The ``lmp_stable`` binary is built with the :ref:`KIM package <kim>` which
results in the above command also installing the ``kim-api`` binaries when LAMMPS
is installed. In order to use potentials from `openkim.org <openkim_>`_, you
can install the ``openkim-models`` package
The ``lmp`` binary is built with the :ref:`KIM package <kim>` included,
which results in the above command also installing the ``kim-api``
binaries when LAMMPS is installed. In order to use potentials from
`openkim.org <openkim_>`_, you can also install the ``openkim-models``
package
.. code-block:: bash
$ sudo apt-get install openkim-models
Or use the KIM-API commands to download and install individual models.
To un-install LAMMPS, do the following:
.. code-block:: bash
$ sudo apt-get remove lammps-stable
$ sudo apt-get remove lammps
Please use ``lmp_stable -help`` to see which compilation options, packages,
Please use ``lmp -help`` to see which compilation options, packages,
and styles are included in the binary.
Thanks to Anton Gladky (gladky.anton at gmail.com) for setting up this
@ -110,21 +83,21 @@ Ubuntu package capability.
Pre-built Fedora Linux executables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Pre-built LAMMPS packages for stable releases are available
in the Fedora Linux distribution as of version 28. The packages
can be installed via the dnf package manager. There are 3 basic
varieties (lammps = no MPI, lammps-mpich = MPICH MPI library,
lammps-openmpi = OpenMPI MPI library) and for each support for
linking to the C library interface (lammps-devel, lammps-mpich-devel,
lammps-openmpi-devel), the header for compiling programs using
the C library interface (lammps-headers), and the LAMMPS python
module for Python 3. All packages can be installed at the same
time and the name of the LAMMPS executable is ``lmp`` and ``lmp_openmpi``
or ``lmp_mpich`` respectively. By default, ``lmp`` will refer to the
serial executable, unless one of the MPI environment modules is loaded
(``module load mpi/mpich-x86_64`` or ``module load mpi/openmpi-x86_64``).
Then the corresponding parallel LAMMPS executable can be used.
The same mechanism applies when loading the LAMMPS python module.
Pre-built LAMMPS packages for stable releases are available in the
Fedora Linux distribution as of Fedora version 28. The packages can be
installed via the dnf package manager. There are 3 basic varieties
(lammps = no MPI, lammps-mpich = MPICH MPI library, lammps-openmpi =
OpenMPI MPI library) and for each support for linking to the C library
interface (lammps-devel, lammps-mpich-devel, lammps-openmpi-devel), the
header for compiling programs using the C library interface
(lammps-headers), and the LAMMPS python module for Python 3. All
packages can be installed at the same time and the name of the LAMMPS
executable is ``lmp`` and ``lmp_openmpi`` or ``lmp_mpich`` respectively.
By default, ``lmp`` will refer to the serial executable, unless one of
the MPI environment modules is loaded (``module load mpi/mpich-x86_64``
or ``module load mpi/openmpi-x86_64``). Then the corresponding parallel
LAMMPS executable can be used. The same mechanism applies when loading
the LAMMPS python module.
To install LAMMPS with OpenMPI and run an input ``in.lj`` with 2 CPUs do:
@ -273,3 +246,10 @@ Alternatively, you may use an AUR helper to install these packages.
Note that the AUR provides build-scripts that download the source and
the build the package on your machine.
.. note::
It looks like the Arch Linux AUR repository build scripts for LAMMPS
have not been updated since the 29 October 2020 version. You may want
to consider installing a more current version of LAMMPS from source
directly.

View File

@ -33,9 +33,9 @@ initial versions of LAMMPS is:
DOI for the LAMMPS source code
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
to create digital object identifies (DOI) for stable releases of the
LAMMPS source code. There are two types of DOIs for the LAMMPS source code.
The LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
to create digital object identifiers (DOI) for stable releases of the
LAMMPS source code. There are two types of DOIs for the LAMMPS source code.
The canonical DOI for **all** versions of LAMMPS, which will always
point to the **latest** stable release version is:

View File

@ -49,12 +49,12 @@ descriptions of all commands included in the LAMMPS code.
----------
.. _user_documentation:
************
User Guide
************
.. _user_documentation:
.. toctree::
:maxdepth: 2
:numbered: 3
@ -75,11 +75,12 @@ User Guide
Errors
.. _programmer_documentation:
******************
Programmer Guide
******************
.. _programmer_documentation:
.. toctree::
:maxdepth: 2
:numbered: 3

View File

@ -23,6 +23,8 @@ derived class. See fix.h for details.
+---------------------------+--------------------------------------------------------------------------------------------+
| init | initialization before a run (optional) |
+---------------------------+--------------------------------------------------------------------------------------------+
| init_list | store pointer to neighbor list; called by neighbor list code (optional) |
+---------------------------+--------------------------------------------------------------------------------------------+
| setup_pre_exchange | called before atom exchange in setup (optional) |
+---------------------------+--------------------------------------------------------------------------------------------+
| setup_pre_force | called before force computation in setup (optional) |

View File

@ -157,14 +157,28 @@ AMOEBA package
**Contents:**
TODO
Implementation of the AMOEBA and HIPPO polarized force fields
originally developed by Jay Ponder's group at the U Washington at St
Louis. The LAMMPS implementation is based on Fortran 90 code
provided by the Ponder group in their
`Tinker MD software <https://dasher.wustl.edu/tinker/>`_.
**Authors:** Josh Rackers and Steve Plimpton (Sandia), Trung Nguyen (U
Chicago)
**Supporting info:**
* src/AMOEBA: filenames -> commands
* :doc:`AMOEBA and HIPPO howto <Howto_amoeba>`
* :doc:`pair_style amoeba <pair_amoeba>`
* :doc:`pair_style hippo <pair_amoeba>`
* :doc:`atom_style amoeba <atom_style>`
* :doc:`angle_style amoeba <angle_amoeba>`
* :doc:`improper_style amoeba <improper_amoeba>`
* :doc:`fix amoeba/bitorsion <fix_amoeba_bitorsion>`
* :doc:`fix amoeba/pitorsion <fix_amoeba_pitorsion>`
* tools/tinker/tinker2lmp.py
* examples/amoeba
* TODO
----------
@ -200,9 +214,10 @@ ATC package
**Contents:**
ATC stands for atoms-to-continuum. This package implements a :doc:`fix atc <fix_atc>` command to either couple molecular dynamics with
continuum finite element equations or perform on-the-fly conversion of
atomic information to continuum fields.
ATC stands for atoms-to-continuum. This package implements a
:doc:`fix atc <fix_atc>` command to either couple molecular dynamics
with continuum finite element equations or perform on-the-fly
conversion of atomic information to continuum fields.
**Authors:** Reese Jones, Jeremy Templeton, Jon Zimmerman (Sandia).
@ -317,6 +332,8 @@ models for mesoscale simulations of solids and fracture. See the
**Authors:** Joel T. Clemmer (Sandia National Labs)
.. versionadded:: 4May2022
**Supporting info:**
* src/BPM filenames -> commands
@ -845,6 +862,8 @@ groups of atoms that interact with the remaining atoms as electrolyte.
Ahrens-Iwers (TUHH, Hamburg, Germany), Shern Tee (UQ, Brisbane, Australia) and
Robert Meissner (TUHH, Hamburg, Germany).
.. versionadded:: 4May2022
**Install:**
This package has :ref:`specific installation instructions <electrode>` on the

View File

@ -14,6 +14,7 @@ letter abbreviation can be used:
* :ref:`-m or -mpicolor <mpicolor>`
* :ref:`-c or -cite <cite>`
* :ref:`-nc or -nocite <nocite>`
* :ref:`-nb or -nonbuf <nonbuf>`
* :ref:`-pk or -package <package>`
* :ref:`-p or -partition <partition>`
* :ref:`-pl or -plog <plog>`
@ -257,6 +258,24 @@ Disable generating a citation reminder (see above) at all.
----------
.. _nonbuf:
**-nonbuf**
Turn off buffering for screen and logfile output. For performance
reasons, output to the screen and logfile is usually buffered, i.e.
output is only written to a file if its buffer - typically 4096 bytes -
has been filled. When LAMMPS crashes for some reason, however, that can
mean that there is important output missing. With this flag the
buffering can be turned off (only for screen and logfile output) and any
output will be committed immediately. Note that when running in
parallel with MPI, the screen output may still be buffered by the MPI
library and this cannot be changed by LAMMPS. This flag should only be
used for debugging and not for production simulations as the performance
impact can be significant, especially for large parallel runs.
----------
.. _package:
**-package style args ....**

View File

@ -10,7 +10,7 @@ Syntax
atom_style style args
* style = *amoeba* or *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *hybrid*
* style = *amoeba* or *angle* or *atomic* or *body* or *bond* or *charge* or *dielectric* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *mesont* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *wavepacket* or *hybrid*
.. parsed-literal::

View File

@ -38,8 +38,7 @@ Examples
bond_style bpm/rotational
bond_coeff 1 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002
bond_style bpm/rotational myfix 1000 time id1 id2
fix myfix all store/local 1000 3
bond_style bpm/rotational store/local myfix 1000 time id1 id2
dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3]
dump_modify 1 write_header no

View File

@ -33,6 +33,8 @@ Examples
Description
"""""""""""
.. versionadded:: 4May2022
Define a compute that calculates
:math:`\frac{\partial{}^2U}{\partial\varepsilon_{i}\partial\varepsilon_{j}}` the
second derivatives of the potential energy :math:`U` w.r.t. strain

View File

@ -15,7 +15,7 @@ Syntax
.. parsed-literal::
style = *bin/1d* or *bin/2d* or *bin/3d* or *bin/sphere* or *type* or *molecule* or c_ID, c_ID[I], f_ID, f_ID[I], v_name
style = *bin/1d* or *bin/2d* or *bin/3d* or *bin/sphere* or *bin/cylinder* or *type* or *molecule* or c_ID, c_ID[I], f_ID, f_ID[I], v_name
*bin/1d* args = dim origin delta
dim = *x* or *y* or *z*
origin = *lower* or *center* or *upper* or coordinate value (distance units)
@ -49,7 +49,7 @@ Syntax
v_name = per-atom vector calculated by an atom-style variable with name
* zero or more keyword/values pairs may be appended
* keyword = *region* or *nchunk* or *static* or *compress* or *bound* or *discard* or *pbc* or *units*
* keyword = *region* or *nchunk* or *limit* or *ids* or *compress* or *discard* or *bound* or *pbc* or *units*
.. parsed-literal::
@ -74,7 +74,7 @@ Syntax
no = keep atoms with out-of-range chunk IDs by assigning a valid chunk ID
mixed = keep or discard such atoms according to spatial binning rule
*bound* values = x/y/z lo hi
x/y/z = *x* or *y* or *z* to bound sptial bins in this dimension
x/y/z = *x* or *y* or *z* to bound spatial bins in this dimension
lo = *lower* or coordinate value (distance units)
hi = *upper* or coordinate value (distance units)
*pbc* value = *no* or *yes*

View File

@ -19,12 +19,12 @@ Syntax
.. parsed-literal::
keyword = *cutoff* or *nnn* or *degrees* or *components* or *chunksize*
keyword = *cutoff* or *nnn* or *degrees* or *wl* or *wl/hat* or *components* or *chunksize*
*cutoff* value = distance cutoff
*nnn* value = number of nearest neighbors
*degrees* values = nlvalues, l1, l2,...
*wl* value = yes or no
*wl/hat* value = yes or no
*wl* value = *yes* or *no*
*wl/hat* value = *yes* or *no*
*components* value = ldegree
*chunksize* value = number of atoms in each pass

View File

@ -41,8 +41,8 @@ Examples
compute 1 all saed 0.0251 Al O Kmax 1.70 Zone 0 0 1 dR_Ewald 0.01 c 0.5 0.5 0.5
compute 2 all saed 0.0251 Ni Kmax 1.70 Zone 0 0 0 c 0.05 0.05 0.05 manual echo
fix saed/vtk 1 1 1 c_1 file Al2O3_001.saed
fix saed/vtk 1 1 1 c_2 file Ni_000.saed
fix 1 all saed/vtk 1 1 1 c_1 file Al2O3_001.saed
fix 2 all saed/vtk 1 1 1 c_2 file Ni_000.saed
Description
"""""""""""

View File

@ -18,7 +18,7 @@ Examples
.. code-block:: LAMMPS
compute 1 all smd/triangle/mesh/vertices
compute 1 all smd/triangle/vertices
Description
"""""""""""

View File

@ -136,6 +136,8 @@ positions.
:align: right
:target: _images/marble_race.jpg
.. versionadded:: 2Jun2022
For the *mesh* style, a file with a triangle mesh in `STL format
<https://en.wikipedia.org/wiki/STL_(file_format)>`_ is read and one or
more particles are placed into the area of each triangle. The reader
@ -391,6 +393,8 @@ the atom style. Its value is a prefactor (must be > 0.0, default is
individual triangles in the triangle mesh that the particle corresponds
to.
.. versionadded:: 2Jun2022
The *overlap* keyword only applies to the *random* style. It prevents
newly created particles from being created closer than the specified
*Doverlap* distance from any other particle. When the particles being

View File

@ -10,7 +10,7 @@ Syntax
create_bonds style args ... keyword value ...
* style = *many* or *single/bond* or *single/angle* or *single/dihedral*
* style = *many* or *single/bond* or *single/angle* or *single/dihedral* or *single/improper*
.. parsed-literal::

View File

@ -55,7 +55,7 @@ Examples
delete_atoms random fraction 0.1 yes all cube 482793 bond yes
delete_atoms random fraction 0.3 no polymer NULL 482793 bond yes
delete_atoms random count 500 no ions NULL 482793
detele_atoms variable checkers
delete_atoms variable checkers
Description
"""""""""""

View File

@ -8,7 +8,10 @@ Syntax
.. code-block:: LAMMPS
dihedral_style zero [nocoeff]
dihedral_style zero keyword
* zero or more keywords may be appended
* keyword = *nocoeff*
Examples
""""""""

View File

@ -36,7 +36,7 @@ Syntax
.. parsed-literal::
keyword = *units*
value = *box* or *lattice*
*units* value = *box* or *lattice*
Examples
""""""""

View File

@ -61,7 +61,7 @@ Syntax
* ID = user-assigned name for the dump
* 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/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*
* N = dump every this many timesteps
* file = name of file to write dump info to
* args = list of arguments for a particular style
@ -96,7 +96,7 @@ Syntax
*xyz/mpiio* args = none
*yaml* args = same as *custom* args, see below
* *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *netcdf* or *netcdf/mpiio* or *yaml* args = list of atom attributes
* *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *netcdf* or *netcdf/mpiio* or *yaml* args = list of atom attributes
.. parsed-literal::
@ -414,6 +414,8 @@ from using the (numerical) atom type to an element name (or some
other label). This will help many visualization programs to guess
bonds and colors.
.. versionadded:: 4May2022
Dump style *yaml* has the same command syntax as style *custom* and
writes YAML format files that can be easily parsed by a variety of data
processing tools and programming languages. Each timestep will be

View File

@ -6,31 +6,31 @@ dump h5md command
Syntax
""""""
.. parsed-literal::
.. code-block:: LAMMPS
dump ID group-ID h5md N file.h5 args
* ID = user-assigned name for the dump
* group-ID = ID of the group of atoms to be imaged
* h5md = 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)
* *h5md* = 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
* file.h5 = name of file to write to
* args = *position* options or *image* or *velocity* options or *force* options or *species* options or *file_from* ID or *box* value or *create_group* value or *author* value = list of data elements to dump, with their dump "sub-intervals"
.. parsed-literal::
.. parsed-literal::
args = list of data elements to dump, with their dump "sub-intervals"
position options
image
velocity options
force options
species options
file_from ID: do not open a new file, re-use the already opened file from dump ID
box value = *yes* or *no*
create_group value = *yes* or *no*
author value = quoted string
*position* options
*image*
*velocity* options
*force* options
*species* options
*file_from* ID = do not open a new file, re-use the already opened file from dump ID
*box* value = *yes* or *no*
*create_group* value = *yes* or *no*
*author* value = quoted string
Note that at least one element must be specified and image may only be
present if position is specified first.
Note that at least one element must be specified and that *image* may only be
present if *position* is specified first.
For the elements *position*, *velocity*, *force* and *species*, a
sub-interval may be specified to write the data only every N_element
@ -39,7 +39,7 @@ specified by this option directly following the element declaration:
.. parsed-literal::
every N_element
options = *every* N_element
Examples
""""""""

View File

@ -56,7 +56,7 @@ Syntax
phi = azimuthal view angle (degrees)
theta or phi can be a variable (see below)
*center* values = flag Cx Cy Cz = center point of image
flag = "s" for static, "d" for dynamic
flag = *s* for static, *d* for dynamic
Cx,Cy,Cz = center point of image as fraction of box dimension (0.5 = center of box)
Cx,Cy,Cz can be variables (see below)
*up* values = Ux Uy Uz = direction that is "up" in image
@ -110,13 +110,13 @@ Syntax
*amap* args = lo hi style delta N entry1 entry2 ... entryN
lo = number or *min* = lower bound of range of color map
hi = number or *max* = upper bound of range of color map
style = 2 letters = "c" or "d" or "s" plus "a" or "f"
"c" for continuous
"d" for discrete
"s" for sequential
"a" for absolute
"f" for fractional
delta = binsize (only used for style "s", otherwise ignored)
style = 2 letters = *c* or *d* or *s* plus *a* or *f*
*c* for continuous
*d* for discrete
*s* for sequential
*a* for absolute
*f* for fractional
delta = binsize (only used for style *s*, otherwise ignored)
binsize = range is divided into bins of this width
N = # of subsequent entries
entry = value color (for continuous style)

View File

@ -380,6 +380,8 @@ performed with dump style *xtc*\ .
----------
.. versionadded:: 4May2022
The *colname* keyword can be used to change the default header keyword
for dump styles: *atom*, *custom*, and *cfg* and their compressed, ADIOS,
and MPIIO variants. The setting for *ID string* replaces the default

View File

@ -17,12 +17,12 @@ Syntax
* Nfreq = calculate averages every this many timesteps
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
* one or more input values can be listed
* value = vx, vy, vz, fx, fy, fz, density/mass, density/number, 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::
vx,vy,vz,fx,fy,fz = atom attribute (velocity, force component)
density/number, density/mass = number or mass density
vx,vy,vz,fx,fy,fz,mass = atom attribute (velocity, force component, mass)
density/number, density/mass = number or mass density (per volume)
temp = temperature
c_ID = per-atom vector calculated by a compute with ID
c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
@ -99,29 +99,33 @@ averages can be used by other :doc:`output commands <Howto_output>` such
as :doc:`thermo_style custom <thermo_style>`, and can also be written to
a file.
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
to a single chunk (or no chunk). The ID for this command is specified
as chunkID. For example, a single chunk could be the atoms in a
molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` page and the :doc:`Howto chunk <Howto_chunk>` page for details of how chunks can be
defined and examples of how they can be used to measure properties of
a system.
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute
chunk/atom <compute_chunk_atom>` command, which assigns each atom to a
single chunk (or no chunk). The ID for this command is specified as
chunkID. For example, a single chunk could be the atoms in a molecule
or atoms in a spatial bin. See the :doc:`compute chunk/atom
<compute_chunk_atom>` page and the :doc:`Howto chunk <Howto_chunk>`
page for details of how chunks can be defined and examples of how they
can be used to measure properties of a system.
Note that only atoms in the specified group contribute to the summing
and averaging calculations. The :doc:`compute chunk/atom <compute_chunk_atom>` command defines its own group as
well as an optional region. Atoms will have a chunk ID = 0, meaning
they belong to no chunk, if they are not in that group or region.
Thus you can specify the "all" group for this command if you simply
want to use the chunk definitions provided by chunkID.
and averaging calculations. The :doc:`compute chunk/atom
<compute_chunk_atom>` command defines its own group as well as an
optional region. Atoms will have a chunk ID = 0, meaning they belong
to no chunk, if they are not in that group or region. Thus you can
specify the "all" group for this command if you simply want to use the
chunk definitions provided by chunkID.
Each specified per-atom value can be an atom attribute (position,
velocity, force component), a mass or number density, or the result of
a :doc:`compute <compute>` or :doc:`fix <fix>` or the evaluation of an
atom-style :doc:`variable <variable>`. In the latter cases, the
compute, fix, or variable must produce a per-atom quantity, not a
global quantity. Note that the :doc:`compute property/atom <compute_property_atom>` command provides access to
any attribute defined and stored by atoms. 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.
velocity, force component), a number or mass density, a mass or
temperature, or the result of a :doc:`compute <compute>` or :doc:`fix
<fix>` or the evaluation of an atom-style :doc:`variable <variable>`.
In the latter cases, the compute, fix, or variable must produce a
per-atom quantity, not a global quantity. Note that the :doc:`compute
property/atom <compute_property_atom>` command provides access to any
attribute defined and stored by atoms. 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.
The per-atom values of each input vector are summed and averaged
independently of the per-atom values in other input vectors.
@ -145,8 +149,9 @@ means all indices from m to n (inclusive).
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
equivalent, since the :doc:`compute property/atom <compute_property_atom>` command creates, in this
case, a per-atom array with 3 columns:
equivalent, since the :doc:`compute property/atom
<compute_property_atom>` command creates, in this case, a per-atom
array with 3 columns:
.. code-block:: LAMMPS
@ -194,28 +199,31 @@ discussed below.
.. note::
To perform per-chunk averaging within a *Nfreq* time window, the
number of chunks *Nchunk* defined by the :doc:`compute chunk/atom <compute_chunk_atom>` command must remain constant. If
the *ave* keyword is set to *running* or *window* then *Nchunk* must
remain constant for the duration of the simulation. This fix forces
the chunk/atom compute specified by chunkID to hold *Nchunk* constant
for the appropriate time windows, by not allowing it to re-calculate
*Nchunk*, which can also affect how it assigns chunk IDs to atoms.
This is particularly important to understand if the chunks defined by
the :doc:`compute chunk/atom <compute_chunk_atom>` command are spatial
bins. If its *units* 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 window, which can affect which atoms are discarded if the
number of chunks *Nchunk* defined by the :doc:`compute chunk/atom
<compute_chunk_atom>` command must remain constant. If the *ave*
keyword is set to *running* or *window* then *Nchunk* must remain
constant for the duration of the simulation. This fix forces the
chunk/atom compute specified by chunkID to hold *Nchunk* constant
for the appropriate time windows, by not allowing it to
re-calculate *Nchunk*, which can also affect how it assigns chunk
IDs to atoms. This is particularly important to understand if the
chunks defined by the :doc:`compute chunk/atom
<compute_chunk_atom>` command are spatial bins. If its *units*
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
window, which can affect which atoms are discarded if the
simulation box size changes. If its *units* keyword is set to
*reduced*, then the number of bins *Nchunk* will still be fixed, but
the size of each bin can vary at each timestep if the simulation box
size changes, e.g. for an NPT simulation.
*reduced*, then the number of bins *Nchunk* will still be fixed,
but the size of each bin can vary at each timestep if the
simulation box size changes, e.g. for an NPT simulation.
----------
The atom attribute values (vx,vy,vz,fx,fy,fz) are self-explanatory.
As noted above, any other atom attributes can be used as input values
to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
an input value from that compute.
The atom attribute values (vx,vy,vz,fx,fy,fz,mass) are
self-explanatory. As noted above, any other atom attributes can be
used as input values to this fix by using the :doc:`compute
property/atom <compute_property_atom>` command and then specifying an
input value from that compute.
The *density/number* value means the number density is computed for
each chunk, i.e. number/volume. The *density/mass* value means the
@ -243,12 +251,13 @@ Note that currently this temperature only includes translational
degrees of freedom for each atom. No rotational 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,
such as :doc:`compute temp/partial <compute_temp_partial>`, or :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 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, you can
use the *adof* and *cdof* keywords to adjust the calculated degrees of
freedom appropriately, as explained below.
such as :doc:`compute temp/partial <compute_temp_partial>`, or
: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
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,
you can use the *adof* and *cdof* keywords to adjust the calculated
degrees of freedom appropriately, as explained below.
Also note that a bias can be subtracted from atom velocities before
they are used in the above formula for KE, by using the *bias*
@ -256,22 +265,22 @@ keyword. This allows, for example, a thermal temperature to be
computed after removal of a flow velocity profile.
Note that the per-chunk temperature calculated by this fix and the
:doc:`compute temp/chunk <compute_temp_chunk>` command can be different.
The compute calculates the temperature for each chunk for 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 if the atoms
in the chunk on different timesteps were collected together as one set
of atoms to calculate their temperature. The compute allows the
center-of-mass velocity of each chunk to be subtracted before
calculating the temperature; this fix does not.
:doc:`compute temp/chunk <compute_temp_chunk>` command can be
different. The compute calculates the temperature for each chunk for
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
if the atoms in the chunk on different timesteps were collected
together as one set of atoms to calculate their temperature. The
compute allows the center-of-mass velocity of each chunk to be
subtracted before calculating the temperature; this fix does not.
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
appended, the per-atom vector calculated by the compute is used. If a
bracketed integer is appended, the Ith column of the per-atom array
calculated by the compute is used. Users can also write code for
their own compute styles and :doc:`add them to LAMMPS <Modify>`.
See the discussion above for how I can be specified with a wildcard
their own compute styles and :doc:`add them to LAMMPS <Modify>`. See
the discussion above for how 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
@ -307,9 +316,10 @@ atoms in the chunk. The averaged output value for the chunk on the
average over atoms across the entire *Nfreq* timescale. 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
the final *Nfreq* timestep. For the *temp* values, degrees of freedom and
kinetic energy are summed separately across the entire *Nfreq* timescale, and
the output value is calculated by dividing those two sums.
the final *Nfreq* timestep. For the *temp* values, degrees of freedom
and kinetic energy are summed separately across the entire *Nfreq*
timescale, and the output value is calculated by dividing those two
sums.
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"
@ -431,44 +441,50 @@ 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].
The words in parenthesis only appear with corresponding columns if the
chunk style specified for the :doc:`compute chunk/atom <compute_chunk_atom>` command supports them. The OrigID
column is only used if the *compress* keyword was set to *yes* for the
:doc:`compute chunk/atom <compute_chunk_atom>` command. This means 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
chunk ID of 3 may correspond to an original chunk ID or molecule ID of
chunk style specified for the :doc:`compute chunk/atom
<compute_chunk_atom>` command supports them. The OrigID column is
only used if the *compress* keyword was set to *yes* for the
:doc:`compute chunk/atom <compute_chunk_atom>` command. This means
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 chunk ID of 3 may correspond to an original chunk ID or
molecule ID of
415. The OrigID column will list 415 for the third chunk.
The CoordN columns only appear if a *binning* style was used in the
:doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*,
*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
*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
*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
coordinate. For *bin/cylinder*, Coord1 and Coord2 are used. Coord1
is the radial coordinate (away from the cylinder axis), and coord2 is
the coordinate along the cylinder axis.
Note that if the value of the *units* keyword used in the :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or *lattice*, the
coordinate values will be in distance :doc:`units <units>`. If the
value of the *units* keyword is *reduced*, the 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* which both represent radial
dimensions. Those values are always in distance :doc:`units <units>`.
Note that if the value of the *units* keyword used in the
:doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or
*lattice*, the coordinate values will be in distance :doc:`units
<units>`. If the value of the *units* keyword is *reduced*, the
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*
which both represent radial dimensions. Those values are always in
distance :doc:`units <units>`.
----------
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
are relevant to this fix.
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.
This fix computes a global array of values which can be accessed by
various :doc:`output commands <Howto_output>`. The values can only be
accessed on timesteps that are multiples of *Nfreq* since that is when
averaging is performed. The global array has # of rows = the number
of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The # of columns =
of chunks *Nchunk* as calculated by the specified :doc:`compute
chunk/atom <compute_chunk_atom>` command. The # of columns =
M+1+Nvalues, where M = 1 to 4, depending on whether the optional
columns for OrigID and CoordN are used, as explained above. Following
the optional columns, the next column contains the count of atoms in
@ -483,7 +499,8 @@ since they are typically already normalized by the count of atoms in
each chunk.
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
""""""""""""

View File

@ -277,6 +277,8 @@ is the length of the input vectors, and the number of columns is the
number of values. Thus the file ends up to be a series of these array
sections.
.. versionadded:: 4May2022
If the filename ends in '.yaml' or '.yml' then the output format
conforms to the `YAML standard <https://yaml.org/>`_ which allows
easy import that data into tools and scripts that support reading YAML
@ -329,6 +331,8 @@ appropriate fields from the fix ave/time command.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.. versionadded:: 4May2022
No information about this fix is written to :doc:`binary restart files
<restart>`. The :doc:`fix_modify colname <fix_modify>` option can be
used to change the name of the column in the output file. When writing

View File

@ -25,38 +25,47 @@ Syntax
.. parsed-literal::
fix ID group-ID electrode/conp potential eta keyword values ...
fix ID group-ID electrode/conq charge eta keyword values ...
fix ID group-ID electrode/thermo potential eta temp T_v tau_v rng_v keyword values ...
fix ID group-ID style args keyword value ...
* ID, group-ID are documented in fix command
* mode = electrode/conp or electrode/conq or electrode/thermo
* potential = electrode potential
* charge = electrode charge
* eta = reciprocal width of electrode charge smearing
* T_v = temperature of thermo-potentiostat
* tau_v = time constant of thermo-potentiostat
* rng_v = integer used to initialize random number generator
* ID, group-ID are documented in :doc:`fix <fix>` command
* style = *electrode/conp* or *electrode/conq* or *electrode/thermo*
* args = arguments used by a particular style
.. parsed-literal::
*electrode/conp* args = potential eta
*electrode/conq* args = charge eta
*electrode/thermo* args = potential eta *temp* values
potential = electrode potential
charge = electrode charge
eta = reciprocal width of electrode charge smearing
*temp* values = T_v tau_v rng_v
T_v = temperature of thermo-potentiostat
tau_v = time constant of thermo-potentiostat
rng_v = integer used to initialize random number generator
* zero or more keyword/value pairs may be appended
* keyword = *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv*
.. parsed-literal::
*symm(etry) on/off*
*symm* value = *on* or *off*
turn on/off charge neutrality constraint for the electrodes
*couple group-ID value*
*couple* values = group-ID val
group-ID = group of atoms treated as additional electrode
value = electric potential or charge on this electrode
*etypes values = atom types*
specify atom types exclusive to the electrode for optimized neighbor lists
*ffield on/off*
val = electric potential or charge on this electrode
*etypes* values = type
type = atom type (can be a range) exclusive to the electrode for optimized neighbor lists
*ffield* value = *on* or *off*
turn on/off finite-field implementation
*write_mat filename*
write elastance matrix to file
*write_inv filename*
write inverted matrix to file
*read_mat filename*
read elastance matrix from file
*read_inv filename*
read inverted matrix from file
*write_mat* value = filename
filename = file to which to write elastance matrix
*write_inv* value = filename
filename = file to which to write inverted matrix
*read_mat* value = filename
filename = file from which to read elastance matrix
*read_inv* value = filename
filename = file from which to read inverted matrix
Examples
""""""""

View File

@ -24,9 +24,9 @@ Syntax
.. parsed-literal::
*energy* value = no or yes
no = do not compute work done by this fix
yes = compute work done by this fix
*energy* value = *no* or *yes*
*no* = do not compute work done by this fix
*yes* = compute work done by this fix
Examples
""""""""

View File

@ -14,8 +14,14 @@ Syntax
* ipi = style name of this fix command
* address = internet address (FQDN or IP), or UNIX socket name
* port = port number (ignored for UNIX sockets)
* optional keyword = *unix*, if present uses a unix socket
* optional keyword = *reset*, if present reset electrostatics at each call
* zero or more keywords may be appended
* keyword = *unix* or *reset*
.. parsed-literal::
*unix* args = none = use a unix socket
*reset* args = none = reset electrostatics at each call
Examples
""""""""

View File

@ -22,13 +22,14 @@ Syntax
.. parsed-literal::
keyword = *ext* or *strain* or *iso* or *x* or *y* or *z* or *tchain* or *pchain* or *tloop* or *ploop* or *mtk*
keyword = *erate* or *ext* or *strain* or *temp* or *iso* or *x* or *y* or *z* or *tchain* or *pchain* or *tloop* or *ploop* or *mtk*
*erate* values = e_x e_y = engineering strain rates (required)
*ext* value = *x* or *y* or *z* or *xy* or *yz* or *xz* = external dimensions
sets the external dimensions used to calculate the scalar pressure
*strain* values = e_x e_y = initial strain
usually not needed, but may be needed to resume a run with a data file.
*iso*, *x*, *y*, *z*, *tchain*, *pchain*, *tloop*, *ploop*, *mtk* keywords
documented by the :doc:`fix npt <fix_nh>` command
*temp*, *iso*, *x*, *y*, *z*, *tchain*, *pchain*, *tloop*, *ploop*, *mtk*
keywords documented by the :doc:`fix npt <fix_nh>` command
Examples
""""""""

View File

@ -22,7 +22,7 @@ Syntax
*disc* value = none = treat particles as 2d discs, not spheres
* additional thermostat and barostat related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
* NOTE: additional thermostat and barostat and dipole related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
Examples
""""""""
@ -33,6 +33,7 @@ Examples
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 disc
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 drag 0.2
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 update dipole
fix 2 water npt/sphere temp 300.0 300.0 100.0 aniso 0.0 0.0 1000.0 dilate partial
Description
@ -61,8 +62,9 @@ The only difference between discs and spheres in this context is their
moment of inertia, as used in the time integration.
Additional parameters affecting the thermostat and barostat are
specified by keywords and values documented with the :doc:`fix npt <fix_nh>` command. See, for example, discussion of the *temp*,
*iso*, *aniso*, and *dilate* keywords.
specified by keywords and values documented with the :doc:`fix npt
<fix_nh>` command. See, for example, discussion of the *temp*, *iso*,
*aniso*, and *dilate* keywords.
The particles in the fix group are the only ones whose velocities and
positions are updated by the velocity/position update portion of the
@ -87,8 +89,10 @@ this, the fix creates its own computes of style "temp/sphere" and
compute fix-ID_temp all temp/sphere
compute fix-ID_press all pressure fix-ID_temp
See the :doc:`compute temp/sphere <compute_temp_sphere>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
See the :doc:`compute temp/sphere <compute_temp_sphere>` and
:doc:`compute pressure <compute_pressure>` commands for details. Note
that the IDs of the new computes are the fix-ID + underscore + "temp"
or fix_ID
+ underscore + "press", and the group for the new computes is "all"
since pressure is computed for the entire system.
@ -170,7 +174,9 @@ defined by the :doc:`dimension <dimension>` keyword.
Related commands
""""""""""""""""
:doc:`fix npt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_sphere <fix_nvt_sphere>`, :doc:`fix npt_asphere <fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
:doc:`fix npt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`,
:doc:`fix nvt_sphere <fix_nvt_sphere>`, :doc:`fix npt_asphere
<fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
Default
"""""""

View File

@ -51,7 +51,8 @@ If the *update* keyword is used with the *dipole* value, then the
orientation of the dipole moment of each particle is also updated
during the time integration. This option should be used for models
where a dipole moment is assigned to finite-size particles,
e.g. spheroids via use of the :doc:`atom_style hybrid sphere dipole <atom_style>` command.
e.g. spheroids via use of the :doc:`atom_style hybrid sphere dipole
<atom_style>` command.
The default dipole orientation integrator can be changed to the
Dullweber-Leimkuhler-McLachlan integration scheme
@ -75,11 +76,13 @@ moment of inertia, as used in the time integration.
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
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>`.
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 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
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
""""""""""""

View File

@ -22,7 +22,7 @@ Syntax
*disc* value = none = treat particles as 2d discs, not spheres
* additional thermostat related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
* NOTE: additional thermostat and dipole related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
Examples
""""""""
@ -32,6 +32,7 @@ Examples
fix 1 all nvt/sphere temp 300.0 300.0 100.0
fix 1 all nvt/sphere temp 300.0 300.0 100.0 disc
fix 1 all nvt/sphere temp 300.0 300.0 100.0 drag 0.2
fix 1 all nvt/sphere temp 300.0 300.0 100.0 update dipole
Description
"""""""""""
@ -77,13 +78,13 @@ underscore + "temp", and the group for the new compute is the same as
the fix group.
Note that this is NOT the compute used by thermodynamic output (see
the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*.
This means you can change the attributes of this fix's temperature
(e.g. its degrees-of-freedom) via the
:doc:`compute_modify <compute_modify>` command or print this temperature
during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
It also means that changing attributes of *thermo_temp* will have no
effect on this fix.
the :doc:`thermo_style <thermo_style>` command) with ID =
*thermo_temp*. This means you can change the attributes of this fix's
temperature (e.g. its degrees-of-freedom) via the :doc:`compute_modify
<compute_modify>` command or print this temperature during
thermodynamic output via the :doc:`thermo_style custom <thermo_style>`
command using the appropriate compute-ID. It also means that changing
attributes of *thermo_temp* will have no effect on this fix.
Like other fixes that perform thermostatting, this fix can be used
with :doc:`compute commands <compute>` that remove a "bias" from the
@ -148,7 +149,9 @@ defined by the :doc:`dimension <dimension>` keyword.
Related commands
""""""""""""""""
:doc:`fix nvt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix npt_sphere <fix_npt_sphere>`, :doc:`fix_modify <fix_modify>`
:doc:`fix nvt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`,
:doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix npt_sphere
<fix_npt_sphere>`, :doc:`fix_modify <fix_modify>`
Default
"""""""

View File

@ -21,9 +21,9 @@ Examples
.. code-block:: LAMMPS
fix ions oneway 10 semi -x
fix all oneway 1 left -z
fix all oneway 1 right z
fix 1 ions oneway 10 semi -x
fix 2 all oneway 1 left -z
fix 3 all oneway 1 right z
Description
"""""""""""

View File

@ -15,18 +15,18 @@ Syntax
* ID, group-ID are documented in :doc:`fix <fix>` command
* property/atom = style name of this fix command
* name1,name2,... = *mol* or *q* or *rmass* or *i_name* or *d_name* or *i2_name* or *d2_name*
* name1,name2,... = *mol* or *q* or *rmass* or i_name or d_name or i2_name or d2_name
.. parsed-literal::
*mol* = molecule IDs
*q* = charge
*rmass* = per-atom mass
*i_name* = new integer vector referenced by name
*d_name* = new floating-point vector referenced by name
*i2_name* = new integer array referenced by name
i_name = new integer vector referenced by name
d_name = new floating-point vector referenced by name
i2_name = new integer array referenced by name
i2_name arg = N = number of columns in the array
*d2_name* = new floating-point array referenced by name
d2_name = new floating-point array referenced by name
d2_name arg = N = number of columns in the array
* zero of more keyword/value pairs may be appended

View File

@ -88,7 +88,7 @@ Syntax
Tstart,Tstop = desired temperature at start/stop of run (temperature units)
Tdamp = temperature damping parameter (time units)
seed = random number seed to use for white noise (positive integer)
*reinit* = *yes* or *no*
*reinit* value = *yes* or *no*
*temp* values = Tstart Tstop Tdamp
Tstart,Tstop = desired temperature at start/stop of run (temperature units)
Tdamp = temperature damping parameter (time units)
@ -98,7 +98,7 @@ Syntax
*x* or *y* or *z* values = Pstart Pstop Pdamp
Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
Pdamp = stress damping parameter (time units)
*couple* = *none* or *xyz* or *xy* or *yz* or *xz*
*couple* value = *none* or *xyz* or *xy* or *yz* or *xz*
*tparam* values = Tchain Titer Torder
Tchain = length of Nose/Hoover thermostat chain
Titer = number of thermostat iterations performed

View File

@ -1,4 +1,5 @@
.. index:: group2ndx
.. index:: ndx2group
group2ndx command
=================

View File

@ -25,7 +25,7 @@ Examples
if "${steps} > 1000" then quit
if "${myString} == a10" then quit
if "$x <= $y" then "print X is smaller = $x" else "print Y is smaller = $y"
if "$x <= $y" then "print 'X is smaller = $x'" else "print 'Y is smaller = $y'"
if "(${eng} > 0.0) || ($n < 1000)" then &
"timestep 0.005" &
elif $n<10000 &

View File

@ -17,7 +17,7 @@ Examples
.. code-block:: LAMMPS
improper_style hybrid harmonic helix
improper_style hybrid harmonic cvff
improper_coeff 1 harmonic 120.0 30
improper_coeff 2 cvff 20.0 -1 2

View File

@ -38,7 +38,7 @@ Restrictions
Related commands
""""""""""""""""
none
:doc:`jump <jump>`, :doc:`next <next>`
Default

View File

@ -22,24 +22,24 @@ Syntax
*check* value = *yes* or *no*
*yes* = only build if some atom has moved half the skin distance or more
*no* = always build on 1st step that *every* and *delay* are satisfied
*once*
*once* value = *yes* or *no*
*yes* = only build neighbor list once at start of run and never rebuild
*no* = rebuild neighbor list according to other settings
*cluster*
*cluster* value = *yes* or *no*
*yes* = check bond,angle,etc neighbor list for nearby clusters
*no* = do not check bond,angle,etc neighbor list for nearby clusters
*include* value = group-ID
group-ID = only build pair neighbor lists for atoms in this group
*exclude* values:
type M N
*type* M N
M,N = exclude if one atom in pair is type M, other is type N
group group1-ID group2-ID
*group* group1-ID group2-ID
group1-ID,group2-ID = exclude if one atom is in 1st group, other in 2nd
molecule/intra group-ID
*molecule/intra* group-ID
group-ID = exclude if both atoms are in the same molecule and in group
molecule/inter group-ID
*molecule/inter* group-ID
group-ID = exclude if both atoms are in different molecules and in group
none
*none*
delete all exclude settings
*page* value = N
N = number of pairs stored in a single neighbor page

View File

@ -18,16 +18,16 @@ Syntax
*gpu* args = Ngpu keyword value ...
Ngpu = # of GPUs per node
zero or more keyword/value pairs may be appended
keywords = *neigh* or *newton* or *pair/only* or *binsize* or *split* or *gpuID* or *tpa* or *blocksize* or *platform* or *device_type* or *ocl_args*
keywords = *neigh* or *newton* or *pair/only* or *binsize* or *split* or *gpuID* or *tpa* or *blocksize* or *omp* or *platform* or *device_type* or *ocl_args*
*neigh* value = *yes* or *no*
yes = neighbor list build on GPU (default)
no = neighbor list build on CPU
*yes* = neighbor list build on GPU (default)
*no* = neighbor list build on CPU
*newton* = *off* or *on*
off = set Newton pairwise flag off (default and required)
on = set Newton pairwise flag on (currently not allowed)
*off* = set Newton pairwise flag off (default and required)
*on* = set Newton pairwise flag on (currently not allowed)
*pair/only* = *off* or *on*
off = apply "gpu" suffix to all available styles in the GPU package (default)
on = apply "gpu" suffix only pair styles
*off* = apply "gpu" suffix to all available styles in the GPU package (default)
*on* = apply "gpu" suffix only pair styles
*binsize* value = size
size = bin size for neighbor list construction (distance units)
*split* = fraction
@ -42,7 +42,7 @@ Syntax
id = For OpenCL, platform ID for the GPU or accelerator
*gpuID* values = id
id = ID of first GPU to be used on each node
*device_type* value = *intelgpu* or *nvidiagpu* or *amdgpu* or *applegpu* or *generic* or *custom,val1,val2,...*
*device_type* value = *intelgpu* or *nvidiagpu* or *amdgpu* or *applegpu* or *generic* or *custom*,val1,val2,...
val1,val2,... = custom OpenCL accelerator configuration parameters (see below for details)
*ocl_args* value = args
args = List of additional OpenCL compiler arguments delimited by colons
@ -57,13 +57,13 @@ Syntax
*omp* value = Nthreads
Nthreads = number of OpenMP threads to use on CPU (default = 0)
*lrt* value = *yes* or *no*
yes = use additional thread dedicated for some PPPM calculations
no = do not dedicate an extra thread for some PPPM calculations
*yes* = use additional thread dedicated for some PPPM calculations
*no* = do not dedicate an extra thread for some PPPM calculations
*balance* value = split
split = fraction of work to offload to co-processor, -1 for dynamic
*ghost* value = *yes* or *no*
yes = include ghost atoms for offload
no = do not include ghost atoms for offload
*yes* = include ghost atoms for offload
*no* = do not include ghost atoms for offload
*tpc* value = Ntpc
Ntpc = max number of co-processor threads per co-processor core (default = 4)
*tptask* value = Ntptask
@ -71,7 +71,7 @@ Syntax
*no_affinity* values = none
*kokkos* args = keyword value ...
zero or more keyword/value pairs may be appended
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* *comm/pair/forward* *comm/fix/forward* or *comm/reverse* or *comm/pair/reverse* or *gpu/aware* or *pair/only*
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *neigh/transpose* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* or *comm/pair/forward* or *comm/fix/forward* or *comm/reverse* or *comm/pair/reverse* or *gpu/aware* or *pair/only*
*neigh* value = *full* or *half*
full = full neighbor list
half = half neighbor list built in thread-safe manner
@ -79,14 +79,14 @@ Syntax
full = full neighbor list
half = half neighbor list built in thread-safe manner
*neigh/thread* value = *off* or *on*
off = thread only over atoms
on = thread over both atoms and neighbors
*off* = thread only over atoms
*on* = thread over both atoms and neighbors
*neigh/transpose* value = *off* or *on*
off = use same memory layout for GPU neigh list build as pair style
on = use transposed memory layout for GPU neigh list build
*off* = use same memory layout for GPU neigh list build as pair style
*on* = use transposed memory layout for GPU neigh list build
*newton* = *off* or *on*
off = set Newton pairwise and bonded flags off
on = set Newton pairwise and bonded flags on
*off* = set Newton pairwise and bonded flags off
*on* = set Newton pairwise and bonded flags on
*binsize* value = size
size = bin size for neighbor list construction (distance units)
*comm* value = *no* or *host* or *device*
@ -96,23 +96,25 @@ Syntax
*comm/pair/forward* value = *no* or *device*
*comm/fix/forward* value = *no* or *device*
*comm/reverse* value = *no* or *host* or *device*
*no* = perform communication pack/unpack in non-KOKKOS mode
*host* = perform pack/unpack on host (e.g. with OpenMP threading)
*device* = perform pack/unpack on device (e.g. on GPU)
*comm/pair/reverse* value = *no* or *device*
no = perform communication pack/unpack in non-KOKKOS mode
host = perform pack/unpack on host (e.g. with OpenMP threading)
device = perform pack/unpack on device (e.g. on GPU)
*no* = perform communication pack/unpack in non-KOKKOS mode
*device* = perform pack/unpack on device (e.g. on GPU)
*gpu/aware* = *off* or *on*
off = do not use GPU-aware MPI
on = use GPU-aware MPI (default)
*off* = do not use GPU-aware MPI
*on* = use GPU-aware MPI (default)
*pair/only* = *off* or *on*
off = use device acceleration (e.g. GPU) for all available styles in the KOKKOS package (default)
on = use device acceleration only for pair styles (and host acceleration for others)
*off* = use device acceleration (e.g. GPU) for all available styles in the KOKKOS package (default)
*on* = use device acceleration only for pair styles (and host acceleration for others)
*omp* args = Nthreads keyword value ...
Nthreads = # of OpenMP threads to associate with each MPI process
zero or more keyword/value pairs may be appended
keywords = *neigh*
*neigh* value = *yes* or *no*
yes = threaded neighbor list build (default)
no = non-threaded neighbor list build
*yes* = threaded neighbor list build (default)
*no* = non-threaded neighbor list build
Examples
""""""""

View File

@ -36,7 +36,7 @@ Examples
.. code-block:: LAMMPS
pair_style brownian 1.5 1 1 2.01 2.5 2.0 5878567 (assuming radius = 1)
pair_style brownian 1.5 1 1 2.01 2.5 2.0 5878567 # (assuming radius = 1)
pair_coeff 1 1 2.05 2.8
pair_coeff * *

View File

@ -24,7 +24,7 @@ Examples
pair_coeff * * 1.0 1.0
pair_coeff * * nialhjea 1 1 2
pair_coeff * 3 morse.table ENTRY1
pair_coeff 1 2 lj/cut 1.0 1.0 2.5 (for pair_style hybrid)
pair_coeff 1 2 lj/cut 1.0 1.0 2.5 # (for pair_style hybrid)
Description
"""""""""""

View File

@ -78,12 +78,12 @@ Examples
Description
"""""""""""
Style *lj/cut/dipole/cut* computes interactions between pairs of particles
that each have a charge and/or a point dipole moment. In addition to
the usual Lennard-Jones interaction between the particles (Elj) the
charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole (Epp)
interactions are computed by these formulas for the energy (E), force
(F), and torque (T) between particles I and J.
Style *lj/cut/dipole/cut* computes interactions between pairs of
particles that each have a charge and/or a point dipole moment. In
addition to the usual Lennard-Jones interaction between the particles
(Elj) the charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole
(Epp) interactions are computed by these formulas for the energy (E),
force (F), and torque (T) between particles I and J.
.. math::
@ -112,18 +112,18 @@ interactions are computed by these formulas for the energy (E), force
\frac{3}{r^5} (\vec{p_i} \bullet \vec{r})
(\vec{p_j} \times \vec{r})
where :math:`q_i` and :math:`q_j` are the charges on the two particles,
:math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole moment vectors of
the two particles, r is their separation distance, and the vector r =
Ri - Rj is the separation vector between the two particles. Note that
Eqq and Fqq are simply Coulombic energy and force, Fij = -Fji as
symmetric forces, and Tij != -Tji since the torques do not act
symmetrically. These formulas are discussed in :ref:`(Allen) <Allen2>`
and in :ref:`(Toukmaji) <Toukmaji2>`.
where :math:`q_i` and :math:`q_j` are the charges on the two
particles, :math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole
moment vectors of the two particles, r is their separation distance,
and the vector r = Ri - Rj is the separation vector between the two
particles. Note that Eqq and Fqq are simply Coulombic energy and
force, Fij = -Fji as symmetric forces, and Tij != -Tji since the
torques do not act symmetrically. These formulas are discussed in
:ref:`(Allen) <Allen2>` and in :ref:`(Toukmaji) <Toukmaji2>`.
Also note, that in the code, all of these terms (except Elj) have a
:math:`C/\epsilon` prefactor, the same as the Coulombic term in the LJ +
Coulombic pair styles discussed :doc:`here <pair_lj>`. C is an
:math:`C/\epsilon` prefactor, the same as the Coulombic term in the
LJ + Coulombic pair styles discussed :doc:`here <pair_lj>`. C is an
energy-conversion constant and epsilon is the dielectric constant
which can be set by the :doc:`dielectric <dielectric>` command. The
same is true of the equations that follow for other dipole pair
@ -135,11 +135,11 @@ moment. In general, a shifted-force potential is a (slightly) modified
potential containing extra terms that make both the energy and its
derivative go to zero at the cutoff distance; this removes
(cutoff-related) problems in energy conservation and any numerical
instability in the equations of motion :ref:`(Allen) <Allen2>`. Shifted-force
interactions for the Lennard-Jones (E_LJ), charge-charge (Eqq),
charge-dipole (Eqp), dipole-charge (Epq) and dipole-dipole (Epp)
potentials are computed by these formulas for the energy (E), force
(F), and torque (T) between particles I and J:
instability in the equations of motion :ref:`(Allen)
<Allen2>`. Shifted-force interactions for the Lennard-Jones (E_LJ),
charge-charge (Eqq), charge-dipole (Eqp), dipole-charge (Epq) and
dipole-dipole (Epp) potentials are computed by these formulas for the
energy (E), force (F), and torque (T) between particles I and J:
.. math::
@ -207,65 +207,52 @@ potentials are computed by these formulas for the energy (E), force
where :math:`\epsilon` and :math:`\sigma` are the standard LJ
parameters, :math:`r_c` is the cutoff, :math:`q_i` and :math:`q_j` are
the charges on the two particles, :math:`\vec{p_i}` and
:math:`\vec{p_j}` are the dipole moment vectors of the two particles, r
is their separation distance, and the vector r = Ri - Rj is the
separation vector between the two particles. Note that Eqq and Fqq are
simply Coulombic energy and force, Fij = -Fji as symmetric forces, and
Tij != -Tji since the torques do not act symmetrically. The
:math:`\vec{p_j}` are the dipole moment vectors of the two particles,
r is their separation distance, and the vector r = Ri - Rj is the
separation vector between the two particles. Note that Eqq and Fqq
are simply Coulombic energy and force, Fij = -Fji as symmetric forces,
and Tij != -Tji since the torques do not act symmetrically. The
shifted-force formula for the Lennard-Jones potential is reported in
:ref:`(Stoddard) <Stoddard>`. The original (non-shifted) formulas for
the electrostatic potentials, forces and torques can be found in
:ref:`(Price) <Price2>`. The shifted-force electrostatic potentials have
been obtained by applying equation 5.13 of :ref:`(Allen) <Allen2>`. The
formulas for the corresponding forces and torques have been obtained by
applying the 'chain rule' as in appendix C.3 of :ref:`(Allen) <Allen2>`.
:ref:`(Price) <Price2>`. The shifted-force electrostatic potentials
have been obtained by applying equation 5.13 of :ref:`(Allen)
<Allen2>`. The formulas for the corresponding forces and torques have
been obtained by applying the 'chain rule' as in appendix C.3 of
:ref:`(Allen) <Allen2>`.
If one cutoff is specified in the pair_style command, it is used for
both the LJ and Coulombic (q,p) terms. If two cutoffs are specified,
they are used as cutoffs for the LJ and Coulombic (q,p) terms
respectively. This pair style also supports an optional *scale* keyword
as part of a pair_coeff statement, where the interactions can be
scaled according to this factor. This scale factor is also made available
for use with fix adapt.
respectively. This pair style also supports an optional *scale*
keyword as part of a pair_coeff statement, where the interactions can
be scaled according to this factor. This scale factor is also made
available for use with fix adapt.
Style *lj/cut/dipole/long* computes long-range point-dipole
interactions as discussed in :ref:`(Toukmaji) <Toukmaji2>`. Dipole-dipole,
dipole-charge, and charge-charge interactions are all supported, along
with the standard 12/6 Lennard-Jones interactions, which are computed
with a cutoff. A :doc:`kspace_style <kspace_style>` must be defined to
use this pair style. Currently, only :doc:`kspace_style ewald/disp <kspace_style>` support long-range point-dipole
interactions.
Style *lj/cut/dipole/long* computes the short-range portion of
point-dipole interactions as discussed in :ref:`(Toukmaji)
<Toukmaji2>`. Dipole-dipole, dipole-charge, and charge-charge
interactions are all supported, along with the standard 12/6
Lennard-Jones interactions, which are computed with a cutoff. A
:doc:`kspace_style <kspace_style>` must be defined to use this pair
style. If only dipoles (not point charges) are included in the model,
the kspace style can be one of these 3 options, all of which compute
the long-range portion of dipole-dipole interactions. If the model
includes point charges (in addition to dipoles), then only the first
of these kspace styles can be used:
Style *lj/long/dipole/long* also computes point-dipole interactions as
discussed in :ref:`(Toukmaji) <Toukmaji2>`. Long-range dipole-dipole,
dipole-charge, and charge-charge interactions are all supported, along
with the standard 12/6 Lennard-Jones interactions. LJ interactions
can be cutoff or long-ranged.
* :doc:`kspace_style ewald/disp <kspace_style>`
* :doc:`kspace_style ewald/dipole <kspace_style>`
* :doc:`kspace_style pppm/dipole <kspace_style>`
For style *lj/long/dipole/long*, if *flag_lj* is set to *long*, no
cutoff is used on the LJ 1/r\^6 dispersion term. The long-range
portion is calculated by using the :doc:`kspace_style ewald_disp <kspace_style>` command. The specified LJ cutoff then
determines which portion of the LJ interactions are computed directly
by the pair potential versus which part is computed in reciprocal
space via the Kspace style. If *flag_lj* is set to *cut*, the LJ
interactions are simply cutoff, as with :doc:`pair_style lj/cut <pair_lj>`. If *flag_lj* is set to *off*, LJ interactions
are not computed at all.
Style *lj/long/dipole/long* has the same functionality as style
*lj/cut/dipole/long*, except it also has an option to compute 12/6
Lennard-Jones interactions for use with a long-range dispersion kspace
style. This is done by setting its *flag_lj* argument to *long*. For
long-range LJ interactions, the doc:`kspace_style ewald/disp
<kspace_style>` command must be used.
If *flag_coul* is set to *long*, no cutoff is used on the Coulombic or
dipole interactions. The long-range portion is calculated by using
*ewald_disp* of the :doc:`kspace_style <kspace_style>` command. If
*flag_coul* is set to *off*, Coulombic and dipole interactions are not
computed at all.
Atoms with dipole moments should be integrated using the :doc:`fix nve/sphere update dipole <fix_nve_sphere>` or the :doc:`fix nvt/sphere update dipole <fix_nvt_sphere>` command to rotate the
dipole moments. The *omega* option on the :doc:`fix langevin <fix_langevin>` command can be used to thermostat the
rotational motion. The :doc:`compute temp/sphere <compute_temp_sphere>`
command can be used to monitor the temperature, since it includes
rotational degrees of freedom. The :doc:`atom_style hybrid dipole sphere <atom_style>` command should be used since
it defines the point dipoles and their rotational state.
The magnitude and orientation of the dipole moment for each particle
can be defined by the :doc:`set <set>` command or in the "Atoms" section
of the data file read in by the :doc:`read_data <read_data>` command.
----------
The following coefficients must be defined for each pair of atoms
types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
@ -287,6 +274,40 @@ type pair.
----------
Note that for systems using these pair styles, typically particles
should be able to exert torque on each other via their dipole moments
so that the particle and its dipole moment can rotate. This requires
they not be point particles, but finite-size spheres. Thus you should
use a command like :doc:`atom_style hybrid sphere dipole <atom_style>`
to use particles with both attributes.
The magnitude and orientation of the dipole moment for each particle
can be defined by the :doc:`set <set>` command or in the "Atoms"
section of the data file read in by the :doc:`read_data <read_data>`
command.
Rotating finite-size particles have 6 degrees of freedom (DOFs),
translation and rotational. You can use the :doc:`compute temp/sphere
<compute_temp_sphere>` command to monitor a temperature which includes
all these DOFs.
Finite-size particles with dipole moments should be integrated using
one of these options:
* :doc:`fix nve/sphere update dipole <fix_nve_sphere>`
* :doc:`fix nve/sphere update dipole <fix_nve_sphere>` plus :doc:`fix langevin omega yes <fix_langevin>`
* :doc:`fix nvt/sphere update dipole <fix_nvt_sphere>`
* :doc:`fix npt/sphere update dipole <fix_npt_sphere>`
In all cases the "update dipole" setting insures the dipole moments
are also rotated when the finite-size spheres rotate. The 2nd and 3rd
bullets perform thermostatting; in the case of a Langevin thermostat
the "omega yes" option also thermostats the rotational degrees of
freedom (if desired). The 4th bullet performs thermostatting and
barostatting.
----------
.. include:: accel_styles.rst
----------

View File

@ -17,8 +17,8 @@ Examples
.. code-block:: LAMMPS
pair_style rann
pair_coeff ** Mg.rann Mg
pair_coeff ** MgAlalloy.rann Mg Mg Al Mg
pair_coeff * * Mg.rann Mg
pair_coeff * * MgAlalloy.rann Mg Mg Al Mg
Description
"""""""""""

View File

@ -14,13 +14,9 @@ Syntax
pair_style style args
* style = *smatb*
* style = *smatb* or *smatb/single*
* args = none
.. parsed-literal::
*smatb*
Examples
""""""""
@ -29,13 +25,18 @@ Examples
pair_style smatb
pair_coeff 1 1 2.88 10.35 4.178 0.210 1.818 4.07293506 4.9883063257983666
pair_style smatb/single
pair_coeff 1 1 2.88 10.35 4.178 0.210 1.818 4.07293506 4.9883063257983666
Description
"""""""""""
The *smatb* styles compute the Second Moment Approximation to the Tight Binding
:ref:`(Cyrot) <Cyrot>`, :ref:`(Gupta) <Gupta>`, :ref:`(Rosato) <Rosato>`,
given by
.. versionadded:: 4May2022
The *smatb* and *smatb/single* styles compute the Second Moment
Approximation to the Tight Binding :ref:`(Cyrot) <Cyrot>`,
:ref:`(Gupta) <Gupta>`, :ref:`(Rosato) <Rosato>`, given by
.. math::
E_{i} = \sum_{j,R_{ij}\leq R_{c}} \alpha(R_{ij}) - \sqrt{\sum_{j,R_{ij}\leq R_{c}}\Xi^2(R_{ij})}
@ -66,6 +67,8 @@ exponential terms and their first and second derivatives are smoothly
reduced to zero, from the inner cutoff :math:`R_{sc}` to the outer
cutoff :math:`R_{c}`.
The *smatb/single* style is an optimization when using only a single atom type.
Coefficients
""""""""""""
@ -100,10 +103,10 @@ For atom type pairs I,J and I != J the coefficients are not automatically mixed.
Restrictions
""""""""""""
This pair style is part of the SMTBQ package and is only enabled
These pair styles are part of the SMTBQ package and are only enabled
if LAMMPS is built with that package. See the :doc:`Build package <Build_package>` page for more info.
These pair potentials require the :doc:`newton <newton>` setting to be "on" for pair interactions.
These pair styles require the :doc:`newton <newton>` setting to be "on" for pair interactions.
Related commands
""""""""""""""""

View File

@ -75,6 +75,8 @@ where :math:`\phi_2` is a two-body term and :math:`\phi_3` is a
three-body term. The summations in the formula are over all neighbors J
and K of atom I within a cutoff distance :math:`a `\sigma`.
.. versionadded:: 14Dec2021
The *sw/mod* style is designed for simulations of materials when
distinguishing three-body angles are necessary, such as borophene and
transition metal dichalcogenides, which cannot be described by the

View File

@ -31,6 +31,8 @@ Used in example input script:
Description
"""""""""""
.. versionadded:: 2Jun2022
The *sw/angle/table* style is a modification of the original
:doc:`pair_style sw <pair_sw>`. It has been developed for coarse-grained
simulations (of water) (:ref:`Scherer1 <Scherer1>`), but can be employed

View File

@ -35,6 +35,8 @@ Used in example input scripts:
Description
"""""""""""
.. versionadded:: 2Jun2022
The *threebody/table* style is a pair style for generic tabulated
three-body interactions. It has been developed for (coarse-grained)
simulations (of water) with Kernel-based machine learning (ML)

View File

@ -84,8 +84,8 @@ little to be gained by choosing other values of :math:`\nu` and
This pair style does not support the :doc:`pair_modify <pair_modify>`
mixing and table options.
The :doc:`pair_modify <pair_modify>` tail option is not relevant
for this pair style as it goes to zero at the cut-off radius.
The :doc:`pair_modify <pair_modify>` tail and shift options are not
relevant for this pair style as it goes to zero at the cut-off radius.
This pair style writes its information to :doc:`binary restart files
<restart>`, so pair_style and pair_coeff commands do not need to be

View File

@ -11,7 +11,7 @@ Syntax
thermo_modify keyword value ...
* one or more keyword/value pairs may be listed
* keyword = *lost* or *lost/bond* or *warn* or *norm* or *flush* or *line* or *format* or *temp* or *press*
* keyword = *lost* or *lost/bond* or *warn* or *norm* or *flush* or *line* or *colname* or *format* or *temp* or *press*
.. parsed-literal::
@ -153,6 +153,8 @@ containing the timestep and CPU time ("multi"), or in a YAML format
block ("yaml"). This modify option overrides the *one*, *multi*, or
*yaml* thermo_style settings.
.. versionadded:: 4May2022
The *colname* keyword can be used to change the default header keyword
for a column or field of thermodynamic output. The setting for *ID
string* replaces the default text with the provided string. *ID* can be

View File

@ -66,7 +66,7 @@ Syntax
bound(group,dir,region), gyration(group,region), ke(group,reigon),
angmom(group,dim,region), torque(group,dim,region),
inertia(group,dimdim,region), omega(group,dim,region)
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), extract_setting(name)
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name)
feature functions = is_active(category,feature), is_available(category,feature), is_defined(category,id)
atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i]
atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q
@ -939,6 +939,20 @@ The is_file(name) function is a test whether *name* is a (readable) file
and returns 1 in this case, otherwise it returns 0. For that *name*
is taken as a literal string and must not have any blanks in it.
The is_os(name) function is a test whether *name* is part of the OS
information that LAMMPS collects and provides in the
:cpp:func:`platform::os_info() <LAMMPS_NS::platform::os_info>` function.
The argument *name* is interpreted as a regular expression as documented
for the :cpp:func:`utils::strmatch() <LAMMPS_NS::utils::strmatch>`
function. This allows to adapt LAMMPS inputs to the OS it runs on:
.. code-block:: LAMMPS
if $(is_os(^Windows)) then &
"shell copy ${input_dir}\some_file.txt ." &
else &
"shell cp ${input_dir}/some_file.txt ."
The extract_setting(name) function enables access to basic settings for
the LAMMPS executable and the running simulation via calling the
:cpp:func:`lammps_extract_setting` library function. For example, the
@ -1002,7 +1016,7 @@ step
.. code-block:: LAMMPS
timestep $(2.0*(1.0+2.0*is_active(pair,respa))
timestep $(2.0*(1.0+2.0*is_active(pair,respa)))
if $(is_active(pair,respa)) then "run_style respa 4 3 2 2 improper 1 inner 2 5.5 7.0 outer 3 kspace 4" else "run_style respa 3 3 2 improper 1 pair 2 kspace 3"
The *is_available(category,name)* function allows to query whether

View File

@ -39,6 +39,18 @@ hr {
display: none;
}
#userdoc.toctree-wrapper.compound p {
display: none;
}
#progdoc.toctree-wrapper.compound p {
display: none;
}
#reference.toctree-wrapper.compound p {
display: none;
}
.ui.tabular.menu .item {
padding-right: 1em;
padding-left: 1em;

View File

@ -0,0 +1 @@
!*.html

View File

@ -4,17 +4,8 @@
{% endblock %}
{% block body %}
<div id="search-results">
<script>
(function() {
var cx = '012685039201307511604:um7if1hinba';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:searchresults-only></gcse:searchresults-only>
<script async src="https://cse.google.com/cse.js?cx=000956471495417073164:5ggs_m6ymw0">
</script>
<div class="gcse-search"></div>
</div>
{% endblock %}

View File

@ -1346,6 +1346,7 @@ hiID
Hijazi
Hilger
Hinestrosa
hipCUB
hipFFT
histo
histogrammed

View File

@ -1105,7 +1105,7 @@ contains !! Wrapper functions local to this module {{{1
C_xy = xy
C_xz = xz
C_yz = yz
call lammps_actual_reset_box (ptr, C_boxlo, C_boxhi, C_xy, C_xz, C_yz)
call lammps_actual_reset_box (ptr, C_boxlo, C_boxhi, C_xy, C_yz, C_xz)
end subroutine lammps_reset_box
! lammps_gather_atoms {{{2

View File

@ -40,7 +40,7 @@ the dynamically-linkable library (liblammps_fortran.so).
(2) Copy said library to your Fortran program's source directory or replace
${LAMMPS_LIB} with its full path in the instructions below.
(3) Compile (but don't link!) LAMMPS.F90. Example:
mpif90 -c LAMMPS.f90
mpifort -c LAMMPS.f90
OR
gfortran -c LAMMPS.F90
NOTE: you may get a warning such as,
@ -72,8 +72,8 @@ the dynamically-linkable library (liblammps_fortran.so).
were part of the usual LAMMPS library interface (if you have the module
file visible to the compiler, that is).
(6) Compile (but don't link) your Fortran program. Example:
mpif90 -c myfreeformatfile.f90
mpif90 -c myfixedformatfile.f
mpifort -c myfreeformatfile.f90
mpifort -c myfixedformatfile.f
OR
gfortran -c myfreeformatfile.f90
gfortran -c myfixedformatfile.f
@ -83,12 +83,12 @@ the dynamically-linkable library (liblammps_fortran.so).
IMPORTANT: If the Fortran module from part (3) is not in the current
directory or in one searched by the compiler for module files, you will
need to include that location via the -I flag to the compiler, like so:
mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
mpifort -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
(7) Link everything together, including any libraries needed by LAMMPS (such
as the C++ standard library, the C math library, the JPEG library, fftw,
etc.) For example,
mpif90 LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \
mpifort LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \
${LAMMPS_LIB} -lmpi_cxx -lstdc++ -lm
OR
gfortran LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \
@ -105,17 +105,17 @@ You should now have a working executable.
(1) Compile LAMMPS as a dynamic library
(make makeshlib && make -f Makefile.shlib [targetname]).
(2) Compile, but don't link, LAMMPS.F90 using the -fPIC flag, such as
mpif90 -fPIC -c LAMMPS.f90
mpifort -fPIC -c LAMMPS.f90
(3) Compile, but don't link, LAMMPS-wrapper.cpp in the same manner, e.g.
mpicxx -fPIC -c LAMMPS-wrapper.cpp
(4) Make the dynamic library, like so:
mpif90 -fPIC -shared -o liblammps_fortran.so LAMMPS.o LAMMPS-wrapper.o
mpifort -fPIC -shared -o liblammps_fortran.so LAMMPS.o LAMMPS-wrapper.o
(5) Compile your program, such as,
mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
mpifort -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
where ${LAMMPS_SRC}/examples/COUPLE/fortran2 contains the .mod file from
step (3)
(6) Link everything together, such as
mpif90 ${my_object_files} -L${LAMMPS_SRC} \
mpifort ${my_object_files} -L${LAMMPS_SRC} \
-L${LAMMPS_SRC}/examples/COUPLE/fortran2 -llammps_fortran \
-llammps_openmpi -lmpi_cxx -lstdc++ -lm

View File

@ -31,7 +31,7 @@ spkpath.h contains path to SPPARKS home directory
After editing the Makefile, lmppath.h, and spkpath.h to make them
suitable for your box, type:
g++ -f Makefile.g++
make -f Makefile.g++
and you should get the lmpspk executable.

View File

@ -1,66 +1,66 @@
# 2d NEB surface simulation, hop from surface to become adatom
dimension 2
boundary p s p
dimension 2
boundary p s p
atom_style atomic
neighbor 0.3 bin
neigh_modify delay 5
atom_modify map array sort 0 0.0
atom_style atomic
neighbor 0.3 bin
neigh_modify delay 5
atom_modify map array sort 0 0.0
variable u uloop 20
variable u uloop 20
# create geometry with flat surface
lattice hex 0.9
region box block 0 20 0 10 -0.25 0.25
lattice hex 0.9
region box block 0 20 0 10 -0.25 0.25
#create_box 3 box
#create_atoms 1 box
#mass * 1.0
#create_box 3 box
#create_atoms 1 box
#mass * 1.0
#write_data initial.hop1
read_data initial.hop1
# LJ potentials
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes
# initial minimization to relax surface
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
# define groups
region 1 block INF INF INF 1.25 INF INF
group lower region 1
group mobile subtract all lower
set group lower type 2
region 1 block INF INF INF 1.25 INF INF
group lower region 1
group mobile subtract all lower
set group lower type 2
timestep 0.05
timestep 0.05
# group of NEB atoms - either block or single atom ID 412
region surround block 10 18 17 20 0 0 units box
group nebatoms region surround
#group nebatoms id 412
set group nebatoms type 3
group nonneb subtract all nebatoms
region surround block 10 18 17 20 0 0 units box
group nebatoms region surround
#group nebatoms id 412
set group nebatoms type 3
group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 parallel ideal
fix 3 all enforce2d
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 parallel ideal
fix 3 all enforce2d
thermo 100
thermo 100
#dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u
#dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u
# run NEB for 2000 steps or to force tolerance
min_style quickmin
min_style quickmin
neb 0.0 0.1 1000 1000 100 final final.hop1
neb 0.0 0.1 1000 1000 100 final final.hop1

View File

@ -1,56 +1,56 @@
# 2d NEB surface simulation, hop from surface to become adatom
dimension 2
boundary p s p
dimension 2
boundary p s p
atom_style atomic
neighbor 0.3 bin
neigh_modify delay 5
atom_modify map array sort 0 0.0
atom_style atomic
neighbor 0.3 bin
neigh_modify delay 5
atom_modify map array sort 0 0.0
variable u uloop 20
variable u uloop 20
# create geometry with flat surface
lattice hex 0.9
region box block 0 20 0 10 -0.25 0.25
lattice hex 0.9
region box block 0 20 0 10 -0.25 0.25
read_data initial.hop1.end
# LJ potentials
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes
# define groups
region 1 block INF INF INF 1.25 INF INF
group lower region 1
group mobile subtract all lower
set group lower type 2
region 1 block INF INF INF 1.25 INF INF
group lower region 1
group mobile subtract all lower
set group lower type 2
timestep 0.05
timestep 0.05
# group of NEB atoms - either block or single atom ID 412
region surround block 10 18 17 20 0 0 units box
group nebatoms region surround
#group nebatoms id 412
set group nebatoms type 3
group nonneb subtract all nebatoms
region surround block 10 18 17 20 0 0 units box
group nebatoms region surround
#group nebatoms id 412
set group nebatoms type 3
group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 parallel ideal end first 1.0
fix 3 all enforce2d
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 parallel ideal end first 1.0
fix 3 all enforce2d
thermo 100
thermo 100
#dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u
#dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u
# run NEB for 2000 steps or to force tolerance
min_style quickmin
min_style quickmin
neb 0.0 0.1 1000 1000 100 final final.hop1
neb 0.0 0.1 1000 1000 100 final final.hop1

View File

@ -1,68 +1,68 @@
# 2d NEB surface simulation, hop of adatom on surface
dimension 2
boundary p s p
dimension 2
boundary p s p
atom_style atomic
neighbor 0.3 bin
neigh_modify delay 5
atom_modify map array sort 0 0.0
atom_style atomic
neighbor 0.3 bin
neigh_modify delay 5
atom_modify map array sort 0 0.0
variable u uloop 20
variable u uloop 20
# create geometry with adatom
lattice hex 0.9
region box block 0 20 0 11 -0.25 0.25
region box1 block 0 20 0 10 -0.25 0.25
lattice hex 0.9
region box block 0 20 0 11 -0.25 0.25
region box1 block 0 20 0 10 -0.25 0.25
#create_box 3 box
#create_atoms 1 region box1
#create_atoms 1 single 11.5 10.5 0
#mass * 1.0
#create_box 3 box
#create_atoms 1 region box1
#create_atoms 1 single 11.5 10.5 0
#mass * 1.0
#write_data initial.hop2
read_data initial.hop2
# LJ potentials
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes
# initial minimization to relax surface
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
# define groups
region 1 block INF INF INF 1.25 INF INF
group lower region 1
group mobile subtract all lower
set group lower type 2
region 1 block INF INF INF 1.25 INF INF
group lower region 1
group mobile subtract all lower
set group lower type 2
timestep 0.05
timestep 0.05
# group of NEB atoms - either block or single atom ID 421
region surround block 10 18 17 21 0 0 units box
group nebatoms region surround
#group nebatoms id 421
set group nebatoms type 3
group nonneb subtract all nebatoms
region surround block 10 18 17 21 0 0 units box
group nebatoms region surround
#group nebatoms id 421
set group nebatoms type 3
group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0
fix 3 all enforce2d
fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0
fix 3 all enforce2d
thermo 100
thermo 100
#dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u
#dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u
# run NEB for 2000 steps or to force tolerance
min_style fire
min_style fire
neb 0.0 0.05 1000 1000 100 final final.hop2
neb 0.0 0.05 1000 1000 100 final final.hop2

View File

@ -5,7 +5,7 @@ units metal
atom_style atomic
atom_modify map array
boundary p p p
atom_modify sort 0 0.0
atom_modify sort 0 0.0
# coordination number cutoff
@ -45,7 +45,7 @@ group Si type 1
group del id 300
delete_atoms group del compress no
group vacneigh id 174 175 301 304 306 331 337
# choose potential
pair_style sw
@ -53,26 +53,26 @@ pair_coeff * * Si.sw Si
# set up neb run
variable u uloop 20
variable u uloop 20
# initial minimization to relax vacancy
displace_atoms all random 0.1 0.1 0.1 123456
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
# only output atoms near vacancy
#dump events vacneigh custom 1000 dump.neb.sivac.$u id type x y z
# initial minimization to relax vacancy
fix 1 all neb 1.0
displace_atoms all random 0.1 0.1 0.1 123456
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
fix 1 all neb 1.0
thermo 100
thermo 100
# run NEB for 2000 steps or to force tolerance
timestep 0.01
min_style quickmin
min_style quickmin
neb 0.0 0.01 100 100 10 final final.sivac
neb 0.0 0.01 100 100 10 final final.sivac

View File

@ -54,20 +54,18 @@ MODULE LIBLAMMPS
! interface definitions for calling functions in library.cpp
INTERFACE
FUNCTION lammps_open(argc,argv,comm) &
BIND(C, name='lammps_open_fortran')
FUNCTION lammps_open(argc, argv, comm) BIND(C, name='lammps_open_fortran')
IMPORT :: c_ptr, c_int
INTEGER(c_int), VALUE, INTENT(in) :: argc, comm
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv
TYPE(c_ptr) :: lammps_open
END FUNCTION lammps_open
FUNCTION lammps_open_no_mpi(argc,argv,handle) &
BIND(C, name='lammps_open_no_mpi')
FUNCTION lammps_open_no_mpi(argc, argv, handle) BIND(C, name='lammps_open_no_mpi')
IMPORT :: c_ptr, c_int
INTEGER(c_int), VALUE, INTENT(in) :: argc
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv
TYPE(c_ptr), INTENT(out) :: handle
TYPE(c_ptr), VALUE, INTENT(in) :: handle
TYPE(c_ptr) :: lammps_open_no_mpi
END FUNCTION lammps_open_no_mpi
@ -85,28 +83,26 @@ MODULE LIBLAMMPS
SUBROUTINE lammps_kokkos_finalize() BIND(C, name='lammps_kokkos_finalize')
END SUBROUTINE lammps_kokkos_finalize
SUBROUTINE lammps_file(handle,filename) BIND(C, name='lammps_file')
SUBROUTINE lammps_file(handle, filename) BIND(C, name='lammps_file')
IMPORT :: c_ptr
TYPE(c_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: filename
END SUBROUTINE lammps_file
SUBROUTINE lammps_command(handle,cmd) BIND(C, name='lammps_command')
SUBROUTINE lammps_command(handle, cmd) BIND(C, name='lammps_command')
IMPORT :: c_ptr
TYPE(c_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: cmd
END SUBROUTINE lammps_command
SUBROUTINE lammps_commands_list(handle,ncmd,cmds) &
BIND(C, name='lammps_commands_list')
SUBROUTINE lammps_commands_list(handle, ncmd, cmds) BIND(C, name='lammps_commands_list')
IMPORT :: c_ptr, c_int
TYPE(c_ptr), VALUE :: handle
INTEGER(c_int), VALUE, INTENT(in) :: ncmd
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: cmds
END SUBROUTINE lammps_commands_list
SUBROUTINE lammps_commands_string(handle,str) &
BIND(C, name='lammps_commands_string')
SUBROUTINE lammps_commands_string(handle, str) BIND(C, name='lammps_commands_string')
IMPORT :: c_ptr
TYPE(c_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: str
@ -137,24 +133,22 @@ MODULE LIBLAMMPS
END INTERFACE
CONTAINS
! Fortran wrappers and helper functions.
! Constructor for the LAMMPS class.
! Combined wrapper around lammps_open_fortran() and lammps_open_no_mpi()
TYPE(lammps) FUNCTION lmp_open(args,comm)
TYPE(lammps) FUNCTION lmp_open(args, comm)
IMPLICIT NONE
INTEGER,INTENT(in), OPTIONAL :: comm
INTEGER, INTENT(in), OPTIONAL :: comm
CHARACTER(len=*), INTENT(in), OPTIONAL :: args(:)
TYPE(c_ptr), ALLOCATABLE :: argv(:)
TYPE(c_ptr) :: dummy=c_null_ptr
INTEGER :: i,argc
INTEGER(c_int) :: i, c_comm, argc
IF (PRESENT(args)) THEN
! convert argument list to c style
! convert fortran argument list to c style
argc = SIZE(args)
ALLOCATE(argv(argc))
DO i=1,argc
DO i=1, argc
argv(i) = f2c_string(args(i))
END DO
ELSE
@ -164,23 +158,24 @@ CONTAINS
ENDIF
IF (PRESENT(comm)) THEN
lmp_open%handle = lammps_open(argc,argv,comm)
c_comm = comm
lmp_open%handle = lammps_open(argc, argv, c_comm)
ELSE
lmp_open%handle = lammps_open_no_mpi(argc,argv,dummy)
lmp_open%handle = lammps_open_no_mpi(argc, argv, c_null_ptr)
END IF
! Clean up allocated memory
DO i=1,argc
DO i=1, argc
CALL lammps_free(argv(i))
END DO
DEALLOCATE(argv)
END FUNCTION lmp_open
! Combined Fortran wrapper around lammps_close() and lammps_mpi_finalize()
SUBROUTINE lmp_close(self,finalize)
SUBROUTINE lmp_close(self, finalize)
IMPLICIT NONE
CLASS(lammps) :: self
LOGICAL,INTENT(in),OPTIONAL :: finalize
LOGICAL, INTENT(in), OPTIONAL :: finalize
CALL lammps_close(self%handle)
@ -206,68 +201,69 @@ CONTAINS
lmp_get_natoms = lammps_get_natoms(self%handle)
END FUNCTION lmp_get_natoms
SUBROUTINE lmp_file(self,filename)
SUBROUTINE lmp_file(self, filename)
IMPLICIT NONE
CLASS(lammps) :: self
CHARACTER(len=*) :: filename
TYPE(c_ptr) :: str
str = f2c_string(filename)
CALL lammps_file(self%handle,str)
CALL lammps_file(self%handle, str)
CALL lammps_free(str)
END SUBROUTINE lmp_file
! equivalent function to lammps_command()
SUBROUTINE lmp_command(self,cmd)
SUBROUTINE lmp_command(self, cmd)
IMPLICIT NONE
CLASS(lammps) :: self
CHARACTER(len=*) :: cmd
TYPE(c_ptr) :: str
str = f2c_string(cmd)
CALL lammps_command(self%handle,str)
CALL lammps_command(self%handle, str)
CALL lammps_free(str)
END SUBROUTINE lmp_command
! equivalent function to lammps_commands_list()
SUBROUTINE lmp_commands_list(self,cmds)
SUBROUTINE lmp_commands_list(self, cmds)
IMPLICIT NONE
CLASS(lammps) :: self
CHARACTER(len=*), INTENT(in), OPTIONAL :: cmds(:)
TYPE(c_ptr), ALLOCATABLE :: cmdv(:)
INTEGER :: i,ncmd
INTEGER :: i, ncmd
! convert command list to c style
ncmd = SIZE(cmds)
ALLOCATE(cmdv(ncmd))
DO i=1,ncmd
DO i=1, ncmd
cmdv(i) = f2c_string(cmds(i))
END DO
CALL lammps_commands_list(self%handle,ncmd,cmdv)
CALL lammps_commands_list(self%handle, ncmd, cmdv)
! Clean up allocated memory
DO i=1,ncmd
DO i=1, ncmd
CALL lammps_free(cmdv(i))
END DO
DEALLOCATE(cmdv)
END SUBROUTINE lmp_commands_list
! equivalent function to lammps_commands_string()
SUBROUTINE lmp_commands_string(self,str)
SUBROUTINE lmp_commands_string(self, str)
IMPLICIT NONE
CLASS(lammps) :: self
CHARACTER(len=*) :: str
TYPE(c_ptr) :: tmp
tmp = f2c_string(str)
CALL lammps_commands_string(self%handle,tmp)
CALL lammps_commands_string(self%handle, tmp)
CALL lammps_free(tmp)
END SUBROUTINE lmp_commands_string
! ----------------------------------------------------------------------
! local helper functions
! copy fortran string to zero terminated c string
! ----------------------------------------------------------------------
FUNCTION f2c_string(f_string) RESULT(ptr)
CHARACTER (len=*), INTENT(in) :: f_string
CHARACTER (len=1, kind=c_char), POINTER :: c_string(:)
@ -276,8 +272,8 @@ CONTAINS
n = LEN_TRIM(f_string)
ptr = lammps_malloc(n+1)
CALL C_F_POINTER(ptr,c_string,[1])
DO i=1,n
CALL C_F_POINTER(ptr, c_string, [1])
DO i=1, n
c_string(i) = f_string(i:i)
END DO
c_string(n+1) = c_null_char

View File

@ -787,8 +787,7 @@ namespace ATC {
xtArgs[3] = 1.; xtArgs[4] = 1.; xtArgs[5] = 1.;
xtArgs[6] = coulombConstant*chargeDensity;
xtArgs[7] = -1.;
string radialPower = "radial_power";
f = XT_Function_Mgr::instance()->function(radialPower,8,xtArgs);
f = XT_Function_Mgr::instance()->function("radial_power",8,xtArgs);
for (iset = faceset->begin(); iset != faceset->end(); iset++) {

View File

@ -186,7 +186,7 @@ static const double localCoordinatesTolerance = 1.e-09;
double c[3]={0,0,0};
c[0] = y0*X[0] - y0*X[1] - y0*X[2] + y0*X[3] - x0*Y[0] + (X[1]*Y[0])*0.5 + (X[2]*Y[0])*0.5 + x0*Y[1] - (X[0]*Y[1])*0.5 - (X[3]*Y[1])*0.5 + x0*Y[2] - (X[0]*Y[2])*0.5 - (X[3]*Y[2])*0.5 - x0*Y[3] + (X[1]*Y[3])*0.5 + (X[2]*Y[3])*0.5;
c[1] = -(y0*X[0]) + y0*X[1] - y0*X[2] + y0*X[3] + x0*Y[0] - X[1]*Y[0] - x0*Y[1] + X[0]*Y[1] + x0*Y[2] - X[3]*Y[2] - x0*Y[3] + X[2]*Y[3];
c[1] = (X[1]*Y[0])*0.5 - (X[2]*Y[0])*0.5 - (X[0]*Y[1])*0.5 + (X[3]*Y[1])*0.5 + (X[0]*Y[2])*0.5 - (X[3]*Y[2])*0.5 - (X[1]*Y[3])*0.5 + (X[2]*Y[3])*0.5;
c[2] = (X[1]*Y[0])*0.5 - (X[2]*Y[0])*0.5 - (X[0]*Y[1])*0.5 + (X[3]*Y[1])*0.5 + (X[0]*Y[2])*0.5 - (X[3]*Y[2])*0.5 - (X[1]*Y[3])*0.5 + (X[2]*Y[3])*0.5;
double xi2[2]={0,0};
int nroots = solve_quadratic(c,xi2);
if (nroots == 0) throw ATC_Error("no real roots in 2D analytic projection guess");

View File

@ -48,7 +48,7 @@ namespace ATC {
}
// add user function into the if statement and assign returnFunction to it
UXT_Function* UXT_Function_Mgr::function(string & type, int nargs, double * args)
UXT_Function* UXT_Function_Mgr::function(const string & type, int nargs, double * args)
{
UXT_Function * returnFunction;
if (type=="linear") {
@ -167,7 +167,7 @@ XT_Function_Mgr * XT_Function_Mgr::myInstance_ = nullptr;
}
// add user function into the if statement and assign returnFunction to it
XT_Function* XT_Function_Mgr::function(string & type, int nargs, double * args)
XT_Function* XT_Function_Mgr::function(const string & type, int nargs, double * args)
{
XT_Function * returnFunction;
if (type=="constant") {

View File

@ -110,7 +110,7 @@ namespace ATC {
/** Static instance of this class */
static UXT_Function_Mgr * instance();
UXT_Function* function(std::string & type, int nargs, double * arg);
UXT_Function* function(const std::string & type, int nargs, double * arg);
UXT_Function* function(char ** arg, int nargs);
UXT_Function* linear_function(double c0, double c1);
UXT_Function* copy_UXT_function(UXT_Function* other);
@ -181,7 +181,7 @@ namespace ATC {
/** Static instance of this class */
static XT_Function_Mgr * instance();
XT_Function* function(std::string & type, int nargs, double * arg);
XT_Function* function(const std::string & type, int nargs, double * arg);
XT_Function* function(char ** arg, int nargs);
XT_Function* constant_function(double c);
XT_Function* copy_XT_function(XT_Function* other);

View File

@ -1,4 +1,4 @@
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
# Pizza.py toolkit, https://lammps.github.io/pizza
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
#
# Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -1,4 +1,4 @@
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
# Pizza.py toolkit, https://lammps.github.io/pizza
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
#
# Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -1,4 +1,4 @@
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
# Pizza.py toolkit, https://lammps.github.io/pizza
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
#
# Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -1,4 +1,4 @@
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
# Pizza.py toolkit, https://lammps.github.io/pizza
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
#
# Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -1,4 +1,4 @@
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
# Pizza.py toolkit, https://lammps.github.io/pizza
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
#
# Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -1,4 +1,4 @@
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
# Pizza.py toolkit, https://lammps.github.io/pizza
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
#
# Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -4,17 +4,29 @@
# try to improperly start up a new interpreter.
import sysconfig
import ctypes
library = sysconfig.get_config_vars('INSTSONAME')[0]
import platform
py_ver = sysconfig.get_config_vars('VERSION')[0]
OS_name = platform.system()
if OS_name == "Linux":
SHLIB_SUFFIX = '.so'
library = 'libpython' + py_ver + SHLIB_SUFFIX
elif OS_name == "Darwin":
SHLIB_SUFFIX = '.dylib'
library = 'libpython' + py_ver + SHLIB_SUFFIX
elif OS_name == "Windows":
SHLIB_SUFFIX = '.dll'
library = 'python' + py_ver + SHLIB_SUFFIX
try:
pylib = ctypes.CDLL(library)
except OSError as e:
if pylib.endswith(".a"):
pylib.strip(".a") + ".so"
pylib = ctypes.CDLL(library)
else:
raise e
except Exception as e:
raise OSError("Unable to locate python shared library") from e
if not pylib.Py_IsInitialized():
raise RuntimeError("This interpreter is not compatible with python-based mliap for LAMMPS.")
del sysconfig, ctypes, library, pylib
from .loader import load_model, activate_mliappy

View File

@ -16,12 +16,17 @@
#include "atom.h"
#include "error.h"
#include "math_special.h"
#include "neigh_list.h"
#include <cmath>
using namespace LAMMPS_NS;
using MathSpecial::square;
using MathSpecial::cube;
using MathSpecial::powint;
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
/* ----------------------------------------------------------------------
@ -114,14 +119,14 @@ void PairAmoeba::hal()
}
eps *= factor_hal;
rv7 = pow(rv,7.0);
rik6 = pow(rik2,3.0);
rv7 = powint(rv,7);
rik6 = cube(rik2);
rik7 = rik6 * rik;
rho = rik7 + ghal*rv7;
tau = (dhal+1.0) / (rik + dhal*rv);
tau7 = pow(tau,7.0);
tau7 = powint(tau,7);
dtau = tau / (dhal+1.0);
gtau = eps*tau7*rik6*(ghal+1.0)*pow(rv7/rho,2.0);
gtau = eps*tau7*rik6*(ghal+1.0)*square(rv7/rho);
e = eps*tau7*rv7*((ghal+1.0)*rv7/rho-2.0);
de = -7.0 * (dtau*e+gtau);

View File

@ -20,8 +20,9 @@
#include "domain.h"
#include "error.h"
#include "fft3d_wrap.h"
#include "fix_store.h"
#include "fix_store_peratom.h"
#include "math_const.h"
#include "math_special.h"
#include "memory.h"
#include "my_page.h"
#include "neigh_list.h"
@ -32,6 +33,8 @@
using namespace LAMMPS_NS;
using namespace MathConst;
using MathSpecial::cube;
enum{INDUCE,RSD,SETUP_AMOEBA,SETUP_HIPPO,KMPOLE,AMGROUP}; // forward comm
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
@ -366,7 +369,8 @@ void PairAmoeba::induce()
eps = DEBYE * sqrt(eps/atom->natoms);
if (eps < poleps) done = true;
if (eps > epsold) done = true;
// also commented out in induce.f of Tinker
// if (eps > epsold) done = true;
if (iter >= politer) done = true;
// apply a "peek" iteration to the mutual induced dipoles
@ -387,7 +391,7 @@ void PairAmoeba::induce()
// terminate the calculation if dipoles failed to converge
// NOTE: could make this an error
if (iter >= maxiter || eps > epsold)
if (iter >= politer || eps > epsold)
if (comm->me == 0)
error->warning(FLERR,"AMOEBA induced dipoles did not converge");
}
@ -732,7 +736,7 @@ void PairAmoeba::uscale0b(int mode, double **rsd, double **rsdp,
damp = pdi * pdamp[jtype];
if (damp != 0.0) {
pgamma = MIN(pti,thole[jtype]);
damp = -pgamma * pow((r/damp),3.0);
damp = -pgamma * cube(r/damp);
if (damp > -50.0) {
expdamp = exp(damp);
scale3 *= 1.0 - expdamp;
@ -1332,7 +1336,7 @@ void PairAmoeba::udirect2b(double **field, double **fieldp)
}
} else {
pgamma = MIN(pti,thole[jtype]);
damp = pgamma * pow(r/damp,3.0);
damp = pgamma * cube(r/damp);
if (damp < 50.0) {
expdamp = exp(-damp);
scale3 = 1.0 - expdamp;
@ -1384,7 +1388,7 @@ void PairAmoeba::udirect2b(double **field, double **fieldp)
damp = pdi * pdamp[jtype];
if (damp != 0.0) {
pgamma = MIN(pti,thole[jtype]);
damp = pgamma * pow(r/damp,3.0);
damp = pgamma * cube(r/damp);
if (damp < 50.0) {
expdamp = exp(-damp);
scale3 = 1.0 - expdamp;

View File

@ -17,6 +17,7 @@
#include "atom.h"
#include "domain.h"
#include "math_const.h"
#include "math_special.h"
#include "memory.h"
#include <cmath>
@ -24,6 +25,8 @@
using namespace LAMMPS_NS;
using namespace MathConst;
using MathSpecial::powint;
#define ANINT(x) ((x)>0 ? floor((x)+0.5) : ceil((x)-0.5))
/* ----------------------------------------------------------------------
@ -173,13 +176,13 @@ void PairAmoeba::dftmod(double *bsmod, double *bsarray, int nfft, int order)
factor = MY_PI * k / nfft;
for (j = 1; j <= jcut; j++) {
arg = factor / (factor + MY_PI*j);
sum1 += pow(arg,order);
sum2 += pow(arg,order2);
sum1 += powint(arg,order);
sum2 += powint(arg,order2);
}
for (j = 1; j <= jcut; j++) {
arg = factor / (factor - MY_PI*j);
sum1 += pow(arg,order);
sum2 += pow(arg,order2);
sum1 += powint(arg,order);
sum2 += powint(arg,order2);
}
zeta = sum2 / sum1;
}
@ -1137,7 +1140,7 @@ void PairAmoeba::kewald()
// NOTE: also worry about satisfying Tinker minfft ?
while (!factorable(ndfft1)) ndfft1++;
while (!factorable(ndfft2)) ndfft3++;
while (!factorable(ndfft2)) ndfft2++;
while (!factorable(ndfft3)) ndfft3++;
}

View File

@ -20,6 +20,7 @@
#include "domain.h"
#include "fft3d_wrap.h"
#include "math_const.h"
#include "math_special.h"
#include "memory.h"
#include "neigh_list.h"
@ -29,6 +30,8 @@
using namespace LAMMPS_NS;
using namespace MathConst;
using MathSpecial::square;
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
@ -670,7 +673,7 @@ void PairAmoeba::multipole_kspace()
nzlo = m_kspace->nzlo_fft;
nzhi = m_kspace->nzhi_fft;
pterm = pow((MY_PI/aewald),2.0);
pterm = square(MY_PI/aewald);
volterm = MY_PI * volbox;
n = 0;

View File

@ -20,6 +20,7 @@
#include "domain.h"
#include "fft3d_wrap.h"
#include "math_const.h"
#include "math_special.h"
#include "memory.h"
#include "neigh_list.h"
@ -29,6 +30,9 @@
using namespace LAMMPS_NS;
using namespace MathConst;
using MathSpecial::square;
using MathSpecial::cube;
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
enum{MUTUAL,OPT,TCG,DIRECT};
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
@ -82,7 +86,7 @@ void PairAmoeba::polar()
// compute the Ewald self-energy torque and virial terms
term = (4.0/3.0) * felec * pow(aewald,3.0) / MY_PIS;
term = (4.0/3.0) * felec * cube(aewald) / MY_PIS;
for (i = 0; i < nlocal; i++) {
dix = rpole[i][1];
@ -454,7 +458,7 @@ void PairAmoeba::polar_real()
damp = pdi * pdamp[jtype];
if (damp != 0.0) {
pgamma = MIN(pti,thole[jtype]);
damp = pgamma * pow(r/damp,3.0);
damp = pgamma * cube(r/damp);
if (damp < 50.0) {
expdamp = exp(-damp);
sc3 = 1.0 - expdamp;
@ -499,6 +503,18 @@ void PairAmoeba::polar_real()
urc3[k] = rc3[k] * factor_uscale;
urc5[k] = rc5[k] * factor_uscale;
}
} else {
// avoid uninitialized data access when damp == 0.0
psc3 = psc5 = psc7 = dsc3 = dsc5 = dsc7 = usc3 = usc5 = 0.0;
psr3 = psr5 = psr7 = dsr3 = dsr5 = dsr7 = usr5 = 0.0;
prc3[0] = prc3[1] = prc3[2] = 0.0;
drc3[0] = drc3[1] = drc3[2] = 0.0;
prc5[0] = prc5[1] = prc5[2] = 0.0;
drc5[0] = drc5[1] = drc5[2] = 0.0;
prc7[0] = prc7[1] = prc7[2] = 0.0;
drc7[0] = drc7[1] = drc7[2] = 0.0;
urc3[0] = urc3[1] = urc3[2] = 0.0;
urc5[0] = urc5[1] = urc5[2] = 0.0;
}
// apply charge penetration damping to scale factors
@ -1260,7 +1276,7 @@ void PairAmoeba::polar_kspace()
int nlocal = atom->nlocal;
double volbox = domain->prd[0] * domain->prd[1] * domain->prd[2];
pterm = pow((MY_PI/aewald),2.0);
pterm = square(MY_PI/aewald);
volterm = MY_PI * volbox;
// initialize variables required for the scalar summation

View File

@ -504,7 +504,7 @@ void PairAmoeba::damprep(double r, double r2, double rr1, double rr3,
dmpk24 = dmpk23 * dmpk2;
dmpk25 = dmpk24 * dmpk2;
term = dmpi22 - dmpk22;
pre = 8192.0 * dmpi23 * dmpk23 / pow(term,4.0);
pre = 8192.0 * dmpi23 * dmpk23 / (term*term*term*term);
tmp = 4.0 * dmpi2 * dmpk2 / term;
s = (dampi-tmp)*expk + (dampk+tmp)*expi;

View File

@ -18,7 +18,7 @@
#include "comm.h"
#include "domain.h"
#include "error.h"
#include "fix_store.h"
#include "fix_store_peratom.h"
#include "neigh_list.h"
#include <cmath>
@ -84,9 +84,9 @@ void PairAmoeba::kmpole()
if (bondneigh[j] < smallest) {
smallest = bondneigh[j];
k = j;
bondneigh[k] = bondneigh[m];
bondneigh[m] = smallest;
}
bondneigh[k] = bondneigh[m];
bondneigh[m] = smallest;
}
}
@ -256,7 +256,7 @@ void PairAmoeba::kmpole()
ztype = zpole[itype][iframe];
if (ztype == 0 && !flag) {
flag = 1;
xyzaxis[i][2] = xyzaxis[i][0] = xyzaxis[i][2] = 0.0;
xyzaxis[i][2] = xyzaxis[i][1] = xyzaxis[i][0] = 0.0;
polaxe[i] = mpaxis[itype][iframe];
for (j = 0; j < 13; j++)
pole[i][j] = fpole[itype][iframe][j];

View File

@ -53,6 +53,9 @@ AngleAmoeba::AngleAmoeba(LAMMPS *lmp) : Angle(lmp)
ub_k = nullptr;
ub_r0 = nullptr;
setflag_a = setflag_ba = setflag_ub = nullptr;
enable_angle = enable_urey = 0;
}
/* ---------------------------------------------------------------------- */
@ -264,6 +267,7 @@ void AngleAmoeba::tinker_anglep(int i1, int i2, int i3, int type, int eflag)
}
i4 = atom->map(i4tag);
if (i4 < 0) error->one(FLERR,"Amoeba angle 4th atom {} out of range", i4tag);
i4 = domain->closest_image(i2,i4);
// anglep out-of-plane calculation from Tinker

View File

@ -21,10 +21,11 @@
#include "error.h"
#include "fft3d_wrap.h"
#include "fix.h"
#include "fix_store.h"
#include "fix_store_peratom.h"
#include "force.h"
#include "gridcomm.h"
#include "group.h"
#include "math_special.h"
#include "memory.h"
#include "modify.h"
#include "my_page.h"
@ -40,6 +41,8 @@
using namespace LAMMPS_NS;
using MathSpecial::powint;
enum{INDUCE,RSD,SETUP_AMOEBA,SETUP_HIPPO,KMPOLE,AMGROUP,PVAL}; // forward comm
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
enum{ARITHMETIC,GEOMETRIC,CUBIC_MEAN,R_MIN,SIGMA,DIAMETER,HARMONIC,HHG,W_H};
@ -780,8 +783,8 @@ void PairAmoeba::init_style()
Fix *myfix;
if (first_flag) {
id_pole = utils::strdup("AMOEBA_pole");
myfix = modify->add_fix(fmt::format("{} {} STORE peratom 1 13",id_pole,group->names[0]));
fixpole = dynamic_cast<FixStore *>(myfix);
myfix = modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 13",id_pole,group->names[0]));
fixpole = dynamic_cast<FixStorePeratom *>(myfix);
}
// creation of per-atom storage
@ -792,14 +795,14 @@ void PairAmoeba::init_style()
if (first_flag && use_pred) {
id_udalt = utils::strdup("AMOEBA_udalt");
myfix = modify->add_fix(fmt::format("{} {} STORE peratom 1 {} 3",
myfix = modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 {} 3",
id_udalt, group->names[0], maxualt));
fixudalt = dynamic_cast<FixStore *>(myfix);
fixudalt = dynamic_cast<FixStorePeratom *>(myfix);
id_upalt = utils::strdup("AMOEBA_upalt");
myfix = modify->add_fix(fmt::format("{} {} STORE peratom 1 {} 3",
myfix = modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 {} 3",
id_upalt, group->names[0], maxualt));
fixupalt = dynamic_cast<FixStore *>(myfix);
fixupalt = dynamic_cast<FixStorePeratom *>(myfix);
}
// create pages for storing pairwise data:
@ -913,19 +916,22 @@ void PairAmoeba::init_style()
if (id_pole) {
myfix = modify->get_fix_by_id(id_pole);
if (!myfix) error->all(FLERR,"Could not find internal pair amoeba fix STORE id {}", id_pole);
fixpole = dynamic_cast<FixStore *>(myfix);
if (!myfix)
error->all(FLERR,"Could not find internal pair amoeba fix STORE/PERATOM id {}", id_pole);
fixpole = dynamic_cast<FixStorePeratom *>(myfix);
}
if (id_udalt) {
myfix = modify->get_fix_by_id(id_udalt);
if (!myfix) error->all(FLERR,"Could not find internal pair amoeba fix STORE id {}", id_udalt);
fixudalt = dynamic_cast<FixStore *>(myfix);
if (!myfix)
error->all(FLERR,"Could not find internal pair amoeba fix STORE/PERATOM id {}", id_udalt);
fixudalt = dynamic_cast<FixStorePeratom *>(myfix);
myfix = modify->get_fix_by_id(id_upalt);
if (!myfix) error->all(FLERR,"Could not find internal pair amoeba fix STORE id {}", id_upalt);
fixupalt = dynamic_cast<FixStore *>(myfix);
if (!myfix)
error->all(FLERR,"Could not find internal pair amoeba fix STORE/PERATOM id {}", id_upalt);
fixupalt = dynamic_cast<FixStorePeratom *>(myfix);
}
// assign hydrogen neighbors (redID) to each owned atom
@ -1956,7 +1962,7 @@ void PairAmoeba::choose(int which)
// taper coeffs
double denom = pow(off-cut,5.0);
double denom = powint(off-cut,5);
c0 = off*off2 * (off2 - 5.0*off*cut + 10.0*cut2) / denom;
c1 = -30.0 * off2*cut2 / denom;
c2 = 30.0 * (off2*cut+off*cut2) / denom;
@ -2026,7 +2032,7 @@ void PairAmoeba::mix()
} else if (epsilon_rule == HHG) {
eij = 4.0 * (ei*ej) / ((sei+sej)*(sei+sej));
} else if (epsilon_rule == W_H) {
eij = 2.0 * (sei*sej) * pow(ri*rj,3.0) / (pow(ri,6.0) + pow(rj,6.0));
eij = 2.0 * (sei*sej) * powint(ri*rj,3) / (powint(ri,6) + powint(rj,6));
} else {
eij = sei * sej;
}

View File

@ -157,9 +157,9 @@ class PairAmoeba : public Pair {
int *amgroup; // AMOEBA polarization group, 1 to Ngroup
char *id_pole, *id_udalt, *id_upalt;
class FixStore *fixpole; // stores pole = multipole components
class FixStore *fixudalt; // stores udalt = induced dipole history
class FixStore *fixupalt; // stores upalt = induced dipole history
class FixStorePeratom *fixpole; // stores pole = multipole components
class FixStorePeratom *fixudalt; // stores udalt = induced dipole history
class FixStorePeratom *fixupalt; // stores upalt = induced dipole history
// static per-type properties defined in force-field file

View File

@ -84,9 +84,9 @@ void BondBPM::init_style()
{
if (id_fix_store_local) {
auto ifix = modify->get_fix_by_id(id_fix_store_local);
if (!ifix) error->all(FLERR, "Cannot find fix store/local");
if (strcmp(ifix->style, "STORE_LOCAL") != 0)
error->all(FLERR, "Incorrect fix style matched, not store/local");
if (!ifix) error->all(FLERR, "Cannot find fix STORE/LOCAL id {}",id_fix_store_local);
if (strcmp(ifix->style, "STORE/LOCAL") != 0)
error->all(FLERR, "Incorrect fix style matched, not STORE/LOCAL: {}",ifix->style);
fix_store_local = dynamic_cast<FixStoreLocal *>(ifix);
fix_store_local->nvalues = nvalues;
}
@ -141,7 +141,7 @@ void BondBPM::init_style()
global settings
All args before store/local command are saved for potential args
for specific bond BPM substyles
All args after optional store/local command are variables stored
All args after optional stode/local command are variables stored
in the compute store/local
------------------------------------------------------------------------- */
@ -202,7 +202,7 @@ void BondBPM::settings(int narg, char **arg)
auto ifix = modify->get_fix_by_id(id_fix_store_local);
if (!ifix)
ifix = modify->add_fix(
fmt::format("{} all STORE_LOCAL {} {}", id_fix_store_local, store_local_freq, nvalues));
fmt::format("{} all STORE/LOCAL {} {}", id_fix_store_local, store_local_freq, nvalues));
fix_store_local = dynamic_cast<FixStoreLocal *>(ifix);
// Use property/atom to save reference positions as it can transfer to ghost atoms

View File

@ -21,17 +21,17 @@
#include "angle_spica.h"
#include <cmath>
#include "atom.h"
#include "neighbor.h"
#include "pair.h"
#include "domain.h"
#include "comm.h"
#include "domain.h"
#include "error.h"
#include "force.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
#include "neighbor.h"
#include "pair.h"
#include <cmath>
#include "lj_spica_common.h"
@ -43,7 +43,12 @@ using namespace LJSPICAParms;
/* ---------------------------------------------------------------------- */
AngleSPICA::AngleSPICA(LAMMPS *lmp) : Angle(lmp) { repflag = 0;}
AngleSPICA::AngleSPICA(LAMMPS *lmp) :
Angle(lmp), k(nullptr), theta0(nullptr), lj_type(nullptr), lj1(nullptr), lj2(nullptr),
lj3(nullptr), lj4(nullptr), rminsq(nullptr), emin(nullptr)
{
repflag = 0;
}
/* ---------------------------------------------------------------------- */

View File

@ -1,4 +1,3 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
@ -19,15 +18,15 @@
#include "pair_lj_spica.h"
#include <cmath>
#include <cstring>
#include "atom.h"
#include "comm.h"
#include "force.h"
#include "neigh_list.h"
#include "memory.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include <cmath>
#include <cstring>
#define LMP_NEED_SPICA_FIND_LJ_TYPE 1
#include "lj_spica_common.h"
@ -37,7 +36,9 @@ using namespace LJSPICAParms;
/* ---------------------------------------------------------------------- */
PairLJSPICA::PairLJSPICA(LAMMPS *lmp) : Pair(lmp)
PairLJSPICA::PairLJSPICA(LAMMPS *lmp) :
Pair(lmp), lj_type(nullptr), cut(nullptr), epsilon(nullptr), sigma(nullptr), lj1(nullptr),
lj2(nullptr), lj3(nullptr), lj4(nullptr), offset(nullptr), rminsq(nullptr), emin(nullptr)
{
respa_enable = 0;
single_enable = 1;
@ -71,6 +72,7 @@ PairLJSPICA::~PairLJSPICA()
}
}
// clang-format off
/* ---------------------------------------------------------------------- */
void PairLJSPICA::compute(int eflag, int vflag)

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