Merge branch 'mliappy_unified' of github.com:Boogie3D/lammps into mliappy_unified

This commit is contained in:
Steven Ray Anaya
2022-08-16 02:36:23 -06:00
249 changed files with 5855 additions and 5206 deletions

5
.github/CODEOWNERS vendored
View File

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

6
.github/codecov.yml vendored
View File

@ -7,7 +7,7 @@ coverage:
threshold: 10% threshold: 10%
only_pulls: false only_pulls: false
branches: branches:
- "master" - "develop"
flags: flags:
- "unit" - "unit"
paths: paths:
@ -16,14 +16,14 @@ coverage:
project: project:
default: default:
branches: branches:
- "master" - "develop"
paths: paths:
- "src" - "src"
informational: true informational: true
patch: patch:
default: default:
branches: branches:
- "master" - "develop"
paths: paths:
- "src" - "src"
informational: true 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 # 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 # and prints lots of pointless warnings about "unsafe" functions
if(MSVC) 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(/Zc:__cplusplus)
add_compile_options(/wd4244) add_compile_options(/wd4244)
add_compile_options(/wd4267) add_compile_options(/wd4267)
if(LAMMPS_EXCEPTIONS) add_compile_options(/EHsc)
add_compile_options(/EHsc)
endif()
endif() endif()
add_compile_definitions(_CRT_SECURE_NO_WARNINGS) add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
endif() endif()

View File

@ -242,6 +242,6 @@ $(MATHJAX):
$(ANCHORCHECK): $(VENV) $(ANCHORCHECK): $(VENV)
@( \ @( \
. $(VENV)/bin/activate; \ . $(VENV)/bin/activate; \
pip install -e utils/converters;\ pip $(PIP_OPTIONS) install -e utils/converters;\
deactivate;\ 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 .SH NAME
.B LAMMPS .B LAMMPS
\- Molecular Dynamics Simulator. Version 23 June 2022 \- Molecular Dynamics Simulator. Version 3 August 2022
.SH SYNOPSIS .SH SYNOPSIS
.B lmp .B lmp
@ -161,7 +161,7 @@ list references for specific cite-able features used during a
run. run.
.TP .TP
\fB\-pk <style> [options]\fR or \fB\-package <style> [options]\fR \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. 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 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 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. and the linker to work correctly.
Using CHIP-SPV implementation of HIP is now supported. It allows one to run HIP 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 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 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 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. should only use this option in preparations to run on Aurora system at ANL.
.. code:: bash .. code:: bash

View File

@ -123,14 +123,15 @@ LAMMPS:
.. _six: .. _six:
6. If you want text with spaces to be treated as a single argument, it 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 can be enclosed in either single (') or double (") or triple (""")
single argument enclosed in single or double quotes can span multiple quotes. A long single argument enclosed in single or double quotes
lines if the "&" character is used, as described above. When the can span multiple lines if the "&" character is used, as described
lines are concatenated together (and the "&" characters and line in :ref:`1 <one>` above. When the lines are concatenated together
breaks removed), the text will become a single line. If you want by LAMMPS (and the "&" characters and line breaks removed), the
multiple lines of an argument to retain their line breaks, the text combined text will become a single line. If you want multiple lines
can be enclosed in triple quotes, in which case "&" characters are of an argument to retain their line breaks, the text can be enclosed
not needed. For example: in triple quotes, in which case "&" characters are not needed and do
not function as line continuation character. For example:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -144,8 +145,9 @@ LAMMPS:
System temperature = $t System temperature = $t
""" """
In each case, the single, double, or triple quotes are removed when In each of these cases, the single, double, or triple quotes are
the single argument they enclose is stored internally. removed and the enclosed text stored internally as a single
argument.
See the :doc:`dump modify format <dump_modify>`, :doc:`print See the :doc:`dump modify format <dump_modify>`, :doc:`print
<print>`, :doc:`if <if>`, and :doc:`python <python>` commands for <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`_ - `Simplify customized error messages`_
- `Use of "override" instead of "virtual"`_ - `Use of "override" instead of "virtual"`_
- `Simplified and more compact neighbor list requests`_ - `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->forward_comm(this);
comm->reverse_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 Simplified and more compact neighbor list requests
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -321,4 +322,63 @@ New:
if (cutflag) req->set_cutoff(mycutneigh); if (cutflag) req->set_cutoff(mycutneigh);
Public access to the ``NeighRequest`` class data members has been 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 Convenience functions
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: logmesg(LAMMPS *lmp, const S &format, Args&&... args) .. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &format, Args&&... args)
:project: progguide :project: progguide
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &mesg) .. 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:: .. note::
A contributed (and complete!) Fortran interface that more A contributed (and more complete!) Fortran interface that more
closely resembles the C-library interface is available closely resembles the C-library interface is available in the
in the ``examples/COUPLE/fortran2`` folder. Please see the ``examples/COUPLE/fortran2`` folder. Please see the ``README`` file
``README`` file in that folder for more information about it in that folder for more information about it and how to contact its
and how to contact its author and maintainer. author and maintainer.
---------- ----------
@ -65,8 +65,9 @@ the optional logical argument set to ``.true.``. Here is a simple example:
PROGRAM testlib PROGRAM testlib
USE LIBLAMMPS ! include the LAMMPS library interface USE LIBLAMMPS ! include the LAMMPS library interface
IMPLICIT NONE
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance 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' ] [ CHARACTER(len=12) :: 'liblammps', '-log', 'none' ]
! create a LAMMPS instance (and initialize MPI) ! 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 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 Executing LAMMPS commands
@ -102,7 +138,7 @@ Below is a small demonstration of the uses of the different functions:
USE LIBLAMMPS USE LIBLAMMPS
TYPE(lammps) :: lmp TYPE(lammps) :: lmp
CHARACTER(len=512) :: cmds CHARACTER(len=512) :: cmds
CHARACTER(len=40),ALLOCATABLE :: cmdlist(:) CHARACTER(len=40), ALLOCATABLE :: cmdlist(:)
CHARACTER(len=10) :: trimmed CHARACTER(len=10) :: trimmed
INTEGER :: i 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') CALL lmp%command('variable zpos index 1.0')
! define 10 groups of 10 atoms each ! define 10 groups of 10 atoms each
ALLOCATE(cmdlist(10)) ALLOCATE(cmdlist(10))
DO i=1,10 DO i=1, 10
WRITE(trimmed,'(I10)') 10*i WRITE(trimmed,'(I10)') 10*i
WRITE(cmdlist(i),'(A,I1,A,I10,A,A)') & 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 END DO
CALL lmp%commands_list(cmdlist) CALL lmp%commands_list(cmdlist)
! run multiple commands from multi-line string ! 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_box 1 box' // NEW_LINE('A') // &
'create_atoms 1 single 1.0 1.0 ${zpos}' 'create_atoms 1 single 1.0 1.0 ${zpos}'
CALL lmp%commands_string(cmds) CALL lmp%commands_string(cmds)
CALL lmp%close() CALL lmp%close(.TRUE.)
END PROGRAM testcmd END PROGRAM testcmd
@ -137,9 +173,9 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
.. f:type:: lammps .. f:type:: lammps
Derived type that is the general class of the Fortran interface. Derived type that is the general class of the Fortran interface. It
It holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class instance holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>`
that any of the included calls are forwarded to. class instance that any of the included calls are forwarded to.
:f c_ptr handle: reference to the LAMMPS class :f c_ptr handle: reference to the LAMMPS class
:f close: :f:func:`close` :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 This method will call :cpp:func:`lammps_commands_list` to have LAMMPS
execute a list of input lines. 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) .. 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. execute a block of commands from a string.
:p character(len=*) str: LAMMPS input in 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 The AMOEBA and HIPPO polarizable force fields were developed by Jay
Ponder's group at the U Washington at St Louis. Their implementation Ponder's group at the U Washington at St Louis. The LAMMPS
in LAMMPS was done using F90 code provided by the Ponder group from implementation is based on Fortran 90 code provided by the Ponder
their `Tinker MD code <https://dasher.wustl.edu/tinker/>`_. group in their `Tinker MD software <https://dasher.wustl.edu/tinker/>`_.
The current implementation (July 2022) of AMOEBA in LAMMPS matches the The current implementation (July 2022) of AMOEBA in LAMMPS matches the
version discussed in :ref:`(Ponder) <amoeba-Ponder>`, :ref:`(Ren) 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. You can download LAMMPS as an executable or as source code.
With source code, you also have to :doc:`build LAMMPS <Build>`. But you When downloading the LAMMPS source code, you also have to :doc:`build
have more flexibility as to what features to include or exclude in the LAMMPS <Build>`. But you have more flexibility as to what features to
build. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then you include or exclude in the build. When you download and install
need the source code. 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:: .. toctree::
:maxdepth: 1 :maxdepth: 1

View File

@ -38,3 +38,10 @@ up the Conda capability.
.. _openkim: https://openkim.org .. _openkim: https://openkim.org
.. _conda: https://docs.conda.io/en/latest/index.html .. _conda: https://docs.conda.io/en/latest/index.html
.. _mini_conda_install: https://docs.conda.io/en/latest/miniconda.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: Binaries are available for different versions of Linux:
| :ref:`Pre-built Ubuntu Linux executables <ubuntu>` - :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
| :ref:`Pre-built Fedora Linux executables <fedora>` - :ref:`Pre-built Fedora Linux executables <fedora>`
| :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>` - :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
| :ref:`Pre-built OpenSuse Linux executables <opensuse>` - :ref:`Pre-built OpenSuse Linux executables <opensuse>`
| :ref:`Gentoo Linux executable <gentoo>` - :ref:`Gentoo Linux executable <gentoo>`
| :ref:`Arch Linux build-script <arch>` - :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 Pre-built Ubuntu Linux executables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A pre-built LAMMPS executable suitable for running on the latest A pre-built LAMMPS executable suitable for running on the latest Ubuntu
Ubuntu Linux versions, can be downloaded as a Debian package. This Linux versions, can be downloaded as a Debian package. This allows you
allows you to install LAMMPS with a single command, and stay to install LAMMPS with a single command, and stay (mostly) up-to-date
up-to-date with the current stable version of LAMMPS by simply updating with the current stable version of LAMMPS by simply updating your
your operating system. Please note, that the repository below offers operating system.
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
To install LAMMPS do the following once: To install LAMMPS do the following once:
.. code-block:: bash .. 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 This downloads an executable named ``lmp`` to your box and multiple
can then be used in the usual way to run input scripts: 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 .. 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 .. 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. which will also update other packages on your system.
To get a copy of the current documentation and examples: The ``lmp`` binary is built with the :ref:`KIM package <kim>` included,
which results in the above command also installing the ``kim-api``
.. code-block:: bash binaries when LAMMPS is installed. In order to use potentials from
`openkim.org <openkim_>`_, you can also install the ``openkim-models``
$ sudo apt-get install lammps-stable-doc package
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
.. code-block:: bash .. code-block:: bash
$ sudo apt-get install openkim-models $ 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: To un-install LAMMPS, do the following:
.. code-block:: bash .. 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. and styles are included in the binary.
Thanks to Anton Gladky (gladky.anton at gmail.com) for setting up this 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 Fedora Linux executables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Pre-built LAMMPS packages for stable releases are available Pre-built LAMMPS packages for stable releases are available in the
in the Fedora Linux distribution as of version 28. The packages Fedora Linux distribution as of Fedora version 28. The packages can be
can be installed via the dnf package manager. There are 3 basic installed via the dnf package manager. There are 3 basic varieties
varieties (lammps = no MPI, lammps-mpich = MPICH MPI library, (lammps = no MPI, lammps-mpich = MPICH MPI library, lammps-openmpi =
lammps-openmpi = OpenMPI MPI library) and for each support for OpenMPI MPI library) and for each support for linking to the C library
linking to the C library interface (lammps-devel, lammps-mpich-devel, interface (lammps-devel, lammps-mpich-devel, lammps-openmpi-devel), the
lammps-openmpi-devel), the header for compiling programs using header for compiling programs using the C library interface
the C library interface (lammps-headers), and the LAMMPS python (lammps-headers), and the LAMMPS python module for Python 3. All
module for Python 3. All packages can be installed at the same packages can be installed at the same time and the name of the LAMMPS
time and the name of the LAMMPS executable is ``lmp`` and ``lmp_openmpi`` executable is ``lmp`` and ``lmp_openmpi`` or ``lmp_mpich`` respectively.
or ``lmp_mpich`` respectively. By default, ``lmp`` will refer to the By default, ``lmp`` will refer to the serial executable, unless one of
serial executable, unless one of the MPI environment modules is loaded the MPI environment modules is loaded (``module load mpi/mpich-x86_64``
(``module load mpi/mpich-x86_64`` or ``module load mpi/openmpi-x86_64``). or ``module load mpi/openmpi-x86_64``). Then the corresponding parallel
Then the corresponding parallel LAMMPS executable can be used. LAMMPS executable can be used. The same mechanism applies when loading
The same mechanism applies when loading the LAMMPS python module. the LAMMPS python module.
To install LAMMPS with OpenMPI and run an input ``in.lj`` with 2 CPUs do: 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 Note that the AUR provides build-scripts that download the source and
the build the package on your machine. 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 DOI for the LAMMPS source code
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_ The LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
to create digital object identifies (DOI) for stable releases of the 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. 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 The canonical DOI for **all** versions of LAMMPS, which will always
point to the **latest** stable release version is: 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 Guide
************ ************
.. _user_documentation:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
:numbered: 3 :numbered: 3
@ -75,11 +75,12 @@ User Guide
Errors Errors
.. _programmer_documentation:
****************** ******************
Programmer Guide Programmer Guide
****************** ******************
.. _programmer_documentation:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
:numbered: 3 :numbered: 3

View File

@ -23,6 +23,8 @@ derived class. See fix.h for details.
+---------------------------+--------------------------------------------------------------------------------------------+ +---------------------------+--------------------------------------------------------------------------------------------+
| init | initialization before a run (optional) | | 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_exchange | called before atom exchange in setup (optional) |
+---------------------------+--------------------------------------------------------------------------------------------+ +---------------------------+--------------------------------------------------------------------------------------------+
| setup_pre_force | called before force computation in setup (optional) | | setup_pre_force | called before force computation in setup (optional) |

View File

@ -157,14 +157,28 @@ AMOEBA package
**Contents:** **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:** **Supporting info:**
* src/AMOEBA: filenames -> commands * src/AMOEBA: filenames -> commands
* :doc:`AMOEBA and HIPPO howto <Howto_amoeba>` * :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 * examples/amoeba
* TODO
---------- ----------
@ -200,9 +214,10 @@ ATC package
**Contents:** **Contents:**
ATC stands for atoms-to-continuum. This package implements a :doc:`fix atc <fix_atc>` command to either couple molecular dynamics with ATC stands for atoms-to-continuum. This package implements a
continuum finite element equations or perform on-the-fly conversion of :doc:`fix atc <fix_atc>` command to either couple molecular dynamics
atomic information to continuum fields. 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). **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) **Authors:** Joel T. Clemmer (Sandia National Labs)
.. versionadded:: 4May2022
**Supporting info:** **Supporting info:**
* src/BPM filenames -> commands * 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 Ahrens-Iwers (TUHH, Hamburg, Germany), Shern Tee (UQ, Brisbane, Australia) and
Robert Meissner (TUHH, Hamburg, Germany). Robert Meissner (TUHH, Hamburg, Germany).
.. versionadded:: 4May2022
**Install:** **Install:**
This package has :ref:`specific installation instructions <electrode>` on the 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:`-m or -mpicolor <mpicolor>`
* :ref:`-c or -cite <cite>` * :ref:`-c or -cite <cite>`
* :ref:`-nc or -nocite <nocite>` * :ref:`-nc or -nocite <nocite>`
* :ref:`-nb or -nonbuf <nonbuf>`
* :ref:`-pk or -package <package>` * :ref:`-pk or -package <package>`
* :ref:`-p or -partition <partition>` * :ref:`-p or -partition <partition>`
* :ref:`-pl or -plog <plog>` * :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:
**-package style args ....** **-package style args ....**

