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