Merge branch 'mliappy_unified' of github.com:Boogie3D/lammps into mliappy_unified
This commit is contained in:
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
@ -13,20 +13,21 @@ lib/kim/* @ellio167
|
||||
lib/mesont/* @iafoss
|
||||
|
||||
# whole packages
|
||||
src/AMOEBA/* @sjplimp
|
||||
src/COMPRESS/* @rbberger
|
||||
src/GPU/* @ndtrung81
|
||||
src/KOKKOS/* @stanmoore1
|
||||
src/KIM/* @ellio167
|
||||
src/LATTE/* @cnegre
|
||||
src/MESSAGE/* @sjplimp
|
||||
src/MLIAP/* @athomps
|
||||
src/SNAP/* @athomps
|
||||
src/SPIN/* @julient31
|
||||
src/BROWNIAN/* @samueljmcameron
|
||||
src/CG-DNA/* @ohenrich
|
||||
src/CG-SDK/* @akohlmey
|
||||
src/CG-SPICA/* @yskmiyazaki
|
||||
src/COLVARS/* @giacomofiorin
|
||||
src/DIELECTRIC/* @ndtrung81
|
||||
src/ELECTRODE/* @ludwig-ahrens
|
||||
src/FEP/* @agiliopadua
|
||||
src/ML-HDNNP/* @singraber
|
||||
src/INTEL/* @wmbrownintel
|
||||
|
||||
6
.github/codecov.yml
vendored
6
.github/codecov.yml
vendored
@ -7,7 +7,7 @@ coverage:
|
||||
threshold: 10%
|
||||
only_pulls: false
|
||||
branches:
|
||||
- "master"
|
||||
- "develop"
|
||||
flags:
|
||||
- "unit"
|
||||
paths:
|
||||
@ -16,14 +16,14 @@ coverage:
|
||||
project:
|
||||
default:
|
||||
branches:
|
||||
- "master"
|
||||
- "develop"
|
||||
paths:
|
||||
- "src"
|
||||
informational: true
|
||||
patch:
|
||||
default:
|
||||
branches:
|
||||
- "master"
|
||||
- "develop"
|
||||
paths:
|
||||
- "src"
|
||||
informational: true
|
||||
|
||||
@ -135,13 +135,11 @@ set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions")
|
||||
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
||||
# and prints lots of pointless warnings about "unsafe" functions
|
||||
if(MSVC)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel"))
|
||||
add_compile_options(/Zc:__cplusplus)
|
||||
add_compile_options(/wd4244)
|
||||
add_compile_options(/wd4267)
|
||||
if(LAMMPS_EXCEPTIONS)
|
||||
add_compile_options(/EHsc)
|
||||
endif()
|
||||
add_compile_options(/EHsc)
|
||||
endif()
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
@ -242,6 +242,6 @@ $(MATHJAX):
|
||||
$(ANCHORCHECK): $(VENV)
|
||||
@( \
|
||||
. $(VENV)/bin/activate; \
|
||||
pip install -e utils/converters;\
|
||||
pip $(PIP_OPTIONS) install -e utils/converters;\
|
||||
deactivate;\
|
||||
)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
.TH LAMMPS "1" "23 June 2022" "2022-6-23"
|
||||
.TH LAMMPS "1" "3 August 2022" "2022-8-3"
|
||||
.SH NAME
|
||||
.B LAMMPS
|
||||
\- Molecular Dynamics Simulator. Version 23 June 2022
|
||||
\- Molecular Dynamics Simulator. Version 3 August 2022
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B lmp
|
||||
@ -161,7 +161,7 @@ list references for specific cite-able features used during a
|
||||
run.
|
||||
.TP
|
||||
\fB\-pk <style> [options]\fR or \fB\-package <style> [options]\fR
|
||||
Invoke the \fBpackage\R command with <style> and optional arguments.
|
||||
Invoke the \fBpackage\fR command with <style> and optional arguments.
|
||||
The syntax is the same as if the command appeared in an input script.
|
||||
For example "-pk gpu 2" is the same as "package gpu 2" in the input
|
||||
script. The possible styles and options are discussed in the
|
||||
|
||||
@ -181,10 +181,10 @@ set appropriate environment variables. Some variables such as
|
||||
and the linker to work correctly.
|
||||
|
||||
Using CHIP-SPV implementation of HIP is now supported. It allows one to run HIP
|
||||
code on Intel GPUs via the OpenCL or Level Zero backends. To use CHIP-SPV, you must
|
||||
set :code:`-DHIP_USE_DEVICE_SORT=OFF` in your CMake command line as CHIP-SPV does not
|
||||
yet support hipCUB. The use of HIP for Intel GPUs is still experimental so you
|
||||
should only use this option in preparations to run on Aurora system at ANL.
|
||||
code on Intel GPUs via the OpenCL or Level Zero backends. To use CHIP-SPV, you must
|
||||
set :code:`-DHIP_USE_DEVICE_SORT=OFF` in your CMake command line as CHIP-SPV does not
|
||||
yet support hipCUB. The use of HIP for Intel GPUs is still experimental so you
|
||||
should only use this option in preparations to run on Aurora system at ANL.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
|
||||
@ -123,14 +123,15 @@ LAMMPS:
|
||||
.. _six:
|
||||
|
||||
6. If you want text with spaces to be treated as a single argument, it
|
||||
can be enclosed in either single or double or triple quotes. A long
|
||||
single argument enclosed in single or double quotes can span multiple
|
||||
lines if the "&" character is used, as described above. When the
|
||||
lines are concatenated together (and the "&" characters and line
|
||||
breaks removed), the text will become a single line. If you want
|
||||
multiple lines of an argument to retain their line breaks, the text
|
||||
can be enclosed in triple quotes, in which case "&" characters are
|
||||
not needed. For example:
|
||||
can be enclosed in either single (') or double (") or triple (""")
|
||||
quotes. A long single argument enclosed in single or double quotes
|
||||
can span multiple lines if the "&" character is used, as described
|
||||
in :ref:`1 <one>` above. When the lines are concatenated together
|
||||
by LAMMPS (and the "&" characters and line breaks removed), the
|
||||
combined text will become a single line. If you want multiple lines
|
||||
of an argument to retain their line breaks, the text can be enclosed
|
||||
in triple quotes, in which case "&" characters are not needed and do
|
||||
not function as line continuation character. For example:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
@ -144,8 +145,9 @@ LAMMPS:
|
||||
System temperature = $t
|
||||
"""
|
||||
|
||||
In each case, the single, double, or triple quotes are removed when
|
||||
the single argument they enclose is stored internally.
|
||||
In each of these cases, the single, double, or triple quotes are
|
||||
removed and the enclosed text stored internally as a single
|
||||
argument.
|
||||
|
||||
See the :doc:`dump modify format <dump_modify>`, :doc:`print
|
||||
<print>`, :doc:`if <if>`, and :doc:`python <python>` commands for
|
||||
|
||||
@ -23,6 +23,7 @@ Available topics in mostly chronological order are:
|
||||
- `Simplify customized error messages`_
|
||||
- `Use of "override" instead of "virtual"`_
|
||||
- `Simplified and more compact neighbor list requests`_
|
||||
- `Split of fix STORE into fix STORE/GLOBAL and fix STORE/PERATOM`_
|
||||
|
||||
----
|
||||
|
||||
@ -287,7 +288,7 @@ New:
|
||||
comm->forward_comm(this);
|
||||
comm->reverse_comm(this);
|
||||
|
||||
This change is required or else the code will not compile.
|
||||
This change is **required** or else the code will not compile.
|
||||
|
||||
Simplified and more compact neighbor list requests
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -321,4 +322,63 @@ New:
|
||||
if (cutflag) req->set_cutoff(mycutneigh);
|
||||
|
||||
Public access to the ``NeighRequest`` class data members has been
|
||||
removed so this update is *required* to avoid compilation failure.
|
||||
removed so this update is **required** to avoid compilation failure.
|
||||
|
||||
Split of fix STORE into fix STORE/GLOBAL and fix STORE/PERATOM
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. versionchanged:: TBD
|
||||
|
||||
This change splits the GLOBAL and PERATOM modes of fix STORE into two
|
||||
separate fixes STORE/GLOBAL and STORE/PERATOM. There was very little
|
||||
shared code between the two fix STORE modes and the two different code
|
||||
paths had to be prefixed with if statements. Furthermore, some flags
|
||||
were used differently in the two modes leading to confusion. Splitting
|
||||
the code into two fix styles, makes it more easily maintainable. Since
|
||||
these are internal fixes, there is no user visible change.
|
||||
|
||||
Old:
|
||||
|
||||
.. code-block:: C++
|
||||
|
||||
#include "fix_store.h"
|
||||
|
||||
FixStore *fix = dynamic_cast<FixStore *>(
|
||||
modify->add_fix(fmt::format("{} {} STORE peratom 1 13",id_pole,group->names[0]));
|
||||
|
||||
FixStore *fix = dynamic_cast<FixStore *>(modify->get_fix_by_id(id_pole));
|
||||
|
||||
New:
|
||||
|
||||
.. code-block:: C++
|
||||
|
||||
#include "fix_store_peratom.h"
|
||||
|
||||
FixStorePeratom *fix = dynamic_cast<FixStorePeratom *>(
|
||||
modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 13",id_pole,group->names[0]));
|
||||
|
||||
FixStorePeratom *fix = dynamic_cast<FixStorePeratom *>(modify->get_fix_by_id(id_pole));
|
||||
|
||||
Old:
|
||||
|
||||
.. code-block:: C++
|
||||
|
||||
#include "fix_store.h"
|
||||
|
||||
FixStore *fix = dynamic_cast<FixStore *>(
|
||||
modify->add_fix(fmt::format("{} {} STORE global 1 1",id_fix,group->names[igroup]));
|
||||
|
||||
FixStore *fix = dynamic_cast<FixStore *>(modify->get_fix_by_id(id_fix));
|
||||
|
||||
New:
|
||||
|
||||
.. code-block:: C++
|
||||
|
||||
#include "fix_store_global.h"
|
||||
|
||||
FixStoreGlobal *fix = dynamic_cast<FixStoreGlobal *>(
|
||||
modify->add_fix(fmt::format("{} {} STORE/GLOBAL 1 1",id_fix,group->names[igroup]));
|
||||
|
||||
FixStoreGlobal *fix = dynamic_cast<FixStoreGlobal *>(modify->get_fix_by_id(id_fix));
|
||||
|
||||
This change is **required** or else the code will not compile.
|
||||
|
||||
@ -208,7 +208,7 @@ Argument processing
|
||||
Convenience functions
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. doxygenfunction:: logmesg(LAMMPS *lmp, const S &format, Args&&... args)
|
||||
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &format, Args&&... args)
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &mesg)
|
||||
|
||||
@ -38,11 +38,11 @@ found together with equivalent examples in C and C++ in the
|
||||
|
||||
.. note::
|
||||
|
||||
A contributed (and complete!) Fortran interface that more
|
||||
closely resembles the C-library interface is available
|
||||
in the ``examples/COUPLE/fortran2`` folder. Please see the
|
||||
``README`` file in that folder for more information about it
|
||||
and how to contact its author and maintainer.
|
||||
A contributed (and more complete!) Fortran interface that more
|
||||
closely resembles the C-library interface is available in the
|
||||
``examples/COUPLE/fortran2`` folder. Please see the ``README`` file
|
||||
in that folder for more information about it and how to contact its
|
||||
author and maintainer.
|
||||
|
||||
----------
|
||||
|
||||
@ -65,8 +65,9 @@ the optional logical argument set to ``.true.``. Here is a simple example:
|
||||
|
||||
PROGRAM testlib
|
||||
USE LIBLAMMPS ! include the LAMMPS library interface
|
||||
IMPLICIT NONE
|
||||
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
|
||||
CHARACTER(len=*), DIMENSION(*), PARAMETER :: args = &
|
||||
CHARACTER(len=*), PARAMETER :: args(3) = &
|
||||
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none' ]
|
||||
|
||||
! create a LAMMPS instance (and initialize MPI)
|
||||
@ -78,6 +79,41 @@ the optional logical argument set to ``.true.``. Here is a simple example:
|
||||
|
||||
END PROGRAM testlib
|
||||
|
||||
It is also possible to pass command line flags from Fortran to C/C++ and
|
||||
thus make the resulting executable behave similar to the standalone
|
||||
executable (it will ignore the `-in/-i` flag, though). This allows to
|
||||
use the command line to configure accelerator and suffix settings,
|
||||
configure screen and logfile output, or to set index style variables
|
||||
from the command line and more. Here is a correspondingly adapted
|
||||
version of the previous example:
|
||||
|
||||
.. code-block:: fortran
|
||||
|
||||
PROGRAM testlib2
|
||||
USE LIBLAMMPS ! include the LAMMPS library interface
|
||||
IMPLICIT NONE
|
||||
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
|
||||
CHARACTER(len=128), ALLOCATABLE :: command_args(:)
|
||||
INTEGER :: i, argc
|
||||
|
||||
! copy command line flags to `command_args()`
|
||||
argc = COMMAND_ARGUMENT_COUNT()
|
||||
ALLOCATE(command_args(0:argc))
|
||||
DO i=0, argc
|
||||
CALL GET_COMMAND_ARGUMENT(i, command_args(i))
|
||||
END DO
|
||||
|
||||
! create a LAMMPS instance (and initialize MPI)
|
||||
lmp = lammps(command_args)
|
||||
! get and print numerical version code
|
||||
PRINT*, 'Program name: ', command_args(0)
|
||||
PRINT*, 'LAMMPS Version: ', lmp%version()
|
||||
! delete LAMMPS instance (and shuts down MPI)
|
||||
CALL lmp%close(.TRUE.)
|
||||
DEALLOCATE(command_args)
|
||||
|
||||
END PROGRAM testlib2
|
||||
|
||||
--------------------
|
||||
|
||||
Executing LAMMPS commands
|
||||
@ -102,7 +138,7 @@ Below is a small demonstration of the uses of the different functions:
|
||||
USE LIBLAMMPS
|
||||
TYPE(lammps) :: lmp
|
||||
CHARACTER(len=512) :: cmds
|
||||
CHARACTER(len=40),ALLOCATABLE :: cmdlist(:)
|
||||
CHARACTER(len=40), ALLOCATABLE :: cmdlist(:)
|
||||
CHARACTER(len=10) :: trimmed
|
||||
INTEGER :: i
|
||||
|
||||
@ -111,10 +147,10 @@ Below is a small demonstration of the uses of the different functions:
|
||||
CALL lmp%command('variable zpos index 1.0')
|
||||
! define 10 groups of 10 atoms each
|
||||
ALLOCATE(cmdlist(10))
|
||||
DO i=1,10
|
||||
DO i=1, 10
|
||||
WRITE(trimmed,'(I10)') 10*i
|
||||
WRITE(cmdlist(i),'(A,I1,A,I10,A,A)') &
|
||||
'group g',i-1,' id ',10*(i-1)+1,':',ADJUSTL(trimmed)
|
||||
'group g', i-1, ' id ', 10*(i-1)+1, ':', ADJUSTL(trimmed)
|
||||
END DO
|
||||
CALL lmp%commands_list(cmdlist)
|
||||
! run multiple commands from multi-line string
|
||||
@ -123,7 +159,7 @@ Below is a small demonstration of the uses of the different functions:
|
||||
'create_box 1 box' // NEW_LINE('A') // &
|
||||
'create_atoms 1 single 1.0 1.0 ${zpos}'
|
||||
CALL lmp%commands_string(cmds)
|
||||
CALL lmp%close()
|
||||
CALL lmp%close(.TRUE.)
|
||||
|
||||
END PROGRAM testcmd
|
||||
|
||||
@ -137,9 +173,9 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
|
||||
|
||||
.. f:type:: lammps
|
||||
|
||||
Derived type that is the general class of the Fortran interface.
|
||||
It holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class instance
|
||||
that any of the included calls are forwarded to.
|
||||
Derived type that is the general class of the Fortran interface. It
|
||||
holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>`
|
||||
class instance that any of the included calls are forwarded to.
|
||||
|
||||
:f c_ptr handle: reference to the LAMMPS class
|
||||
:f close: :f:func:`close`
|
||||
@ -202,7 +238,7 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
|
||||
This method will call :cpp:func:`lammps_commands_list` to have LAMMPS
|
||||
execute a list of input lines.
|
||||
|
||||
:p character(len=*) cmd(*): list of LAMMPS input lines
|
||||
:p character(len=*) cmd(:): list of LAMMPS input lines
|
||||
|
||||
.. f:subroutine:: commands_string(str)
|
||||
|
||||
@ -210,4 +246,3 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
|
||||
execute a block of commands from a string.
|
||||
|
||||
:p character(len=*) str: LAMMPS input in string
|
||||
|
||||
|
||||
@ -2,9 +2,9 @@ AMOEBA and HIPPO force fields
|
||||
=============================
|
||||
|
||||
The AMOEBA and HIPPO polarizable force fields were developed by Jay
|
||||
Ponder's group at the U Washington at St Louis. Their implementation
|
||||
in LAMMPS was done using F90 code provided by the Ponder group from
|
||||
their `Tinker MD code <https://dasher.wustl.edu/tinker/>`_.
|
||||
Ponder's group at the U Washington at St Louis. The LAMMPS
|
||||
implementation is based on Fortran 90 code provided by the Ponder
|
||||
group in their `Tinker MD software <https://dasher.wustl.edu/tinker/>`_.
|
||||
|
||||
The current implementation (July 2022) of AMOEBA in LAMMPS matches the
|
||||
version discussed in :ref:`(Ponder) <amoeba-Ponder>`, :ref:`(Ren)
|
||||
|
||||
@ -3,10 +3,20 @@ Install LAMMPS
|
||||
|
||||
You can download LAMMPS as an executable or as source code.
|
||||
|
||||
With source code, you also have to :doc:`build LAMMPS <Build>`. But you
|
||||
have more flexibility as to what features to include or exclude in the
|
||||
build. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then you
|
||||
need the source code.
|
||||
When downloading the LAMMPS source code, you also have to :doc:`build
|
||||
LAMMPS <Build>`. But you have more flexibility as to what features to
|
||||
include or exclude in the build. When you download and install
|
||||
pre-compiled LAMMPS executables, you are limited to install which
|
||||
version of LAMMPS is available and which features are included of these
|
||||
builds. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then
|
||||
you **must** build LAMMPS from the source code.
|
||||
|
||||
.. note::
|
||||
|
||||
If you have questions about the pre-compiled LAMMPS executables, you
|
||||
need to contact the people preparing those executables. The LAMMPS
|
||||
developers have no control over their choices of how they configure
|
||||
and build their packages and when they update them.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
@ -38,3 +38,10 @@ up the Conda capability.
|
||||
.. _openkim: https://openkim.org
|
||||
.. _conda: https://docs.conda.io/en/latest/index.html
|
||||
.. _mini_conda_install: https://docs.conda.io/en/latest/miniconda.html
|
||||
|
||||
.. note::
|
||||
|
||||
If you have questions about these pre-compiled LAMMPS executables,
|
||||
you need to contact the people preparing those packages. The LAMMPS
|
||||
developers have no control over their choices of how they configure
|
||||
and build their packages and when they update them.
|
||||
|
||||
@ -3,13 +3,19 @@ Download an executable for Linux
|
||||
|
||||
Binaries are available for different versions of Linux:
|
||||
|
||||
| :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
|
||||
| :ref:`Pre-built Fedora Linux executables <fedora>`
|
||||
| :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
|
||||
| :ref:`Pre-built OpenSuse Linux executables <opensuse>`
|
||||
| :ref:`Gentoo Linux executable <gentoo>`
|
||||
| :ref:`Arch Linux build-script <arch>`
|
||||
|
|
||||
- :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
|
||||
- :ref:`Pre-built Fedora Linux executables <fedora>`
|
||||
- :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
|
||||
- :ref:`Pre-built OpenSuse Linux executables <opensuse>`
|
||||
- :ref:`Gentoo Linux executable <gentoo>`
|
||||
- :ref:`Arch Linux build-script <arch>`
|
||||
|
||||
.. note::
|
||||
|
||||
If you have questions about these pre-compiled LAMMPS executables,
|
||||
you need to contact the people preparing those packages. The LAMMPS
|
||||
developers have no control over their choices of how they configure
|
||||
and build their packages and when they update them.
|
||||
|
||||
----------
|
||||
|
||||
@ -18,41 +24,28 @@ Binaries are available for different versions of Linux:
|
||||
Pre-built Ubuntu Linux executables
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
A pre-built LAMMPS executable suitable for running on the latest
|
||||
Ubuntu Linux versions, can be downloaded as a Debian package. This
|
||||
allows you to install LAMMPS with a single command, and stay
|
||||
up-to-date with the current stable version of LAMMPS by simply updating
|
||||
your operating system. Please note, that the repository below offers
|
||||
two LAMMPS packages, ``lammps-daily`` and ``lammps-stable``. The
|
||||
LAMMPS developers recommend to use the ``lammps-stable`` package for
|
||||
any production simulations. The ``lammps-daily`` package is built
|
||||
from the LAMMPS development sources, and those versions may have known
|
||||
issues and bugs when new features are added and the software has not
|
||||
undergone full release testing.
|
||||
|
||||
To install the appropriate personal-package archives (PPAs), do the
|
||||
following once:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo add-apt-repository ppa:gladky-anton/lammps
|
||||
$ sudo add-apt-repository ppa:openkim/latest
|
||||
$ sudo apt-get update
|
||||
A pre-built LAMMPS executable suitable for running on the latest Ubuntu
|
||||
Linux versions, can be downloaded as a Debian package. This allows you
|
||||
to install LAMMPS with a single command, and stay (mostly) up-to-date
|
||||
with the current stable version of LAMMPS by simply updating your
|
||||
operating system.
|
||||
|
||||
To install LAMMPS do the following once:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get install lammps-stable
|
||||
$ sudo apt-get install lammps
|
||||
|
||||
This downloads an executable named ``lmp_stable`` to your box, which
|
||||
can then be used in the usual way to run input scripts:
|
||||
This downloads an executable named ``lmp`` to your box and multiple
|
||||
packages with supporting data, examples and libraries as well as any
|
||||
missing dependencies. This executable can then be used in the usual way
|
||||
to run input scripts:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ lmp_stable -in in.lj
|
||||
$ lmp -in in.lj
|
||||
|
||||
To update LAMMPS to the most current stable version, do the following:
|
||||
To update LAMMPS to the latest packaged version, do the following:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -60,44 +53,24 @@ To update LAMMPS to the most current stable version, do the following:
|
||||
|
||||
which will also update other packages on your system.
|
||||
|
||||
To get a copy of the current documentation and examples:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get install lammps-stable-doc
|
||||
|
||||
which will download the doc files in
|
||||
``/usr/share/doc/lammps-stable-doc/doc`` and example problems in
|
||||
``/usr/share/doc/lammps-doc/examples``.
|
||||
|
||||
To get a copy of the current potentials files:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get install lammps-stable-data
|
||||
|
||||
which will download the potentials files to
|
||||
``/usr/share/lammps-stable/potentials``. The ``lmp_stable`` binary is
|
||||
hard-coded to look for potential files in this directory (it does not
|
||||
use the ``LAMMPS_POTENTIALS`` environment variable, as described
|
||||
in :doc:`pair_coeff <pair_coeff>` command).
|
||||
|
||||
The ``lmp_stable`` binary is built with the :ref:`KIM package <kim>` which
|
||||
results in the above command also installing the ``kim-api`` binaries when LAMMPS
|
||||
is installed. In order to use potentials from `openkim.org <openkim_>`_, you
|
||||
can install the ``openkim-models`` package
|
||||
The ``lmp`` binary is built with the :ref:`KIM package <kim>` included,
|
||||
which results in the above command also installing the ``kim-api``
|
||||
binaries when LAMMPS is installed. In order to use potentials from
|
||||
`openkim.org <openkim_>`_, you can also install the ``openkim-models``
|
||||
package
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get install openkim-models
|
||||
|
||||
Or use the KIM-API commands to download and install individual models.
|
||||
To un-install LAMMPS, do the following:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get remove lammps-stable
|
||||
$ sudo apt-get remove lammps
|
||||
|
||||
Please use ``lmp_stable -help`` to see which compilation options, packages,
|
||||
Please use ``lmp -help`` to see which compilation options, packages,
|
||||
and styles are included in the binary.
|
||||
|
||||
Thanks to Anton Gladky (gladky.anton at gmail.com) for setting up this
|
||||
@ -110,21 +83,21 @@ Ubuntu package capability.
|
||||
Pre-built Fedora Linux executables
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Pre-built LAMMPS packages for stable releases are available
|
||||
in the Fedora Linux distribution as of version 28. The packages
|
||||
can be installed via the dnf package manager. There are 3 basic
|
||||
varieties (lammps = no MPI, lammps-mpich = MPICH MPI library,
|
||||
lammps-openmpi = OpenMPI MPI library) and for each support for
|
||||
linking to the C library interface (lammps-devel, lammps-mpich-devel,
|
||||
lammps-openmpi-devel), the header for compiling programs using
|
||||
the C library interface (lammps-headers), and the LAMMPS python
|
||||
module for Python 3. All packages can be installed at the same
|
||||
time and the name of the LAMMPS executable is ``lmp`` and ``lmp_openmpi``
|
||||
or ``lmp_mpich`` respectively. By default, ``lmp`` will refer to the
|
||||
serial executable, unless one of the MPI environment modules is loaded
|
||||
(``module load mpi/mpich-x86_64`` or ``module load mpi/openmpi-x86_64``).
|
||||
Then the corresponding parallel LAMMPS executable can be used.
|
||||
The same mechanism applies when loading the LAMMPS python module.
|
||||
Pre-built LAMMPS packages for stable releases are available in the
|
||||
Fedora Linux distribution as of Fedora version 28. The packages can be
|
||||
installed via the dnf package manager. There are 3 basic varieties
|
||||
(lammps = no MPI, lammps-mpich = MPICH MPI library, lammps-openmpi =
|
||||
OpenMPI MPI library) and for each support for linking to the C library
|
||||
interface (lammps-devel, lammps-mpich-devel, lammps-openmpi-devel), the
|
||||
header for compiling programs using the C library interface
|
||||
(lammps-headers), and the LAMMPS python module for Python 3. All
|
||||
packages can be installed at the same time and the name of the LAMMPS
|
||||
executable is ``lmp`` and ``lmp_openmpi`` or ``lmp_mpich`` respectively.
|
||||
By default, ``lmp`` will refer to the serial executable, unless one of
|
||||
the MPI environment modules is loaded (``module load mpi/mpich-x86_64``
|
||||
or ``module load mpi/openmpi-x86_64``). Then the corresponding parallel
|
||||
LAMMPS executable can be used. The same mechanism applies when loading
|
||||
the LAMMPS python module.
|
||||
|
||||
To install LAMMPS with OpenMPI and run an input ``in.lj`` with 2 CPUs do:
|
||||
|
||||
@ -273,3 +246,10 @@ Alternatively, you may use an AUR helper to install these packages.
|
||||
|
||||
Note that the AUR provides build-scripts that download the source and
|
||||
the build the package on your machine.
|
||||
|
||||
.. note::
|
||||
|
||||
It looks like the Arch Linux AUR repository build scripts for LAMMPS
|
||||
have not been updated since the 29 October 2020 version. You may want
|
||||
to consider installing a more current version of LAMMPS from source
|
||||
directly.
|
||||
|
||||
@ -33,9 +33,9 @@ initial versions of LAMMPS is:
|
||||
DOI for the LAMMPS source code
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
|
||||
to create digital object identifies (DOI) for stable releases of the
|
||||
LAMMPS source code. There are two types of DOIs for the LAMMPS source code.
|
||||
The LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
|
||||
to create digital object identifiers (DOI) for stable releases of the
|
||||
LAMMPS source code. There are two types of DOIs for the LAMMPS source code.
|
||||
|
||||
The canonical DOI for **all** versions of LAMMPS, which will always
|
||||
point to the **latest** stable release version is:
|
||||
|
||||
@ -49,12 +49,12 @@ descriptions of all commands included in the LAMMPS code.
|
||||
|
||||
----------
|
||||
|
||||
.. _user_documentation:
|
||||
|
||||
************
|
||||
User Guide
|
||||
************
|
||||
|
||||
.. _user_documentation:
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:numbered: 3
|
||||
@ -75,11 +75,12 @@ User Guide
|
||||
Errors
|
||||
|
||||
|
||||
.. _programmer_documentation:
|
||||
|
||||
******************
|
||||
Programmer Guide
|
||||
******************
|
||||
|
||||
.. _programmer_documentation:
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:numbered: 3
|
||||
|
||||
@ -23,6 +23,8 @@ derived class. See fix.h for details.
|
||||
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||
| init | initialization before a run (optional) |
|
||||
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||
| init_list | store pointer to neighbor list; called by neighbor list code (optional) |
|
||||
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||
| setup_pre_exchange | called before atom exchange in setup (optional) |
|
||||
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||
| setup_pre_force | called before force computation in setup (optional) |
|
||||
|
||||
@ -157,14 +157,28 @@ AMOEBA package
|
||||
|
||||
**Contents:**
|
||||
|
||||
TODO
|
||||
Implementation of the AMOEBA and HIPPO polarized force fields
|
||||
originally developed by Jay Ponder's group at the U Washington at St
|
||||
Louis. The LAMMPS implementation is based on Fortran 90 code
|
||||
provided by the Ponder group in their
|
||||
`Tinker MD software <https://dasher.wustl.edu/tinker/>`_.
|
||||
|
||||
**Authors:** Josh Rackers and Steve Plimpton (Sandia), Trung Nguyen (U
|
||||
Chicago)
|
||||
|
||||
**Supporting info:**
|
||||
|
||||
* src/AMOEBA: filenames -> commands
|
||||
* :doc:`AMOEBA and HIPPO howto <Howto_amoeba>`
|
||||
* :doc:`pair_style amoeba <pair_amoeba>`
|
||||
* :doc:`pair_style hippo <pair_amoeba>`
|
||||
* :doc:`atom_style amoeba <atom_style>`
|
||||
* :doc:`angle_style amoeba <angle_amoeba>`
|
||||
* :doc:`improper_style amoeba <improper_amoeba>`
|
||||
* :doc:`fix amoeba/bitorsion <fix_amoeba_bitorsion>`
|
||||
* :doc:`fix amoeba/pitorsion <fix_amoeba_pitorsion>`
|
||||
* tools/tinker/tinker2lmp.py
|
||||
* examples/amoeba
|
||||
* TODO
|
||||
|
||||
----------
|
||||
|
||||
@ -200,9 +214,10 @@ ATC package
|
||||
|
||||
**Contents:**
|
||||
|
||||
ATC stands for atoms-to-continuum. This package implements a :doc:`fix atc <fix_atc>` command to either couple molecular dynamics with
|
||||
continuum finite element equations or perform on-the-fly conversion of
|
||||
atomic information to continuum fields.
|
||||
ATC stands for atoms-to-continuum. This package implements a
|
||||
:doc:`fix atc <fix_atc>` command to either couple molecular dynamics
|
||||
with continuum finite element equations or perform on-the-fly
|
||||
conversion of atomic information to continuum fields.
|
||||
|
||||
**Authors:** Reese Jones, Jeremy Templeton, Jon Zimmerman (Sandia).
|
||||
|
||||
@ -317,6 +332,8 @@ models for mesoscale simulations of solids and fracture. See the
|
||||
|
||||
**Authors:** Joel T. Clemmer (Sandia National Labs)
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
**Supporting info:**
|
||||
|
||||
* src/BPM filenames -> commands
|
||||
@ -845,6 +862,8 @@ groups of atoms that interact with the remaining atoms as electrolyte.
|
||||
Ahrens-Iwers (TUHH, Hamburg, Germany), Shern Tee (UQ, Brisbane, Australia) and
|
||||
Robert Meissner (TUHH, Hamburg, Germany).
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
**Install:**
|
||||
|
||||
This package has :ref:`specific installation instructions <electrode>` on the
|
||||
|
||||
@ -14,6 +14,7 @@ letter abbreviation can be used:
|
||||
* :ref:`-m or -mpicolor <mpicolor>`
|
||||
* :ref:`-c or -cite <cite>`
|
||||
* :ref:`-nc or -nocite <nocite>`
|
||||
* :ref:`-nb or -nonbuf <nonbuf>`
|
||||
* :ref:`-pk or -package <package>`
|
||||
* :ref:`-p or -partition <partition>`
|
||||
* :ref:`-pl or -plog <plog>`
|
||||
@ -257,6 +258,24 @@ Disable generating a citation reminder (see above) at all.
|
||||
|
||||
----------
|
||||
|
||||
.. _nonbuf:
|
||||
|
||||
**-nonbuf**
|
||||
|
||||
Turn off buffering for screen and logfile output. For performance
|
||||
reasons, output to the screen and logfile is usually buffered, i.e.
|
||||
output is only written to a file if its buffer - typically 4096 bytes -
|
||||
has been filled. When LAMMPS crashes for some reason, however, that can
|
||||
mean that there is important output missing. With this flag the
|
||||
buffering can be turned off (only for screen and logfile output) and any
|
||||
output will be committed immediately. Note that when running in
|
||||
parallel with MPI, the screen output may still be buffered by the MPI
|
||||
library and this cannot be changed by LAMMPS. This flag should only be
|
||||
used for debugging and not for production simulations as the performance
|
||||
impact can be significant, especially for large parallel runs.
|
||||
|
||||
----------
|
||||
|
||||
.. _package:
|
||||
|
||||
**-package style args ....**
|
||||
|
||||
@ -10,7 +10,7 @@ Syntax
|
||||
|
||||
atom_style style args
|
||||
|
||||
* style = *amoeba* or *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *hybrid*
|
||||
* style = *amoeba* or *angle* or *atomic* or *body* or *bond* or *charge* or *dielectric* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *mesont* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *wavepacket* or *hybrid*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
|
||||
@ -38,8 +38,7 @@ Examples
|
||||
bond_style bpm/rotational
|
||||
bond_coeff 1 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002
|
||||
|
||||
bond_style bpm/rotational myfix 1000 time id1 id2
|
||||
fix myfix all store/local 1000 3
|
||||
bond_style bpm/rotational store/local myfix 1000 time id1 id2
|
||||
dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3]
|
||||
dump_modify 1 write_header no
|
||||
|
||||
|
||||
@ -33,6 +33,8 @@ Examples
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
Define a compute that calculates
|
||||
:math:`\frac{\partial{}^2U}{\partial\varepsilon_{i}\partial\varepsilon_{j}}` the
|
||||
second derivatives of the potential energy :math:`U` w.r.t. strain
|
||||
|
||||
@ -15,7 +15,7 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
style = *bin/1d* or *bin/2d* or *bin/3d* or *bin/sphere* or *type* or *molecule* or c_ID, c_ID[I], f_ID, f_ID[I], v_name
|
||||
style = *bin/1d* or *bin/2d* or *bin/3d* or *bin/sphere* or *bin/cylinder* or *type* or *molecule* or c_ID, c_ID[I], f_ID, f_ID[I], v_name
|
||||
*bin/1d* args = dim origin delta
|
||||
dim = *x* or *y* or *z*
|
||||
origin = *lower* or *center* or *upper* or coordinate value (distance units)
|
||||
@ -49,7 +49,7 @@ Syntax
|
||||
v_name = per-atom vector calculated by an atom-style variable with name
|
||||
|
||||
* zero or more keyword/values pairs may be appended
|
||||
* keyword = *region* or *nchunk* or *static* or *compress* or *bound* or *discard* or *pbc* or *units*
|
||||
* keyword = *region* or *nchunk* or *limit* or *ids* or *compress* or *discard* or *bound* or *pbc* or *units*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -74,7 +74,7 @@ Syntax
|
||||
no = keep atoms with out-of-range chunk IDs by assigning a valid chunk ID
|
||||
mixed = keep or discard such atoms according to spatial binning rule
|
||||
*bound* values = x/y/z lo hi
|
||||
x/y/z = *x* or *y* or *z* to bound sptial bins in this dimension
|
||||
x/y/z = *x* or *y* or *z* to bound spatial bins in this dimension
|
||||
lo = *lower* or coordinate value (distance units)
|
||||
hi = *upper* or coordinate value (distance units)
|
||||
*pbc* value = *no* or *yes*
|
||||
|
||||
@ -19,12 +19,12 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
keyword = *cutoff* or *nnn* or *degrees* or *components* or *chunksize*
|
||||
keyword = *cutoff* or *nnn* or *degrees* or *wl* or *wl/hat* or *components* or *chunksize*
|
||||
*cutoff* value = distance cutoff
|
||||
*nnn* value = number of nearest neighbors
|
||||
*degrees* values = nlvalues, l1, l2,...
|
||||
*wl* value = yes or no
|
||||
*wl/hat* value = yes or no
|
||||
*wl* value = *yes* or *no*
|
||||
*wl/hat* value = *yes* or *no*
|
||||
*components* value = ldegree
|
||||
*chunksize* value = number of atoms in each pass
|
||||
|
||||
|
||||
@ -41,8 +41,8 @@ Examples
|
||||
compute 1 all saed 0.0251 Al O Kmax 1.70 Zone 0 0 1 dR_Ewald 0.01 c 0.5 0.5 0.5
|
||||
compute 2 all saed 0.0251 Ni Kmax 1.70 Zone 0 0 0 c 0.05 0.05 0.05 manual echo
|
||||
|
||||
fix saed/vtk 1 1 1 c_1 file Al2O3_001.saed
|
||||
fix saed/vtk 1 1 1 c_2 file Ni_000.saed
|
||||
fix 1 all saed/vtk 1 1 1 c_1 file Al2O3_001.saed
|
||||
fix 2 all saed/vtk 1 1 1 c_2 file Ni_000.saed
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -18,7 +18,7 @@ Examples
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
compute 1 all smd/triangle/mesh/vertices
|
||||
compute 1 all smd/triangle/vertices
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -136,6 +136,8 @@ positions.
|
||||
:align: right
|
||||
:target: _images/marble_race.jpg
|
||||
|
||||
.. versionadded:: 2Jun2022
|
||||
|
||||
For the *mesh* style, a file with a triangle mesh in `STL format
|
||||
<https://en.wikipedia.org/wiki/STL_(file_format)>`_ is read and one or
|
||||
more particles are placed into the area of each triangle. The reader
|
||||
@ -391,6 +393,8 @@ the atom style. Its value is a prefactor (must be > 0.0, default is
|
||||
individual triangles in the triangle mesh that the particle corresponds
|
||||
to.
|
||||
|
||||
.. versionadded:: 2Jun2022
|
||||
|
||||
The *overlap* keyword only applies to the *random* style. It prevents
|
||||
newly created particles from being created closer than the specified
|
||||
*Doverlap* distance from any other particle. When the particles being
|
||||
|
||||
@ -10,7 +10,7 @@ Syntax
|
||||
|
||||
create_bonds style args ... keyword value ...
|
||||
|
||||
* style = *many* or *single/bond* or *single/angle* or *single/dihedral*
|
||||
* style = *many* or *single/bond* or *single/angle* or *single/dihedral* or *single/improper*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ Examples
|
||||
delete_atoms random fraction 0.1 yes all cube 482793 bond yes
|
||||
delete_atoms random fraction 0.3 no polymer NULL 482793 bond yes
|
||||
delete_atoms random count 500 no ions NULL 482793
|
||||
detele_atoms variable checkers
|
||||
delete_atoms variable checkers
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -8,7 +8,10 @@ Syntax
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
dihedral_style zero [nocoeff]
|
||||
dihedral_style zero keyword
|
||||
|
||||
* zero or more keywords may be appended
|
||||
* keyword = *nocoeff*
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -36,7 +36,7 @@ Syntax
|
||||
.. parsed-literal::
|
||||
|
||||
keyword = *units*
|
||||
value = *box* or *lattice*
|
||||
*units* value = *box* or *lattice*
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -61,7 +61,7 @@ Syntax
|
||||
|
||||
* ID = user-assigned name for the dump
|
||||
* group-ID = ID of the group of atoms to be dumped
|
||||
* style = *atom* or *atom/gz* or *atom/zstd or *atom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *dcd* or *h5md* or *image* or *local* or *local/gz* or *local/zstd* or *molfile* or *movie* or *netcdf* or *netcdf/mpiio* or *vtk* or *xtc* or *xyz* or *xyz/gz* or *xyz/zstd* or *xyz/mpiio* or *yaml*
|
||||
* style = *atom* or *atom/gz* or *atom/zstd* or *atom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *dcd* or *h5md* or *image* or *local* or *local/gz* or *local/zstd* or *molfile* or *movie* or *netcdf* or *netcdf/mpiio* or *vtk* or *xtc* or *xyz* or *xyz/gz* or *xyz/zstd* or *xyz/mpiio* or *yaml*
|
||||
* N = dump every this many timesteps
|
||||
* file = name of file to write dump info to
|
||||
* args = list of arguments for a particular style
|
||||
@ -96,7 +96,7 @@ Syntax
|
||||
*xyz/mpiio* args = none
|
||||
*yaml* args = same as *custom* args, see below
|
||||
|
||||
* *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *netcdf* or *netcdf/mpiio* or *yaml* args = list of atom attributes
|
||||
* *custom* or *custom/gz* or *custom/zstd* or *custom/mpiio* or *cfg* or *cfg/gz* or *cfg/zstd* or *cfg/mpiio* or *cfg/uef* or *netcdf* or *netcdf/mpiio* or *yaml* args = list of atom attributes
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -414,6 +414,8 @@ from using the (numerical) atom type to an element name (or some
|
||||
other label). This will help many visualization programs to guess
|
||||
bonds and colors.
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
Dump style *yaml* has the same command syntax as style *custom* and
|
||||
writes YAML format files that can be easily parsed by a variety of data
|
||||
processing tools and programming languages. Each timestep will be
|
||||
|
||||
@ -6,31 +6,31 @@ dump h5md command
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
dump ID group-ID h5md N file.h5 args
|
||||
|
||||
* ID = user-assigned name for the dump
|
||||
* group-ID = ID of the group of atoms to be imaged
|
||||
* h5md = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
|
||||
* *h5md* = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
|
||||
* N = dump every this many timesteps
|
||||
* file.h5 = name of file to write to
|
||||
* args = *position* options or *image* or *velocity* options or *force* options or *species* options or *file_from* ID or *box* value or *create_group* value or *author* value = list of data elements to dump, with their dump "sub-intervals"
|
||||
|
||||
.. parsed-literal::
|
||||
.. parsed-literal::
|
||||
|
||||
args = list of data elements to dump, with their dump "sub-intervals"
|
||||
position options
|
||||
image
|
||||
velocity options
|
||||
force options
|
||||
species options
|
||||
file_from ID: do not open a new file, re-use the already opened file from dump ID
|
||||
box value = *yes* or *no*
|
||||
create_group value = *yes* or *no*
|
||||
author value = quoted string
|
||||
*position* options
|
||||
*image*
|
||||
*velocity* options
|
||||
*force* options
|
||||
*species* options
|
||||
*file_from* ID = do not open a new file, re-use the already opened file from dump ID
|
||||
*box* value = *yes* or *no*
|
||||
*create_group* value = *yes* or *no*
|
||||
*author* value = quoted string
|
||||
|
||||
Note that at least one element must be specified and image may only be
|
||||
present if position is specified first.
|
||||
Note that at least one element must be specified and that *image* may only be
|
||||
present if *position* is specified first.
|
||||
|
||||
For the elements *position*, *velocity*, *force* and *species*, a
|
||||
sub-interval may be specified to write the data only every N_element
|
||||
@ -39,7 +39,7 @@ specified by this option directly following the element declaration:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
every N_element
|
||||
options = *every* N_element
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -56,7 +56,7 @@ Syntax
|
||||
phi = azimuthal view angle (degrees)
|
||||
theta or phi can be a variable (see below)
|
||||
*center* values = flag Cx Cy Cz = center point of image
|
||||
flag = "s" for static, "d" for dynamic
|
||||
flag = *s* for static, *d* for dynamic
|
||||
Cx,Cy,Cz = center point of image as fraction of box dimension (0.5 = center of box)
|
||||
Cx,Cy,Cz can be variables (see below)
|
||||
*up* values = Ux Uy Uz = direction that is "up" in image
|
||||
@ -110,13 +110,13 @@ Syntax
|
||||
*amap* args = lo hi style delta N entry1 entry2 ... entryN
|
||||
lo = number or *min* = lower bound of range of color map
|
||||
hi = number or *max* = upper bound of range of color map
|
||||
style = 2 letters = "c" or "d" or "s" plus "a" or "f"
|
||||
"c" for continuous
|
||||
"d" for discrete
|
||||
"s" for sequential
|
||||
"a" for absolute
|
||||
"f" for fractional
|
||||
delta = binsize (only used for style "s", otherwise ignored)
|
||||
style = 2 letters = *c* or *d* or *s* plus *a* or *f*
|
||||
*c* for continuous
|
||||
*d* for discrete
|
||||
*s* for sequential
|
||||
*a* for absolute
|
||||
*f* for fractional
|
||||
delta = binsize (only used for style *s*, otherwise ignored)
|
||||
binsize = range is divided into bins of this width
|
||||
N = # of subsequent entries
|
||||
entry = value color (for continuous style)
|
||||
|
||||
@ -380,6 +380,8 @@ performed with dump style *xtc*\ .
|
||||
|
||||
----------
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
The *colname* keyword can be used to change the default header keyword
|
||||
for dump styles: *atom*, *custom*, and *cfg* and their compressed, ADIOS,
|
||||
and MPIIO variants. The setting for *ID string* replaces the default
|
||||
|
||||
@ -17,12 +17,12 @@ Syntax
|
||||
* Nfreq = calculate averages every this many timesteps
|
||||
* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
* one or more input values can be listed
|
||||
* value = vx, vy, vz, fx, fy, fz, density/mass, density/number, temp, c_ID, c_ID[I], f_ID, f_ID[I], v_name
|
||||
* value = vx, vy, vz, fx, fy, fz, density/mass, density/number, mass, temp, c_ID, c_ID[I], f_ID, f_ID[I], v_name
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
vx,vy,vz,fx,fy,fz = atom attribute (velocity, force component)
|
||||
density/number, density/mass = number or mass density
|
||||
vx,vy,vz,fx,fy,fz,mass = atom attribute (velocity, force component, mass)
|
||||
density/number, density/mass = number or mass density (per volume)
|
||||
temp = temperature
|
||||
c_ID = per-atom vector calculated by a compute with ID
|
||||
c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
|
||||
@ -99,29 +99,33 @@ averages can be used by other :doc:`output commands <Howto_output>` such
|
||||
as :doc:`thermo_style custom <thermo_style>`, and can also be written to
|
||||
a file.
|
||||
|
||||
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
|
||||
to a single chunk (or no chunk). The ID for this command is specified
|
||||
as chunkID. For example, a single chunk could be the atoms in a
|
||||
molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` page and the :doc:`Howto chunk <Howto_chunk>` page for details of how chunks can be
|
||||
defined and examples of how they can be used to measure properties of
|
||||
a system.
|
||||
In LAMMPS, chunks are collections of atoms defined by a :doc:`compute
|
||||
chunk/atom <compute_chunk_atom>` command, which assigns each atom to a
|
||||
single chunk (or no chunk). The ID for this command is specified as
|
||||
chunkID. For example, a single chunk could be the atoms in a molecule
|
||||
or atoms in a spatial bin. See the :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` page and the :doc:`Howto chunk <Howto_chunk>`
|
||||
page for details of how chunks can be defined and examples of how they
|
||||
can be used to measure properties of a system.
|
||||
|
||||
Note that only atoms in the specified group contribute to the summing
|
||||
and averaging calculations. The :doc:`compute chunk/atom <compute_chunk_atom>` command defines its own group as
|
||||
well as an optional region. Atoms will have a chunk ID = 0, meaning
|
||||
they belong to no chunk, if they are not in that group or region.
|
||||
Thus you can specify the "all" group for this command if you simply
|
||||
want to use the chunk definitions provided by chunkID.
|
||||
and averaging calculations. The :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command defines its own group as well as an
|
||||
optional region. Atoms will have a chunk ID = 0, meaning they belong
|
||||
to no chunk, if they are not in that group or region. Thus you can
|
||||
specify the "all" group for this command if you simply want to use the
|
||||
chunk definitions provided by chunkID.
|
||||
|
||||
Each specified per-atom value can be an atom attribute (position,
|
||||
velocity, force component), a mass or number density, or the result of
|
||||
a :doc:`compute <compute>` or :doc:`fix <fix>` or the evaluation of an
|
||||
atom-style :doc:`variable <variable>`. In the latter cases, the
|
||||
compute, fix, or variable must produce a per-atom quantity, not a
|
||||
global quantity. Note that the :doc:`compute property/atom <compute_property_atom>` command provides access to
|
||||
any attribute defined and stored by atoms. If you wish to
|
||||
time-average global quantities from a compute, fix, or variable, then
|
||||
see the :doc:`fix ave/time <fix_ave_time>` command.
|
||||
velocity, force component), a number or mass density, a mass or
|
||||
temperature, or the result of a :doc:`compute <compute>` or :doc:`fix
|
||||
<fix>` or the evaluation of an atom-style :doc:`variable <variable>`.
|
||||
In the latter cases, the compute, fix, or variable must produce a
|
||||
per-atom quantity, not a global quantity. Note that the :doc:`compute
|
||||
property/atom <compute_property_atom>` command provides access to any
|
||||
attribute defined and stored by atoms. If you wish to time-average
|
||||
global quantities from a compute, fix, or variable, then see the
|
||||
:doc:`fix ave/time <fix_ave_time>` command.
|
||||
|
||||
The per-atom values of each input vector are summed and averaged
|
||||
independently of the per-atom values in other input vectors.
|
||||
@ -145,8 +149,9 @@ means all indices from m to n (inclusive).
|
||||
|
||||
Using a wildcard is the same as if the individual columns of the array
|
||||
had been listed one by one. E.g. these 2 fix ave/chunk commands are
|
||||
equivalent, since the :doc:`compute property/atom <compute_property_atom>` command creates, in this
|
||||
case, a per-atom array with 3 columns:
|
||||
equivalent, since the :doc:`compute property/atom
|
||||
<compute_property_atom>` command creates, in this case, a per-atom
|
||||
array with 3 columns:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
@ -194,28 +199,31 @@ discussed below.
|
||||
.. note::
|
||||
|
||||
To perform per-chunk averaging within a *Nfreq* time window, the
|
||||
number of chunks *Nchunk* defined by the :doc:`compute chunk/atom <compute_chunk_atom>` command must remain constant. If
|
||||
the *ave* keyword is set to *running* or *window* then *Nchunk* must
|
||||
remain constant for the duration of the simulation. This fix forces
|
||||
the chunk/atom compute specified by chunkID to hold *Nchunk* constant
|
||||
for the appropriate time windows, by not allowing it to re-calculate
|
||||
*Nchunk*, which can also affect how it assigns chunk IDs to atoms.
|
||||
This is particularly important to understand if the chunks defined by
|
||||
the :doc:`compute chunk/atom <compute_chunk_atom>` command are spatial
|
||||
bins. If its *units* keyword is set to *box* or *lattice*, then the
|
||||
number of bins *Nchunk* and size of each bin will be fixed over the
|
||||
*Nfreq* time window, which can affect which atoms are discarded if the
|
||||
number of chunks *Nchunk* defined by the :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command must remain constant. If the *ave*
|
||||
keyword is set to *running* or *window* then *Nchunk* must remain
|
||||
constant for the duration of the simulation. This fix forces the
|
||||
chunk/atom compute specified by chunkID to hold *Nchunk* constant
|
||||
for the appropriate time windows, by not allowing it to
|
||||
re-calculate *Nchunk*, which can also affect how it assigns chunk
|
||||
IDs to atoms. This is particularly important to understand if the
|
||||
chunks defined by the :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command are spatial bins. If its *units*
|
||||
keyword is set to *box* or *lattice*, then the number of bins
|
||||
*Nchunk* and size of each bin will be fixed over the *Nfreq* time
|
||||
window, which can affect which atoms are discarded if the
|
||||
simulation box size changes. If its *units* keyword is set to
|
||||
*reduced*, then the number of bins *Nchunk* will still be fixed, but
|
||||
the size of each bin can vary at each timestep if the simulation box
|
||||
size changes, e.g. for an NPT simulation.
|
||||
*reduced*, then the number of bins *Nchunk* will still be fixed,
|
||||
but the size of each bin can vary at each timestep if the
|
||||
simulation box size changes, e.g. for an NPT simulation.
|
||||
|
||||
----------
|
||||
|
||||
The atom attribute values (vx,vy,vz,fx,fy,fz) are self-explanatory.
|
||||
As noted above, any other atom attributes can be used as input values
|
||||
to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
|
||||
an input value from that compute.
|
||||
The atom attribute values (vx,vy,vz,fx,fy,fz,mass) are
|
||||
self-explanatory. As noted above, any other atom attributes can be
|
||||
used as input values to this fix by using the :doc:`compute
|
||||
property/atom <compute_property_atom>` command and then specifying an
|
||||
input value from that compute.
|
||||
|
||||
The *density/number* value means the number density is computed for
|
||||
each chunk, i.e. number/volume. The *density/mass* value means the
|
||||
@ -243,12 +251,13 @@ Note that currently this temperature only includes translational
|
||||
degrees of freedom for each atom. No rotational degrees of freedom
|
||||
are included for finite-size particles. Also no degrees of freedom
|
||||
are subtracted for any velocity bias or constraints that are applied,
|
||||
such as :doc:`compute temp/partial <compute_temp_partial>`, or :doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is because
|
||||
those degrees of freedom (e.g. a constrained bond) could apply to sets
|
||||
of atoms that are both included and excluded from a specific chunk,
|
||||
and hence the concept is somewhat ill-defined. In some cases, you can
|
||||
use the *adof* and *cdof* keywords to adjust the calculated degrees of
|
||||
freedom appropriately, as explained below.
|
||||
such as :doc:`compute temp/partial <compute_temp_partial>`, or
|
||||
:doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is
|
||||
because those degrees of freedom (e.g. a constrained bond) could apply
|
||||
to sets of atoms that are both included and excluded from a specific
|
||||
chunk, and hence the concept is somewhat ill-defined. In some cases,
|
||||
you can use the *adof* and *cdof* keywords to adjust the calculated
|
||||
degrees of freedom appropriately, as explained below.
|
||||
|
||||
Also note that a bias can be subtracted from atom velocities before
|
||||
they are used in the above formula for KE, by using the *bias*
|
||||
@ -256,22 +265,22 @@ keyword. This allows, for example, a thermal temperature to be
|
||||
computed after removal of a flow velocity profile.
|
||||
|
||||
Note that the per-chunk temperature calculated by this fix and the
|
||||
:doc:`compute temp/chunk <compute_temp_chunk>` command can be different.
|
||||
The compute calculates the temperature for each chunk for a single
|
||||
snapshot. This fix can do that but can also time average those values
|
||||
over many snapshots, or it can compute a temperature as if the atoms
|
||||
in the chunk on different timesteps were collected together as one set
|
||||
of atoms to calculate their temperature. The compute allows the
|
||||
center-of-mass velocity of each chunk to be subtracted before
|
||||
calculating the temperature; this fix does not.
|
||||
:doc:`compute temp/chunk <compute_temp_chunk>` command can be
|
||||
different. The compute calculates the temperature for each chunk for
|
||||
a single snapshot. This fix can do that but can also time average
|
||||
those values over many snapshots, or it can compute a temperature as
|
||||
if the atoms in the chunk on different timesteps were collected
|
||||
together as one set of atoms to calculate their temperature. The
|
||||
compute allows the center-of-mass velocity of each chunk to be
|
||||
subtracted before calculating the temperature; this fix does not.
|
||||
|
||||
If a value begins with "c\_", a compute ID must follow which has been
|
||||
previously defined in the input script. If no bracketed integer is
|
||||
appended, the per-atom vector calculated by the compute is used. If a
|
||||
bracketed integer is appended, the Ith column of the per-atom array
|
||||
calculated by the compute is used. Users can also write code for
|
||||
their own compute styles and :doc:`add them to LAMMPS <Modify>`.
|
||||
See the discussion above for how I can be specified with a wildcard
|
||||
their own compute styles and :doc:`add them to LAMMPS <Modify>`. See
|
||||
the discussion above for how I can be specified with a wildcard
|
||||
asterisk to effectively specify multiple values.
|
||||
|
||||
If a value begins with "f\_", a fix ID must follow which has been
|
||||
@ -307,9 +316,10 @@ atoms in the chunk. The averaged output value for the chunk on the
|
||||
average over atoms across the entire *Nfreq* timescale. For the
|
||||
*density/number* and *density/mass* values, the volume (bin volume or
|
||||
system volume) used in the final normalization will be the volume at
|
||||
the final *Nfreq* timestep. For the *temp* values, degrees of freedom and
|
||||
kinetic energy are summed separately across the entire *Nfreq* timescale, and
|
||||
the output value is calculated by dividing those two sums.
|
||||
the final *Nfreq* timestep. For the *temp* values, degrees of freedom
|
||||
and kinetic energy are summed separately across the entire *Nfreq*
|
||||
timescale, and the output value is calculated by dividing those two
|
||||
sums.
|
||||
|
||||
If the *norm* setting is *sample*, the chunk value is summed over
|
||||
atoms for each sample, as is the count, and an "average sample value"
|
||||
@ -431,44 +441,50 @@ the first of each section of output. In the third line the values are
|
||||
replaced with the appropriate value names, e.g. fx or c_myCompute[2].
|
||||
|
||||
The words in parenthesis only appear with corresponding columns if the
|
||||
chunk style specified for the :doc:`compute chunk/atom <compute_chunk_atom>` command supports them. The OrigID
|
||||
column is only used if the *compress* keyword was set to *yes* for the
|
||||
:doc:`compute chunk/atom <compute_chunk_atom>` command. This means that
|
||||
the original chunk IDs (e.g. molecule IDs) will have been compressed
|
||||
to remove chunk IDs with no atoms assigned to them. Thus a compressed
|
||||
chunk ID of 3 may correspond to an original chunk ID or molecule ID of
|
||||
chunk style specified for the :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command supports them. The OrigID column is
|
||||
only used if the *compress* keyword was set to *yes* for the
|
||||
:doc:`compute chunk/atom <compute_chunk_atom>` command. This means
|
||||
that the original chunk IDs (e.g. molecule IDs) will have been
|
||||
compressed to remove chunk IDs with no atoms assigned to them. Thus a
|
||||
compressed chunk ID of 3 may correspond to an original chunk ID or
|
||||
molecule ID of
|
||||
415. The OrigID column will list 415 for the third chunk.
|
||||
|
||||
The CoordN columns only appear if a *binning* style was used in the
|
||||
:doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*,
|
||||
*bin/2d*, and *bin/3d* styles the column values are the center point
|
||||
of the bin in the corresponding dimension. Just Coord1 is used for
|
||||
*bin/1d*, Coord2 is added for *bin/2d*, Coord3 is added for *bin/3d*\ .
|
||||
For *bin/sphere*, just Coord1 is used, and it is the radial
|
||||
*bin/1d*, Coord2 is added for *bin/2d*, Coord3 is added for *bin/3d*\
|
||||
. For *bin/sphere*, just Coord1 is used, and it is the radial
|
||||
coordinate. For *bin/cylinder*, Coord1 and Coord2 are used. Coord1
|
||||
is the radial coordinate (away from the cylinder axis), and coord2 is
|
||||
the coordinate along the cylinder axis.
|
||||
|
||||
Note that if the value of the *units* keyword used in the :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or *lattice*, the
|
||||
coordinate values will be in distance :doc:`units <units>`. If the
|
||||
value of the *units* keyword is *reduced*, the coordinate values will
|
||||
be in unitless reduced units (0-1). This is not true for the Coord1 value
|
||||
of style *bin/sphere* or *bin/cylinder* which both represent radial
|
||||
dimensions. Those values are always in distance :doc:`units <units>`.
|
||||
Note that if the value of the *units* keyword used in the
|
||||
:doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or
|
||||
*lattice*, the coordinate values will be in distance :doc:`units
|
||||
<units>`. If the value of the *units* keyword is *reduced*, the
|
||||
coordinate values will be in unitless reduced units (0-1). This is
|
||||
not true for the Coord1 value of style *bin/sphere* or *bin/cylinder*
|
||||
which both represent radial dimensions. Those values are always in
|
||||
distance :doc:`units <units>`.
|
||||
|
||||
----------
|
||||
|
||||
Restart, fix_modify, output, run start/stop, minimize info
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
|
||||
are relevant to this fix.
|
||||
No information about this fix is written to :doc:`binary restart files
|
||||
<restart>`. None of the :doc:`fix_modify <fix_modify>` options are
|
||||
relevant to this fix.
|
||||
|
||||
This fix computes a global array of values which can be accessed by
|
||||
various :doc:`output commands <Howto_output>`. The values can only be
|
||||
accessed on timesteps that are multiples of *Nfreq* since that is when
|
||||
averaging is performed. The global array has # of rows = the number
|
||||
of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The # of columns =
|
||||
of chunks *Nchunk* as calculated by the specified :doc:`compute
|
||||
chunk/atom <compute_chunk_atom>` command. The # of columns =
|
||||
M+1+Nvalues, where M = 1 to 4, depending on whether the optional
|
||||
columns for OrigID and CoordN are used, as explained above. Following
|
||||
the optional columns, the next column contains the count of atoms in
|
||||
@ -483,7 +499,8 @@ since they are typically already normalized by the count of atoms in
|
||||
each chunk.
|
||||
|
||||
No parameter of this fix can be used with the *start/stop* keywords of
|
||||
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
|
||||
the :doc:`run <run>` command. This fix is not invoked during
|
||||
:doc:`energy minimization <minimize>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
@ -277,6 +277,8 @@ is the length of the input vectors, and the number of columns is the
|
||||
number of values. Thus the file ends up to be a series of these array
|
||||
sections.
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
If the filename ends in '.yaml' or '.yml' then the output format
|
||||
conforms to the `YAML standard <https://yaml.org/>`_ which allows
|
||||
easy import that data into tools and scripts that support reading YAML
|
||||
@ -329,6 +331,8 @@ appropriate fields from the fix ave/time command.
|
||||
Restart, fix_modify, output, run start/stop, minimize info
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
No information about this fix is written to :doc:`binary restart files
|
||||
<restart>`. The :doc:`fix_modify colname <fix_modify>` option can be
|
||||
used to change the name of the column in the output file. When writing
|
||||
|
||||
@ -25,38 +25,47 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
fix ID group-ID electrode/conp potential eta keyword values ...
|
||||
fix ID group-ID electrode/conq charge eta keyword values ...
|
||||
fix ID group-ID electrode/thermo potential eta temp T_v tau_v rng_v keyword values ...
|
||||
fix ID group-ID style args keyword value ...
|
||||
|
||||
* ID, group-ID are documented in fix command
|
||||
* mode = electrode/conp or electrode/conq or electrode/thermo
|
||||
* potential = electrode potential
|
||||
* charge = electrode charge
|
||||
* eta = reciprocal width of electrode charge smearing
|
||||
* T_v = temperature of thermo-potentiostat
|
||||
* tau_v = time constant of thermo-potentiostat
|
||||
* rng_v = integer used to initialize random number generator
|
||||
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||
* style = *electrode/conp* or *electrode/conq* or *electrode/thermo*
|
||||
* args = arguments used by a particular style
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*electrode/conp* args = potential eta
|
||||
*electrode/conq* args = charge eta
|
||||
*electrode/thermo* args = potential eta *temp* values
|
||||
potential = electrode potential
|
||||
charge = electrode charge
|
||||
eta = reciprocal width of electrode charge smearing
|
||||
*temp* values = T_v tau_v rng_v
|
||||
T_v = temperature of thermo-potentiostat
|
||||
tau_v = time constant of thermo-potentiostat
|
||||
rng_v = integer used to initialize random number generator
|
||||
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*symm(etry) on/off*
|
||||
*symm* value = *on* or *off*
|
||||
turn on/off charge neutrality constraint for the electrodes
|
||||
*couple group-ID value*
|
||||
*couple* values = group-ID val
|
||||
group-ID = group of atoms treated as additional electrode
|
||||
value = electric potential or charge on this electrode
|
||||
*etypes values = atom types*
|
||||
specify atom types exclusive to the electrode for optimized neighbor lists
|
||||
*ffield on/off*
|
||||
val = electric potential or charge on this electrode
|
||||
*etypes* values = type
|
||||
type = atom type (can be a range) exclusive to the electrode for optimized neighbor lists
|
||||
*ffield* value = *on* or *off*
|
||||
turn on/off finite-field implementation
|
||||
*write_mat filename*
|
||||
write elastance matrix to file
|
||||
*write_inv filename*
|
||||
write inverted matrix to file
|
||||
*read_mat filename*
|
||||
read elastance matrix from file
|
||||
*read_inv filename*
|
||||
read inverted matrix from file
|
||||
*write_mat* value = filename
|
||||
filename = file to which to write elastance matrix
|
||||
*write_inv* value = filename
|
||||
filename = file to which to write inverted matrix
|
||||
*read_mat* value = filename
|
||||
filename = file from which to read elastance matrix
|
||||
*read_inv* value = filename
|
||||
filename = file from which to read inverted matrix
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -24,9 +24,9 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*energy* value = no or yes
|
||||
no = do not compute work done by this fix
|
||||
yes = compute work done by this fix
|
||||
*energy* value = *no* or *yes*
|
||||
*no* = do not compute work done by this fix
|
||||
*yes* = compute work done by this fix
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -14,8 +14,14 @@ Syntax
|
||||
* ipi = style name of this fix command
|
||||
* address = internet address (FQDN or IP), or UNIX socket name
|
||||
* port = port number (ignored for UNIX sockets)
|
||||
* optional keyword = *unix*, if present uses a unix socket
|
||||
* optional keyword = *reset*, if present reset electrostatics at each call
|
||||
|
||||
* zero or more keywords may be appended
|
||||
* keyword = *unix* or *reset*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*unix* args = none = use a unix socket
|
||||
*reset* args = none = reset electrostatics at each call
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -22,13 +22,14 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
keyword = *ext* or *strain* or *iso* or *x* or *y* or *z* or *tchain* or *pchain* or *tloop* or *ploop* or *mtk*
|
||||
keyword = *erate* or *ext* or *strain* or *temp* or *iso* or *x* or *y* or *z* or *tchain* or *pchain* or *tloop* or *ploop* or *mtk*
|
||||
*erate* values = e_x e_y = engineering strain rates (required)
|
||||
*ext* value = *x* or *y* or *z* or *xy* or *yz* or *xz* = external dimensions
|
||||
sets the external dimensions used to calculate the scalar pressure
|
||||
*strain* values = e_x e_y = initial strain
|
||||
usually not needed, but may be needed to resume a run with a data file.
|
||||
*iso*, *x*, *y*, *z*, *tchain*, *pchain*, *tloop*, *ploop*, *mtk* keywords
|
||||
documented by the :doc:`fix npt <fix_nh>` command
|
||||
*temp*, *iso*, *x*, *y*, *z*, *tchain*, *pchain*, *tloop*, *ploop*, *mtk*
|
||||
keywords documented by the :doc:`fix npt <fix_nh>` command
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -22,7 +22,7 @@ Syntax
|
||||
|
||||
*disc* value = none = treat particles as 2d discs, not spheres
|
||||
|
||||
* additional thermostat and barostat related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
|
||||
* NOTE: additional thermostat and barostat and dipole related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
@ -33,6 +33,7 @@ Examples
|
||||
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0
|
||||
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 disc
|
||||
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 drag 0.2
|
||||
fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 update dipole
|
||||
fix 2 water npt/sphere temp 300.0 300.0 100.0 aniso 0.0 0.0 1000.0 dilate partial
|
||||
|
||||
Description
|
||||
@ -61,8 +62,9 @@ The only difference between discs and spheres in this context is their
|
||||
moment of inertia, as used in the time integration.
|
||||
|
||||
Additional parameters affecting the thermostat and barostat are
|
||||
specified by keywords and values documented with the :doc:`fix npt <fix_nh>` command. See, for example, discussion of the *temp*,
|
||||
*iso*, *aniso*, and *dilate* keywords.
|
||||
specified by keywords and values documented with the :doc:`fix npt
|
||||
<fix_nh>` command. See, for example, discussion of the *temp*, *iso*,
|
||||
*aniso*, and *dilate* keywords.
|
||||
|
||||
The particles in the fix group are the only ones whose velocities and
|
||||
positions are updated by the velocity/position update portion of the
|
||||
@ -87,8 +89,10 @@ this, the fix creates its own computes of style "temp/sphere" and
|
||||
compute fix-ID_temp all temp/sphere
|
||||
compute fix-ID_press all pressure fix-ID_temp
|
||||
|
||||
See the :doc:`compute temp/sphere <compute_temp_sphere>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
|
||||
IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
|
||||
See the :doc:`compute temp/sphere <compute_temp_sphere>` and
|
||||
:doc:`compute pressure <compute_pressure>` commands for details. Note
|
||||
that the IDs of the new computes are the fix-ID + underscore + "temp"
|
||||
or fix_ID
|
||||
+ underscore + "press", and the group for the new computes is "all"
|
||||
since pressure is computed for the entire system.
|
||||
|
||||
@ -170,7 +174,9 @@ defined by the :doc:`dimension <dimension>` keyword.
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`fix npt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_sphere <fix_nvt_sphere>`, :doc:`fix npt_asphere <fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
|
||||
:doc:`fix npt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`,
|
||||
:doc:`fix nvt_sphere <fix_nvt_sphere>`, :doc:`fix npt_asphere
|
||||
<fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
@ -51,7 +51,8 @@ If the *update* keyword is used with the *dipole* value, then the
|
||||
orientation of the dipole moment of each particle is also updated
|
||||
during the time integration. This option should be used for models
|
||||
where a dipole moment is assigned to finite-size particles,
|
||||
e.g. spheroids via use of the :doc:`atom_style hybrid sphere dipole <atom_style>` command.
|
||||
e.g. spheroids via use of the :doc:`atom_style hybrid sphere dipole
|
||||
<atom_style>` command.
|
||||
|
||||
The default dipole orientation integrator can be changed to the
|
||||
Dullweber-Leimkuhler-McLachlan integration scheme
|
||||
@ -75,11 +76,13 @@ moment of inertia, as used in the time integration.
|
||||
Restart, fix_modify, output, run start/stop, minimize info
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
|
||||
are relevant to this fix. No global or per-atom quantities are stored
|
||||
by this fix for access by various :doc:`output commands <Howto_output>`.
|
||||
No information about this fix is written to :doc:`binary restart files
|
||||
<restart>`. None of the :doc:`fix_modify <fix_modify>` options are
|
||||
relevant to this fix. No global or per-atom quantities are stored by
|
||||
this fix for access by various :doc:`output commands <Howto_output>`.
|
||||
No parameter of this fix can be used with the *start/stop* keywords of
|
||||
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
|
||||
the :doc:`run <run>` command. This fix is not invoked during
|
||||
:doc:`energy minimization <minimize>`.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
@ -22,7 +22,7 @@ Syntax
|
||||
|
||||
*disc* value = none = treat particles as 2d discs, not spheres
|
||||
|
||||
* additional thermostat related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
|
||||
* NOTE: additional thermostat and dipole related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
@ -32,6 +32,7 @@ Examples
|
||||
fix 1 all nvt/sphere temp 300.0 300.0 100.0
|
||||
fix 1 all nvt/sphere temp 300.0 300.0 100.0 disc
|
||||
fix 1 all nvt/sphere temp 300.0 300.0 100.0 drag 0.2
|
||||
fix 1 all nvt/sphere temp 300.0 300.0 100.0 update dipole
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
@ -77,13 +78,13 @@ underscore + "temp", and the group for the new compute is the same as
|
||||
the fix group.
|
||||
|
||||
Note that this is NOT the compute used by thermodynamic output (see
|
||||
the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*.
|
||||
This means you can change the attributes of this fix's temperature
|
||||
(e.g. its degrees-of-freedom) via the
|
||||
:doc:`compute_modify <compute_modify>` command or print this temperature
|
||||
during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
|
||||
It also means that changing attributes of *thermo_temp* will have no
|
||||
effect on this fix.
|
||||
the :doc:`thermo_style <thermo_style>` command) with ID =
|
||||
*thermo_temp*. This means you can change the attributes of this fix's
|
||||
temperature (e.g. its degrees-of-freedom) via the :doc:`compute_modify
|
||||
<compute_modify>` command or print this temperature during
|
||||
thermodynamic output via the :doc:`thermo_style custom <thermo_style>`
|
||||
command using the appropriate compute-ID. It also means that changing
|
||||
attributes of *thermo_temp* will have no effect on this fix.
|
||||
|
||||
Like other fixes that perform thermostatting, this fix can be used
|
||||
with :doc:`compute commands <compute>` that remove a "bias" from the
|
||||
@ -148,7 +149,9 @@ defined by the :doc:`dimension <dimension>` keyword.
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
:doc:`fix nvt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix npt_sphere <fix_npt_sphere>`, :doc:`fix_modify <fix_modify>`
|
||||
:doc:`fix nvt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`,
|
||||
:doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix npt_sphere
|
||||
<fix_npt_sphere>`, :doc:`fix_modify <fix_modify>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
@ -21,9 +21,9 @@ Examples
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
fix ions oneway 10 semi -x
|
||||
fix all oneway 1 left -z
|
||||
fix all oneway 1 right z
|
||||
fix 1 ions oneway 10 semi -x
|
||||
fix 2 all oneway 1 left -z
|
||||
fix 3 all oneway 1 right z
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -15,18 +15,18 @@ Syntax
|
||||
|
||||
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||
* property/atom = style name of this fix command
|
||||
* name1,name2,... = *mol* or *q* or *rmass* or *i_name* or *d_name* or *i2_name* or *d2_name*
|
||||
* name1,name2,... = *mol* or *q* or *rmass* or i_name or d_name or i2_name or d2_name
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*mol* = molecule IDs
|
||||
*q* = charge
|
||||
*rmass* = per-atom mass
|
||||
*i_name* = new integer vector referenced by name
|
||||
*d_name* = new floating-point vector referenced by name
|
||||
*i2_name* = new integer array referenced by name
|
||||
i_name = new integer vector referenced by name
|
||||
d_name = new floating-point vector referenced by name
|
||||
i2_name = new integer array referenced by name
|
||||
i2_name arg = N = number of columns in the array
|
||||
*d2_name* = new floating-point array referenced by name
|
||||
d2_name = new floating-point array referenced by name
|
||||
d2_name arg = N = number of columns in the array
|
||||
|
||||
* zero of more keyword/value pairs may be appended
|
||||
|
||||
@ -88,7 +88,7 @@ Syntax
|
||||
Tstart,Tstop = desired temperature at start/stop of run (temperature units)
|
||||
Tdamp = temperature damping parameter (time units)
|
||||
seed = random number seed to use for white noise (positive integer)
|
||||
*reinit* = *yes* or *no*
|
||||
*reinit* value = *yes* or *no*
|
||||
*temp* values = Tstart Tstop Tdamp
|
||||
Tstart,Tstop = desired temperature at start/stop of run (temperature units)
|
||||
Tdamp = temperature damping parameter (time units)
|
||||
@ -98,7 +98,7 @@ Syntax
|
||||
*x* or *y* or *z* values = Pstart Pstop Pdamp
|
||||
Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
|
||||
Pdamp = stress damping parameter (time units)
|
||||
*couple* = *none* or *xyz* or *xy* or *yz* or *xz*
|
||||
*couple* value = *none* or *xyz* or *xy* or *yz* or *xz*
|
||||
*tparam* values = Tchain Titer Torder
|
||||
Tchain = length of Nose/Hoover thermostat chain
|
||||
Titer = number of thermostat iterations performed
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
.. index:: group2ndx
|
||||
.. index:: ndx2group
|
||||
|
||||
group2ndx command
|
||||
=================
|
||||
|
||||
@ -25,7 +25,7 @@ Examples
|
||||
|
||||
if "${steps} > 1000" then quit
|
||||
if "${myString} == a10" then quit
|
||||
if "$x <= $y" then "print X is smaller = $x" else "print Y is smaller = $y"
|
||||
if "$x <= $y" then "print 'X is smaller = $x'" else "print 'Y is smaller = $y'"
|
||||
if "(${eng} > 0.0) || ($n < 1000)" then &
|
||||
"timestep 0.005" &
|
||||
elif $n<10000 &
|
||||
|
||||
@ -17,7 +17,7 @@ Examples
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
improper_style hybrid harmonic helix
|
||||
improper_style hybrid harmonic cvff
|
||||
improper_coeff 1 harmonic 120.0 30
|
||||
improper_coeff 2 cvff 20.0 -1 2
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ Restrictions
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
none
|
||||
:doc:`jump <jump>`, :doc:`next <next>`
|
||||
|
||||
|
||||
Default
|
||||
|
||||
@ -22,24 +22,24 @@ Syntax
|
||||
*check* value = *yes* or *no*
|
||||
*yes* = only build if some atom has moved half the skin distance or more
|
||||
*no* = always build on 1st step that *every* and *delay* are satisfied
|
||||
*once*
|
||||
*once* value = *yes* or *no*
|
||||
*yes* = only build neighbor list once at start of run and never rebuild
|
||||
*no* = rebuild neighbor list according to other settings
|
||||
*cluster*
|
||||
*cluster* value = *yes* or *no*
|
||||
*yes* = check bond,angle,etc neighbor list for nearby clusters
|
||||
*no* = do not check bond,angle,etc neighbor list for nearby clusters
|
||||
*include* value = group-ID
|
||||
group-ID = only build pair neighbor lists for atoms in this group
|
||||
*exclude* values:
|
||||
type M N
|
||||
*type* M N
|
||||
M,N = exclude if one atom in pair is type M, other is type N
|
||||
group group1-ID group2-ID
|
||||
*group* group1-ID group2-ID
|
||||
group1-ID,group2-ID = exclude if one atom is in 1st group, other in 2nd
|
||||
molecule/intra group-ID
|
||||
*molecule/intra* group-ID
|
||||
group-ID = exclude if both atoms are in the same molecule and in group
|
||||
molecule/inter group-ID
|
||||
*molecule/inter* group-ID
|
||||
group-ID = exclude if both atoms are in different molecules and in group
|
||||
none
|
||||
*none*
|
||||
delete all exclude settings
|
||||
*page* value = N
|
||||
N = number of pairs stored in a single neighbor page
|
||||
|
||||
@ -18,16 +18,16 @@ Syntax
|
||||
*gpu* args = Ngpu keyword value ...
|
||||
Ngpu = # of GPUs per node
|
||||
zero or more keyword/value pairs may be appended
|
||||
keywords = *neigh* or *newton* or *pair/only* or *binsize* or *split* or *gpuID* or *tpa* or *blocksize* or *platform* or *device_type* or *ocl_args*
|
||||
keywords = *neigh* or *newton* or *pair/only* or *binsize* or *split* or *gpuID* or *tpa* or *blocksize* or *omp* or *platform* or *device_type* or *ocl_args*
|
||||
*neigh* value = *yes* or *no*
|
||||
yes = neighbor list build on GPU (default)
|
||||
no = neighbor list build on CPU
|
||||
*yes* = neighbor list build on GPU (default)
|
||||
*no* = neighbor list build on CPU
|
||||
*newton* = *off* or *on*
|
||||
off = set Newton pairwise flag off (default and required)
|
||||
on = set Newton pairwise flag on (currently not allowed)
|
||||
*off* = set Newton pairwise flag off (default and required)
|
||||
*on* = set Newton pairwise flag on (currently not allowed)
|
||||
*pair/only* = *off* or *on*
|
||||
off = apply "gpu" suffix to all available styles in the GPU package (default)
|
||||
on = apply "gpu" suffix only pair styles
|
||||
*off* = apply "gpu" suffix to all available styles in the GPU package (default)
|
||||
*on* = apply "gpu" suffix only pair styles
|
||||
*binsize* value = size
|
||||
size = bin size for neighbor list construction (distance units)
|
||||
*split* = fraction
|
||||
@ -42,7 +42,7 @@ Syntax
|
||||
id = For OpenCL, platform ID for the GPU or accelerator
|
||||
*gpuID* values = id
|
||||
id = ID of first GPU to be used on each node
|
||||
*device_type* value = *intelgpu* or *nvidiagpu* or *amdgpu* or *applegpu* or *generic* or *custom,val1,val2,...*
|
||||
*device_type* value = *intelgpu* or *nvidiagpu* or *amdgpu* or *applegpu* or *generic* or *custom*,val1,val2,...
|
||||
val1,val2,... = custom OpenCL accelerator configuration parameters (see below for details)
|
||||
*ocl_args* value = args
|
||||
args = List of additional OpenCL compiler arguments delimited by colons
|
||||
@ -57,13 +57,13 @@ Syntax
|
||||
*omp* value = Nthreads
|
||||
Nthreads = number of OpenMP threads to use on CPU (default = 0)
|
||||
*lrt* value = *yes* or *no*
|
||||
yes = use additional thread dedicated for some PPPM calculations
|
||||
no = do not dedicate an extra thread for some PPPM calculations
|
||||
*yes* = use additional thread dedicated for some PPPM calculations
|
||||
*no* = do not dedicate an extra thread for some PPPM calculations
|
||||
*balance* value = split
|
||||
split = fraction of work to offload to co-processor, -1 for dynamic
|
||||
*ghost* value = *yes* or *no*
|
||||
yes = include ghost atoms for offload
|
||||
no = do not include ghost atoms for offload
|
||||
*yes* = include ghost atoms for offload
|
||||
*no* = do not include ghost atoms for offload
|
||||
*tpc* value = Ntpc
|
||||
Ntpc = max number of co-processor threads per co-processor core (default = 4)
|
||||
*tptask* value = Ntptask
|
||||
@ -71,7 +71,7 @@ Syntax
|
||||
*no_affinity* values = none
|
||||
*kokkos* args = keyword value ...
|
||||
zero or more keyword/value pairs may be appended
|
||||
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* *comm/pair/forward* *comm/fix/forward* or *comm/reverse* or *comm/pair/reverse* or *gpu/aware* or *pair/only*
|
||||
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *neigh/transpose* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* or *comm/pair/forward* or *comm/fix/forward* or *comm/reverse* or *comm/pair/reverse* or *gpu/aware* or *pair/only*
|
||||
*neigh* value = *full* or *half*
|
||||
full = full neighbor list
|
||||
half = half neighbor list built in thread-safe manner
|
||||
@ -79,14 +79,14 @@ Syntax
|
||||
full = full neighbor list
|
||||
half = half neighbor list built in thread-safe manner
|
||||
*neigh/thread* value = *off* or *on*
|
||||
off = thread only over atoms
|
||||
on = thread over both atoms and neighbors
|
||||
*off* = thread only over atoms
|
||||
*on* = thread over both atoms and neighbors
|
||||
*neigh/transpose* value = *off* or *on*
|
||||
off = use same memory layout for GPU neigh list build as pair style
|
||||
on = use transposed memory layout for GPU neigh list build
|
||||
*off* = use same memory layout for GPU neigh list build as pair style
|
||||
*on* = use transposed memory layout for GPU neigh list build
|
||||
*newton* = *off* or *on*
|
||||
off = set Newton pairwise and bonded flags off
|
||||
on = set Newton pairwise and bonded flags on
|
||||
*off* = set Newton pairwise and bonded flags off
|
||||
*on* = set Newton pairwise and bonded flags on
|
||||
*binsize* value = size
|
||||
size = bin size for neighbor list construction (distance units)
|
||||
*comm* value = *no* or *host* or *device*
|
||||
@ -96,23 +96,25 @@ Syntax
|
||||
*comm/pair/forward* value = *no* or *device*
|
||||
*comm/fix/forward* value = *no* or *device*
|
||||
*comm/reverse* value = *no* or *host* or *device*
|
||||
*no* = perform communication pack/unpack in non-KOKKOS mode
|
||||
*host* = perform pack/unpack on host (e.g. with OpenMP threading)
|
||||
*device* = perform pack/unpack on device (e.g. on GPU)
|
||||
*comm/pair/reverse* value = *no* or *device*
|
||||
no = perform communication pack/unpack in non-KOKKOS mode
|
||||
host = perform pack/unpack on host (e.g. with OpenMP threading)
|
||||
device = perform pack/unpack on device (e.g. on GPU)
|
||||
*no* = perform communication pack/unpack in non-KOKKOS mode
|
||||
*device* = perform pack/unpack on device (e.g. on GPU)
|
||||
*gpu/aware* = *off* or *on*
|
||||
off = do not use GPU-aware MPI
|
||||
on = use GPU-aware MPI (default)
|
||||
*off* = do not use GPU-aware MPI
|
||||
*on* = use GPU-aware MPI (default)
|
||||
*pair/only* = *off* or *on*
|
||||
off = use device acceleration (e.g. GPU) for all available styles in the KOKKOS package (default)
|
||||
on = use device acceleration only for pair styles (and host acceleration for others)
|
||||
*off* = use device acceleration (e.g. GPU) for all available styles in the KOKKOS package (default)
|
||||
*on* = use device acceleration only for pair styles (and host acceleration for others)
|
||||
*omp* args = Nthreads keyword value ...
|
||||
Nthreads = # of OpenMP threads to associate with each MPI process
|
||||
zero or more keyword/value pairs may be appended
|
||||
keywords = *neigh*
|
||||
*neigh* value = *yes* or *no*
|
||||
yes = threaded neighbor list build (default)
|
||||
no = non-threaded neighbor list build
|
||||
*yes* = threaded neighbor list build (default)
|
||||
*no* = non-threaded neighbor list build
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -36,7 +36,7 @@ Examples
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
pair_style brownian 1.5 1 1 2.01 2.5 2.0 5878567 (assuming radius = 1)
|
||||
pair_style brownian 1.5 1 1 2.01 2.5 2.0 5878567 # (assuming radius = 1)
|
||||
pair_coeff 1 1 2.05 2.8
|
||||
pair_coeff * *
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ Examples
|
||||
pair_coeff * * 1.0 1.0
|
||||
pair_coeff * * nialhjea 1 1 2
|
||||
pair_coeff * 3 morse.table ENTRY1
|
||||
pair_coeff 1 2 lj/cut 1.0 1.0 2.5 (for pair_style hybrid)
|
||||
pair_coeff 1 2 lj/cut 1.0 1.0 2.5 # (for pair_style hybrid)
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -78,12 +78,12 @@ Examples
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Style *lj/cut/dipole/cut* computes interactions between pairs of particles
|
||||
that each have a charge and/or a point dipole moment. In addition to
|
||||
the usual Lennard-Jones interaction between the particles (Elj) the
|
||||
charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole (Epp)
|
||||
interactions are computed by these formulas for the energy (E), force
|
||||
(F), and torque (T) between particles I and J.
|
||||
Style *lj/cut/dipole/cut* computes interactions between pairs of
|
||||
particles that each have a charge and/or a point dipole moment. In
|
||||
addition to the usual Lennard-Jones interaction between the particles
|
||||
(Elj) the charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole
|
||||
(Epp) interactions are computed by these formulas for the energy (E),
|
||||
force (F), and torque (T) between particles I and J.
|
||||
|
||||
.. math::
|
||||
|
||||
@ -112,18 +112,18 @@ interactions are computed by these formulas for the energy (E), force
|
||||
\frac{3}{r^5} (\vec{p_i} \bullet \vec{r})
|
||||
(\vec{p_j} \times \vec{r})
|
||||
|
||||
where :math:`q_i` and :math:`q_j` are the charges on the two particles,
|
||||
:math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole moment vectors of
|
||||
the two particles, r is their separation distance, and the vector r =
|
||||
Ri - Rj is the separation vector between the two particles. Note that
|
||||
Eqq and Fqq are simply Coulombic energy and force, Fij = -Fji as
|
||||
symmetric forces, and Tij != -Tji since the torques do not act
|
||||
symmetrically. These formulas are discussed in :ref:`(Allen) <Allen2>`
|
||||
and in :ref:`(Toukmaji) <Toukmaji2>`.
|
||||
where :math:`q_i` and :math:`q_j` are the charges on the two
|
||||
particles, :math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole
|
||||
moment vectors of the two particles, r is their separation distance,
|
||||
and the vector r = Ri - Rj is the separation vector between the two
|
||||
particles. Note that Eqq and Fqq are simply Coulombic energy and
|
||||
force, Fij = -Fji as symmetric forces, and Tij != -Tji since the
|
||||
torques do not act symmetrically. These formulas are discussed in
|
||||
:ref:`(Allen) <Allen2>` and in :ref:`(Toukmaji) <Toukmaji2>`.
|
||||
|
||||
Also note, that in the code, all of these terms (except Elj) have a
|
||||
:math:`C/\epsilon` prefactor, the same as the Coulombic term in the LJ +
|
||||
Coulombic pair styles discussed :doc:`here <pair_lj>`. C is an
|
||||
:math:`C/\epsilon` prefactor, the same as the Coulombic term in the
|
||||
LJ + Coulombic pair styles discussed :doc:`here <pair_lj>`. C is an
|
||||
energy-conversion constant and epsilon is the dielectric constant
|
||||
which can be set by the :doc:`dielectric <dielectric>` command. The
|
||||
same is true of the equations that follow for other dipole pair
|
||||
@ -135,11 +135,11 @@ moment. In general, a shifted-force potential is a (slightly) modified
|
||||
potential containing extra terms that make both the energy and its
|
||||
derivative go to zero at the cutoff distance; this removes
|
||||
(cutoff-related) problems in energy conservation and any numerical
|
||||
instability in the equations of motion :ref:`(Allen) <Allen2>`. Shifted-force
|
||||
interactions for the Lennard-Jones (E_LJ), charge-charge (Eqq),
|
||||
charge-dipole (Eqp), dipole-charge (Epq) and dipole-dipole (Epp)
|
||||
potentials are computed by these formulas for the energy (E), force
|
||||
(F), and torque (T) between particles I and J:
|
||||
instability in the equations of motion :ref:`(Allen)
|
||||
<Allen2>`. Shifted-force interactions for the Lennard-Jones (E_LJ),
|
||||
charge-charge (Eqq), charge-dipole (Eqp), dipole-charge (Epq) and
|
||||
dipole-dipole (Epp) potentials are computed by these formulas for the
|
||||
energy (E), force (F), and torque (T) between particles I and J:
|
||||
|
||||
.. math::
|
||||
|
||||
@ -207,65 +207,52 @@ potentials are computed by these formulas for the energy (E), force
|
||||
where :math:`\epsilon` and :math:`\sigma` are the standard LJ
|
||||
parameters, :math:`r_c` is the cutoff, :math:`q_i` and :math:`q_j` are
|
||||
the charges on the two particles, :math:`\vec{p_i}` and
|
||||
:math:`\vec{p_j}` are the dipole moment vectors of the two particles, r
|
||||
is their separation distance, and the vector r = Ri - Rj is the
|
||||
separation vector between the two particles. Note that Eqq and Fqq are
|
||||
simply Coulombic energy and force, Fij = -Fji as symmetric forces, and
|
||||
Tij != -Tji since the torques do not act symmetrically. The
|
||||
:math:`\vec{p_j}` are the dipole moment vectors of the two particles,
|
||||
r is their separation distance, and the vector r = Ri - Rj is the
|
||||
separation vector between the two particles. Note that Eqq and Fqq
|
||||
are simply Coulombic energy and force, Fij = -Fji as symmetric forces,
|
||||
and Tij != -Tji since the torques do not act symmetrically. The
|
||||
shifted-force formula for the Lennard-Jones potential is reported in
|
||||
:ref:`(Stoddard) <Stoddard>`. The original (non-shifted) formulas for
|
||||
the electrostatic potentials, forces and torques can be found in
|
||||
:ref:`(Price) <Price2>`. The shifted-force electrostatic potentials have
|
||||
been obtained by applying equation 5.13 of :ref:`(Allen) <Allen2>`. The
|
||||
formulas for the corresponding forces and torques have been obtained by
|
||||
applying the 'chain rule' as in appendix C.3 of :ref:`(Allen) <Allen2>`.
|
||||
:ref:`(Price) <Price2>`. The shifted-force electrostatic potentials
|
||||
have been obtained by applying equation 5.13 of :ref:`(Allen)
|
||||
<Allen2>`. The formulas for the corresponding forces and torques have
|
||||
been obtained by applying the 'chain rule' as in appendix C.3 of
|
||||
:ref:`(Allen) <Allen2>`.
|
||||
|
||||
If one cutoff is specified in the pair_style command, it is used for
|
||||
both the LJ and Coulombic (q,p) terms. If two cutoffs are specified,
|
||||
they are used as cutoffs for the LJ and Coulombic (q,p) terms
|
||||
respectively. This pair style also supports an optional *scale* keyword
|
||||
as part of a pair_coeff statement, where the interactions can be
|
||||
scaled according to this factor. This scale factor is also made available
|
||||
for use with fix adapt.
|
||||
respectively. This pair style also supports an optional *scale*
|
||||
keyword as part of a pair_coeff statement, where the interactions can
|
||||
be scaled according to this factor. This scale factor is also made
|
||||
available for use with fix adapt.
|
||||
|
||||
Style *lj/cut/dipole/long* computes long-range point-dipole
|
||||
interactions as discussed in :ref:`(Toukmaji) <Toukmaji2>`. Dipole-dipole,
|
||||
dipole-charge, and charge-charge interactions are all supported, along
|
||||
with the standard 12/6 Lennard-Jones interactions, which are computed
|
||||
with a cutoff. A :doc:`kspace_style <kspace_style>` must be defined to
|
||||
use this pair style. Currently, only :doc:`kspace_style ewald/disp <kspace_style>` support long-range point-dipole
|
||||
interactions.
|
||||
Style *lj/cut/dipole/long* computes the short-range portion of
|
||||
point-dipole interactions as discussed in :ref:`(Toukmaji)
|
||||
<Toukmaji2>`. Dipole-dipole, dipole-charge, and charge-charge
|
||||
interactions are all supported, along with the standard 12/6
|
||||
Lennard-Jones interactions, which are computed with a cutoff. A
|
||||
:doc:`kspace_style <kspace_style>` must be defined to use this pair
|
||||
style. If only dipoles (not point charges) are included in the model,
|
||||
the kspace style can be one of these 3 options, all of which compute
|
||||
the long-range portion of dipole-dipole interactions. If the model
|
||||
includes point charges (in addition to dipoles), then only the first
|
||||
of these kspace styles can be used:
|
||||
|
||||
Style *lj/long/dipole/long* also computes point-dipole interactions as
|
||||
discussed in :ref:`(Toukmaji) <Toukmaji2>`. Long-range dipole-dipole,
|
||||
dipole-charge, and charge-charge interactions are all supported, along
|
||||
with the standard 12/6 Lennard-Jones interactions. LJ interactions
|
||||
can be cutoff or long-ranged.
|
||||
* :doc:`kspace_style ewald/disp <kspace_style>`
|
||||
* :doc:`kspace_style ewald/dipole <kspace_style>`
|
||||
* :doc:`kspace_style pppm/dipole <kspace_style>`
|
||||
|
||||
For style *lj/long/dipole/long*, if *flag_lj* is set to *long*, no
|
||||
cutoff is used on the LJ 1/r\^6 dispersion term. The long-range
|
||||
portion is calculated by using the :doc:`kspace_style ewald_disp <kspace_style>` command. The specified LJ cutoff then
|
||||
determines which portion of the LJ interactions are computed directly
|
||||
by the pair potential versus which part is computed in reciprocal
|
||||
space via the Kspace style. If *flag_lj* is set to *cut*, the LJ
|
||||
interactions are simply cutoff, as with :doc:`pair_style lj/cut <pair_lj>`. If *flag_lj* is set to *off*, LJ interactions
|
||||
are not computed at all.
|
||||
Style *lj/long/dipole/long* has the same functionality as style
|
||||
*lj/cut/dipole/long*, except it also has an option to compute 12/6
|
||||
Lennard-Jones interactions for use with a long-range dispersion kspace
|
||||
style. This is done by setting its *flag_lj* argument to *long*. For
|
||||
long-range LJ interactions, the doc:`kspace_style ewald/disp
|
||||
<kspace_style>` command must be used.
|
||||
|
||||
If *flag_coul* is set to *long*, no cutoff is used on the Coulombic or
|
||||
dipole interactions. The long-range portion is calculated by using
|
||||
*ewald_disp* of the :doc:`kspace_style <kspace_style>` command. If
|
||||
*flag_coul* is set to *off*, Coulombic and dipole interactions are not
|
||||
computed at all.
|
||||
|
||||
Atoms with dipole moments should be integrated using the :doc:`fix nve/sphere update dipole <fix_nve_sphere>` or the :doc:`fix nvt/sphere update dipole <fix_nvt_sphere>` command to rotate the
|
||||
dipole moments. The *omega* option on the :doc:`fix langevin <fix_langevin>` command can be used to thermostat the
|
||||
rotational motion. The :doc:`compute temp/sphere <compute_temp_sphere>`
|
||||
command can be used to monitor the temperature, since it includes
|
||||
rotational degrees of freedom. The :doc:`atom_style hybrid dipole sphere <atom_style>` command should be used since
|
||||
it defines the point dipoles and their rotational state.
|
||||
The magnitude and orientation of the dipole moment for each particle
|
||||
can be defined by the :doc:`set <set>` command or in the "Atoms" section
|
||||
of the data file read in by the :doc:`read_data <read_data>` command.
|
||||
----------
|
||||
|
||||
The following coefficients must be defined for each pair of atoms
|
||||
types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
|
||||
@ -287,6 +274,40 @@ type pair.
|
||||
|
||||
----------
|
||||
|
||||
Note that for systems using these pair styles, typically particles
|
||||
should be able to exert torque on each other via their dipole moments
|
||||
so that the particle and its dipole moment can rotate. This requires
|
||||
they not be point particles, but finite-size spheres. Thus you should
|
||||
use a command like :doc:`atom_style hybrid sphere dipole <atom_style>`
|
||||
to use particles with both attributes.
|
||||
|
||||
The magnitude and orientation of the dipole moment for each particle
|
||||
can be defined by the :doc:`set <set>` command or in the "Atoms"
|
||||
section of the data file read in by the :doc:`read_data <read_data>`
|
||||
command.
|
||||
|
||||
Rotating finite-size particles have 6 degrees of freedom (DOFs),
|
||||
translation and rotational. You can use the :doc:`compute temp/sphere
|
||||
<compute_temp_sphere>` command to monitor a temperature which includes
|
||||
all these DOFs.
|
||||
|
||||
Finite-size particles with dipole moments should be integrated using
|
||||
one of these options:
|
||||
|
||||
* :doc:`fix nve/sphere update dipole <fix_nve_sphere>`
|
||||
* :doc:`fix nve/sphere update dipole <fix_nve_sphere>` plus :doc:`fix langevin omega yes <fix_langevin>`
|
||||
* :doc:`fix nvt/sphere update dipole <fix_nvt_sphere>`
|
||||
* :doc:`fix npt/sphere update dipole <fix_npt_sphere>`
|
||||
|
||||
In all cases the "update dipole" setting insures the dipole moments
|
||||
are also rotated when the finite-size spheres rotate. The 2nd and 3rd
|
||||
bullets perform thermostatting; in the case of a Langevin thermostat
|
||||
the "omega yes" option also thermostats the rotational degrees of
|
||||
freedom (if desired). The 4th bullet performs thermostatting and
|
||||
barostatting.
|
||||
|
||||
----------
|
||||
|
||||
.. include:: accel_styles.rst
|
||||
|
||||
----------
|
||||
|
||||
@ -17,8 +17,8 @@ Examples
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
pair_style rann
|
||||
pair_coeff ** Mg.rann Mg
|
||||
pair_coeff ** MgAlalloy.rann Mg Mg Al Mg
|
||||
pair_coeff * * Mg.rann Mg
|
||||
pair_coeff * * MgAlalloy.rann Mg Mg Al Mg
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -14,13 +14,9 @@ Syntax
|
||||
|
||||
pair_style style args
|
||||
|
||||
* style = *smatb*
|
||||
* style = *smatb* or *smatb/single*
|
||||
* args = none
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*smatb*
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -29,13 +25,18 @@ Examples
|
||||
pair_style smatb
|
||||
pair_coeff 1 1 2.88 10.35 4.178 0.210 1.818 4.07293506 4.9883063257983666
|
||||
|
||||
pair_style smatb/single
|
||||
pair_coeff 1 1 2.88 10.35 4.178 0.210 1.818 4.07293506 4.9883063257983666
|
||||
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *smatb* styles compute the Second Moment Approximation to the Tight Binding
|
||||
:ref:`(Cyrot) <Cyrot>`, :ref:`(Gupta) <Gupta>`, :ref:`(Rosato) <Rosato>`,
|
||||
given by
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
The *smatb* and *smatb/single* styles compute the Second Moment
|
||||
Approximation to the Tight Binding :ref:`(Cyrot) <Cyrot>`,
|
||||
:ref:`(Gupta) <Gupta>`, :ref:`(Rosato) <Rosato>`, given by
|
||||
|
||||
.. math::
|
||||
E_{i} = \sum_{j,R_{ij}\leq R_{c}} \alpha(R_{ij}) - \sqrt{\sum_{j,R_{ij}\leq R_{c}}\Xi^2(R_{ij})}
|
||||
@ -66,6 +67,8 @@ exponential terms and their first and second derivatives are smoothly
|
||||
reduced to zero, from the inner cutoff :math:`R_{sc}` to the outer
|
||||
cutoff :math:`R_{c}`.
|
||||
|
||||
The *smatb/single* style is an optimization when using only a single atom type.
|
||||
|
||||
Coefficients
|
||||
""""""""""""
|
||||
|
||||
@ -100,10 +103,10 @@ For atom type pairs I,J and I != J the coefficients are not automatically mixed.
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
This pair style is part of the SMTBQ package and is only enabled
|
||||
These pair styles are part of the SMTBQ package and are only enabled
|
||||
if LAMMPS is built with that package. See the :doc:`Build package <Build_package>` page for more info.
|
||||
|
||||
These pair potentials require the :doc:`newton <newton>` setting to be "on" for pair interactions.
|
||||
These pair styles require the :doc:`newton <newton>` setting to be "on" for pair interactions.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
@ -75,6 +75,8 @@ where :math:`\phi_2` is a two-body term and :math:`\phi_3` is a
|
||||
three-body term. The summations in the formula are over all neighbors J
|
||||
and K of atom I within a cutoff distance :math:`a `\sigma`.
|
||||
|
||||
.. versionadded:: 14Dec2021
|
||||
|
||||
The *sw/mod* style is designed for simulations of materials when
|
||||
distinguishing three-body angles are necessary, such as borophene and
|
||||
transition metal dichalcogenides, which cannot be described by the
|
||||
|
||||
@ -31,6 +31,8 @@ Used in example input script:
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
.. versionadded:: 2Jun2022
|
||||
|
||||
The *sw/angle/table* style is a modification of the original
|
||||
:doc:`pair_style sw <pair_sw>`. It has been developed for coarse-grained
|
||||
simulations (of water) (:ref:`Scherer1 <Scherer1>`), but can be employed
|
||||
|
||||
@ -35,6 +35,8 @@ Used in example input scripts:
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
.. versionadded:: 2Jun2022
|
||||
|
||||
The *threebody/table* style is a pair style for generic tabulated
|
||||
three-body interactions. It has been developed for (coarse-grained)
|
||||
simulations (of water) with Kernel-based machine learning (ML)
|
||||
|
||||
@ -84,8 +84,8 @@ little to be gained by choosing other values of :math:`\nu` and
|
||||
This pair style does not support the :doc:`pair_modify <pair_modify>`
|
||||
mixing and table options.
|
||||
|
||||
The :doc:`pair_modify <pair_modify>` tail option is not relevant
|
||||
for this pair style as it goes to zero at the cut-off radius.
|
||||
The :doc:`pair_modify <pair_modify>` tail and shift options are not
|
||||
relevant for this pair style as it goes to zero at the cut-off radius.
|
||||
|
||||
This pair style writes its information to :doc:`binary restart files
|
||||
<restart>`, so pair_style and pair_coeff commands do not need to be
|
||||
|
||||
@ -11,7 +11,7 @@ Syntax
|
||||
thermo_modify keyword value ...
|
||||
|
||||
* one or more keyword/value pairs may be listed
|
||||
* keyword = *lost* or *lost/bond* or *warn* or *norm* or *flush* or *line* or *format* or *temp* or *press*
|
||||
* keyword = *lost* or *lost/bond* or *warn* or *norm* or *flush* or *line* or *colname* or *format* or *temp* or *press*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -153,6 +153,8 @@ containing the timestep and CPU time ("multi"), or in a YAML format
|
||||
block ("yaml"). This modify option overrides the *one*, *multi*, or
|
||||
*yaml* thermo_style settings.
|
||||
|
||||
.. versionadded:: 4May2022
|
||||
|
||||
The *colname* keyword can be used to change the default header keyword
|
||||
for a column or field of thermodynamic output. The setting for *ID
|
||||
string* replaces the default text with the provided string. *ID* can be
|
||||
|
||||
@ -66,7 +66,7 @@ Syntax
|
||||
bound(group,dir,region), gyration(group,region), ke(group,reigon),
|
||||
angmom(group,dim,region), torque(group,dim,region),
|
||||
inertia(group,dimdim,region), omega(group,dim,region)
|
||||
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), extract_setting(name)
|
||||
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name)
|
||||
feature functions = is_active(category,feature), is_available(category,feature), is_defined(category,id)
|
||||
atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i]
|
||||
atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q
|
||||
@ -939,6 +939,20 @@ The is_file(name) function is a test whether *name* is a (readable) file
|
||||
and returns 1 in this case, otherwise it returns 0. For that *name*
|
||||
is taken as a literal string and must not have any blanks in it.
|
||||
|
||||
The is_os(name) function is a test whether *name* is part of the OS
|
||||
information that LAMMPS collects and provides in the
|
||||
:cpp:func:`platform::os_info() <LAMMPS_NS::platform::os_info>` function.
|
||||
The argument *name* is interpreted as a regular expression as documented
|
||||
for the :cpp:func:`utils::strmatch() <LAMMPS_NS::utils::strmatch>`
|
||||
function. This allows to adapt LAMMPS inputs to the OS it runs on:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
if $(is_os(^Windows)) then &
|
||||
"shell copy ${input_dir}\some_file.txt ." &
|
||||
else &
|
||||
"shell cp ${input_dir}/some_file.txt ."
|
||||
|
||||
The extract_setting(name) function enables access to basic settings for
|
||||
the LAMMPS executable and the running simulation via calling the
|
||||
:cpp:func:`lammps_extract_setting` library function. For example, the
|
||||
@ -1002,7 +1016,7 @@ step
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
timestep $(2.0*(1.0+2.0*is_active(pair,respa))
|
||||
timestep $(2.0*(1.0+2.0*is_active(pair,respa)))
|
||||
if $(is_active(pair,respa)) then "run_style respa 4 3 2 2 improper 1 inner 2 5.5 7.0 outer 3 kspace 4" else "run_style respa 3 3 2 improper 1 pair 2 kspace 3"
|
||||
|
||||
The *is_available(category,name)* function allows to query whether
|
||||
|
||||
@ -39,6 +39,18 @@ hr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#userdoc.toctree-wrapper.compound p {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#progdoc.toctree-wrapper.compound p {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#reference.toctree-wrapper.compound p {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.tabular.menu .item {
|
||||
padding-right: 1em;
|
||||
padding-left: 1em;
|
||||
|
||||
1
doc/utils/sphinx-config/_themes/lammps_theme/.gitignore
vendored
Normal file
1
doc/utils/sphinx-config/_themes/lammps_theme/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
!*.html
|
||||
@ -4,17 +4,8 @@
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div id="search-results">
|
||||
<script>
|
||||
(function() {
|
||||
var cx = '012685039201307511604:um7if1hinba';
|
||||
var gcse = document.createElement('script');
|
||||
gcse.type = 'text/javascript';
|
||||
gcse.async = true;
|
||||
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(gcse, s);
|
||||
})();
|
||||
</script>
|
||||
<gcse:searchresults-only></gcse:searchresults-only>
|
||||
<script async src="https://cse.google.com/cse.js?cx=000956471495417073164:5ggs_m6ymw0">
|
||||
</script>
|
||||
<div class="gcse-search"></div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@ -1346,6 +1346,7 @@ hiID
|
||||
Hijazi
|
||||
Hilger
|
||||
Hinestrosa
|
||||
hipCUB
|
||||
hipFFT
|
||||
histo
|
||||
histogrammed
|
||||
|
||||
@ -1105,7 +1105,7 @@ contains !! Wrapper functions local to this module {{{1
|
||||
C_xy = xy
|
||||
C_xz = xz
|
||||
C_yz = yz
|
||||
call lammps_actual_reset_box (ptr, C_boxlo, C_boxhi, C_xy, C_xz, C_yz)
|
||||
call lammps_actual_reset_box (ptr, C_boxlo, C_boxhi, C_xy, C_yz, C_xz)
|
||||
end subroutine lammps_reset_box
|
||||
|
||||
! lammps_gather_atoms {{{2
|
||||
|
||||
@ -40,7 +40,7 @@ the dynamically-linkable library (liblammps_fortran.so).
|
||||
(2) Copy said library to your Fortran program's source directory or replace
|
||||
${LAMMPS_LIB} with its full path in the instructions below.
|
||||
(3) Compile (but don't link!) LAMMPS.F90. Example:
|
||||
mpif90 -c LAMMPS.f90
|
||||
mpifort -c LAMMPS.f90
|
||||
OR
|
||||
gfortran -c LAMMPS.F90
|
||||
NOTE: you may get a warning such as,
|
||||
@ -72,8 +72,8 @@ the dynamically-linkable library (liblammps_fortran.so).
|
||||
were part of the usual LAMMPS library interface (if you have the module
|
||||
file visible to the compiler, that is).
|
||||
(6) Compile (but don't link) your Fortran program. Example:
|
||||
mpif90 -c myfreeformatfile.f90
|
||||
mpif90 -c myfixedformatfile.f
|
||||
mpifort -c myfreeformatfile.f90
|
||||
mpifort -c myfixedformatfile.f
|
||||
OR
|
||||
gfortran -c myfreeformatfile.f90
|
||||
gfortran -c myfixedformatfile.f
|
||||
@ -83,12 +83,12 @@ the dynamically-linkable library (liblammps_fortran.so).
|
||||
IMPORTANT: If the Fortran module from part (3) is not in the current
|
||||
directory or in one searched by the compiler for module files, you will
|
||||
need to include that location via the -I flag to the compiler, like so:
|
||||
mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
|
||||
mpifort -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
|
||||
|
||||
(7) Link everything together, including any libraries needed by LAMMPS (such
|
||||
as the C++ standard library, the C math library, the JPEG library, fftw,
|
||||
etc.) For example,
|
||||
mpif90 LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \
|
||||
mpifort LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \
|
||||
${LAMMPS_LIB} -lmpi_cxx -lstdc++ -lm
|
||||
OR
|
||||
gfortran LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \
|
||||
@ -105,17 +105,17 @@ You should now have a working executable.
|
||||
(1) Compile LAMMPS as a dynamic library
|
||||
(make makeshlib && make -f Makefile.shlib [targetname]).
|
||||
(2) Compile, but don't link, LAMMPS.F90 using the -fPIC flag, such as
|
||||
mpif90 -fPIC -c LAMMPS.f90
|
||||
mpifort -fPIC -c LAMMPS.f90
|
||||
(3) Compile, but don't link, LAMMPS-wrapper.cpp in the same manner, e.g.
|
||||
mpicxx -fPIC -c LAMMPS-wrapper.cpp
|
||||
(4) Make the dynamic library, like so:
|
||||
mpif90 -fPIC -shared -o liblammps_fortran.so LAMMPS.o LAMMPS-wrapper.o
|
||||
mpifort -fPIC -shared -o liblammps_fortran.so LAMMPS.o LAMMPS-wrapper.o
|
||||
(5) Compile your program, such as,
|
||||
mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
|
||||
mpifort -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90
|
||||
where ${LAMMPS_SRC}/examples/COUPLE/fortran2 contains the .mod file from
|
||||
step (3)
|
||||
(6) Link everything together, such as
|
||||
mpif90 ${my_object_files} -L${LAMMPS_SRC} \
|
||||
mpifort ${my_object_files} -L${LAMMPS_SRC} \
|
||||
-L${LAMMPS_SRC}/examples/COUPLE/fortran2 -llammps_fortran \
|
||||
-llammps_openmpi -lmpi_cxx -lstdc++ -lm
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ spkpath.h contains path to SPPARKS home directory
|
||||
After editing the Makefile, lmppath.h, and spkpath.h to make them
|
||||
suitable for your box, type:
|
||||
|
||||
g++ -f Makefile.g++
|
||||
make -f Makefile.g++
|
||||
|
||||
and you should get the lmpspk executable.
|
||||
|
||||
|
||||
@ -1,66 +1,66 @@
|
||||
# 2d NEB surface simulation, hop from surface to become adatom
|
||||
|
||||
dimension 2
|
||||
boundary p s p
|
||||
dimension 2
|
||||
boundary p s p
|
||||
|
||||
atom_style atomic
|
||||
neighbor 0.3 bin
|
||||
neigh_modify delay 5
|
||||
atom_modify map array sort 0 0.0
|
||||
atom_style atomic
|
||||
neighbor 0.3 bin
|
||||
neigh_modify delay 5
|
||||
atom_modify map array sort 0 0.0
|
||||
|
||||
variable u uloop 20
|
||||
variable u uloop 20
|
||||
|
||||
# create geometry with flat surface
|
||||
|
||||
lattice hex 0.9
|
||||
region box block 0 20 0 10 -0.25 0.25
|
||||
lattice hex 0.9
|
||||
region box block 0 20 0 10 -0.25 0.25
|
||||
|
||||
#create_box 3 box
|
||||
#create_atoms 1 box
|
||||
#mass * 1.0
|
||||
#create_box 3 box
|
||||
#create_atoms 1 box
|
||||
#mass * 1.0
|
||||
#write_data initial.hop1
|
||||
|
||||
read_data initial.hop1
|
||||
|
||||
# LJ potentials
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff * * 1.0 1.0 2.5
|
||||
pair_modify shift yes
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff * * 1.0 1.0 2.5
|
||||
pair_modify shift yes
|
||||
|
||||
# initial minimization to relax surface
|
||||
|
||||
minimize 1.0e-6 1.0e-4 1000 10000
|
||||
reset_timestep 0
|
||||
minimize 1.0e-6 1.0e-4 1000 10000
|
||||
reset_timestep 0
|
||||
|
||||
# define groups
|
||||
|
||||
region 1 block INF INF INF 1.25 INF INF
|
||||
group lower region 1
|
||||
group mobile subtract all lower
|
||||
set group lower type 2
|
||||
region 1 block INF INF INF 1.25 INF INF
|
||||
group lower region 1
|
||||
group mobile subtract all lower
|
||||
set group lower type 2
|
||||
|
||||
timestep 0.05
|
||||
timestep 0.05
|
||||
|
||||
# group of NEB atoms - either block or single atom ID 412
|
||||
|
||||
region surround block 10 18 17 20 0 0 units box
|
||||
group nebatoms region surround
|
||||
#group nebatoms id 412
|
||||
set group nebatoms type 3
|
||||
group nonneb subtract all nebatoms
|
||||
region surround block 10 18 17 20 0 0 units box
|
||||
group nebatoms region surround
|
||||
#group nebatoms id 412
|
||||
set group nebatoms type 3
|
||||
group nonneb subtract all nebatoms
|
||||
|
||||
fix 1 lower setforce 0.0 0.0 0.0
|
||||
fix 2 nebatoms neb 1.0 parallel ideal
|
||||
fix 3 all enforce2d
|
||||
fix 1 lower setforce 0.0 0.0 0.0
|
||||
fix 2 nebatoms neb 1.0 parallel ideal
|
||||
fix 3 all enforce2d
|
||||
|
||||
thermo 100
|
||||
thermo 100
|
||||
|
||||
#dump 1 nebatoms atom 10 dump.neb.$u
|
||||
#dump 2 nonneb atom 10 dump.nonneb.$u
|
||||
#dump 1 nebatoms atom 10 dump.neb.$u
|
||||
#dump 2 nonneb atom 10 dump.nonneb.$u
|
||||
|
||||
# run NEB for 2000 steps or to force tolerance
|
||||
|
||||
min_style quickmin
|
||||
min_style quickmin
|
||||
|
||||
neb 0.0 0.1 1000 1000 100 final final.hop1
|
||||
neb 0.0 0.1 1000 1000 100 final final.hop1
|
||||
|
||||
@ -1,56 +1,56 @@
|
||||
# 2d NEB surface simulation, hop from surface to become adatom
|
||||
|
||||
dimension 2
|
||||
boundary p s p
|
||||
dimension 2
|
||||
boundary p s p
|
||||
|
||||
atom_style atomic
|
||||
neighbor 0.3 bin
|
||||
neigh_modify delay 5
|
||||
atom_modify map array sort 0 0.0
|
||||
atom_style atomic
|
||||
neighbor 0.3 bin
|
||||
neigh_modify delay 5
|
||||
atom_modify map array sort 0 0.0
|
||||
|
||||
variable u uloop 20
|
||||
variable u uloop 20
|
||||
|
||||
# create geometry with flat surface
|
||||
|
||||
lattice hex 0.9
|
||||
region box block 0 20 0 10 -0.25 0.25
|
||||
lattice hex 0.9
|
||||
region box block 0 20 0 10 -0.25 0.25
|
||||
|
||||
read_data initial.hop1.end
|
||||
|
||||
# LJ potentials
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff * * 1.0 1.0 2.5
|
||||
pair_modify shift yes
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff * * 1.0 1.0 2.5
|
||||
pair_modify shift yes
|
||||
|
||||
# define groups
|
||||
|
||||
region 1 block INF INF INF 1.25 INF INF
|
||||
group lower region 1
|
||||
group mobile subtract all lower
|
||||
set group lower type 2
|
||||
region 1 block INF INF INF 1.25 INF INF
|
||||
group lower region 1
|
||||
group mobile subtract all lower
|
||||
set group lower type 2
|
||||
|
||||
timestep 0.05
|
||||
timestep 0.05
|
||||
|
||||
# group of NEB atoms - either block or single atom ID 412
|
||||
|
||||
region surround block 10 18 17 20 0 0 units box
|
||||
group nebatoms region surround
|
||||
#group nebatoms id 412
|
||||
set group nebatoms type 3
|
||||
group nonneb subtract all nebatoms
|
||||
region surround block 10 18 17 20 0 0 units box
|
||||
group nebatoms region surround
|
||||
#group nebatoms id 412
|
||||
set group nebatoms type 3
|
||||
group nonneb subtract all nebatoms
|
||||
|
||||
fix 1 lower setforce 0.0 0.0 0.0
|
||||
fix 2 nebatoms neb 1.0 parallel ideal end first 1.0
|
||||
fix 3 all enforce2d
|
||||
fix 1 lower setforce 0.0 0.0 0.0
|
||||
fix 2 nebatoms neb 1.0 parallel ideal end first 1.0
|
||||
fix 3 all enforce2d
|
||||
|
||||
thermo 100
|
||||
thermo 100
|
||||
|
||||
#dump 1 nebatoms atom 10 dump.neb.$u
|
||||
#dump 2 nonneb atom 10 dump.nonneb.$u
|
||||
#dump 1 nebatoms atom 10 dump.neb.$u
|
||||
#dump 2 nonneb atom 10 dump.nonneb.$u
|
||||
|
||||
# run NEB for 2000 steps or to force tolerance
|
||||
|
||||
min_style quickmin
|
||||
min_style quickmin
|
||||
|
||||
neb 0.0 0.1 1000 1000 100 final final.hop1
|
||||
neb 0.0 0.1 1000 1000 100 final final.hop1
|
||||
|
||||
@ -1,68 +1,68 @@
|
||||
# 2d NEB surface simulation, hop of adatom on surface
|
||||
|
||||
dimension 2
|
||||
boundary p s p
|
||||
dimension 2
|
||||
boundary p s p
|
||||
|
||||
atom_style atomic
|
||||
neighbor 0.3 bin
|
||||
neigh_modify delay 5
|
||||
atom_modify map array sort 0 0.0
|
||||
atom_style atomic
|
||||
neighbor 0.3 bin
|
||||
neigh_modify delay 5
|
||||
atom_modify map array sort 0 0.0
|
||||
|
||||
variable u uloop 20
|
||||
variable u uloop 20
|
||||
|
||||
# create geometry with adatom
|
||||
|
||||
lattice hex 0.9
|
||||
region box block 0 20 0 11 -0.25 0.25
|
||||
region box1 block 0 20 0 10 -0.25 0.25
|
||||
lattice hex 0.9
|
||||
region box block 0 20 0 11 -0.25 0.25
|
||||
region box1 block 0 20 0 10 -0.25 0.25
|
||||
|
||||
#create_box 3 box
|
||||
#create_atoms 1 region box1
|
||||
#create_atoms 1 single 11.5 10.5 0
|
||||
#mass * 1.0
|
||||
#create_box 3 box
|
||||
#create_atoms 1 region box1
|
||||
#create_atoms 1 single 11.5 10.5 0
|
||||
#mass * 1.0
|
||||
#write_data initial.hop2
|
||||
|
||||
read_data initial.hop2
|
||||
|
||||
# LJ potentials
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff * * 1.0 1.0 2.5
|
||||
pair_modify shift yes
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff * * 1.0 1.0 2.5
|
||||
pair_modify shift yes
|
||||
|
||||
# initial minimization to relax surface
|
||||
|
||||
minimize 1.0e-6 1.0e-4 1000 10000
|
||||
reset_timestep 0
|
||||
minimize 1.0e-6 1.0e-4 1000 10000
|
||||
reset_timestep 0
|
||||
|
||||
# define groups
|
||||
|
||||
region 1 block INF INF INF 1.25 INF INF
|
||||
group lower region 1
|
||||
group mobile subtract all lower
|
||||
set group lower type 2
|
||||
region 1 block INF INF INF 1.25 INF INF
|
||||
group lower region 1
|
||||
group mobile subtract all lower
|
||||
set group lower type 2
|
||||
|
||||
timestep 0.05
|
||||
timestep 0.05
|
||||
|
||||
# group of NEB atoms - either block or single atom ID 421
|
||||
|
||||
region surround block 10 18 17 21 0 0 units box
|
||||
group nebatoms region surround
|
||||
#group nebatoms id 421
|
||||
set group nebatoms type 3
|
||||
group nonneb subtract all nebatoms
|
||||
region surround block 10 18 17 21 0 0 units box
|
||||
group nebatoms region surround
|
||||
#group nebatoms id 421
|
||||
set group nebatoms type 3
|
||||
group nonneb subtract all nebatoms
|
||||
|
||||
fix 1 lower setforce 0.0 0.0 0.0
|
||||
fix 2 nebatoms neb 1.0
|
||||
fix 3 all enforce2d
|
||||
fix 1 lower setforce 0.0 0.0 0.0
|
||||
fix 2 nebatoms neb 1.0
|
||||
fix 3 all enforce2d
|
||||
|
||||
thermo 100
|
||||
thermo 100
|
||||
|
||||
#dump 1 nebatoms atom 10 dump.neb.$u
|
||||
#dump 2 nonneb atom 10 dump.nonneb.$u
|
||||
#dump 1 nebatoms atom 10 dump.neb.$u
|
||||
#dump 2 nonneb atom 10 dump.nonneb.$u
|
||||
|
||||
# run NEB for 2000 steps or to force tolerance
|
||||
|
||||
min_style fire
|
||||
min_style fire
|
||||
|
||||
neb 0.0 0.05 1000 1000 100 final final.hop2
|
||||
neb 0.0 0.05 1000 1000 100 final final.hop2
|
||||
|
||||
@ -5,7 +5,7 @@ units metal
|
||||
atom_style atomic
|
||||
atom_modify map array
|
||||
boundary p p p
|
||||
atom_modify sort 0 0.0
|
||||
atom_modify sort 0 0.0
|
||||
|
||||
# coordination number cutoff
|
||||
|
||||
@ -45,7 +45,7 @@ group Si type 1
|
||||
group del id 300
|
||||
delete_atoms group del compress no
|
||||
group vacneigh id 174 175 301 304 306 331 337
|
||||
|
||||
|
||||
# choose potential
|
||||
|
||||
pair_style sw
|
||||
@ -53,26 +53,26 @@ pair_coeff * * Si.sw Si
|
||||
|
||||
# set up neb run
|
||||
|
||||
variable u uloop 20
|
||||
variable u uloop 20
|
||||
|
||||
# initial minimization to relax vacancy
|
||||
|
||||
displace_atoms all random 0.1 0.1 0.1 123456
|
||||
minimize 1.0e-6 1.0e-4 1000 10000
|
||||
|
||||
reset_timestep 0
|
||||
|
||||
# only output atoms near vacancy
|
||||
|
||||
#dump events vacneigh custom 1000 dump.neb.sivac.$u id type x y z
|
||||
|
||||
# initial minimization to relax vacancy
|
||||
fix 1 all neb 1.0
|
||||
|
||||
displace_atoms all random 0.1 0.1 0.1 123456
|
||||
minimize 1.0e-6 1.0e-4 1000 10000
|
||||
|
||||
reset_timestep 0
|
||||
|
||||
fix 1 all neb 1.0
|
||||
|
||||
thermo 100
|
||||
thermo 100
|
||||
|
||||
# run NEB for 2000 steps or to force tolerance
|
||||
|
||||
timestep 0.01
|
||||
min_style quickmin
|
||||
min_style quickmin
|
||||
|
||||
neb 0.0 0.01 100 100 10 final final.sivac
|
||||
neb 0.0 0.01 100 100 10 final final.sivac
|
||||
|
||||
@ -54,20 +54,18 @@ MODULE LIBLAMMPS
|
||||
|
||||
! interface definitions for calling functions in library.cpp
|
||||
INTERFACE
|
||||
FUNCTION lammps_open(argc,argv,comm) &
|
||||
BIND(C, name='lammps_open_fortran')
|
||||
FUNCTION lammps_open(argc, argv, comm) BIND(C, name='lammps_open_fortran')
|
||||
IMPORT :: c_ptr, c_int
|
||||
INTEGER(c_int), VALUE, INTENT(in) :: argc, comm
|
||||
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv
|
||||
TYPE(c_ptr) :: lammps_open
|
||||
END FUNCTION lammps_open
|
||||
|
||||
FUNCTION lammps_open_no_mpi(argc,argv,handle) &
|
||||
BIND(C, name='lammps_open_no_mpi')
|
||||
FUNCTION lammps_open_no_mpi(argc, argv, handle) BIND(C, name='lammps_open_no_mpi')
|
||||
IMPORT :: c_ptr, c_int
|
||||
INTEGER(c_int), VALUE, INTENT(in) :: argc
|
||||
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: argv
|
||||
TYPE(c_ptr), INTENT(out) :: handle
|
||||
TYPE(c_ptr), VALUE, INTENT(in) :: handle
|
||||
TYPE(c_ptr) :: lammps_open_no_mpi
|
||||
END FUNCTION lammps_open_no_mpi
|
||||
|
||||
@ -85,28 +83,26 @@ MODULE LIBLAMMPS
|
||||
SUBROUTINE lammps_kokkos_finalize() BIND(C, name='lammps_kokkos_finalize')
|
||||
END SUBROUTINE lammps_kokkos_finalize
|
||||
|
||||
SUBROUTINE lammps_file(handle,filename) BIND(C, name='lammps_file')
|
||||
SUBROUTINE lammps_file(handle, filename) BIND(C, name='lammps_file')
|
||||
IMPORT :: c_ptr
|
||||
TYPE(c_ptr), VALUE :: handle
|
||||
TYPE(c_ptr), VALUE :: filename
|
||||
END SUBROUTINE lammps_file
|
||||
|
||||
SUBROUTINE lammps_command(handle,cmd) BIND(C, name='lammps_command')
|
||||
SUBROUTINE lammps_command(handle, cmd) BIND(C, name='lammps_command')
|
||||
IMPORT :: c_ptr
|
||||
TYPE(c_ptr), VALUE :: handle
|
||||
TYPE(c_ptr), VALUE :: cmd
|
||||
END SUBROUTINE lammps_command
|
||||
|
||||
SUBROUTINE lammps_commands_list(handle,ncmd,cmds) &
|
||||
BIND(C, name='lammps_commands_list')
|
||||
SUBROUTINE lammps_commands_list(handle, ncmd, cmds) BIND(C, name='lammps_commands_list')
|
||||
IMPORT :: c_ptr, c_int
|
||||
TYPE(c_ptr), VALUE :: handle
|
||||
INTEGER(c_int), VALUE, INTENT(in) :: ncmd
|
||||
TYPE(c_ptr), DIMENSION(*), INTENT(in) :: cmds
|
||||
END SUBROUTINE lammps_commands_list
|
||||
|
||||
SUBROUTINE lammps_commands_string(handle,str) &
|
||||
BIND(C, name='lammps_commands_string')
|
||||
SUBROUTINE lammps_commands_string(handle, str) BIND(C, name='lammps_commands_string')
|
||||
IMPORT :: c_ptr
|
||||
TYPE(c_ptr), VALUE :: handle
|
||||
TYPE(c_ptr), VALUE :: str
|
||||
@ -137,24 +133,22 @@ MODULE LIBLAMMPS
|
||||
END INTERFACE
|
||||
|
||||
CONTAINS
|
||||
|
||||
! Fortran wrappers and helper functions.
|
||||
|
||||
! Constructor for the LAMMPS class.
|
||||
! Combined wrapper around lammps_open_fortran() and lammps_open_no_mpi()
|
||||
TYPE(lammps) FUNCTION lmp_open(args,comm)
|
||||
TYPE(lammps) FUNCTION lmp_open(args, comm)
|
||||
IMPLICIT NONE
|
||||
INTEGER,INTENT(in), OPTIONAL :: comm
|
||||
INTEGER, INTENT(in), OPTIONAL :: comm
|
||||
CHARACTER(len=*), INTENT(in), OPTIONAL :: args(:)
|
||||
TYPE(c_ptr), ALLOCATABLE :: argv(:)
|
||||
TYPE(c_ptr) :: dummy=c_null_ptr
|
||||
INTEGER :: i,argc
|
||||
INTEGER(c_int) :: i, c_comm, argc
|
||||
|
||||
IF (PRESENT(args)) THEN
|
||||
! convert argument list to c style
|
||||
! convert fortran argument list to c style
|
||||
argc = SIZE(args)
|
||||
ALLOCATE(argv(argc))
|
||||
DO i=1,argc
|
||||
DO i=1, argc
|
||||
argv(i) = f2c_string(args(i))
|
||||
END DO
|
||||
ELSE
|
||||
@ -164,23 +158,24 @@ CONTAINS
|
||||
ENDIF
|
||||
|
||||
IF (PRESENT(comm)) THEN
|
||||
lmp_open%handle = lammps_open(argc,argv,comm)
|
||||
c_comm = comm
|
||||
lmp_open%handle = lammps_open(argc, argv, c_comm)
|
||||
ELSE
|
||||
lmp_open%handle = lammps_open_no_mpi(argc,argv,dummy)
|
||||
lmp_open%handle = lammps_open_no_mpi(argc, argv, c_null_ptr)
|
||||
END IF
|
||||
|
||||
! Clean up allocated memory
|
||||
DO i=1,argc
|
||||
DO i=1, argc
|
||||
CALL lammps_free(argv(i))
|
||||
END DO
|
||||
DEALLOCATE(argv)
|
||||
END FUNCTION lmp_open
|
||||
|
||||
! Combined Fortran wrapper around lammps_close() and lammps_mpi_finalize()
|
||||
SUBROUTINE lmp_close(self,finalize)
|
||||
SUBROUTINE lmp_close(self, finalize)
|
||||
IMPLICIT NONE
|
||||
CLASS(lammps) :: self
|
||||
LOGICAL,INTENT(in),OPTIONAL :: finalize
|
||||
LOGICAL, INTENT(in), OPTIONAL :: finalize
|
||||
|
||||
CALL lammps_close(self%handle)
|
||||
|
||||
@ -206,68 +201,69 @@ CONTAINS
|
||||
lmp_get_natoms = lammps_get_natoms(self%handle)
|
||||
END FUNCTION lmp_get_natoms
|
||||
|
||||
SUBROUTINE lmp_file(self,filename)
|
||||
SUBROUTINE lmp_file(self, filename)
|
||||
IMPLICIT NONE
|
||||
CLASS(lammps) :: self
|
||||
CHARACTER(len=*) :: filename
|
||||
TYPE(c_ptr) :: str
|
||||
|
||||
str = f2c_string(filename)
|
||||
CALL lammps_file(self%handle,str)
|
||||
CALL lammps_file(self%handle, str)
|
||||
CALL lammps_free(str)
|
||||
END SUBROUTINE lmp_file
|
||||
|
||||
! equivalent function to lammps_command()
|
||||
SUBROUTINE lmp_command(self,cmd)
|
||||
SUBROUTINE lmp_command(self, cmd)
|
||||
IMPLICIT NONE
|
||||
CLASS(lammps) :: self
|
||||
CHARACTER(len=*) :: cmd
|
||||
TYPE(c_ptr) :: str
|
||||
|
||||
str = f2c_string(cmd)
|
||||
CALL lammps_command(self%handle,str)
|
||||
CALL lammps_command(self%handle, str)
|
||||
CALL lammps_free(str)
|
||||
END SUBROUTINE lmp_command
|
||||
|
||||
! equivalent function to lammps_commands_list()
|
||||
SUBROUTINE lmp_commands_list(self,cmds)
|
||||
SUBROUTINE lmp_commands_list(self, cmds)
|
||||
IMPLICIT NONE
|
||||
CLASS(lammps) :: self
|
||||
CHARACTER(len=*), INTENT(in), OPTIONAL :: cmds(:)
|
||||
TYPE(c_ptr), ALLOCATABLE :: cmdv(:)
|
||||
INTEGER :: i,ncmd
|
||||
INTEGER :: i, ncmd
|
||||
|
||||
! convert command list to c style
|
||||
ncmd = SIZE(cmds)
|
||||
ALLOCATE(cmdv(ncmd))
|
||||
DO i=1,ncmd
|
||||
DO i=1, ncmd
|
||||
cmdv(i) = f2c_string(cmds(i))
|
||||
END DO
|
||||
|
||||
CALL lammps_commands_list(self%handle,ncmd,cmdv)
|
||||
CALL lammps_commands_list(self%handle, ncmd, cmdv)
|
||||
|
||||
! Clean up allocated memory
|
||||
DO i=1,ncmd
|
||||
DO i=1, ncmd
|
||||
CALL lammps_free(cmdv(i))
|
||||
END DO
|
||||
DEALLOCATE(cmdv)
|
||||
END SUBROUTINE lmp_commands_list
|
||||
|
||||
! equivalent function to lammps_commands_string()
|
||||
SUBROUTINE lmp_commands_string(self,str)
|
||||
SUBROUTINE lmp_commands_string(self, str)
|
||||
IMPLICIT NONE
|
||||
CLASS(lammps) :: self
|
||||
CHARACTER(len=*) :: str
|
||||
TYPE(c_ptr) :: tmp
|
||||
|
||||
tmp = f2c_string(str)
|
||||
CALL lammps_commands_string(self%handle,tmp)
|
||||
CALL lammps_commands_string(self%handle, tmp)
|
||||
CALL lammps_free(tmp)
|
||||
END SUBROUTINE lmp_commands_string
|
||||
|
||||
! ----------------------------------------------------------------------
|
||||
! local helper functions
|
||||
! copy fortran string to zero terminated c string
|
||||
! ----------------------------------------------------------------------
|
||||
FUNCTION f2c_string(f_string) RESULT(ptr)
|
||||
CHARACTER (len=*), INTENT(in) :: f_string
|
||||
CHARACTER (len=1, kind=c_char), POINTER :: c_string(:)
|
||||
@ -276,8 +272,8 @@ CONTAINS
|
||||
|
||||
n = LEN_TRIM(f_string)
|
||||
ptr = lammps_malloc(n+1)
|
||||
CALL C_F_POINTER(ptr,c_string,[1])
|
||||
DO i=1,n
|
||||
CALL C_F_POINTER(ptr, c_string, [1])
|
||||
DO i=1, n
|
||||
c_string(i) = f_string(i:i)
|
||||
END DO
|
||||
c_string(n+1) = c_null_char
|
||||
|
||||
@ -787,8 +787,7 @@ namespace ATC {
|
||||
xtArgs[3] = 1.; xtArgs[4] = 1.; xtArgs[5] = 1.;
|
||||
xtArgs[6] = coulombConstant*chargeDensity;
|
||||
xtArgs[7] = -1.;
|
||||
string radialPower = "radial_power";
|
||||
f = XT_Function_Mgr::instance()->function(radialPower,8,xtArgs);
|
||||
f = XT_Function_Mgr::instance()->function("radial_power",8,xtArgs);
|
||||
|
||||
|
||||
for (iset = faceset->begin(); iset != faceset->end(); iset++) {
|
||||
|
||||
@ -186,7 +186,7 @@ static const double localCoordinatesTolerance = 1.e-09;
|
||||
double c[3]={0,0,0};
|
||||
c[0] = y0*X[0] - y0*X[1] - y0*X[2] + y0*X[3] - x0*Y[0] + (X[1]*Y[0])*0.5 + (X[2]*Y[0])*0.5 + x0*Y[1] - (X[0]*Y[1])*0.5 - (X[3]*Y[1])*0.5 + x0*Y[2] - (X[0]*Y[2])*0.5 - (X[3]*Y[2])*0.5 - x0*Y[3] + (X[1]*Y[3])*0.5 + (X[2]*Y[3])*0.5;
|
||||
c[1] = -(y0*X[0]) + y0*X[1] - y0*X[2] + y0*X[3] + x0*Y[0] - X[1]*Y[0] - x0*Y[1] + X[0]*Y[1] + x0*Y[2] - X[3]*Y[2] - x0*Y[3] + X[2]*Y[3];
|
||||
c[1] = (X[1]*Y[0])*0.5 - (X[2]*Y[0])*0.5 - (X[0]*Y[1])*0.5 + (X[3]*Y[1])*0.5 + (X[0]*Y[2])*0.5 - (X[3]*Y[2])*0.5 - (X[1]*Y[3])*0.5 + (X[2]*Y[3])*0.5;
|
||||
c[2] = (X[1]*Y[0])*0.5 - (X[2]*Y[0])*0.5 - (X[0]*Y[1])*0.5 + (X[3]*Y[1])*0.5 + (X[0]*Y[2])*0.5 - (X[3]*Y[2])*0.5 - (X[1]*Y[3])*0.5 + (X[2]*Y[3])*0.5;
|
||||
double xi2[2]={0,0};
|
||||
int nroots = solve_quadratic(c,xi2);
|
||||
if (nroots == 0) throw ATC_Error("no real roots in 2D analytic projection guess");
|
||||
|
||||
@ -48,7 +48,7 @@ namespace ATC {
|
||||
}
|
||||
|
||||
// add user function into the if statement and assign returnFunction to it
|
||||
UXT_Function* UXT_Function_Mgr::function(string & type, int nargs, double * args)
|
||||
UXT_Function* UXT_Function_Mgr::function(const string & type, int nargs, double * args)
|
||||
{
|
||||
UXT_Function * returnFunction;
|
||||
if (type=="linear") {
|
||||
@ -167,7 +167,7 @@ XT_Function_Mgr * XT_Function_Mgr::myInstance_ = nullptr;
|
||||
}
|
||||
|
||||
// add user function into the if statement and assign returnFunction to it
|
||||
XT_Function* XT_Function_Mgr::function(string & type, int nargs, double * args)
|
||||
XT_Function* XT_Function_Mgr::function(const string & type, int nargs, double * args)
|
||||
{
|
||||
XT_Function * returnFunction;
|
||||
if (type=="constant") {
|
||||
|
||||
@ -110,7 +110,7 @@ namespace ATC {
|
||||
/** Static instance of this class */
|
||||
static UXT_Function_Mgr * instance();
|
||||
|
||||
UXT_Function* function(std::string & type, int nargs, double * arg);
|
||||
UXT_Function* function(const std::string & type, int nargs, double * arg);
|
||||
UXT_Function* function(char ** arg, int nargs);
|
||||
UXT_Function* linear_function(double c0, double c1);
|
||||
UXT_Function* copy_UXT_function(UXT_Function* other);
|
||||
@ -181,7 +181,7 @@ namespace ATC {
|
||||
/** Static instance of this class */
|
||||
static XT_Function_Mgr * instance();
|
||||
|
||||
XT_Function* function(std::string & type, int nargs, double * arg);
|
||||
XT_Function* function(const std::string & type, int nargs, double * arg);
|
||||
XT_Function* function(char ** arg, int nargs);
|
||||
XT_Function* constant_function(double c);
|
||||
XT_Function* copy_XT_function(XT_Function* other);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Pizza.py toolkit, https://lammps.github.io/pizza
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Pizza.py toolkit, https://lammps.github.io/pizza
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Pizza.py toolkit, https://lammps.github.io/pizza
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Pizza.py toolkit, https://lammps.github.io/pizza
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Pizza.py toolkit, https://lammps.github.io/pizza
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Pizza.py toolkit, https://lammps.github.io/pizza
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
|
||||
@ -4,17 +4,29 @@
|
||||
# try to improperly start up a new interpreter.
|
||||
import sysconfig
|
||||
import ctypes
|
||||
library = sysconfig.get_config_vars('INSTSONAME')[0]
|
||||
import platform
|
||||
|
||||
py_ver = sysconfig.get_config_vars('VERSION')[0]
|
||||
OS_name = platform.system()
|
||||
|
||||
if OS_name == "Linux":
|
||||
SHLIB_SUFFIX = '.so'
|
||||
library = 'libpython' + py_ver + SHLIB_SUFFIX
|
||||
elif OS_name == "Darwin":
|
||||
SHLIB_SUFFIX = '.dylib'
|
||||
library = 'libpython' + py_ver + SHLIB_SUFFIX
|
||||
elif OS_name == "Windows":
|
||||
SHLIB_SUFFIX = '.dll'
|
||||
library = 'python' + py_ver + SHLIB_SUFFIX
|
||||
|
||||
try:
|
||||
pylib = ctypes.CDLL(library)
|
||||
except OSError as e:
|
||||
if pylib.endswith(".a"):
|
||||
pylib.strip(".a") + ".so"
|
||||
pylib = ctypes.CDLL(library)
|
||||
else:
|
||||
raise e
|
||||
except Exception as e:
|
||||
raise OSError("Unable to locate python shared library") from e
|
||||
|
||||
if not pylib.Py_IsInitialized():
|
||||
raise RuntimeError("This interpreter is not compatible with python-based mliap for LAMMPS.")
|
||||
|
||||
del sysconfig, ctypes, library, pylib
|
||||
|
||||
from .loader import load_model, load_unified, activate_mliappy
|
||||
|
||||
@ -16,12 +16,17 @@
|
||||
|
||||
#include "atom.h"
|
||||
#include "error.h"
|
||||
#include "math_special.h"
|
||||
#include "neigh_list.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
using MathSpecial::square;
|
||||
using MathSpecial::cube;
|
||||
using MathSpecial::powint;
|
||||
|
||||
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
@ -114,14 +119,14 @@ void PairAmoeba::hal()
|
||||
}
|
||||
eps *= factor_hal;
|
||||
|
||||
rv7 = pow(rv,7.0);
|
||||
rik6 = pow(rik2,3.0);
|
||||
rv7 = powint(rv,7);
|
||||
rik6 = cube(rik2);
|
||||
rik7 = rik6 * rik;
|
||||
rho = rik7 + ghal*rv7;
|
||||
tau = (dhal+1.0) / (rik + dhal*rv);
|
||||
tau7 = pow(tau,7.0);
|
||||
tau7 = powint(tau,7);
|
||||
dtau = tau / (dhal+1.0);
|
||||
gtau = eps*tau7*rik6*(ghal+1.0)*pow(rv7/rho,2.0);
|
||||
gtau = eps*tau7*rik6*(ghal+1.0)*square(rv7/rho);
|
||||
e = eps*tau7*rv7*((ghal+1.0)*rv7/rho-2.0);
|
||||
de = -7.0 * (dtau*e+gtau);
|
||||
|
||||
|
||||
@ -20,8 +20,9 @@
|
||||
#include "domain.h"
|
||||
#include "error.h"
|
||||
#include "fft3d_wrap.h"
|
||||
#include "fix_store.h"
|
||||
#include "fix_store_peratom.h"
|
||||
#include "math_const.h"
|
||||
#include "math_special.h"
|
||||
#include "memory.h"
|
||||
#include "my_page.h"
|
||||
#include "neigh_list.h"
|
||||
@ -32,6 +33,8 @@
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace MathConst;
|
||||
|
||||
using MathSpecial::cube;
|
||||
|
||||
enum{INDUCE,RSD,SETUP_AMOEBA,SETUP_HIPPO,KMPOLE,AMGROUP}; // forward comm
|
||||
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
|
||||
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
|
||||
@ -366,7 +369,8 @@ void PairAmoeba::induce()
|
||||
eps = DEBYE * sqrt(eps/atom->natoms);
|
||||
|
||||
if (eps < poleps) done = true;
|
||||
if (eps > epsold) done = true;
|
||||
// also commented out in induce.f of Tinker
|
||||
// if (eps > epsold) done = true;
|
||||
if (iter >= politer) done = true;
|
||||
|
||||
// apply a "peek" iteration to the mutual induced dipoles
|
||||
@ -387,7 +391,7 @@ void PairAmoeba::induce()
|
||||
// terminate the calculation if dipoles failed to converge
|
||||
// NOTE: could make this an error
|
||||
|
||||
if (iter >= maxiter || eps > epsold)
|
||||
if (iter >= politer || eps > epsold)
|
||||
if (comm->me == 0)
|
||||
error->warning(FLERR,"AMOEBA induced dipoles did not converge");
|
||||
}
|
||||
@ -732,7 +736,7 @@ void PairAmoeba::uscale0b(int mode, double **rsd, double **rsdp,
|
||||
damp = pdi * pdamp[jtype];
|
||||
if (damp != 0.0) {
|
||||
pgamma = MIN(pti,thole[jtype]);
|
||||
damp = -pgamma * pow((r/damp),3.0);
|
||||
damp = -pgamma * cube(r/damp);
|
||||
if (damp > -50.0) {
|
||||
expdamp = exp(damp);
|
||||
scale3 *= 1.0 - expdamp;
|
||||
@ -1332,7 +1336,7 @@ void PairAmoeba::udirect2b(double **field, double **fieldp)
|
||||
}
|
||||
} else {
|
||||
pgamma = MIN(pti,thole[jtype]);
|
||||
damp = pgamma * pow(r/damp,3.0);
|
||||
damp = pgamma * cube(r/damp);
|
||||
if (damp < 50.0) {
|
||||
expdamp = exp(-damp);
|
||||
scale3 = 1.0 - expdamp;
|
||||
@ -1384,7 +1388,7 @@ void PairAmoeba::udirect2b(double **field, double **fieldp)
|
||||
damp = pdi * pdamp[jtype];
|
||||
if (damp != 0.0) {
|
||||
pgamma = MIN(pti,thole[jtype]);
|
||||
damp = pgamma * pow(r/damp,3.0);
|
||||
damp = pgamma * cube(r/damp);
|
||||
if (damp < 50.0) {
|
||||
expdamp = exp(-damp);
|
||||
scale3 = 1.0 - expdamp;
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
#include "atom.h"
|
||||
#include "domain.h"
|
||||
#include "math_const.h"
|
||||
#include "math_special.h"
|
||||
#include "memory.h"
|
||||
|
||||
#include <cmath>
|
||||
@ -24,6 +25,8 @@
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace MathConst;
|
||||
|
||||
using MathSpecial::powint;
|
||||
|
||||
#define ANINT(x) ((x)>0 ? floor((x)+0.5) : ceil((x)-0.5))
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
@ -173,13 +176,13 @@ void PairAmoeba::dftmod(double *bsmod, double *bsarray, int nfft, int order)
|
||||
factor = MY_PI * k / nfft;
|
||||
for (j = 1; j <= jcut; j++) {
|
||||
arg = factor / (factor + MY_PI*j);
|
||||
sum1 += pow(arg,order);
|
||||
sum2 += pow(arg,order2);
|
||||
sum1 += powint(arg,order);
|
||||
sum2 += powint(arg,order2);
|
||||
}
|
||||
for (j = 1; j <= jcut; j++) {
|
||||
arg = factor / (factor - MY_PI*j);
|
||||
sum1 += pow(arg,order);
|
||||
sum2 += pow(arg,order2);
|
||||
sum1 += powint(arg,order);
|
||||
sum2 += powint(arg,order2);
|
||||
}
|
||||
zeta = sum2 / sum1;
|
||||
}
|
||||
@ -1137,7 +1140,7 @@ void PairAmoeba::kewald()
|
||||
// NOTE: also worry about satisfying Tinker minfft ?
|
||||
|
||||
while (!factorable(ndfft1)) ndfft1++;
|
||||
while (!factorable(ndfft2)) ndfft3++;
|
||||
while (!factorable(ndfft2)) ndfft2++;
|
||||
while (!factorable(ndfft3)) ndfft3++;
|
||||
}
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include "domain.h"
|
||||
#include "fft3d_wrap.h"
|
||||
#include "math_const.h"
|
||||
#include "math_special.h"
|
||||
#include "memory.h"
|
||||
#include "neigh_list.h"
|
||||
|
||||
@ -29,6 +30,8 @@
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace MathConst;
|
||||
|
||||
using MathSpecial::square;
|
||||
|
||||
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
|
||||
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
|
||||
|
||||
@ -670,7 +673,7 @@ void PairAmoeba::multipole_kspace()
|
||||
nzlo = m_kspace->nzlo_fft;
|
||||
nzhi = m_kspace->nzhi_fft;
|
||||
|
||||
pterm = pow((MY_PI/aewald),2.0);
|
||||
pterm = square(MY_PI/aewald);
|
||||
volterm = MY_PI * volbox;
|
||||
|
||||
n = 0;
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include "domain.h"
|
||||
#include "fft3d_wrap.h"
|
||||
#include "math_const.h"
|
||||
#include "math_special.h"
|
||||
#include "memory.h"
|
||||
#include "neigh_list.h"
|
||||
|
||||
@ -29,6 +30,9 @@
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace MathConst;
|
||||
|
||||
using MathSpecial::square;
|
||||
using MathSpecial::cube;
|
||||
|
||||
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
|
||||
enum{MUTUAL,OPT,TCG,DIRECT};
|
||||
enum{VDWL,REPULSE,QFER,DISP,MPOLE,POLAR,USOLV,DISP_LONG,MPOLE_LONG,POLAR_LONG};
|
||||
@ -82,7 +86,7 @@ void PairAmoeba::polar()
|
||||
|
||||
// compute the Ewald self-energy torque and virial terms
|
||||
|
||||
term = (4.0/3.0) * felec * pow(aewald,3.0) / MY_PIS;
|
||||
term = (4.0/3.0) * felec * cube(aewald) / MY_PIS;
|
||||
|
||||
for (i = 0; i < nlocal; i++) {
|
||||
dix = rpole[i][1];
|
||||
@ -454,7 +458,7 @@ void PairAmoeba::polar_real()
|
||||
damp = pdi * pdamp[jtype];
|
||||
if (damp != 0.0) {
|
||||
pgamma = MIN(pti,thole[jtype]);
|
||||
damp = pgamma * pow(r/damp,3.0);
|
||||
damp = pgamma * cube(r/damp);
|
||||
if (damp < 50.0) {
|
||||
expdamp = exp(-damp);
|
||||
sc3 = 1.0 - expdamp;
|
||||
@ -499,6 +503,18 @@ void PairAmoeba::polar_real()
|
||||
urc3[k] = rc3[k] * factor_uscale;
|
||||
urc5[k] = rc5[k] * factor_uscale;
|
||||
}
|
||||
} else {
|
||||
// avoid uninitialized data access when damp == 0.0
|
||||
psc3 = psc5 = psc7 = dsc3 = dsc5 = dsc7 = usc3 = usc5 = 0.0;
|
||||
psr3 = psr5 = psr7 = dsr3 = dsr5 = dsr7 = usr5 = 0.0;
|
||||
prc3[0] = prc3[1] = prc3[2] = 0.0;
|
||||
drc3[0] = drc3[1] = drc3[2] = 0.0;
|
||||
prc5[0] = prc5[1] = prc5[2] = 0.0;
|
||||
drc5[0] = drc5[1] = drc5[2] = 0.0;
|
||||
prc7[0] = prc7[1] = prc7[2] = 0.0;
|
||||
drc7[0] = drc7[1] = drc7[2] = 0.0;
|
||||
urc3[0] = urc3[1] = urc3[2] = 0.0;
|
||||
urc5[0] = urc5[1] = urc5[2] = 0.0;
|
||||
}
|
||||
|
||||
// apply charge penetration damping to scale factors
|
||||
@ -1260,7 +1276,7 @@ void PairAmoeba::polar_kspace()
|
||||
int nlocal = atom->nlocal;
|
||||
|
||||
double volbox = domain->prd[0] * domain->prd[1] * domain->prd[2];
|
||||
pterm = pow((MY_PI/aewald),2.0);
|
||||
pterm = square(MY_PI/aewald);
|
||||
volterm = MY_PI * volbox;
|
||||
|
||||
// initialize variables required for the scalar summation
|
||||
|
||||
@ -504,7 +504,7 @@ void PairAmoeba::damprep(double r, double r2, double rr1, double rr3,
|
||||
dmpk24 = dmpk23 * dmpk2;
|
||||
dmpk25 = dmpk24 * dmpk2;
|
||||
term = dmpi22 - dmpk22;
|
||||
pre = 8192.0 * dmpi23 * dmpk23 / pow(term,4.0);
|
||||
pre = 8192.0 * dmpi23 * dmpk23 / (term*term*term*term);
|
||||
tmp = 4.0 * dmpi2 * dmpk2 / term;
|
||||
s = (dampi-tmp)*expk + (dampk+tmp)*expi;
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
#include "comm.h"
|
||||
#include "domain.h"
|
||||
#include "error.h"
|
||||
#include "fix_store.h"
|
||||
#include "fix_store_peratom.h"
|
||||
#include "neigh_list.h"
|
||||
|
||||
#include <cmath>
|
||||
@ -84,9 +84,9 @@ void PairAmoeba::kmpole()
|
||||
if (bondneigh[j] < smallest) {
|
||||
smallest = bondneigh[j];
|
||||
k = j;
|
||||
bondneigh[k] = bondneigh[m];
|
||||
bondneigh[m] = smallest;
|
||||
}
|
||||
bondneigh[k] = bondneigh[m];
|
||||
bondneigh[m] = smallest;
|
||||
}
|
||||
}
|
||||
|
||||
@ -256,7 +256,7 @@ void PairAmoeba::kmpole()
|
||||
ztype = zpole[itype][iframe];
|
||||
if (ztype == 0 && !flag) {
|
||||
flag = 1;
|
||||
xyzaxis[i][2] = xyzaxis[i][0] = xyzaxis[i][2] = 0.0;
|
||||
xyzaxis[i][2] = xyzaxis[i][1] = xyzaxis[i][0] = 0.0;
|
||||
polaxe[i] = mpaxis[itype][iframe];
|
||||
for (j = 0; j < 13; j++)
|
||||
pole[i][j] = fpole[itype][iframe][j];
|
||||
|
||||
@ -53,6 +53,9 @@ AngleAmoeba::AngleAmoeba(LAMMPS *lmp) : Angle(lmp)
|
||||
|
||||
ub_k = nullptr;
|
||||
ub_r0 = nullptr;
|
||||
|
||||
setflag_a = setflag_ba = setflag_ub = nullptr;
|
||||
enable_angle = enable_urey = 0;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -264,6 +267,7 @@ void AngleAmoeba::tinker_anglep(int i1, int i2, int i3, int type, int eflag)
|
||||
}
|
||||
|
||||
i4 = atom->map(i4tag);
|
||||
if (i4 < 0) error->one(FLERR,"Amoeba angle 4th atom {} out of range", i4tag);
|
||||
i4 = domain->closest_image(i2,i4);
|
||||
|
||||
// anglep out-of-plane calculation from Tinker
|
||||
|
||||
@ -21,10 +21,11 @@
|
||||
#include "error.h"
|
||||
#include "fft3d_wrap.h"
|
||||
#include "fix.h"
|
||||
#include "fix_store.h"
|
||||
#include "fix_store_peratom.h"
|
||||
#include "force.h"
|
||||
#include "gridcomm.h"
|
||||
#include "group.h"
|
||||
#include "math_special.h"
|
||||
#include "memory.h"
|
||||
#include "modify.h"
|
||||
#include "my_page.h"
|
||||
@ -40,6 +41,8 @@
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
using MathSpecial::powint;
|
||||
|
||||
enum{INDUCE,RSD,SETUP_AMOEBA,SETUP_HIPPO,KMPOLE,AMGROUP,PVAL}; // forward comm
|
||||
enum{FIELD,ZRSD,TORQUE,UFLD}; // reverse comm
|
||||
enum{ARITHMETIC,GEOMETRIC,CUBIC_MEAN,R_MIN,SIGMA,DIAMETER,HARMONIC,HHG,W_H};
|
||||
@ -780,8 +783,8 @@ void PairAmoeba::init_style()
|
||||
Fix *myfix;
|
||||
if (first_flag) {
|
||||
id_pole = utils::strdup("AMOEBA_pole");
|
||||
myfix = modify->add_fix(fmt::format("{} {} STORE peratom 1 13",id_pole,group->names[0]));
|
||||
fixpole = dynamic_cast<FixStore *>(myfix);
|
||||
myfix = modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 13",id_pole,group->names[0]));
|
||||
fixpole = dynamic_cast<FixStorePeratom *>(myfix);
|
||||
}
|
||||
|
||||
// creation of per-atom storage
|
||||
@ -792,14 +795,14 @@ void PairAmoeba::init_style()
|
||||
|
||||
if (first_flag && use_pred) {
|
||||
id_udalt = utils::strdup("AMOEBA_udalt");
|
||||
myfix = modify->add_fix(fmt::format("{} {} STORE peratom 1 {} 3",
|
||||
myfix = modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 {} 3",
|
||||
id_udalt, group->names[0], maxualt));
|
||||
fixudalt = dynamic_cast<FixStore *>(myfix);
|
||||
fixudalt = dynamic_cast<FixStorePeratom *>(myfix);
|
||||
|
||||
id_upalt = utils::strdup("AMOEBA_upalt");
|
||||
myfix = modify->add_fix(fmt::format("{} {} STORE peratom 1 {} 3",
|
||||
myfix = modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 {} 3",
|
||||
id_upalt, group->names[0], maxualt));
|
||||
fixupalt = dynamic_cast<FixStore *>(myfix);
|
||||
fixupalt = dynamic_cast<FixStorePeratom *>(myfix);
|
||||
}
|
||||
|
||||
// create pages for storing pairwise data:
|
||||
@ -913,19 +916,22 @@ void PairAmoeba::init_style()
|
||||
|
||||
if (id_pole) {
|
||||
myfix = modify->get_fix_by_id(id_pole);
|
||||
if (!myfix) error->all(FLERR,"Could not find internal pair amoeba fix STORE id {}", id_pole);
|
||||
fixpole = dynamic_cast<FixStore *>(myfix);
|
||||
if (!myfix)
|
||||
error->all(FLERR,"Could not find internal pair amoeba fix STORE/PERATOM id {}", id_pole);
|
||||
fixpole = dynamic_cast<FixStorePeratom *>(myfix);
|
||||
|
||||
}
|
||||
|
||||
if (id_udalt) {
|
||||
myfix = modify->get_fix_by_id(id_udalt);
|
||||
if (!myfix) error->all(FLERR,"Could not find internal pair amoeba fix STORE id {}", id_udalt);
|
||||
fixudalt = dynamic_cast<FixStore *>(myfix);
|
||||
if (!myfix)
|
||||
error->all(FLERR,"Could not find internal pair amoeba fix STORE/PERATOM id {}", id_udalt);
|
||||
fixudalt = dynamic_cast<FixStorePeratom *>(myfix);
|
||||
|
||||
myfix = modify->get_fix_by_id(id_upalt);
|
||||
if (!myfix) error->all(FLERR,"Could not find internal pair amoeba fix STORE id {}", id_upalt);
|
||||
fixupalt = dynamic_cast<FixStore *>(myfix);
|
||||
if (!myfix)
|
||||
error->all(FLERR,"Could not find internal pair amoeba fix STORE/PERATOM id {}", id_upalt);
|
||||
fixupalt = dynamic_cast<FixStorePeratom *>(myfix);
|
||||
}
|
||||
|
||||
// assign hydrogen neighbors (redID) to each owned atom
|
||||
@ -1956,7 +1962,7 @@ void PairAmoeba::choose(int which)
|
||||
|
||||
// taper coeffs
|
||||
|
||||
double denom = pow(off-cut,5.0);
|
||||
double denom = powint(off-cut,5);
|
||||
c0 = off*off2 * (off2 - 5.0*off*cut + 10.0*cut2) / denom;
|
||||
c1 = -30.0 * off2*cut2 / denom;
|
||||
c2 = 30.0 * (off2*cut+off*cut2) / denom;
|
||||
@ -2026,7 +2032,7 @@ void PairAmoeba::mix()
|
||||
} else if (epsilon_rule == HHG) {
|
||||
eij = 4.0 * (ei*ej) / ((sei+sej)*(sei+sej));
|
||||
} else if (epsilon_rule == W_H) {
|
||||
eij = 2.0 * (sei*sej) * pow(ri*rj,3.0) / (pow(ri,6.0) + pow(rj,6.0));
|
||||
eij = 2.0 * (sei*sej) * powint(ri*rj,3) / (powint(ri,6) + powint(rj,6));
|
||||
} else {
|
||||
eij = sei * sej;
|
||||
}
|
||||
|
||||
@ -157,9 +157,9 @@ class PairAmoeba : public Pair {
|
||||
int *amgroup; // AMOEBA polarization group, 1 to Ngroup
|
||||
|
||||
char *id_pole, *id_udalt, *id_upalt;
|
||||
class FixStore *fixpole; // stores pole = multipole components
|
||||
class FixStore *fixudalt; // stores udalt = induced dipole history
|
||||
class FixStore *fixupalt; // stores upalt = induced dipole history
|
||||
class FixStorePeratom *fixpole; // stores pole = multipole components
|
||||
class FixStorePeratom *fixudalt; // stores udalt = induced dipole history
|
||||
class FixStorePeratom *fixupalt; // stores upalt = induced dipole history
|
||||
|
||||
// static per-type properties defined in force-field file
|
||||
|
||||
|
||||
@ -84,9 +84,9 @@ void BondBPM::init_style()
|
||||
{
|
||||
if (id_fix_store_local) {
|
||||
auto ifix = modify->get_fix_by_id(id_fix_store_local);
|
||||
if (!ifix) error->all(FLERR, "Cannot find fix store/local");
|
||||
if (strcmp(ifix->style, "STORE_LOCAL") != 0)
|
||||
error->all(FLERR, "Incorrect fix style matched, not store/local");
|
||||
if (!ifix) error->all(FLERR, "Cannot find fix STORE/LOCAL id {}",id_fix_store_local);
|
||||
if (strcmp(ifix->style, "STORE/LOCAL") != 0)
|
||||
error->all(FLERR, "Incorrect fix style matched, not STORE/LOCAL: {}",ifix->style);
|
||||
fix_store_local = dynamic_cast<FixStoreLocal *>(ifix);
|
||||
fix_store_local->nvalues = nvalues;
|
||||
}
|
||||
@ -141,7 +141,7 @@ void BondBPM::init_style()
|
||||
global settings
|
||||
All args before store/local command are saved for potential args
|
||||
for specific bond BPM substyles
|
||||
All args after optional store/local command are variables stored
|
||||
All args after optional stode/local command are variables stored
|
||||
in the compute store/local
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
@ -202,7 +202,7 @@ void BondBPM::settings(int narg, char **arg)
|
||||
auto ifix = modify->get_fix_by_id(id_fix_store_local);
|
||||
if (!ifix)
|
||||
ifix = modify->add_fix(
|
||||
fmt::format("{} all STORE_LOCAL {} {}", id_fix_store_local, store_local_freq, nvalues));
|
||||
fmt::format("{} all STORE/LOCAL {} {}", id_fix_store_local, store_local_freq, nvalues));
|
||||
fix_store_local = dynamic_cast<FixStoreLocal *>(ifix);
|
||||
|
||||
// Use property/atom to save reference positions as it can transfer to ghost atoms
|
||||
|
||||
@ -21,17 +21,17 @@
|
||||
|
||||
#include "angle_spica.h"
|
||||
|
||||
#include <cmath>
|
||||
#include "atom.h"
|
||||
#include "neighbor.h"
|
||||
#include "pair.h"
|
||||
#include "domain.h"
|
||||
#include "comm.h"
|
||||
#include "domain.h"
|
||||
#include "error.h"
|
||||
#include "force.h"
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "error.h"
|
||||
#include "neighbor.h"
|
||||
#include "pair.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include "lj_spica_common.h"
|
||||
|
||||
@ -43,7 +43,12 @@ using namespace LJSPICAParms;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
AngleSPICA::AngleSPICA(LAMMPS *lmp) : Angle(lmp) { repflag = 0;}
|
||||
AngleSPICA::AngleSPICA(LAMMPS *lmp) :
|
||||
Angle(lmp), k(nullptr), theta0(nullptr), lj_type(nullptr), lj1(nullptr), lj2(nullptr),
|
||||
lj3(nullptr), lj4(nullptr), rminsq(nullptr), emin(nullptr)
|
||||
{
|
||||
repflag = 0;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
// clang-format off
|
||||
/* ----------------------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
https://www.lammps.org/, Sandia National Laboratories
|
||||
@ -19,15 +18,15 @@
|
||||
|
||||
#include "pair_lj_spica.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include "atom.h"
|
||||
#include "comm.h"
|
||||
#include "force.h"
|
||||
#include "neigh_list.h"
|
||||
#include "memory.h"
|
||||
#include "error.h"
|
||||
#include "force.h"
|
||||
#include "memory.h"
|
||||
#include "neigh_list.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
|
||||
#define LMP_NEED_SPICA_FIND_LJ_TYPE 1
|
||||
#include "lj_spica_common.h"
|
||||
@ -37,7 +36,9 @@ using namespace LJSPICAParms;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
PairLJSPICA::PairLJSPICA(LAMMPS *lmp) : Pair(lmp)
|
||||
PairLJSPICA::PairLJSPICA(LAMMPS *lmp) :
|
||||
Pair(lmp), lj_type(nullptr), cut(nullptr), epsilon(nullptr), sigma(nullptr), lj1(nullptr),
|
||||
lj2(nullptr), lj3(nullptr), lj4(nullptr), offset(nullptr), rminsq(nullptr), emin(nullptr)
|
||||
{
|
||||
respa_enable = 0;
|
||||
single_enable = 1;
|
||||
@ -71,6 +72,7 @@ PairLJSPICA::~PairLJSPICA()
|
||||
}
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void PairLJSPICA::compute(int eflag, int vflag)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user