View File

@ -10,7 +10,7 @@ Syntax
atom_style style args 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:: .. parsed-literal::

View File

@ -38,8 +38,7 @@ Examples
bond_style bpm/rotational 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_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 bond_style bpm/rotational store/local myfix 1000 time id1 id2
fix myfix all store/local 1000 3
dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3] dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3]
dump_modify 1 write_header no dump_modify 1 write_header no

View File

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

View File

@ -15,7 +15,7 @@ Syntax
.. parsed-literal:: .. 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 *bin/1d* args = dim origin delta
dim = *x* or *y* or *z* dim = *x* or *y* or *z*
origin = *lower* or *center* or *upper* or coordinate value (distance units) 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 v_name = per-atom vector calculated by an atom-style variable with name
* zero or more keyword/values pairs may be appended * 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:: .. parsed-literal::
@ -74,7 +74,7 @@ Syntax
no = keep atoms with out-of-range chunk IDs by assigning a valid chunk ID 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 mixed = keep or discard such atoms according to spatial binning rule
*bound* values = x/y/z lo hi *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) lo = *lower* or coordinate value (distance units)
hi = *upper* or coordinate value (distance units) hi = *upper* or coordinate value (distance units)
*pbc* value = *no* or *yes* *pbc* value = *no* or *yes*

View File

@ -19,12 +19,12 @@ Syntax
.. parsed-literal:: .. 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 *cutoff* value = distance cutoff
*nnn* value = number of nearest neighbors *nnn* value = number of nearest neighbors
*degrees* values = nlvalues, l1, l2,... *degrees* values = nlvalues, l1, l2,...
*wl* value = yes or no *wl* value = *yes* or *no*
*wl/hat* value = yes or no *wl/hat* value = *yes* or *no*
*components* value = ldegree *components* value = ldegree
*chunksize* value = number of atoms in each pass *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 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 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 1 all saed/vtk 1 1 1 c_1 file Al2O3_001.saed
fix saed/vtk 1 1 1 c_2 file Ni_000.saed fix 2 all saed/vtk 1 1 1 c_2 file Ni_000.saed
Description Description
""""""""""" """""""""""

View File

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

View File

@ -136,6 +136,8 @@ positions.
:align: right :align: right
:target: _images/marble_race.jpg :target: _images/marble_race.jpg
.. versionadded:: 2Jun2022
For the *mesh* style, a file with a triangle mesh in `STL format 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 <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 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 individual triangles in the triangle mesh that the particle corresponds
to. to.
.. versionadded:: 2Jun2022
The *overlap* keyword only applies to the *random* style. It prevents The *overlap* keyword only applies to the *random* style. It prevents
newly created particles from being created closer than the specified newly created particles from being created closer than the specified
*Doverlap* distance from any other particle. When the particles being *Doverlap* distance from any other particle. When the particles being

View File

@ -10,7 +10,7 @@ Syntax
create_bonds style args ... keyword value ... 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:: .. 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.1 yes all cube 482793 bond yes
delete_atoms random fraction 0.3 no polymer NULL 482793 bond yes delete_atoms random fraction 0.3 no polymer NULL 482793 bond yes
delete_atoms random count 500 no ions NULL 482793 delete_atoms random count 500 no ions NULL 482793
detele_atoms variable checkers delete_atoms variable checkers
Description Description
""""""""""" """""""""""

View File

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

View File

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

View File

@ -61,7 +61,7 @@ Syntax
* ID = user-assigned name for the dump * ID = user-assigned name for the dump
* group-ID = ID of the group of atoms to be dumped * group-ID = ID of the group of atoms to be dumped
* style = *atom* or *atom/gz* or *atom/zstd or *atom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *dcd* or *h5md* or *image* or *local* or *local/gz* or *local/zstd* or *molfile* or *movie* or *netcdf* or *netcdf/mpiio* or *vtk* or *xtc* or *xyz* or *xyz/gz* or *xyz/zstd* or *xyz/mpiio* or *yaml* * style = *atom* or *atom/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 * N = dump every this many timesteps
* file = name of file to write dump info to * file = name of file to write dump info to
* args = list of arguments for a particular style * args = list of arguments for a particular style
@ -96,7 +96,7 @@ Syntax
*xyz/mpiio* args = none *xyz/mpiio* args = none
*yaml* args = same as *custom* args, see below *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:: .. 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 other label). This will help many visualization programs to guess
bonds and colors. bonds and colors.
.. versionadded:: 4May2022
Dump style *yaml* has the same command syntax as style *custom* and 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 writes YAML format files that can be easily parsed by a variety of data
processing tools and programming languages. Each timestep will be processing tools and programming languages. Each timestep will be

View File

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

View File

@ -56,7 +56,7 @@ Syntax
phi = azimuthal view angle (degrees) phi = azimuthal view angle (degrees)
theta or phi can be a variable (see below) theta or phi can be a variable (see below)
*center* values = flag Cx Cy Cz = center point of image *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 = center point of image as fraction of box dimension (0.5 = center of box)
Cx,Cy,Cz can be variables (see below) Cx,Cy,Cz can be variables (see below)
*up* values = Ux Uy Uz = direction that is "up" in image *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 *amap* args = lo hi style delta N entry1 entry2 ... entryN
lo = number or *min* = lower bound of range of color map lo = number or *min* = lower bound of range of color map
hi = number or *max* = upper 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" style = 2 letters = *c* or *d* or *s* plus *a* or *f*
"c" for continuous *c* for continuous
"d" for discrete *d* for discrete
"s" for sequential *s* for sequential
"a" for absolute *a* for absolute
"f" for fractional *f* for fractional
delta = binsize (only used for style "s", otherwise ignored) delta = binsize (only used for style *s*, otherwise ignored)
binsize = range is divided into bins of this width binsize = range is divided into bins of this width
N = # of subsequent entries N = # of subsequent entries
entry = value color (for continuous style) 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 The *colname* keyword can be used to change the default header keyword
for dump styles: *atom*, *custom*, and *cfg* and their compressed, ADIOS, for dump styles: *atom*, *custom*, and *cfg* and their compressed, ADIOS,
and MPIIO variants. The setting for *ID string* replaces the default 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 * Nfreq = calculate averages every this many timesteps
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command * chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
* one or more input values can be listed * one or more input values can be listed
* value = vx, vy, vz, fx, fy, fz, density/mass, density/number, temp, c_ID, c_ID[I], f_ID, f_ID[I], v_name * value = vx, vy, vz, fx, fy, fz, density/mass, density/number, mass, temp, c_ID, c_ID[I], f_ID, f_ID[I], v_name
.. parsed-literal:: .. parsed-literal::
vx,vy,vz,fx,fy,fz = atom attribute (velocity, force component) vx,vy,vz,fx,fy,fz,mass = atom attribute (velocity, force component, mass)
density/number, density/mass = number or mass density density/number, density/mass = number or mass density (per volume)
temp = temperature temp = temperature
c_ID = per-atom vector calculated by a compute with ID 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) 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 as :doc:`thermo_style custom <thermo_style>`, and can also be written to
a file. a file.
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom In LAMMPS, chunks are collections of atoms defined by a :doc:`compute
to a single chunk (or no chunk). The ID for this command is specified chunk/atom <compute_chunk_atom>` command, which assigns each atom to a
as chunkID. For example, a single chunk could be the atoms in a single chunk (or no chunk). The ID for this command is specified as
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 chunkID. For example, a single chunk could be the atoms in a molecule
defined and examples of how they can be used to measure properties of or atoms in a spatial bin. See the :doc:`compute chunk/atom
a system. <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 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 and averaging calculations. The :doc:`compute chunk/atom
well as an optional region. Atoms will have a chunk ID = 0, meaning <compute_chunk_atom>` command defines its own group as well as an
they belong to no chunk, if they are not in that group or region. optional region. Atoms will have a chunk ID = 0, meaning they belong
Thus you can specify the "all" group for this command if you simply to no chunk, if they are not in that group or region. Thus you can
want to use the chunk definitions provided by chunkID. 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, Each specified per-atom value can be an atom attribute (position,
velocity, force component), a mass or number density, or the result of velocity, force component), a number or mass density, a mass or
a :doc:`compute <compute>` or :doc:`fix <fix>` or the evaluation of an temperature, or the result of a :doc:`compute <compute>` or :doc:`fix
atom-style :doc:`variable <variable>`. In the latter cases, the <fix>` or the evaluation of an atom-style :doc:`variable <variable>`.
compute, fix, or variable must produce a per-atom quantity, not a In the latter cases, the compute, fix, or variable must produce a
global quantity. Note that the :doc:`compute property/atom <compute_property_atom>` command provides access to per-atom quantity, not a global quantity. Note that the :doc:`compute
any attribute defined and stored by atoms. If you wish to property/atom <compute_property_atom>` command provides access to any
time-average global quantities from a compute, fix, or variable, then attribute defined and stored by atoms. If you wish to time-average
see the :doc:`fix ave/time <fix_ave_time>` command. 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 The per-atom values of each input vector are summed and averaged
independently of the per-atom values in other input vectors. 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 Using a wildcard is the same as if the individual columns of the array
had been listed one by one. E.g. these 2 fix ave/chunk commands are had been listed one by one. E.g. these 2 fix ave/chunk commands are
equivalent, since the :doc:`compute property/atom <compute_property_atom>` command creates, in this equivalent, since the :doc:`compute property/atom
case, a per-atom array with 3 columns: <compute_property_atom>` command creates, in this case, a per-atom
array with 3 columns:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -194,28 +199,31 @@ discussed below.
.. note:: .. note::
To perform per-chunk averaging within a *Nfreq* time window, the 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 number of chunks *Nchunk* defined by the :doc:`compute chunk/atom
the *ave* keyword is set to *running* or *window* then *Nchunk* must <compute_chunk_atom>` command must remain constant. If the *ave*
remain constant for the duration of the simulation. This fix forces keyword is set to *running* or *window* then *Nchunk* must remain
the chunk/atom compute specified by chunkID to hold *Nchunk* constant constant for the duration of the simulation. This fix forces the
for the appropriate time windows, by not allowing it to re-calculate chunk/atom compute specified by chunkID to hold *Nchunk* constant
*Nchunk*, which can also affect how it assigns chunk IDs to atoms. for the appropriate time windows, by not allowing it to
This is particularly important to understand if the chunks defined by re-calculate *Nchunk*, which can also affect how it assigns chunk
the :doc:`compute chunk/atom <compute_chunk_atom>` command are spatial IDs to atoms. This is particularly important to understand if the
bins. If its *units* keyword is set to *box* or *lattice*, then the chunks defined by the :doc:`compute chunk/atom
number of bins *Nchunk* and size of each bin will be fixed over the <compute_chunk_atom>` command are spatial bins. If its *units*
*Nfreq* time window, which can affect which atoms are discarded if the 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 simulation box size changes. If its *units* keyword is set to
*reduced*, then the number of bins *Nchunk* will still be fixed, but *reduced*, then the number of bins *Nchunk* will still be fixed,
the size of each bin can vary at each timestep if the simulation box but the size of each bin can vary at each timestep if the
size changes, e.g. for an NPT simulation. simulation box size changes, e.g. for an NPT simulation.
---------- ----------
The atom attribute values (vx,vy,vz,fx,fy,fz) are self-explanatory. The atom attribute values (vx,vy,vz,fx,fy,fz,mass) are
As noted above, any other atom attributes can be used as input values self-explanatory. As noted above, any other atom attributes can be
to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying used as input values to this fix by using the :doc:`compute
an input value from that 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 The *density/number* value means the number density is computed for
each chunk, i.e. number/volume. The *density/mass* value means the each chunk, i.e. number/volume. The *density/mass* value means the
@ -243,12 +251,13 @@ Note that currently this temperature only includes translational
degrees of freedom for each atom. No rotational degrees of freedom degrees of freedom for each atom. No rotational degrees of freedom
are included for finite-size particles. Also no degrees of freedom are included for finite-size particles. Also no degrees of freedom
are subtracted for any velocity bias or constraints that are applied, are subtracted for any velocity bias or constraints that are applied,
such as :doc:`compute temp/partial <compute_temp_partial>`, or :doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is because such as :doc:`compute temp/partial <compute_temp_partial>`, or
those degrees of freedom (e.g. a constrained bond) could apply to sets :doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is
of atoms that are both included and excluded from a specific chunk, because those degrees of freedom (e.g. a constrained bond) could apply
and hence the concept is somewhat ill-defined. In some cases, you can to sets of atoms that are both included and excluded from a specific
use the *adof* and *cdof* keywords to adjust the calculated degrees of chunk, and hence the concept is somewhat ill-defined. In some cases,
freedom appropriately, as explained below. 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 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* 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. computed after removal of a flow velocity profile.
Note that the per-chunk temperature calculated by this fix and the Note that the per-chunk temperature calculated by this fix and the
:doc:`compute temp/chunk <compute_temp_chunk>` command can be different. :doc:`compute temp/chunk <compute_temp_chunk>` command can be
The compute calculates the temperature for each chunk for a single different. The compute calculates the temperature for each chunk for
snapshot. This fix can do that but can also time average those values a single snapshot. This fix can do that but can also time average
over many snapshots, or it can compute a temperature as if the atoms those values over many snapshots, or it can compute a temperature as
in the chunk on different timesteps were collected together as one set if the atoms in the chunk on different timesteps were collected
of atoms to calculate their temperature. The compute allows the together as one set of atoms to calculate their temperature. The
center-of-mass velocity of each chunk to be subtracted before compute allows the center-of-mass velocity of each chunk to be
calculating the temperature; this fix does not. subtracted before calculating the temperature; this fix does not.
If a value begins with "c\_", a compute ID must follow which has been If a value begins with "c\_", a compute ID must follow which has been
previously defined in the input script. If no bracketed integer is previously defined in the input script. If no bracketed integer is
appended, the per-atom vector calculated by the compute is used. If a appended, the per-atom vector calculated by the compute is used. If a
bracketed integer is appended, the Ith column of the per-atom array bracketed integer is appended, the Ith column of the per-atom array
calculated by the compute is used. Users can also write code for calculated by the compute is used. Users can also write code for
their own compute styles and :doc:`add them to LAMMPS <Modify>`. their own compute styles and :doc:`add them to LAMMPS <Modify>`. See
See the discussion above for how I can be specified with a wildcard the discussion above for how I can be specified with a wildcard
asterisk to effectively specify multiple values. asterisk to effectively specify multiple values.
If a value begins with "f\_", a fix ID must follow which has been If a value begins with "f\_", a fix ID must follow which has been
@ -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 average over atoms across the entire *Nfreq* timescale. For the
*density/number* and *density/mass* values, the volume (bin volume or *density/number* and *density/mass* values, the volume (bin volume or
system volume) used in the final normalization will be the volume at system volume) used in the final normalization will be the volume at
the final *Nfreq* timestep. For the *temp* values, degrees of freedom and the final *Nfreq* timestep. For the *temp* values, degrees of freedom
kinetic energy are summed separately across the entire *Nfreq* timescale, and and kinetic energy are summed separately across the entire *Nfreq*
the output value is calculated by dividing those two sums. timescale, and the output value is calculated by dividing those two
sums.
If the *norm* setting is *sample*, the chunk value is summed over If the *norm* setting is *sample*, the chunk value is summed over
atoms for each sample, as is the count, and an "average sample value" atoms for each sample, as is the count, and an "average sample value"
@ -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]. replaced with the appropriate value names, e.g. fx or c_myCompute[2].
The words in parenthesis only appear with corresponding columns if the The words in parenthesis only appear with corresponding columns if the
chunk style specified for the :doc:`compute chunk/atom <compute_chunk_atom>` command supports them. The OrigID chunk style specified for the :doc:`compute chunk/atom
column is only used if the *compress* keyword was set to *yes* for the <compute_chunk_atom>` command supports them. The OrigID column is
:doc:`compute chunk/atom <compute_chunk_atom>` command. This means that only used if the *compress* keyword was set to *yes* for the
the original chunk IDs (e.g. molecule IDs) will have been compressed :doc:`compute chunk/atom <compute_chunk_atom>` command. This means
to remove chunk IDs with no atoms assigned to them. Thus a compressed that the original chunk IDs (e.g. molecule IDs) will have been
chunk ID of 3 may correspond to an original chunk ID or molecule ID of 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. 415. The OrigID column will list 415 for the third chunk.
The CoordN columns only appear if a *binning* style was used in the The CoordN columns only appear if a *binning* style was used in the
:doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*, :doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*,
*bin/2d*, and *bin/3d* styles the column values are the center point *bin/2d*, and *bin/3d* styles the column values are the center point
of the bin in the corresponding dimension. Just Coord1 is used for of the bin in the corresponding dimension. Just Coord1 is used for
*bin/1d*, Coord2 is added for *bin/2d*, Coord3 is added for *bin/3d*\ . *bin/1d*, Coord2 is added for *bin/2d*, Coord3 is added for *bin/3d*\
For *bin/sphere*, just Coord1 is used, and it is the radial . For *bin/sphere*, just Coord1 is used, and it is the radial
coordinate. For *bin/cylinder*, Coord1 and Coord2 are used. Coord1 coordinate. For *bin/cylinder*, Coord1 and Coord2 are used. Coord1
is the radial coordinate (away from the cylinder axis), and coord2 is is the radial coordinate (away from the cylinder axis), and coord2 is
the coordinate along the cylinder axis. the coordinate along the cylinder axis.
Note that if the value of the *units* keyword used in the :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or *lattice*, the Note that if the value of the *units* keyword used in the
coordinate values will be in distance :doc:`units <units>`. If the :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or
value of the *units* keyword is *reduced*, the coordinate values will *lattice*, the coordinate values will be in distance :doc:`units
be in unitless reduced units (0-1). This is not true for the Coord1 value <units>`. If the value of the *units* keyword is *reduced*, the
of style *bin/sphere* or *bin/cylinder* which both represent radial coordinate values will be in unitless reduced units (0-1). This is
dimensions. Those values are always in distance :doc:`units <units>`. 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 Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to :doc:`binary restart files
are relevant to this fix. <restart>`. None of the :doc:`fix_modify <fix_modify>` options are
relevant to this fix.
This fix computes a global array of values which can be accessed by This fix computes a global array of values which can be accessed by
various :doc:`output commands <Howto_output>`. The values can only be various :doc:`output commands <Howto_output>`. The values can only be
accessed on timesteps that are multiples of *Nfreq* since that is when accessed on timesteps that are multiples of *Nfreq* since that is when
averaging is performed. The global array has # of rows = the number 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 M+1+Nvalues, where M = 1 to 4, depending on whether the optional
columns for OrigID and CoordN are used, as explained above. Following columns for OrigID and CoordN are used, as explained above. Following
the optional columns, the next column contains the count of atoms in the optional columns, the next column contains the count of atoms in
@ -483,7 +499,8 @@ since they are typically already normalized by the count of atoms in
each chunk. each chunk.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""

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 number of values. Thus the file ends up to be a series of these array
sections. sections.
.. versionadded:: 4May2022
If the filename ends in '.yaml' or '.yml' then the output format If the filename ends in '.yaml' or '.yml' then the output format
conforms to the `YAML standard <https://yaml.org/>`_ which allows conforms to the `YAML standard <https://yaml.org/>`_ which allows
easy import that data into tools and scripts that support reading YAML 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 Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.. versionadded:: 4May2022
No information about this fix is written to :doc:`binary restart files No information about this fix is written to :doc:`binary restart files
<restart>`. The :doc:`fix_modify colname <fix_modify>` option can be <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 used to change the name of the column in the output file. When writing

View File

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

View File

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

View File

@ -14,8 +14,14 @@ Syntax
* ipi = style name of this fix command * ipi = style name of this fix command
* address = internet address (FQDN or IP), or UNIX socket name * address = internet address (FQDN or IP), or UNIX socket name
* port = port number (ignored for UNIX sockets) * 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 Examples
"""""""" """"""""

View File

@ -22,13 +22,14 @@ Syntax
.. parsed-literal:: .. 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 *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 sets the external dimensions used to calculate the scalar pressure
*strain* values = e_x e_y = initial strain *strain* values = e_x e_y = initial strain
usually not needed, but may be needed to resume a run with a data file. 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 *temp*, *iso*, *x*, *y*, *z*, *tchain*, *pchain*, *tloop*, *ploop*, *mtk*
documented by the :doc:`fix npt <fix_nh>` command keywords documented by the :doc:`fix npt <fix_nh>` command
Examples Examples
"""""""" """"""""

View File

@ -22,7 +22,7 @@ Syntax
*disc* value = none = treat particles as 2d discs, not spheres *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 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
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 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 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 fix 2 water npt/sphere temp 300.0 300.0 100.0 aniso 0.0 0.0 1000.0 dilate partial
Description 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. moment of inertia, as used in the time integration.
Additional parameters affecting the thermostat and barostat are 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*, specified by keywords and values documented with the :doc:`fix npt
*iso*, *aniso*, and *dilate* keywords. <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 The particles in the fix group are the only ones whose velocities and
positions are updated by the velocity/position update portion of the 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_temp all temp/sphere
compute fix-ID_press all pressure fix-ID_temp 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 See the :doc:`compute temp/sphere <compute_temp_sphere>` and
IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID :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" + underscore + "press", and the group for the new computes is "all"
since pressure is computed for the entire system. since pressure is computed for the entire system.
@ -170,7 +174,9 @@ defined by the :doc:`dimension <dimension>` keyword.
Related commands 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 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 orientation of the dipole moment of each particle is also updated
during the time integration. This option should be used for models during the time integration. This option should be used for models
where a dipole moment is assigned to finite-size particles, 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 The default dipole orientation integrator can be changed to the
Dullweber-Leimkuhler-McLachlan integration scheme 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 Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to :doc:`binary restart files
are relevant to this fix. No global or per-atom quantities are stored <restart>`. None of the :doc:`fix_modify <fix_modify>` options are
by this fix for access by various :doc:`output commands <Howto_output>`. 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 No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""

View File

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

View File

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

View File

@ -15,18 +15,18 @@ Syntax
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* property/atom = style name of this 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:: .. parsed-literal::
*mol* = molecule IDs *mol* = molecule IDs
*q* = charge *q* = charge
*rmass* = per-atom mass *rmass* = per-atom mass
*i_name* = new integer vector referenced by name i_name = new integer vector referenced by name
*d_name* = new floating-point vector referenced by name d_name = new floating-point vector referenced by name
*i2_name* = new integer array referenced by name i2_name = new integer array referenced by name
i2_name arg = N = number of columns in the array 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 d2_name arg = N = number of columns in the array
* zero of more keyword/value pairs may be appended * 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) Tstart,Tstop = desired temperature at start/stop of run (temperature units)
Tdamp = temperature damping parameter (time units) Tdamp = temperature damping parameter (time units)
seed = random number seed to use for white noise (positive integer) 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 *temp* values = Tstart Tstop Tdamp
Tstart,Tstop = desired temperature at start/stop of run (temperature units) Tstart,Tstop = desired temperature at start/stop of run (temperature units)
Tdamp = temperature damping parameter (time units) Tdamp = temperature damping parameter (time units)
@ -98,7 +98,7 @@ Syntax
*x* or *y* or *z* values = Pstart Pstop Pdamp *x* or *y* or *z* values = Pstart Pstop Pdamp
Pstart,Pstop = external stress tensor component at start/end of run (pressure units) Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
Pdamp = stress damping parameter (time 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 *tparam* values = Tchain Titer Torder
Tchain = length of Nose/Hoover thermostat chain Tchain = length of Nose/Hoover thermostat chain
Titer = number of thermostat iterations performed Titer = number of thermostat iterations performed

View File

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

View File

@ -25,7 +25,7 @@ Examples
if "${steps} > 1000" then quit if "${steps} > 1000" then quit
if "${myString} == a10" 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 & if "(${eng} > 0.0) || ($n < 1000)" then &
"timestep 0.005" & "timestep 0.005" &
elif $n<10000 & elif $n<10000 &

View File

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

View File

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

View File

@ -22,24 +22,24 @@ Syntax
*check* value = *yes* or *no* *check* value = *yes* or *no*
*yes* = only build if some atom has moved half the skin distance or more *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 *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 *yes* = only build neighbor list once at start of run and never rebuild
*no* = rebuild neighbor list according to other settings *no* = rebuild neighbor list according to other settings
*cluster* *cluster* value = *yes* or *no*
*yes* = check bond,angle,etc neighbor list for nearby clusters *yes* = check bond,angle,etc neighbor list for nearby clusters
*no* = do not 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 *include* value = group-ID
group-ID = only build pair neighbor lists for atoms in this group group-ID = only build pair neighbor lists for atoms in this group
*exclude* values: *exclude* values:
type M N *type* M N
M,N = exclude if one atom in pair is type M, other is type 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 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 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 group-ID = exclude if both atoms are in different molecules and in group
none *none*
delete all exclude settings delete all exclude settings
*page* value = N *page* value = N
N = number of pairs stored in a single neighbor page N = number of pairs stored in a single neighbor page

View File

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

View File

@ -36,7 +36,7 @@ Examples
.. code-block:: LAMMPS .. 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 1 1 2.05 2.8
pair_coeff * * pair_coeff * *

View File

@ -24,7 +24,7 @@ Examples
pair_coeff * * 1.0 1.0 pair_coeff * * 1.0 1.0
pair_coeff * * nialhjea 1 1 2 pair_coeff * * nialhjea 1 1 2
pair_coeff * 3 morse.table ENTRY1 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 Description
""""""""""" """""""""""

View File

@ -78,12 +78,12 @@ Examples
Description Description
""""""""""" """""""""""
Style *lj/cut/dipole/cut* computes interactions between pairs of particles Style *lj/cut/dipole/cut* computes interactions between pairs of
that each have a charge and/or a point dipole moment. In addition to particles that each have a charge and/or a point dipole moment. In
the usual Lennard-Jones interaction between the particles (Elj) the addition to the usual Lennard-Jones interaction between the particles
charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole (Epp) (Elj) the charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole
interactions are computed by these formulas for the energy (E), force (Epp) interactions are computed by these formulas for the energy (E),
(F), and torque (T) between particles I and J. force (F), and torque (T) between particles I and J.
.. math:: .. 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}) \frac{3}{r^5} (\vec{p_i} \bullet \vec{r})
(\vec{p_j} \times \vec{r}) (\vec{p_j} \times \vec{r})
where :math:`q_i` and :math:`q_j` are the charges on the two particles, where :math:`q_i` and :math:`q_j` are the charges on the two
:math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole moment vectors of particles, :math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole
the two particles, r is their separation distance, and the vector r = moment vectors of the two particles, r is their separation distance,
Ri - Rj is the separation vector between the two particles. Note that and the vector r = Ri - Rj is the separation vector between the two
Eqq and Fqq are simply Coulombic energy and force, Fij = -Fji as particles. Note that Eqq and Fqq are simply Coulombic energy and
symmetric forces, and Tij != -Tji since the torques do not act force, Fij = -Fji as symmetric forces, and Tij != -Tji since the
symmetrically. These formulas are discussed in :ref:`(Allen) <Allen2>` torques do not act symmetrically. These formulas are discussed in
and in :ref:`(Toukmaji) <Toukmaji2>`. :ref:`(Allen) <Allen2>` and in :ref:`(Toukmaji) <Toukmaji2>`.
Also note, that in the code, all of these terms (except Elj) have a 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 + :math:`C/\epsilon` prefactor, the same as the Coulombic term in the
Coulombic pair styles discussed :doc:`here <pair_lj>`. C is an LJ + Coulombic pair styles discussed :doc:`here <pair_lj>`. C is an
energy-conversion constant and epsilon is the dielectric constant energy-conversion constant and epsilon is the dielectric constant
which can be set by the :doc:`dielectric <dielectric>` command. The which can be set by the :doc:`dielectric <dielectric>` command. The
same is true of the equations that follow for other dipole pair 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 potential containing extra terms that make both the energy and its
derivative go to zero at the cutoff distance; this removes derivative go to zero at the cutoff distance; this removes
(cutoff-related) problems in energy conservation and any numerical (cutoff-related) problems in energy conservation and any numerical
instability in the equations of motion :ref:`(Allen) <Allen2>`. Shifted-force instability in the equations of motion :ref:`(Allen)
interactions for the Lennard-Jones (E_LJ), charge-charge (Eqq), <Allen2>`. Shifted-force interactions for the Lennard-Jones (E_LJ),
charge-dipole (Eqp), dipole-charge (Epq) and dipole-dipole (Epp) charge-charge (Eqq), charge-dipole (Eqp), dipole-charge (Epq) and
potentials are computed by these formulas for the energy (E), force dipole-dipole (Epp) potentials are computed by these formulas for the
(F), and torque (T) between particles I and J: energy (E), force (F), and torque (T) between particles I and J:
.. math:: .. 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 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 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 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 :math:`\vec{p_j}` are the dipole moment vectors of the two particles,
is their separation distance, and the vector r = Ri - Rj is the 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 separation vector between the two particles. Note that Eqq and Fqq
simply Coulombic energy and force, Fij = -Fji as symmetric forces, and are simply Coulombic energy and force, Fij = -Fji as symmetric forces,
Tij != -Tji since the torques do not act symmetrically. The and Tij != -Tji since the torques do not act symmetrically. The
shifted-force formula for the Lennard-Jones potential is reported in shifted-force formula for the Lennard-Jones potential is reported in
:ref:`(Stoddard) <Stoddard>`. The original (non-shifted) formulas for :ref:`(Stoddard) <Stoddard>`. The original (non-shifted) formulas for
the electrostatic potentials, forces and torques can be found in the electrostatic potentials, forces and torques can be found in
:ref:`(Price) <Price2>`. The shifted-force electrostatic potentials have :ref:`(Price) <Price2>`. The shifted-force electrostatic potentials
been obtained by applying equation 5.13 of :ref:`(Allen) <Allen2>`. The have been obtained by applying equation 5.13 of :ref:`(Allen)
formulas for the corresponding forces and torques have been obtained by <Allen2>`. The formulas for the corresponding forces and torques have
applying the 'chain rule' as in appendix C.3 of :ref:`(Allen) <Allen2>`. 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 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, 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 they are used as cutoffs for the LJ and Coulombic (q,p) terms
respectively. This pair style also supports an optional *scale* keyword respectively. This pair style also supports an optional *scale*
as part of a pair_coeff statement, where the interactions can be keyword as part of a pair_coeff statement, where the interactions can
scaled according to this factor. This scale factor is also made available be scaled according to this factor. This scale factor is also made
for use with fix adapt. available for use with fix adapt.
Style *lj/cut/dipole/long* computes long-range point-dipole Style *lj/cut/dipole/long* computes the short-range portion of
interactions as discussed in :ref:`(Toukmaji) <Toukmaji2>`. Dipole-dipole, point-dipole interactions as discussed in :ref:`(Toukmaji)
dipole-charge, and charge-charge interactions are all supported, along <Toukmaji2>`. Dipole-dipole, dipole-charge, and charge-charge
with the standard 12/6 Lennard-Jones interactions, which are computed interactions are all supported, along with the standard 12/6
with a cutoff. A :doc:`kspace_style <kspace_style>` must be defined to Lennard-Jones interactions, which are computed with a cutoff. A
use this pair style. Currently, only :doc:`kspace_style ewald/disp <kspace_style>` support long-range point-dipole :doc:`kspace_style <kspace_style>` must be defined to use this pair
interactions. 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 * :doc:`kspace_style ewald/disp <kspace_style>`
discussed in :ref:`(Toukmaji) <Toukmaji2>`. Long-range dipole-dipole, * :doc:`kspace_style ewald/dipole <kspace_style>`
dipole-charge, and charge-charge interactions are all supported, along * :doc:`kspace_style pppm/dipole <kspace_style>`
with the standard 12/6 Lennard-Jones interactions. LJ interactions
can be cutoff or long-ranged.
For style *lj/long/dipole/long*, if *flag_lj* is set to *long*, no Style *lj/long/dipole/long* has the same functionality as style
cutoff is used on the LJ 1/r\^6 dispersion term. The long-range *lj/cut/dipole/long*, except it also has an option to compute 12/6
portion is calculated by using the :doc:`kspace_style ewald_disp <kspace_style>` command. The specified LJ cutoff then Lennard-Jones interactions for use with a long-range dispersion kspace
determines which portion of the LJ interactions are computed directly style. This is done by setting its *flag_lj* argument to *long*. For
by the pair potential versus which part is computed in reciprocal long-range LJ interactions, the doc:`kspace_style ewald/disp
space via the Kspace style. If *flag_lj* is set to *cut*, the LJ <kspace_style>` command must be used.
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.
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 The following coefficients must be defined for each pair of atoms
types via the :doc:`pair_coeff <pair_coeff>` command as in the examples 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 .. include:: accel_styles.rst
---------- ----------

View File

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

View File

@ -14,13 +14,9 @@ Syntax
pair_style style args pair_style style args
* style = *smatb* * style = *smatb* or *smatb/single*
* args = none * args = none
.. parsed-literal::
*smatb*
Examples Examples
"""""""" """"""""
@ -29,13 +25,18 @@ Examples
pair_style smatb pair_style smatb
pair_coeff 1 1 2.88 10.35 4.178 0.210 1.818 4.07293506 4.9883063257983666 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 Description
""""""""""" """""""""""
The *smatb* styles compute the Second Moment Approximation to the Tight Binding .. versionadded:: 4May2022
:ref:`(Cyrot) <Cyrot>`, :ref:`(Gupta) <Gupta>`, :ref:`(Rosato) <Rosato>`,
given by 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:: .. 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})} 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 reduced to zero, from the inner cutoff :math:`R_{sc}` to the outer
cutoff :math:`R_{c}`. cutoff :math:`R_{c}`.
The *smatb/single* style is an optimization when using only a single atom type.
Coefficients Coefficients
"""""""""""" """"""""""""
@ -100,10 +103,10 @@ For atom type pairs I,J and I != J the coefficients are not automatically mixed.
Restrictions 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. 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 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 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`. 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 The *sw/mod* style is designed for simulations of materials when
distinguishing three-body angles are necessary, such as borophene and distinguishing three-body angles are necessary, such as borophene and
transition metal dichalcogenides, which cannot be described by the transition metal dichalcogenides, which cannot be described by the

View File

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

View File

@ -35,6 +35,8 @@ Used in example input scripts:
Description Description
""""""""""" """""""""""
.. versionadded:: 2Jun2022
The *threebody/table* style is a pair style for generic tabulated The *threebody/table* style is a pair style for generic tabulated
three-body interactions. It has been developed for (coarse-grained) three-body interactions. It has been developed for (coarse-grained)
simulations (of water) with Kernel-based machine learning (ML) 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>` This pair style does not support the :doc:`pair_modify <pair_modify>`
mixing and table options. mixing and table options.
The :doc:`pair_modify <pair_modify>` tail option is not relevant The :doc:`pair_modify <pair_modify>` tail and shift options are not
for this pair style as it goes to zero at the cut-off radius. 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 This pair style writes its information to :doc:`binary restart files
<restart>`, so pair_style and pair_coeff commands do not need to be <restart>`, so pair_style and pair_coeff commands do not need to be

View File

@ -11,7 +11,7 @@ Syntax
thermo_modify keyword value ... thermo_modify keyword value ...
* one or more keyword/value pairs may be listed * 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:: .. 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 block ("yaml"). This modify option overrides the *one*, *multi*, or
*yaml* thermo_style settings. *yaml* thermo_style settings.
.. versionadded:: 4May2022
The *colname* keyword can be used to change the default header keyword The *colname* keyword can be used to change the default header keyword
for a column or field of thermodynamic output. The setting for *ID for a column or field of thermodynamic output. The setting for *ID
string* replaces the default text with the provided string. *ID* can be 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), bound(group,dir,region), gyration(group,region), ke(group,reigon),
angmom(group,dim,region), torque(group,dim,region), angmom(group,dim,region), torque(group,dim,region),
inertia(group,dimdim,region), omega(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) 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 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 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* 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. 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 extract_setting(name) function enables access to basic settings for
the LAMMPS executable and the running simulation via calling the the LAMMPS executable and the running simulation via calling the
:cpp:func:`lammps_extract_setting` library function. For example, the :cpp:func:`lammps_extract_setting` library function. For example, the
@ -1002,7 +1016,7 @@ step
.. code-block:: LAMMPS .. 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" 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 The *is_available(category,name)* function allows to query whether

View File

@ -39,6 +39,18 @@ hr {
display: none; 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 { .ui.tabular.menu .item {
padding-right: 1em; padding-right: 1em;
padding-left: 1em; padding-left: 1em;

View File

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

View File

@ -4,17 +4,8 @@
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<div id="search-results"> <div id="search-results">
<script> <script async src="https://cse.google.com/cse.js?cx=000956471495417073164:5ggs_m6ymw0">
(function() { </script>
var cx = '012685039201307511604:um7if1hinba'; <div class="gcse-search"></div>
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>
</div> </div>
{% endblock %} {% endblock %}

View File

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

View File

@ -1105,7 +1105,7 @@ contains !! Wrapper functions local to this module {{{1
C_xy = xy C_xy = xy
C_xz = xz C_xz = xz
C_yz = yz 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 end subroutine lammps_reset_box
! lammps_gather_atoms {{{2 ! 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 (2) Copy said library to your Fortran program's source directory or replace
${LAMMPS_LIB} with its full path in the instructions below. ${LAMMPS_LIB} with its full path in the instructions below.
(3) Compile (but don't link!) LAMMPS.F90. Example: (3) Compile (but don't link!) LAMMPS.F90. Example:
mpif90 -c LAMMPS.f90 mpifort -c LAMMPS.f90
OR OR
gfortran -c LAMMPS.F90 gfortran -c LAMMPS.F90
NOTE: you may get a warning such as, 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 were part of the usual LAMMPS library interface (if you have the module
file visible to the compiler, that is). file visible to the compiler, that is).
(6) Compile (but don't link) your Fortran program. Example: (6) Compile (but don't link) your Fortran program. Example:
mpif90 -c myfreeformatfile.f90 mpifort -c myfreeformatfile.f90
mpif90 -c myfixedformatfile.f mpifort -c myfixedformatfile.f
OR OR
gfortran -c myfreeformatfile.f90 gfortran -c myfreeformatfile.f90
gfortran -c myfixedformatfile.f 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 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 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: 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 (7) Link everything together, including any libraries needed by LAMMPS (such
as the C++ standard library, the C math library, the JPEG library, fftw, as the C++ standard library, the C math library, the JPEG library, fftw,
etc.) For example, 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 ${LAMMPS_LIB} -lmpi_cxx -lstdc++ -lm
OR OR
gfortran LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ 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 (1) Compile LAMMPS as a dynamic library
(make makeshlib && make -f Makefile.shlib [targetname]). (make makeshlib && make -f Makefile.shlib [targetname]).
(2) Compile, but don't link, LAMMPS.F90 using the -fPIC flag, such as (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. (3) Compile, but don't link, LAMMPS-wrapper.cpp in the same manner, e.g.
mpicxx -fPIC -c LAMMPS-wrapper.cpp mpicxx -fPIC -c LAMMPS-wrapper.cpp
(4) Make the dynamic library, like so: (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, (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 where ${LAMMPS_SRC}/examples/COUPLE/fortran2 contains the .mod file from
step (3) step (3)
(6) Link everything together, such as (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 \ -L${LAMMPS_SRC}/examples/COUPLE/fortran2 -llammps_fortran \
-llammps_openmpi -lmpi_cxx -lstdc++ -lm -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 After editing the Makefile, lmppath.h, and spkpath.h to make them
suitable for your box, type: suitable for your box, type:
g++ -f Makefile.g++ make -f Makefile.g++
and you should get the lmpspk executable. and you should get the lmpspk executable.

View File

@ -1,66 +1,66 @@
# 2d NEB surface simulation, hop from surface to become adatom # 2d NEB surface simulation, hop from surface to become adatom
dimension 2 dimension 2
boundary p s p boundary p s p
atom_style atomic atom_style atomic
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 5 neigh_modify delay 5
atom_modify map array sort 0 0.0 atom_modify map array sort 0 0.0
variable u uloop 20 variable u uloop 20
# create geometry with flat surface # create geometry with flat surface
lattice hex 0.9 lattice hex 0.9
region box block 0 20 0 10 -0.25 0.25 region box block 0 20 0 10 -0.25 0.25
#create_box 3 box #create_box 3 box
#create_atoms 1 box #create_atoms 1 box
#mass * 1.0 #mass * 1.0
#write_data initial.hop1 #write_data initial.hop1
read_data initial.hop1 read_data initial.hop1
# LJ potentials # LJ potentials
pair_style lj/cut 2.5 pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5 pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes pair_modify shift yes
# initial minimization to relax surface # initial minimization to relax surface
minimize 1.0e-6 1.0e-4 1000 10000 minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0 reset_timestep 0
# define groups # define groups
region 1 block INF INF INF 1.25 INF INF region 1 block INF INF INF 1.25 INF INF
group lower region 1 group lower region 1
group mobile subtract all lower group mobile subtract all lower
set group lower type 2 set group lower type 2
timestep 0.05 timestep 0.05
# group of NEB atoms - either block or single atom ID 412 # group of NEB atoms - either block or single atom ID 412
region surround block 10 18 17 20 0 0 units box region surround block 10 18 17 20 0 0 units box
group nebatoms region surround group nebatoms region surround
#group nebatoms id 412 #group nebatoms id 412
set group nebatoms type 3 set group nebatoms type 3
group nonneb subtract all nebatoms group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0 fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 parallel ideal fix 2 nebatoms neb 1.0 parallel ideal
fix 3 all enforce2d fix 3 all enforce2d
thermo 100 thermo 100
#dump 1 nebatoms atom 10 dump.neb.$u #dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u #dump 2 nonneb atom 10 dump.nonneb.$u
# run NEB for 2000 steps or to force tolerance # 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 # 2d NEB surface simulation, hop from surface to become adatom
dimension 2 dimension 2
boundary p s p boundary p s p
atom_style atomic atom_style atomic
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 5 neigh_modify delay 5
atom_modify map array sort 0 0.0 atom_modify map array sort 0 0.0
variable u uloop 20 variable u uloop 20
# create geometry with flat surface # create geometry with flat surface
lattice hex 0.9 lattice hex 0.9
region box block 0 20 0 10 -0.25 0.25 region box block 0 20 0 10 -0.25 0.25
read_data initial.hop1.end read_data initial.hop1.end
# LJ potentials # LJ potentials
pair_style lj/cut 2.5 pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5 pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes pair_modify shift yes
# define groups # define groups
region 1 block INF INF INF 1.25 INF INF region 1 block INF INF INF 1.25 INF INF
group lower region 1 group lower region 1
group mobile subtract all lower group mobile subtract all lower
set group lower type 2 set group lower type 2
timestep 0.05 timestep 0.05
# group of NEB atoms - either block or single atom ID 412 # group of NEB atoms - either block or single atom ID 412
region surround block 10 18 17 20 0 0 units box region surround block 10 18 17 20 0 0 units box
group nebatoms region surround group nebatoms region surround
#group nebatoms id 412 #group nebatoms id 412
set group nebatoms type 3 set group nebatoms type 3
group nonneb subtract all nebatoms group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0 fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 parallel ideal end first 1.0 fix 2 nebatoms neb 1.0 parallel ideal end first 1.0
fix 3 all enforce2d fix 3 all enforce2d
thermo 100 thermo 100
#dump 1 nebatoms atom 10 dump.neb.$u #dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u #dump 2 nonneb atom 10 dump.nonneb.$u
# run NEB for 2000 steps or to force tolerance # 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 # 2d NEB surface simulation, hop of adatom on surface
dimension 2 dimension 2
boundary p s p boundary p s p
atom_style atomic atom_style atomic
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 5 neigh_modify delay 5
atom_modify map array sort 0 0.0 atom_modify map array sort 0 0.0
variable u uloop 20 variable u uloop 20
# create geometry with adatom # create geometry with adatom
lattice hex 0.9 lattice hex 0.9
region box block 0 20 0 11 -0.25 0.25 region box block 0 20 0 11 -0.25 0.25
region box1 block 0 20 0 10 -0.25 0.25 region box1 block 0 20 0 10 -0.25 0.25
#create_box 3 box #create_box 3 box
#create_atoms 1 region box1 #create_atoms 1 region box1
#create_atoms 1 single 11.5 10.5 0 #create_atoms 1 single 11.5 10.5 0
#mass * 1.0 #mass * 1.0
#write_data initial.hop2 #write_data initial.hop2
read_data initial.hop2 read_data initial.hop2
# LJ potentials # LJ potentials
pair_style lj/cut 2.5 pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5 pair_coeff * * 1.0 1.0 2.5
pair_modify shift yes pair_modify shift yes
# initial minimization to relax surface # initial minimization to relax surface
minimize 1.0e-6 1.0e-4 1000 10000 minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0 reset_timestep 0
# define groups # define groups
region 1 block INF INF INF 1.25 INF INF region 1 block INF INF INF 1.25 INF INF
group lower region 1 group lower region 1
group mobile subtract all lower group mobile subtract all lower
set group lower type 2 set group lower type 2
timestep 0.05 timestep 0.05
# group of NEB atoms - either block or single atom ID 421 # group of NEB atoms - either block or single atom ID 421
region surround block 10 18 17 21 0 0 units box region surround block 10 18 17 21 0 0 units box
group nebatoms region surround group nebatoms region surround
#group nebatoms id 421 #group nebatoms id 421
set group nebatoms type 3 set group nebatoms type 3
group nonneb subtract all nebatoms group nonneb subtract all nebatoms
fix 1 lower setforce 0.0 0.0 0.0 fix 1 lower setforce 0.0 0.0 0.0
fix 2 nebatoms neb 1.0 fix 2 nebatoms neb 1.0
fix 3 all enforce2d fix 3 all enforce2d
thermo 100 thermo 100
#dump 1 nebatoms atom 10 dump.neb.$u #dump 1 nebatoms atom 10 dump.neb.$u
#dump 2 nonneb atom 10 dump.nonneb.$u #dump 2 nonneb atom 10 dump.nonneb.$u
# run NEB for 2000 steps or to force tolerance # 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_style atomic
atom_modify map array atom_modify map array
boundary p p p boundary p p p
atom_modify sort 0 0.0 atom_modify sort 0 0.0
# coordination number cutoff # coordination number cutoff
@ -45,7 +45,7 @@ group Si type 1
group del id 300 group del id 300
delete_atoms group del compress no delete_atoms group del compress no
group vacneigh id 174 175 301 304 306 331 337 group vacneigh id 174 175 301 304 306 331 337
# choose potential # choose potential
pair_style sw pair_style sw
@ -53,26 +53,26 @@ pair_coeff * * Si.sw Si
# set up neb run # 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 # only output atoms near vacancy
#dump events vacneigh custom 1000 dump.neb.sivac.$u id type x y z #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 thermo 100
minimize 1.0e-6 1.0e-4 1000 10000
reset_timestep 0
fix 1 all neb 1.0
thermo 100
# run NEB for 2000 steps or to force tolerance # run NEB for 2000 steps or to force tolerance
timestep 0.01 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 definitions for calling functions in library.cpp
INTERFACE INTERFACE
FUNCTION lammps_open(argc,argv,comm) & FUNCTION lammps_open(argc, argv, comm) BIND(C, name='lammps_open_fortran')
BIND(C, name='lammps_open_fortran')
IMPORT :: c_ptr, c_int IMPORT :: c_ptr, c_int
INTEGER(c_int), VALUE, INTENT(in) :: argc, comm INTEGER(c_int), VALUE, INTENT(in) :: argc, comm
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv
TYPE(c_ptr) :: lammps_open TYPE(c_ptr) :: lammps_open
END FUNCTION lammps_open END FUNCTION lammps_open
FUNCTION lammps_open_no_mpi(argc,argv,handle) & FUNCTION lammps_open_no_mpi(argc, argv, handle) BIND(C, name='lammps_open_no_mpi')
BIND(C, name='lammps_open_no_mpi')
IMPORT :: c_ptr, c_int IMPORT :: c_ptr, c_int
INTEGER(c_int), VALUE, INTENT(in) :: argc INTEGER(c_int), VALUE, INTENT(in) :: argc
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv 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 TYPE(c_ptr) :: lammps_open_no_mpi
END FUNCTION 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') SUBROUTINE lammps_kokkos_finalize() BIND(C, name='lammps_kokkos_finalize')
END SUBROUTINE 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 IMPORT :: c_ptr
TYPE(c_ptr), VALUE :: handle TYPE(c_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: filename TYPE(c_ptr), VALUE :: filename
END SUBROUTINE lammps_file 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 IMPORT :: c_ptr
TYPE(c_ptr), VALUE :: handle TYPE(c_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: cmd TYPE(c_ptr), VALUE :: cmd
END SUBROUTINE lammps_command END SUBROUTINE lammps_command
SUBROUTINE lammps_commands_list(handle,ncmd,cmds) & SUBROUTINE lammps_commands_list(handle, ncmd, cmds) BIND(C, name='lammps_commands_list')
BIND(C, name='lammps_commands_list')
IMPORT :: c_ptr, c_int IMPORT :: c_ptr, c_int
TYPE(c_ptr), VALUE :: handle TYPE(c_ptr), VALUE :: handle
INTEGER(c_int), VALUE, INTENT(in) :: ncmd INTEGER(c_int), VALUE, INTENT(in) :: ncmd
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: cmds TYPE(c_ptr), DIMENSION(*), INTENT(in) :: cmds
END SUBROUTINE lammps_commands_list END SUBROUTINE lammps_commands_list
SUBROUTINE lammps_commands_string(handle,str) & SUBROUTINE lammps_commands_string(handle, str) BIND(C, name='lammps_commands_string')
BIND(C, name='lammps_commands_string')
IMPORT :: c_ptr IMPORT :: c_ptr
TYPE(c_ptr), VALUE :: handle TYPE(c_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: str TYPE(c_ptr), VALUE :: str
@ -137,24 +133,22 @@ MODULE LIBLAMMPS
END INTERFACE END INTERFACE
CONTAINS CONTAINS
! Fortran wrappers and helper functions. ! Fortran wrappers and helper functions.
! Constructor for the LAMMPS class. ! Constructor for the LAMMPS class.
! Combined wrapper around lammps_open_fortran() and lammps_open_no_mpi() ! 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 IMPLICIT NONE
INTEGER,INTENT(in), OPTIONAL :: comm INTEGER, INTENT(in), OPTIONAL :: comm
CHARACTER(len=*), INTENT(in), OPTIONAL :: args(:) CHARACTER(len=*), INTENT(in), OPTIONAL :: args(:)
TYPE(c_ptr), ALLOCATABLE :: argv(:) TYPE(c_ptr), ALLOCATABLE :: argv(:)
TYPE(c_ptr) :: dummy=c_null_ptr INTEGER(c_int) :: i, c_comm, argc
INTEGER :: i,argc
IF (PRESENT(args)) THEN IF (PRESENT(args)) THEN
! convert argument list to c style ! convert fortran argument list to c style
argc = SIZE(args) argc = SIZE(args)
ALLOCATE(argv(argc)) ALLOCATE(argv(argc))
DO i=1,argc DO i=1, argc
argv(i) = f2c_string(args(i)) argv(i) = f2c_string(args(i))
END DO END DO
ELSE ELSE
@ -164,23 +158,24 @@ CONTAINS
ENDIF ENDIF
IF (PRESENT(comm)) THEN 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 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 END IF
! Clean up allocated memory ! Clean up allocated memory
DO i=1,argc DO i=1, argc
CALL lammps_free(argv(i)) CALL lammps_free(argv(i))
END DO END DO
DEALLOCATE(argv) DEALLOCATE(argv)
END FUNCTION lmp_open END FUNCTION lmp_open
! Combined Fortran wrapper around lammps_close() and lammps_mpi_finalize() ! Combined Fortran wrapper around lammps_close() and lammps_mpi_finalize()
SUBROUTINE lmp_close(self,finalize) SUBROUTINE lmp_close(self, finalize)
IMPLICIT NONE IMPLICIT NONE
CLASS(lammps) :: self CLASS(lammps) :: self
LOGICAL,INTENT(in),OPTIONAL :: finalize LOGICAL, INTENT(in), OPTIONAL :: finalize
CALL lammps_close(self%handle) CALL lammps_close(self%handle)
@ -206,68 +201,69 @@ CONTAINS
lmp_get_natoms = lammps_get_natoms(self%handle) lmp_get_natoms = lammps_get_natoms(self%handle)
END FUNCTION lmp_get_natoms END FUNCTION lmp_get_natoms
SUBROUTINE lmp_file(self,filename) SUBROUTINE lmp_file(self, filename)
IMPLICIT NONE IMPLICIT NONE
CLASS(lammps) :: self CLASS(lammps) :: self
CHARACTER(len=*) :: filename CHARACTER(len=*) :: filename
TYPE(c_ptr) :: str TYPE(c_ptr) :: str
str = f2c_string(filename) str = f2c_string(filename)
CALL lammps_file(self%handle,str) CALL lammps_file(self%handle, str)
CALL lammps_free(str) CALL lammps_free(str)
END SUBROUTINE lmp_file END SUBROUTINE lmp_file
! equivalent function to lammps_command() ! equivalent function to lammps_command()
SUBROUTINE lmp_command(self,cmd) SUBROUTINE lmp_command(self, cmd)
IMPLICIT NONE IMPLICIT NONE
CLASS(lammps) :: self CLASS(lammps) :: self
CHARACTER(len=*) :: cmd CHARACTER(len=*) :: cmd
TYPE(c_ptr) :: str TYPE(c_ptr) :: str
str = f2c_string(cmd) str = f2c_string(cmd)
CALL lammps_command(self%handle,str) CALL lammps_command(self%handle, str)
CALL lammps_free(str) CALL lammps_free(str)
END SUBROUTINE lmp_command END SUBROUTINE lmp_command
! equivalent function to lammps_commands_list() ! equivalent function to lammps_commands_list()
SUBROUTINE lmp_commands_list(self,cmds) SUBROUTINE lmp_commands_list(self, cmds)
IMPLICIT NONE IMPLICIT NONE
CLASS(lammps) :: self CLASS(lammps) :: self
CHARACTER(len=*), INTENT(in), OPTIONAL :: cmds(:) CHARACTER(len=*), INTENT(in), OPTIONAL :: cmds(:)
TYPE(c_ptr), ALLOCATABLE :: cmdv(:) TYPE(c_ptr), ALLOCATABLE :: cmdv(:)
INTEGER :: i,ncmd INTEGER :: i, ncmd
! convert command list to c style ! convert command list to c style
ncmd = SIZE(cmds) ncmd = SIZE(cmds)
ALLOCATE(cmdv(ncmd)) ALLOCATE(cmdv(ncmd))
DO i=1,ncmd DO i=1, ncmd
cmdv(i) = f2c_string(cmds(i)) cmdv(i) = f2c_string(cmds(i))
END DO END DO
CALL lammps_commands_list(self%handle,ncmd,cmdv) CALL lammps_commands_list(self%handle, ncmd, cmdv)
! Clean up allocated memory ! Clean up allocated memory
DO i=1,ncmd DO i=1, ncmd
CALL lammps_free(cmdv(i)) CALL lammps_free(cmdv(i))
END DO END DO
DEALLOCATE(cmdv) DEALLOCATE(cmdv)
END SUBROUTINE lmp_commands_list END SUBROUTINE lmp_commands_list
! equivalent function to lammps_commands_string() ! equivalent function to lammps_commands_string()
SUBROUTINE lmp_commands_string(self,str) SUBROUTINE lmp_commands_string(self, str)
IMPLICIT NONE IMPLICIT NONE
CLASS(lammps) :: self CLASS(lammps) :: self
CHARACTER(len=*) :: str CHARACTER(len=*) :: str
TYPE(c_ptr) :: tmp TYPE(c_ptr) :: tmp
tmp = f2c_string(str) tmp = f2c_string(str)
CALL lammps_commands_string(self%handle,tmp) CALL lammps_commands_string(self%handle, tmp)
CALL lammps_free(tmp) CALL lammps_free(tmp)
END SUBROUTINE lmp_commands_string END SUBROUTINE lmp_commands_string
! ---------------------------------------------------------------------- ! ----------------------------------------------------------------------
! local helper functions ! local helper functions
! copy fortran string to zero terminated c string ! copy fortran string to zero terminated c string
! ----------------------------------------------------------------------
FUNCTION f2c_string(f_string) RESULT(ptr) FUNCTION f2c_string(f_string) RESULT(ptr)
CHARACTER (len=*), INTENT(in) :: f_string CHARACTER (len=*), INTENT(in) :: f_string
CHARACTER (len=1, kind=c_char), POINTER :: c_string(:) CHARACTER (len=1, kind=c_char), POINTER :: c_string(:)
@ -276,8 +272,8 @@ CONTAINS
n = LEN_TRIM(f_string) n = LEN_TRIM(f_string)
ptr = lammps_malloc(n+1) ptr = lammps_malloc(n+1)
CALL C_F_POINTER(ptr,c_string,[1]) CALL C_F_POINTER(ptr, c_string, [1])
DO i=1,n DO i=1, n
c_string(i) = f_string(i:i) c_string(i) = f_string(i:i)
END DO END DO
c_string(n+1) = c_null_char 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[3] = 1.; xtArgs[4] = 1.; xtArgs[5] = 1.;
xtArgs[6] = coulombConstant*chargeDensity; xtArgs[6] = coulombConstant*chargeDensity;
xtArgs[7] = -1.; xtArgs[7] = -1.;
string radialPower = "radial_power"; f = XT_Function_Mgr::instance()->function("radial_power",8,xtArgs);
f = XT_Function_Mgr::instance()->function(radialPower,8,xtArgs);
for (iset = faceset->begin(); iset != faceset->end(); iset++) { 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}; 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[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] = -(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}; double xi2[2]={0,0};
int nroots = solve_quadratic(c,xi2); int nroots = solve_quadratic(c,xi2);
if (nroots == 0) throw ATC_Error("no real roots in 2D analytic projection guess"); 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 // 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; UXT_Function * returnFunction;
if (type=="linear") { 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 // 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; XT_Function * returnFunction;
if (type=="constant") { if (type=="constant") {

View File

@ -110,7 +110,7 @@ namespace ATC {
/** Static instance of this class */ /** Static instance of this class */
static UXT_Function_Mgr * instance(); 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* function(char ** arg, int nargs);
UXT_Function* linear_function(double c0, double c1); UXT_Function* linear_function(double c0, double c1);
UXT_Function* copy_UXT_function(UXT_Function* other); UXT_Function* copy_UXT_function(UXT_Function* other);
@ -181,7 +181,7 @@ namespace ATC {
/** Static instance of this class */ /** Static instance of this class */
static XT_Function_Mgr * instance(); 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* function(char ** arg, int nargs);
XT_Function* constant_function(double c); XT_Function* constant_function(double c);
XT_Function* copy_XT_function(XT_Function* other); 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 # Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
# #
# Copyright (2005) Sandia Corporation. Under the terms of Contract # 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 # Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
# #
# Copyright (2005) Sandia Corporation. Under the terms of Contract # 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 # Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
# #
# Copyright (2005) Sandia Corporation. Under the terms of Contract # 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 # Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
# #
# Copyright (2005) Sandia Corporation. Under the terms of Contract # 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 # Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
# #
# Copyright (2005) Sandia Corporation. Under the terms of Contract # 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 # Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
# #
# Copyright (2005) Sandia Corporation. Under the terms of Contract # Copyright (2005) Sandia Corporation. Under the terms of Contract

View File

@ -4,17 +4,29 @@
# try to improperly start up a new interpreter. # try to improperly start up a new interpreter.
import sysconfig import sysconfig
import ctypes 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: try:
pylib = ctypes.CDLL(library) pylib = ctypes.CDLL(library)
except OSError as e: except Exception as e:
if pylib.endswith(".a"): raise OSError("Unable to locate python shared library") from e
pylib.strip(".a") + ".so"
pylib = ctypes.CDLL(library)
else:
raise e
if not pylib.Py_IsInitialized(): if not pylib.Py_IsInitialized():
raise RuntimeError("This interpreter is not compatible with python-based mliap for LAMMPS.") raise RuntimeError("This interpreter is not compatible with python-based mliap for LAMMPS.")
del sysconfig, ctypes, library, pylib del sysconfig, ctypes, library, pylib
from .loader import load_model, load_unified, activate_mliappy from .loader import load_model, load_unified, activate_mliappy

View File

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

View File

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

View File

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

View File

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

View File

@ -20,6 +20,7 @@
#include "domain.h" #include "domain.h"
#include "fft3d_wrap.h" #include "fft3d_wrap.h"
#include "math_const.h" #include "math_const.h"
#include "math_special.h"
#include "memory.h" #include "memory.h"
#include "neigh_list.h" #include "neigh_list.h"
@ -29,6 +30,9 @@
using namespace LAMMPS_NS; using namespace LAMMPS_NS;
using namespace MathConst; using namespace MathConst;
using MathSpecial::square;
using MathSpecial::cube;
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
enum{MUTUAL,OPT,TCG,DIRECT}; enum{MUTUAL,OPT,TCG,DIRECT};
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG}; 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 // 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++) { for (i = 0; i < nlocal; i++) {
dix = rpole[i][1]; dix = rpole[i][1];
@ -454,7 +458,7 @@ void PairAmoeba::polar_real()
damp = pdi * pdamp[jtype]; damp = pdi * pdamp[jtype];
if (damp != 0.0) { if (damp != 0.0) {
pgamma = MIN(pti,thole[jtype]); pgamma = MIN(pti,thole[jtype]);
damp = pgamma * pow(r/damp,3.0); damp = pgamma * cube(r/damp);
if (damp < 50.0) { if (damp < 50.0) {
expdamp = exp(-damp); expdamp = exp(-damp);
sc3 = 1.0 - expdamp; sc3 = 1.0 - expdamp;
@ -499,6 +503,18 @@ void PairAmoeba::polar_real()
urc3[k] = rc3[k] * factor_uscale; urc3[k] = rc3[k] * factor_uscale;
urc5[k] = rc5[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 // apply charge penetration damping to scale factors
@ -1260,7 +1276,7 @@ void PairAmoeba::polar_kspace()
int nlocal = atom->nlocal; int nlocal = atom->nlocal;
double volbox = domain->prd[0] * domain->prd[1] * domain->prd[2]; 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; volterm = MY_PI * volbox;
// initialize variables required for the scalar summation // 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; dmpk24 = dmpk23 * dmpk2;
dmpk25 = dmpk24 * dmpk2; dmpk25 = dmpk24 * dmpk2;
term = dmpi22 - dmpk22; 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; tmp = 4.0 * dmpi2 * dmpk2 / term;
s = (dampi-tmp)*expk + (dampk+tmp)*expi; s = (dampi-tmp)*expk + (dampk+tmp)*expi;

View File

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

View File

@ -53,6 +53,9 @@ AngleAmoeba::AngleAmoeba(LAMMPS *lmp) : Angle(lmp)
ub_k = nullptr; ub_k = nullptr;
ub_r0 = 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); i4 = atom->map(i4tag);
if (i4 < 0) error->one(FLERR,"Amoeba angle 4th atom {} out of range", i4tag);
i4 = domain->closest_image(i2,i4); i4 = domain->closest_image(i2,i4);
// anglep out-of-plane calculation from Tinker // anglep out-of-plane calculation from Tinker

View File

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

View File

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

View File

@ -84,9 +84,9 @@ void BondBPM::init_style()
{ {
if (id_fix_store_local) { if (id_fix_store_local) {
auto ifix = modify->get_fix_by_id(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 (!ifix) error->all(FLERR, "Cannot find fix STORE/LOCAL id {}",id_fix_store_local);
if (strcmp(ifix->style, "STORE_LOCAL") != 0) if (strcmp(ifix->style, "STORE/LOCAL") != 0)
error->all(FLERR, "Incorrect fix style matched, not store/local"); error->all(FLERR, "Incorrect fix style matched, not STORE/LOCAL: {}",ifix->style);
fix_store_local = dynamic_cast<FixStoreLocal *>(ifix); fix_store_local = dynamic_cast<FixStoreLocal *>(ifix);
fix_store_local->nvalues = nvalues; fix_store_local->nvalues = nvalues;
} }
@ -141,7 +141,7 @@ void BondBPM::init_style()
global settings global settings
All args before store/local command are saved for potential args All args before store/local command are saved for potential args
for specific bond BPM substyles 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 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); auto ifix = modify->get_fix_by_id(id_fix_store_local);
if (!ifix) if (!ifix)
ifix = modify->add_fix( 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); fix_store_local = dynamic_cast<FixStoreLocal *>(ifix);
// Use property/atom to save reference positions as it can transfer to ghost atoms // 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 "angle_spica.h"
#include <cmath>
#include "atom.h" #include "atom.h"
#include "neighbor.h"
#include "pair.h"
#include "domain.h"
#include "comm.h" #include "comm.h"
#include "domain.h"
#include "error.h"
#include "force.h" #include "force.h"
#include "math_const.h" #include "math_const.h"
#include "memory.h" #include "memory.h"
#include "error.h" #include "neighbor.h"
#include "pair.h"
#include <cmath>
#include "lj_spica_common.h" #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 LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories https://www.lammps.org/, Sandia National Laboratories
@ -19,15 +18,15 @@
#include "pair_lj_spica.h" #include "pair_lj_spica.h"
#include <cmath>
#include <cstring>
#include "atom.h" #include "atom.h"
#include "comm.h" #include "comm.h"
#include "force.h"
#include "neigh_list.h"
#include "memory.h"
#include "error.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 #define LMP_NEED_SPICA_FIND_LJ_TYPE 1
#include "lj_spica_common.h" #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; respa_enable = 0;
single_enable = 1; single_enable = 1;
@ -71,6 +72,7 @@ PairLJSPICA::~PairLJSPICA()
} }
} }
// clang-format off
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void PairLJSPICA::compute(int eflag, int vflag) void PairLJSPICA::compute(int eflag, int vflag)

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