Merge branch 'develop' into plumed-plugin

This commit is contained in:
Axel Kohlmeyer
2024-07-30 20:30:21 -04:00
487 changed files with 26476 additions and 6758 deletions

1
.github/CODEOWNERS vendored
View File

@ -50,6 +50,7 @@ src/PTM/* @pmla
src/QMMM/* @akohlmey src/QMMM/* @akohlmey
src/REACTION/* @jrgissing src/REACTION/* @jrgissing
src/REAXFF/* @hasanmetin @stanmoore1 src/REAXFF/* @hasanmetin @stanmoore1
src/RHEO/* @jtclemm
src/SCAFACOS/* @rhalver src/SCAFACOS/* @rhalver
src/SNAP/* @athomps src/SNAP/* @athomps
src/SPIN/* @julient31 src/SPIN/* @julient31

View File

@ -169,6 +169,22 @@ if(MSVC)
add_compile_definitions(_CRT_SECURE_NO_WARNINGS) add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
endif() endif()
# warn about potentially problematic GCC compiler versions
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (CMAKE_CXX_STANDARD GREATER_EQUAL 17)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
message(WARNING "Using ${CMAKE_CXX_COMPILER_ID} compiler version ${CMAKE_CXX_COMPILER_VERSION} "
"with C++17 is not recommended. Please use ${CMAKE_CXX_COMPILER_ID} compiler version 9.x or later")
endif()
endif()
if (CMAKE_CXX_STANDARD GREATER_EQUAL 11)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
message(WARNING "Using ${CMAKE_CXX_COMPILER_ID} compiler version ${CMAKE_CXX_COMPILER_VERSION} "
"with C++11 is not recommended. Please use ${CMAKE_CXX_COMPILER_ID} compiler version 5.x or later")
endif()
endif()
endif()
# export all symbols when building a .dll file on windows # export all symbols when building a .dll file on windows
if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND BUILD_SHARED_LIBS) if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND BUILD_SHARED_LIBS)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
@ -203,13 +219,12 @@ set(LAMMPS_BINARY lmp${LAMMPS_MACHINE})
option(BUILD_SHARED_LIBS "Build shared library" OFF) option(BUILD_SHARED_LIBS "Build shared library" OFF)
option(CMAKE_POSITION_INDEPENDENT_CODE "Create object compatible with shared libraries" ON) option(CMAKE_POSITION_INDEPENDENT_CODE "Create object compatible with shared libraries" ON)
option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF)
option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF)
option(BUILD_LAMMPS_GUI "Build and install the LAMMPS GUI" OFF) option(BUILD_LAMMPS_GUI "Build and install the LAMMPS GUI" OFF)
# Support using clang-tidy for C++ files with selected options # Support using clang-tidy for C++ files with selected options
set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Include clang-tidy processing when compiling") set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Include clang-tidy processing when compiling")
if(ENABLE_CLANG_TIDY) if(ENABLE_CLANG_TIDY)
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,performance-trivially-destructible,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-member-init,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-boolean-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,modernize-use-override,modernize-use-bool-literals,modernize-use-emplace,modernize-return-braced-init-list,modernize-use-equals-default,modernize-use-equals-delete,modernize-replace-random-shuffle,modernize-deprecated-headers,modernize-use-nullptr,modernize-use-noexcept,modernize-redundant-void-arg;-fix;-header-filter=.*,header-filter=library.h,header-filter=fmt/*.h" CACHE STRING "clang-tidy settings") set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,performance-trivially-destructible,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-member-init,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-boolean-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,readability-qualified-auto,misc-unused-parameters,modernize-deprecated-ios-base-aliases,modernize-loop-convert,modernize-shrink-to-fit,modernize-use-auto,modernize-use-using,modernize-use-override,modernize-use-bool-literals,modernize-use-emplace,modernize-return-braced-init-list,modernize-use-equals-default,modernize-use-equals-delete,modernize-replace-random-shuffle,modernize-deprecated-headers,modernize-use-nullptr,modernize-use-noexcept,modernize-redundant-void-arg;-fix;-header-filter=.*,header-filter=library.h,header-filter=fmt/*.h" CACHE STRING "clang-tidy settings")
else() else()
unset(CMAKE_CXX_CLANG_TIDY CACHE) unset(CMAKE_CXX_CLANG_TIDY CACHE)
endif() endif()
@ -311,6 +326,7 @@ set(STANDARD_PACKAGES
REACTION REACTION
REAXFF REAXFF
REPLICA REPLICA
RHEO
RIGID RIGID
SCAFACOS SCAFACOS
SHOCK SHOCK
@ -415,6 +431,7 @@ pkg_depends(CG-DNA ASPHERE)
pkg_depends(ELECTRODE KSPACE) pkg_depends(ELECTRODE KSPACE)
pkg_depends(EXTRA-MOLECULE MOLECULE) pkg_depends(EXTRA-MOLECULE MOLECULE)
pkg_depends(MESONT MOLECULE) pkg_depends(MESONT MOLECULE)
pkg_depends(RHEO BPM)
# detect if we may enable OpenMP support by default # detect if we may enable OpenMP support by default
set(BUILD_OMP_DEFAULT OFF) set(BUILD_OMP_DEFAULT OFF)
@ -555,7 +572,7 @@ else()
endif() endif()
foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF
PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM COMPRESS ML-PACE LEPTON) PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM COMPRESS ML-PACE LEPTON RHEO)
if(PKG_${PKG_WITH_INCL}) if(PKG_${PKG_WITH_INCL})
include(Packages/${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL})
endif() endif()
@ -945,6 +962,7 @@ message(STATUS "<<< Compilers and Flags: >>>
-- C++ Compiler: ${CMAKE_CXX_COMPILER} -- C++ Compiler: ${CMAKE_CXX_COMPILER}
Type: ${CMAKE_CXX_COMPILER_ID} Type: ${CMAKE_CXX_COMPILER_ID}
Version: ${CMAKE_CXX_COMPILER_VERSION} Version: ${CMAKE_CXX_COMPILER_VERSION}
C++ Standard: ${CMAKE_CXX_STANDARD}
C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}
Defines: ${DEFINES}") Defines: ${DEFINES}")
get_target_property(OPTIONS lammps COMPILE_OPTIONS) get_target_property(OPTIONS lammps COMPILE_OPTIONS)
@ -1051,9 +1069,6 @@ endif()
if(BUILD_TOOLS) if(BUILD_TOOLS)
message(STATUS "<<< Building Tools >>>") message(STATUS "<<< Building Tools >>>")
endif() endif()
if(BUILD_LAMMPS_SHELL)
message(STATUS "<<< Building LAMMPS Shell >>>")
endif()
if(BUILD_LAMMPS_GUI) if(BUILD_LAMMPS_GUI)
message(STATUS "<<< Building LAMMPS GUI >>>") message(STATUS "<<< Building LAMMPS GUI >>>")
if(LAMMPS_GUI_USE_PLUGIN) if(LAMMPS_GUI_USE_PLUGIN)

View File

@ -32,7 +32,13 @@ function(check_omp_h_include)
set(CMAKE_REQUIRED_INCLUDES ${OpenMP_CXX_INCLUDE_DIRS}) set(CMAKE_REQUIRED_INCLUDES ${OpenMP_CXX_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LINK_OPTIONS ${OpenMP_CXX_FLAGS}) set(CMAKE_REQUIRED_LINK_OPTIONS ${OpenMP_CXX_FLAGS})
set(CMAKE_REQUIRED_LIBRARIES ${OpenMP_CXX_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES ${OpenMP_CXX_LIBRARIES})
# there are all kinds of problems with finding omp.h
# for Clang and derived compilers so we pretend it is there.
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(_have_omp_h TRUE)
else()
check_include_file_cxx(omp.h _have_omp_h) check_include_file_cxx(omp.h _have_omp_h)
endif()
else() else()
set(_have_omp_h FALSE) set(_have_omp_h FALSE)
endif() endif()

View File

@ -27,7 +27,7 @@ if(DOWNLOAD_QUIP)
else() else()
message(FATAL_ERROR "The ${CMAKE_Fortran_COMPILER_ID} Fortran compiler is not (yet) supported for building QUIP") message(FATAL_ERROR "The ${CMAKE_Fortran_COMPILER_ID} Fortran compiler is not (yet) supported for building QUIP")
endif() endif()
set(temp "${temp}CFLAGS += -fPIC \nCPLUSPLUSFLAGS += -fPIC\nAR_ADD=src\n") set(temp "${temp}CFLAGS += -fPIC -Wno-return-mismatch \nCPLUSPLUSFLAGS += -fPIC -Wno-return-mismatch\nAR_ADD=src\n")
set(temp "${temp}MATH_LINKOPTS=") set(temp "${temp}MATH_LINKOPTS=")
foreach(flag ${BLAS_LIBRARIES}) foreach(flag ${BLAS_LIBRARIES})
set(temp "${temp} ${flag}") set(temp "${temp} ${flag}")

View File

@ -0,0 +1,2 @@
find_package(GSL 2.6 REQUIRED)
target_link_libraries(lammps PRIVATE GSL::gsl)

View File

@ -102,9 +102,9 @@ endif()
####################################### #######################################
# select code sanitizer options # select code sanitizer options
####################################### #######################################
set(ENABLE_SANITIZER "none" CACHE STRING "Select a code sanitizer option (none (default), address, leak, thread, undefined)") set(ENABLE_SANITIZER "none" CACHE STRING "Select a code sanitizer option (none (default), address, hwaddress, leak, thread, undefined)")
mark_as_advanced(ENABLE_SANITIZER) mark_as_advanced(ENABLE_SANITIZER)
set(ENABLE_SANITIZER_VALUES none address leak thread undefined) set(ENABLE_SANITIZER_VALUES none address hwaddress leak thread undefined)
set_property(CACHE ENABLE_SANITIZER PROPERTY STRINGS ${ENABLE_SANITIZER_VALUES}) set_property(CACHE ENABLE_SANITIZER PROPERTY STRINGS ${ENABLE_SANITIZER_VALUES})
validate_option(ENABLE_SANITIZER ENABLE_SANITIZER_VALUES) validate_option(ENABLE_SANITIZER ENABLE_SANITIZER_VALUES)
string(TOLOWER ${ENABLE_SANITIZER} ENABLE_SANITIZER) string(TOLOWER ${ENABLE_SANITIZER} ENABLE_SANITIZER)

View File

@ -37,37 +37,6 @@ if(BUILD_TOOLS)
add_subdirectory(${LAMMPS_TOOLS_DIR}/phonon ${CMAKE_BINARY_DIR}/phana_build) add_subdirectory(${LAMMPS_TOOLS_DIR}/phonon ${CMAKE_BINARY_DIR}/phana_build)
endif() endif()
find_package(PkgConfig QUIET)
if(BUILD_LAMMPS_SHELL)
if(NOT PkgConfig_FOUND)
message(FATAL_ERROR "Must have pkg-config installed for building LAMMPS shell")
endif()
find_package(PkgConfig REQUIRED)
pkg_check_modules(READLINE IMPORTED_TARGET REQUIRED readline)
# include resource compiler to embed icons into the executable on Windows
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
enable_language(RC)
set(ICON_RC_FILE ${LAMMPS_TOOLS_DIR}/lammps-shell/lmpicons.rc)
endif()
add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp ${ICON_RC_FILE})
target_include_directories(lammps-shell PRIVATE ${LAMMPS_TOOLS_DIR}/lammps-shell)
target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::READLINE)
# workaround for broken readline pkg-config file on FreeBSD
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
target_include_directories(lammps-shell PRIVATE /usr/local/include)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "LinuxMUSL")
pkg_check_modules(TERMCAP IMPORTED_TARGET REQUIRED termcap)
target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::TERMCAP)
endif()
install(TARGETS lammps-shell EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ${LAMMPS_TOOLS_DIR}/lammps-shell/icons DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/)
install(FILES ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/)
endif()
if(BUILD_LAMMPS_GUI) if(BUILD_LAMMPS_GUI)
get_filename_component(LAMMPS_GUI_DIR ${LAMMPS_SOURCE_DIR}/../tools/lammps-gui ABSOLUTE) get_filename_component(LAMMPS_GUI_DIR ${LAMMPS_SOURCE_DIR}/../tools/lammps-gui ABSOLUTE)
get_filename_component(LAMMPS_GUI_BIN ${CMAKE_BINARY_DIR}/lammps-gui-build ABSOLUTE) get_filename_component(LAMMPS_GUI_BIN ${CMAKE_BINARY_DIR}/lammps-gui-build ABSOLUTE)

View File

@ -82,6 +82,7 @@ set(ALL_PACKAGES
REACTION REACTION
REAXFF REAXFF
REPLICA REPLICA
RHEO
RIGID RIGID
SCAFACOS SCAFACOS
SHOCK SHOCK

View File

@ -84,6 +84,7 @@ set(ALL_PACKAGES
REACTION REACTION
REAXFF REAXFF
REPLICA REPLICA
RHEO
RIGID RIGID
SCAFACOS SCAFACOS
SHOCK SHOCK

View File

@ -33,7 +33,6 @@ set(WIN_PACKAGES
FEP FEP
GPU GPU
GRANULAR GRANULAR
INTEL
INTERLAYER INTERLAYER
KSPACE KSPACE
LEPTON LEPTON

View File

@ -489,8 +489,7 @@ using CMake or Make.
.. code-block:: bash .. code-block:: bash
-D BUILD_TOOLS=value # yes or no (default). Build binary2txt, chain.x, micelle2d.x, msi2lmp, phana, stl_bin2txt -D BUILD_TOOLS=value # yes or no (default). Build binary2txt, chain.x, micelle2d.x, msi2lmp, phana, stl_bin2txt
-D BUILD_LAMMPS_SHELL=value # yes or no (default). Build lammps-shell -D BUILD_LAMMPS_GUI=value # yes or no (default). Build LAMMPS-GUI
-D BUILD_LAMMPS_GUI=value # yes or no (default). Build lammps-gui
The generated binaries will also become part of the LAMMPS installation The generated binaries will also become part of the LAMMPS installation
(see below). (see below).
@ -505,8 +504,9 @@ using CMake or Make.
make chain # build only chain tool make chain # build only chain tool
make micelle2d # build only micelle2d tool make micelle2d # build only micelle2d tool
cd lammps/tools/lammps-shell .. note::
make # build LAMMPS shell
Building the LAMMPS-GUI *requires* building LAMMPS with CMake.
---------- ----------

View File

@ -88,8 +88,8 @@ on recording all commands required to do the compilation.
.. _sanitizer: .. _sanitizer:
Address, Undefined Behavior, and Thread Sanitizer Support (CMake only) Address, Leak, Undefined Behavior, and Thread Sanitizer Support (CMake only)
---------------------------------------------------------------------- ----------------------------------------------------------------------------
Compilers such as GCC and Clang support generating instrumented binaries Compilers such as GCC and Clang support generating instrumented binaries
which use different sanitizer libraries to detect problems in the code which use different sanitizer libraries to detect problems in the code
@ -110,6 +110,7 @@ compilation and linking stages. This is done through setting the
-D ENABLE_SANITIZER=none # no sanitizer active (default) -D ENABLE_SANITIZER=none # no sanitizer active (default)
-D ENABLE_SANITIZER=address # enable address sanitizer / memory leak checker -D ENABLE_SANITIZER=address # enable address sanitizer / memory leak checker
-D ENABLE_SANITIZER=hwaddress # enable hardware assisted address sanitizer / memory leak checker
-D ENABLE_SANITIZER=leak # enable memory leak checker (only) -D ENABLE_SANITIZER=leak # enable memory leak checker (only)
-D ENABLE_SANITIZER=undefined # enable undefined behavior sanitizer -D ENABLE_SANITIZER=undefined # enable undefined behavior sanitizer
-D ENABLE_SANITIZER=thread # enable thread sanitizer -D ENABLE_SANITIZER=thread # enable thread sanitizer

View File

@ -59,6 +59,7 @@ This is the list of packages that may require additional steps.
* :ref:`POEMS <poems>` * :ref:`POEMS <poems>`
* :ref:`PYTHON <python>` * :ref:`PYTHON <python>`
* :ref:`QMMM <qmmm>` * :ref:`QMMM <qmmm>`
* :ref:`RHEO <rheo>`
* :ref:`SCAFACOS <scafacos>` * :ref:`SCAFACOS <scafacos>`
* :ref:`VORONOI <voronoi>` * :ref:`VORONOI <voronoi>`
* :ref:`VTK <vtk>` * :ref:`VTK <vtk>`
@ -638,6 +639,9 @@ They must be specified in uppercase.
* - AMD_GFX1100 * - AMD_GFX1100
- GPU - GPU
- AMD GPU RX7900XTX - AMD GPU RX7900XTX
* - AMD_GFX1103
- GPU
- AMD Phoenix APU with Radeon 740M/760M/780M/880M/890M
* - INTEL_GEN * - INTEL_GEN
- GPU - GPU
- SPIR64-based devices, e.g. Intel GPUs, using JIT - SPIR64-based devices, e.g. Intel GPUs, using JIT
@ -1576,10 +1580,11 @@ folder and then load this plugin at runtime with the :doc:`plugin command <plugi
.. tab:: CMake build .. tab:: CMake build
When the ``-D PKG_PLUMED=yes`` flag is included in the cmake When the ``-D PKG_PLUMED=yes`` flag is included in the cmake
command you must ensure that GSL is installed in locations that command you must ensure that `the GNU Scientific Library (GSL)
are specified in your environment. There are then two additional <https://www.gnu.org/software/gsl/>` is installed in locations
variables that control the manner in which PLUMED is obtained and that are accessible in your environment. There are then two
linked into LAMMPS. additional variables that control the manner in which PLUMED is
obtained and linked into LAMMPS.
.. code-block:: bash .. code-block:: bash
@ -2050,6 +2055,36 @@ verified to work in February 2020 with Quantum Espresso versions 6.3 to
---------- ----------
.. _rheo:
RHEO package
------------
To build with this package you must have the `GNU Scientific Library
(GSL) <https://www.gnu.org/software/gsl/>` installed in locations that
are accessible in your environment. The GSL library should be at least
version 2.7.
.. tabs::
.. tab:: CMake build
If CMake cannot find the GSL library or include files, you can set:
.. code-block:: bash
-D GSL_ROOT_DIR=path # path to root of GSL installation
.. tab:: Traditional make
LAMMPS will try to auto-detect the GSL compiler and linker flags
from the corresponding ``pkg-config`` file (``gsl.pc``), otherwise
you can edit the file ``lib/rheo/Makefile.lammps``
to specify the paths and library names where indicated by comments.
This must be done **before** the package is installed.
----------
.. _scafacos: .. _scafacos:
SCAFACOS package SCAFACOS package

View File

@ -45,8 +45,8 @@ executable code from the library is copied into the calling executable.
.. code-block:: bash .. code-block:: bash
mpicc -c -O $(pkgconf liblammps --cflags) caller.c mpicc -c -O $(pkg-config --cflags liblammps) caller.c
mpicxx -o caller caller.o -$(pkgconf liblammps --libs) mpicxx -o caller caller.o -$(pkg-config --libs liblammps)
.. tab:: Traditional make .. tab:: Traditional make
@ -155,8 +155,8 @@ POEMS package installed becomes:
.. code-block:: bash .. code-block:: bash
mpicc -c -O $(pkgconf liblammps --cflags) caller.c mpicc -c -O $(pkg-config --cflags liblammps) caller.c
mpicxx -o caller caller.o -$(pkgconf --libs) mpicxx -o caller caller.o -$(pkg-config --libs liblammps)
.. tab:: Traditional make .. tab:: Traditional make

View File

@ -62,6 +62,7 @@ packages:
* :ref:`POEMS <poems>` * :ref:`POEMS <poems>`
* :ref:`PYTHON <python>` * :ref:`PYTHON <python>`
* :ref:`QMMM <qmmm>` * :ref:`QMMM <qmmm>`
* :ref:`RHEO <rheo>`
* :ref:`SCAFACOS <scafacos>` * :ref:`SCAFACOS <scafacos>`
* :ref:`VORONOI <voronoi>` * :ref:`VORONOI <voronoi>`
* :ref:`VTK <vtk>` * :ref:`VTK <vtk>`

View File

@ -414,8 +414,8 @@ Read or write compressed files
If this option is enabled, large files can be read or written with If this option is enabled, large files can be read or written with
compression by ``gzip`` or similar tools by several LAMMPS commands, compression by ``gzip`` or similar tools by several LAMMPS commands,
including :doc:`read_data <read_data>`, :doc:`rerun <rerun>`, and including :doc:`read_data <read_data>`, :doc:`rerun <rerun>`, and
:doc:`dump <dump>`. Supported compression tools are currently :doc:`dump <dump>`. Supported compression tools and algorithms are currently
``gzip``, ``bzip2``, ``zstd``, and ``lzma``. ``gzip``, ``bzip2``, ``zstd``, ``xz``, ``lz4``, and ``lzma`` (via xz).
.. tabs:: .. tabs::

View File

@ -54,6 +54,7 @@ OPT.
* :doc:`oxdna2/fene <bond_oxdna>` * :doc:`oxdna2/fene <bond_oxdna>`
* :doc:`oxrna2/fene <bond_oxdna>` * :doc:`oxrna2/fene <bond_oxdna>`
* :doc:`quartic (o) <bond_quartic>` * :doc:`quartic (o) <bond_quartic>`
* :doc:`rheo/shell <bond_rheo_shell>`
* :doc:`special <bond_special>` * :doc:`special <bond_special>`
* :doc:`table (o) <bond_table>` * :doc:`table (o) <bond_table>`
@ -72,7 +73,7 @@ OPT.
* :doc:`none <angle_none>` * :doc:`none <angle_none>`
* :doc:`zero <angle_zero>` * :doc:`zero <angle_zero>`
* :doc:`hybrid <angle_hybrid>` * :doc:`hybrid (k) <angle_hybrid>`
* *
* *
* *
@ -100,7 +101,7 @@ OPT.
* :doc:`mesocnt <angle_mesocnt>` * :doc:`mesocnt <angle_mesocnt>`
* :doc:`mm3 <angle_mm3>` * :doc:`mm3 <angle_mm3>`
* :doc:`quartic (o) <angle_quartic>` * :doc:`quartic (o) <angle_quartic>`
* :doc:`spica (o) <angle_spica>` * :doc:`spica (ko) <angle_spica>`
* :doc:`table (o) <angle_table>` * :doc:`table (o) <angle_table>`
.. _dihedral: .. _dihedral:
@ -118,7 +119,7 @@ OPT.
* :doc:`none <dihedral_none>` * :doc:`none <dihedral_none>`
* :doc:`zero <dihedral_zero>` * :doc:`zero <dihedral_zero>`
* :doc:`hybrid <dihedral_hybrid>` * :doc:`hybrid (k) <dihedral_hybrid>`
* *
* *
* *
@ -156,7 +157,7 @@ OPT.
* :doc:`none <improper_none>` * :doc:`none <improper_none>`
* :doc:`zero <improper_zero>` * :doc:`zero <improper_zero>`
* :doc:`hybrid <improper_hybrid>` * :doc:`hybrid (k) <improper_hybrid>`
* *
* *
* *

View File

@ -126,6 +126,7 @@ KOKKOS, o = OPENMP, t = OPT.
* :doc:`reduce <compute_reduce>` * :doc:`reduce <compute_reduce>`
* :doc:`reduce/chunk <compute_reduce_chunk>` * :doc:`reduce/chunk <compute_reduce_chunk>`
* :doc:`reduce/region <compute_reduce>` * :doc:`reduce/region <compute_reduce>`
* :doc:`rheo/property/atom <compute_rheo_property_atom>`
* :doc:`rigid/local <compute_rigid_local>` * :doc:`rigid/local <compute_rigid_local>`
* :doc:`saed <compute_saed>` * :doc:`saed <compute_saed>`
* :doc:`slcsa/atom <compute_slcsa_atom>` * :doc:`slcsa/atom <compute_slcsa_atom>`

View File

@ -28,6 +28,7 @@ OPT.
* :doc:`adapt <fix_adapt>` * :doc:`adapt <fix_adapt>`
* :doc:`adapt/fep <fix_adapt_fep>` * :doc:`adapt/fep <fix_adapt_fep>`
* :doc:`addforce <fix_addforce>` * :doc:`addforce <fix_addforce>`
* :doc:`add/heat <fix_add_heat>`
* :doc:`addtorque <fix_addtorque>` * :doc:`addtorque <fix_addtorque>`
* :doc:`alchemy <fix_alchemy>` * :doc:`alchemy <fix_alchemy>`
* :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>` * :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>`
@ -204,6 +205,11 @@ OPT.
* :doc:`reaxff/species (k) <fix_reaxff_species>` * :doc:`reaxff/species (k) <fix_reaxff_species>`
* :doc:`recenter <fix_recenter>` * :doc:`recenter <fix_recenter>`
* :doc:`restrain <fix_restrain>` * :doc:`restrain <fix_restrain>`
* :doc:`rheo <fix_rheo>`
* :doc:`rheo/oxidation <fix_rheo_oxidation>`
* :doc:`rheo/pressure <fix_rheo_pressure>`
* :doc:`rheo/thermal <fix_rheo_thermal>`
* :doc:`rheo/viscosity <fix_rheo_viscosity>`
* :doc:`rhok <fix_rhok>` * :doc:`rhok <fix_rhok>`
* :doc:`rigid (o) <fix_rigid>` * :doc:`rigid (o) <fix_rigid>`
* :doc:`rigid/meso <fix_rigid_meso>` * :doc:`rigid/meso <fix_rigid_meso>`

View File

@ -35,6 +35,10 @@ OPT.
* *
* *
* *
*
*
*
*
* :doc:`adp (ko) <pair_adp>` * :doc:`adp (ko) <pair_adp>`
* :doc:`agni (o) <pair_agni>` * :doc:`agni (o) <pair_agni>`
* :doc:`aip/water/2dm (t) <pair_aip_water_2dm>` * :doc:`aip/water/2dm (t) <pair_aip_water_2dm>`
@ -191,7 +195,7 @@ OPT.
* :doc:`lj/mdf <pair_mdf>` * :doc:`lj/mdf <pair_mdf>`
* :doc:`lj/relres (o) <pair_lj_relres>` * :doc:`lj/relres (o) <pair_lj_relres>`
* :doc:`lj/spica (gko) <pair_spica>` * :doc:`lj/spica (gko) <pair_spica>`
* :doc:`lj/spica/coul/long (go) <pair_spica>` * :doc:`lj/spica/coul/long (gko) <pair_spica>`
* :doc:`lj/spica/coul/msm (o) <pair_spica>` * :doc:`lj/spica/coul/msm (o) <pair_spica>`
* :doc:`lj/sf/dipole/sf (go) <pair_dipole>` * :doc:`lj/sf/dipole/sf (go) <pair_dipole>`
* :doc:`lj/smooth (go) <pair_lj_smooth>` * :doc:`lj/smooth (go) <pair_lj_smooth>`
@ -260,6 +264,8 @@ OPT.
* :doc:`rebo (io) <pair_airebo>` * :doc:`rebo (io) <pair_airebo>`
* :doc:`rebomos (o) <pair_rebomos>` * :doc:`rebomos (o) <pair_rebomos>`
* :doc:`resquared (go) <pair_resquared>` * :doc:`resquared (go) <pair_resquared>`
* :doc:`rheo <pair_rheo>`
* :doc:`rheo/solid <pair_rheo_solid>`
* :doc:`saip/metal (t) <pair_saip_metal>` * :doc:`saip/metal (t) <pair_saip_metal>`
* :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>` * :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>`
* :doc:`smatb <pair_smatb>` * :doc:`smatb <pair_smatb>`

View File

@ -8,6 +8,18 @@ stop LAMMPS and print a suitable error message in most cases, when a
style/command is used that has been removed or will replace the command style/command is used that has been removed or will replace the command
with the direct alternative (if available) and print a warning. with the direct alternative (if available) and print a warning.
restart2data tool
-----------------
.. versionchanged:: 23Nov2013
The functionality of the restart2data tool has been folded into the
LAMMPS executable directly instead of having a separate tool. A
combination of the commands :doc:`read_restart <read_restart>` and
:doc:`write_data <write_data>` can be used to the same effect. For
added convenience this conversion can also be triggered by
:doc:`command line flags <Run_options>`
Fix ave/spatial and fix ave/spatial/sphere Fix ave/spatial and fix ave/spatial/sphere
------------------------------------------ ------------------------------------------
@ -151,17 +163,16 @@ and allow running LAMMPS with GPU acceleration.
i-PI tool i-PI tool
--------- ---------
.. versionchanged:: 27June2024 .. versionchanged:: 27Jun2024
The i-PI tool has been removed from the LAMMPS distribution. Instead, The i-PI tool has been removed from the LAMMPS distribution. Instead,
instructions to install i-PI from PyPI via pip are provided. instructions to install i-PI from PyPI via pip are provided.
restart2data tool LAMMPS shell
----------------- ------------
.. versionchanged:: TBD
The LAMMPS shell has been removed from the LAMMPS distribution. Users
are encouraged to use the :ref:`LAMMPS-GUI <lammps_gui>` tool instead.
The functionality of the restart2data tool has been folded into the
LAMMPS executable directly instead of having a separate tool. A
combination of the commands :doc:`read_restart <read_restart>` and
:doc:`write_data <write_data>` can be used to the same effect. For
added convenience this conversion can also be triggered by
:doc:`command line flags <Run_options>`

View File

@ -50,6 +50,30 @@ We are looking at the following cases:
- `Case 3: a potential requiring communication`_ - `Case 3: a potential requiring communication`_
- `Case 4: potentials without a compute() function`_ - `Case 4: potentials without a compute() function`_
Package and build system considerations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In general, new pair styles should be added to the :ref:`EXTRA-PAIR
package <PKG-EXTRA-PAIR>` unless they are an accelerated pair style and
then they should be added to the corresponding accelerator package
(:ref:`GPU <PKG-GPU>`, :ref:`INTEL <PKG-INTEL>`, :ref:`KOKKOS
<PKG-KOKKOS>`, :ref:`OPENMP <PKG-OPENMP>`, :ref:`OPT <PKG-OPT>`). If
you feel that your contribution should be added to a different package,
please consult with the LAMMPS developers first.
The contributed code needs to support the :doc:`traditional GNU make
build process <Build_make>` **and** the :doc:`CMake build process
<Build_cmake>`. For the GNU make process and if the package has an
``Install.sh`` file, most likely that file needs to be updated to
correctly copy the sources when installing the package and properly
delete them when uninstalling. This is particularly important when
added a new pair style that is a derived class from an existing pair
style in a package, so that its installation depends on the the
installation status of the package of the derived class. For the CMake
process, it is sometimes necessary to make changes to the package
specific CMake scripting in ``cmake/Modules/Packages``.
---- ----
Case 1: a pairwise additive model Case 1: a pairwise additive model

View File

@ -134,6 +134,8 @@ Lowercase directories
+-------------+------------------------------------------------------------------+ +-------------+------------------------------------------------------------------+
| rerun | use of rerun and read_dump commands | | rerun | use of rerun and read_dump commands |
+-------------+------------------------------------------------------------------+ +-------------+------------------------------------------------------------------+
| rheo | RHEO simulations of fluid flows and phase transitions |
+-------------+------------------------------------------------------------------+
| rigid | rigid bodies modeled as independent or coupled | | rigid | rigid bodies modeled as independent or coupled |
+-------------+------------------------------------------------------------------+ +-------------+------------------------------------------------------------------+
| shear | sideways shear applied to 2d solid, with and without a void | | shear | sideways shear applied to 2d solid, with and without a void |

View File

@ -2327,7 +2327,7 @@ Procedures Bound to the :f:type:`lammps` Derived Type
retrieved via :f:func:`get_last_error_message`. This allows to retrieved via :f:func:`get_last_error_message`. This allows to
restart a calculation or delete and recreate the LAMMPS instance when restart a calculation or delete and recreate the LAMMPS instance when
a C++ exception occurs. One application of using exceptions this way a C++ exception occurs. One application of using exceptions this way
is the :ref:`lammps_shell`. is the :ref:`lammps_gui`.
:to: :cpp:func:`lammps_config_has_exceptions` :to: :cpp:func:`lammps_config_has_exceptions`
:r has_exceptions: :r has_exceptions:

View File

@ -89,6 +89,7 @@ Packages howto
Howto_drude2 Howto_drude2
Howto_peri Howto_peri
Howto_manifold Howto_manifold
Howto_rheo
Howto_spins Howto_spins
Tutorials howto Tutorials howto

View File

@ -1,7 +1,7 @@
Use chunks to calculate system properties Use chunks to calculate system properties
========================================= =========================================
In LAMMS, "chunks" are collections of atoms, as defined by the In LAMMPS, "chunks" are collections of atoms, as defined by the
:doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns
each atom to a chunk ID (or to no chunk at all). The number of chunks each atom to a chunk ID (or to no chunk at all). The number of chunks
and the assignment of chunk IDs to atoms can be static or change over and the assignment of chunk IDs to atoms can be static or change over
@ -148,14 +148,14 @@ Example calculations with chunks
Here are examples using chunk commands to calculate various Here are examples using chunk commands to calculate various
properties: properties:
(1) Average velocity in each of 1000 2d spatial bins: 1. Average velocity in each of 1000 2d spatial bins:
.. code-block:: LAMMPS .. code-block:: LAMMPS
compute cc1 all chunk/atom bin/2d x 0.0 0.1 y lower 0.01 units reduced compute cc1 all chunk/atom bin/2d x 0.0 0.1 y lower 0.01 units reduced
fix 1 all ave/chunk 100 10 1000 cc1 vx vy file tmp.out fix 1 all ave/chunk 100 10 1000 cc1 vx vy file tmp.out
(2) Temperature in each spatial bin, after subtracting a flow 2. Temperature in each spatial bin, after subtracting a flow
velocity: velocity:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -164,7 +164,7 @@ velocity:
compute vbias all temp/profile 1 0 0 y 10 compute vbias all temp/profile 1 0 0 y 10
fix 1 all ave/chunk 100 10 1000 cc1 temp bias vbias file tmp.out fix 1 all ave/chunk 100 10 1000 cc1 temp bias vbias file tmp.out
(3) Center of mass of each molecule: 3. Center of mass of each molecule:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -172,7 +172,7 @@ velocity:
compute myChunk all com/chunk cc1 compute myChunk all com/chunk cc1
fix 1 all ave/time 100 1 100 c_myChunk[*] file tmp.out mode vector fix 1 all ave/time 100 1 100 c_myChunk[*] file tmp.out mode vector
(4) Total force on each molecule and ave/max across all molecules: 4. Total force on each molecule and ave/max across all molecules:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -183,7 +183,7 @@ velocity:
thermo 1000 thermo 1000
thermo_style custom step temp v_xave v_xmax thermo_style custom step temp v_xave v_xmax
(5) Histogram of cluster sizes: 5. Histogram of cluster sizes:
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -192,16 +192,16 @@ velocity:
compute size all property/chunk cc1 count compute size all property/chunk cc1 count
fix 1 all ave/histo 100 1 100 0 20 20 c_size mode vector ave running beyond ignore file tmp.histo fix 1 all ave/histo 100 1 100 0 20 20 c_size mode vector ave running beyond ignore file tmp.histo
(6) An example for using a per-chunk value to apply per-atom forces to 6. An example for using a per-chunk value to apply per-atom forces to
compress individual polymer chains (molecules) in a mixture, is compress individual polymer chains (molecules) in a mixture, is
explained on the :doc:`compute chunk/spread/atom <compute_chunk_spread_atom>` command doc page. explained on the :doc:`compute chunk/spread/atom <compute_chunk_spread_atom>` command doc page.
(7) An example for using one set of per-chunk values for molecule 7. An example for using one set of per-chunk values for molecule
chunks, to create a second set of micelle-scale chunks (clustered chunks, to create a second set of micelle-scale chunks (clustered
molecules, due to hydrophobicity), is explained on the molecules, due to hydrophobicity), is explained on the
:doc:`compute reduce/chunk <compute_reduce_chunk>` command doc page. :doc:`compute reduce/chunk <compute_reduce_chunk>` command doc page.
(8) An example for using one set of per-chunk values (dipole moment 8. An example for using one set of per-chunk values (dipole moment
vectors) for molecule chunks, spreading the values to each atom in vectors) for molecule chunks, spreading the values to each atom in
each chunk, then defining a second set of chunks as spatial bins, and each chunk, then defining a second set of chunks as spatial bins, and
using the :doc:`fix ave/chunk <fix_ave_chunk>` command to calculate an using the :doc:`fix ave/chunk <fix_ave_chunk>` command to calculate an

View File

@ -339,8 +339,6 @@ Some common LAMMPS specific variables
- build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``) - build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``)
* - ``BUILD_TOOLS`` * - ``BUILD_TOOLS``
- compile some additional executables from the ``tools`` folder (default: ``off``) - compile some additional executables from the ``tools`` folder (default: ``off``)
* - ``BUILD_LAMMPS_SHELL``
- compile the LAMMPS shell from the ``tools/lammps-shell`` folder (default: ``off``)
* - ``BUILD_DOC`` * - ``BUILD_DOC``
- include building the HTML format documentation for packaging/installing (default: ``off``) - include building the HTML format documentation for packaging/installing (default: ``off``)
* - ``CMAKE_TUNE_FLAGS`` * - ``CMAKE_TUNE_FLAGS``

View File

@ -1,11 +1,11 @@
Using the LAMMPS GUI Using LAMMPS-GUI
==================== ================
This document describes **LAMMPS GUI version 1.5**. This document describes **LAMMPS-GUI version 1.6**.
----- -----
LAMMPS GUI is a graphical text editor customized for editing LAMMPS LAMMPS-GUI is a graphical text editor customized for editing LAMMPS
input files that is linked to the :ref:`LAMMPS library <lammps_c_api>` input files that is linked to the :ref:`LAMMPS library <lammps_c_api>`
and thus can run LAMMPS directly using the contents of the editor's text and thus can run LAMMPS directly using the contents of the editor's text
buffer as input. It can retrieve and display information from LAMMPS buffer as input. It can retrieve and display information from LAMMPS
@ -16,58 +16,107 @@ to the online LAMMPS documentation for known LAMMPS commands and styles.
.. note:: .. note::
Pre-compiled, ready-to-use LAMMPS GUI executables for Linux (Ubuntu Pre-compiled, ready-to-use LAMMPS-GUI executables for Linux x86\_64
20.04LTS or later and compatible), macOS (version 11 aka Big Sur or (Ubuntu 20.04LTS or later and compatible), macOS (version 11 aka Big
later), and Windows (version 10 or later) :ref:`are available Sur or later), and Windows (version 10 or later) :ref:`are available
<lammps_gui_install>` for download. They may be linked to a <lammps_gui_install>` for download. None-MPI LAMMPS executables for
development version of LAMMPS in case they need features not yet running LAMMPS from the command line and :doc:`some LAMMPS tools <Tools>`
available in a released version. Serial LAMMPS executables of the are also included.
same LAMMPS version are included as well. The source code for the
LAMMPS GUI is included in the LAMMPS source code and can be found in
the ``tools/lammps-gui`` folder. It can be compiled alongside LAMMPS
when :doc:`compiling with CMake <Build_cmake>`.
LAMMPS GUI tries to provide an experience similar to what people The source code for LAMMPS-GUI is included in the LAMMPS source code
traditionally would do to run LAMMPS using a command line window: distribution and can be found in the ``tools/lammps-gui`` folder. It
can be compiled alongside LAMMPS when :doc:`compiling with CMake
<Build_cmake>`.
- editing inputs with a text editor LAMMPS-GUI tries to provide an experience similar to what people
- run LAMMPS on the input with selected command line flags traditionally would have running LAMMPS using a command line window
- and then use or extract data from the created files and visualize it and the console LAMMPS executable but just rolled into a single executable:
- writing & editing LAMMPS input files with a text editor
- run LAMMPS on those input file with selected command line flags
- use or extract data from the created files and visualize it with
either a molecular visualization program or a plotting program
That procedure is quite effective for people proficient in using the That procedure is quite effective for people proficient in using the
command line, as that allows them to use tools for the individual steps command line, as that allows them to use tools for the individual steps
which they are most comfortable with. It is often required when running that they are most comfortable with. It is often *required* to adopt
LAMMPS on high-performance computing facilities. this workflow when running LAMMPS simulations on high-performance
computing facilities.
The main benefit of using the LAMMPS GUI application instead is that The main benefit of using LAMMPS-GUI is that many basic tasks can be
many basic tasks can be done directly from the GUI without switching to done directly from the GUI without switching to a text console window or
a text console window or using external programs, let alone writing using external programs, let alone writing scripts to extract data from
scripts to extract data from the generated output. It also integrates the generated output. It also integrates well with graphical desktop
well with graphical desktop environments. environments where the `.lmp` filename extension can be registered with
LAMMPS-GUI as the executable to launch when double clicking on such
files. Also, LAMMPS-GUI has support for drag-n-drop, i.e. an input
file can be selected and then moved and dropped on the LAMMPS-GUI
executable, and LAMMPS-GUI will launch and read the file into its
buffer.
LAMMPS GUI thus makes it easier for beginners to get started running LAMMPS-GUI thus makes it easier for beginners to get started running
simple LAMMPS simulations. It is very suitable for tutorials on LAMMPS simple LAMMPS simulations. It is very suitable for tutorials on LAMMPS
since you only need to learn how to use a single program for most tasks since you only need to learn how to use a single program for most tasks
and thus time can be saved and people can focus on learning LAMMPS. It and thus time can be saved and people can focus on learning LAMMPS.
is also designed to keep the barrier low when you decide to switch to a The tutorials at https://lammpstutorials.github.io/ were specifically
full featured, standalone programming editor and more sophisticated updated for use with LAMMPS-GUI.
visualization and analysis tools and run LAMMPS from a command line.
Another design goal is to keep the barrier low when replacing part of
the functionality of LAMMPS-GUI with external tools.
The following text provides a detailed tour of the features and The following text provides a detailed tour of the features and
functionality of the LAMMPS GUI. functionality of LAMMPS-GUI. Suggestions for new features and
reports of bugs are always welcome. You can use the :doc:`the same
Suggestions for new features and reports of bugs are always welcome. channels as for LAMMPS itself <Errors_bugs>` for that purpose.
You can use the :doc:`the same channels as for LAMMPS itself
<Errors_bugs>` for that purpose.
----- -----
Main window Installing Pre-compiled LAMMPS-GUI Packages
----------- -------------------------------------------
When LAMMPS GUI starts, it will show a main window with either an LAMMPS-GUI is available as pre-compiled binary packages for Linux
empty buffer or the contents of a loaded file. In the latter case it x86\_64, macOS 11 and later, and Windows 10 and later. Alternately, it
may look like the following: can be compiled from source.
Windows 10 and later
^^^^^^^^^^^^^^^^^^^^
After downloading the ``LAMMPS-Win10-64bit-GUI-<version>.exe`` installer
package, you need to execute it, and start the installation process.
Since those packages are currently unsigned, you have to enable "Developer Mode"
in the Windows System Settings to run the installer.
MacOS 11 and later
^^^^^^^^^^^^^^^^^^
After downloading the ``LAMMPS-macOS-multiarch-GUI-<version>.dmg``
installer package, you need to double-click it and then, in the window
that opens, drag the app bundle as indicated into the "Applications"
folder. The follow the instructions in the "README.txt" file to
get access to the other included executables.
Linux on x86\_64
^^^^^^^^^^^^^^^^
After downloading and unpacking the
``LAMMPS-Linux-x86_64-GUI-<version>.tar.gz`` package. You can switch
into the "LAMMPS_GUI" folder and execute "./lammps-gui" directly.
Compiling from Source
^^^^^^^^^^^^^^^^^^^^^
There also are instructions for :ref:`compiling LAMMPS-GUI from source
code <lammps_gui_compilation>` available elsewhere in the manual.
Compilation from source *requires* using CMake.
-----
Starting LAMMPS-GUI
-------------------
When LAMMPS-GUI starts, it shows the main window, labeled *Editor*, with
either an empty buffer or the contents of the file used as argument. In
the latter case it may look like the following:
.. image:: JPG/lammps-gui-main.png .. image:: JPG/lammps-gui-main.png
:align: center :align: center
@ -80,32 +129,41 @@ the LAMMPS input file syntax. The status bar shows the status of
LAMMPS execution on the left (e.g. "Ready." when idle) and the current LAMMPS execution on the left (e.g. "Ready." when idle) and the current
working directory on the right. The name of the current file in the working directory on the right. The name of the current file in the
buffer is shown in the window title; the word `*modified*` is added if buffer is shown in the window title; the word `*modified*` is added if
the buffer edits have not yet saved to a file. The size of the main the buffer edits have not yet saved to a file. The geometry of the main
window will be stored when exiting and restored when starting again. window is stored when exiting and restored when starting again.
Opening Files Opening Files
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
The LAMMPS GUI application will try to open the first command line The LAMMPS-GUI application can be launched without command line arguments
argument as a LAMMPS input script, further arguments are ignored. and then starts with an empty buffer in the *Editor* window. If arguments
When no argument is given, LAMMPS GUI will start with an empty buffer. are given LAMMPS will use first command line argument as the file name for
Files can also be opened via the ``File`` menu or by drag-and-drop of the *Editor* buffer and reads its contents into the buffer, if the file
a file from a graphical file manager into the editor window. Only one exists. All further arguments are ignored. Files can also be opened via
file can be open at a time, so opening a new file with a filled buffer the ``File`` menu, the `Ctrl-O` (`Command-O` on macOS) keyboard shortcut
will close the buffer. If the buffer has unsaved modifications, you or by drag-and-drop of a file from a graphical file manager into the editor
will be asked to either cancel the operation, discard the changes, or window. If a file extension (e.g. ``.lmp``) has been registered with the
save them. graphical environment to launch LAMMPS-GUI, an existing input file can
be launched with LAMMPS-GUI through double clicking.
Only one file can be edited at a time, so opening a new file with a
filled buffer closes that buffer. If the buffer has unsaved
modifications, you are asked to either cancel the operation, discard the
changes, or save them. A buffer with modifications can be saved any
time from the "File" menu, by the keyboard shortcut `Ctrl-S`
(`Command-S` on macOS), or by clicking on the "Save" button at the very
left in the status bar.
Running LAMMPS Running LAMMPS
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
From within the LAMMPS GUI main window LAMMPS can be started either from From within the LAMMPS-GUI main window LAMMPS can be started either from
the ``Run`` menu using the ``Run LAMMPS from Editor Buffer`` entry, by the ``Run`` menu using the ``Run LAMMPS from Editor Buffer`` entry, by
the keyboard shortcut `Ctrl-Enter` (`Command-Enter` on macOS), or by the keyboard shortcut `Ctrl-Enter` (`Command-Enter` on macOS), or by
clicking on the green "Run" button in the status bar. All of these clicking on the green "Run" button in the status bar. All of these
operations will cause LAMMPS to process the entire input script, which operations causes LAMMPS to process the entire input script in the
may contain multiple :doc:`run <run>` or :doc:`minimize <minimize>` editor buffer, which may contain multiple :doc:`run <run>` or
commands. :doc:`minimize <minimize>` commands.
LAMMPS runs in a separate thread, so the GUI stays responsive and is LAMMPS runs in a separate thread, so the GUI stays responsive and is
able to interact with the running calculation and access data it able to interact with the running calculation and access data it
@ -128,33 +186,30 @@ before LAMMPS can be run from a file.
While LAMMPS is running, the contents of the status bar change. On While LAMMPS is running, the contents of the status bar change. On
the left side there is a text indicating that LAMMPS is running, which the left side there is a text indicating that LAMMPS is running, which
will also show the number of active threads, if thread-parallel also indicates the number of active threads, when thread-parallel
acceleration was selected in the ``Preferences`` dialog. On the right acceleration was selected in the ``Preferences`` dialog. On the right
side, a progress bar is shown that displays the estimated progress for side, a progress bar is shown that displays the estimated progress for
the current :doc:`run command <run>`. the current :doc:`run <run>` or :doc:`minimize <minimize>` command.
Also, the line number of the currently executed command will be Also, the line number of the currently executed command is highlighted
highlighted in green. in green.
.. image:: JPG/lammps-gui-run-highlight.png
:align: center
:scale: 75%
If an error occurs (in the example below the command :doc:`label If an error occurs (in the example below the command :doc:`label
<label>` was incorrectly capitalized as "Label"), an error message <label>` was incorrectly capitalized as "Label"), an error message
dialog will be shown and the line of the input which triggered the dialog is shown and the line of the input which triggered the error is
error will be highlighted. The state of LAMMPS in the status bar will highlighted. The state of LAMMPS in the status bar is set to "Failed."
be set to "Failed." instead of "Ready." instead of "Ready."
.. image:: JPG/lammps-gui-run-error.png .. image:: JPG/lammps-gui-run-error.png
:align: center :align: center
:scale: 75% :scale: 75%
Up to three additional windows will open during a run: Up to three additional windows may open during a run:
- a log window with the captured screen output - an *Output* window with the captured screen output from LAMMPS
- a chart window with a line graph created from the thermodynamic output of the run - a *Charts* window with a line graph created from thermodynamic output of the run
- a slide show window with images created by a :doc:`dump image command <dump_image>` - a *Slide Show* window with images created by a :doc:`dump image command <dump_image>`
in the input
More information on those windows and how to adjust their behavior and More information on those windows and how to adjust their behavior and
contents is given below. contents is given below.
@ -171,77 +226,101 @@ This is equivalent to the input script command :doc:`timer timeout 0
interface. Please see the corresponding documentation pages to interface. Please see the corresponding documentation pages to
understand the implications of this operation. understand the implications of this operation.
Log Window Output Window
---------- -------------
By default, when starting a run, a "Log Window" will open that displays By default, when starting a run, an *Output* window opens that displays
the current screen output of the LAMMPS calculation, that would normally the screen output of the running LAMMPS calculation, as shown below.
be seen in the command line window, as shown below. This text would normally be seen in the command line window.
.. image:: JPG/lammps-gui-log.png .. image:: JPG/lammps-gui-log.png
:align: center :align: center
:scale: 50% :scale: 50%
LAMMPS GUI captures the screen output as it is generated and updates LAMMPS-GUI captures the screen output from LAMMPS as it is generated and
the log window regularly during a run. updates the *Output* window regularly during a run.
By default, the log window will be replaced each time a run is started. By default, the *Output* window is replaced each time a run is started.
The runs are counted and the run number for the current run is displayed The runs are counted and the run number for the current run is displayed
in the window title. It is possible to change the behavior of LAMMPS in the window title. It is possible to change the behavior of
GUI in the preferences dialog to create a *new* log window for every run LAMMPS-GUI in the preferences dialog to create a *new* *Output* window
or to not show the current log window. It is also possible to show or for every run or to not show the current *Output* window. It is also
hide the *current* log window from the ``View`` menu. possible to show or hide the *current* *Output* window from the ``View``
menu.
The text in the log window is read-only and cannot be modified, but The text in the *Output* window is read-only and cannot be modified, but
keyboard shortcuts to select and copy all or parts of the text can be keyboard shortcuts to select and copy all or parts of the text can be
used to transfer text to another program. Also, the keyboard shortcut used to transfer text to another program. Also, the keyboard shortcut
`Ctrl-S` (`Command-S` on macOS) is available to save the log buffer to a `Ctrl-S` (`Command-S` on macOS) is available to save the *Output* buffer to a
file. The "Select All" and "Copy" functions, as well as a "Save Log to file. The "Select All" and "Copy" functions, as well as a "Save Log to
File" option are also available from a context menu by clicking with the File" option are also available from a context menu by clicking with the
right mouse button into the log window text area. right mouse button into the *Output* window text area.
Chart Window .. image:: JPG/lammps-gui-yaml.png
------------
By default, when starting a run, a "Chart Window" will open that
displays a plot of thermodynamic output of the LAMMPS calculation as
shown below.
.. image:: JPG/lammps-gui-chart.png
:align: center :align: center
:scale: 50% :scale: 50%
.. versionadded:: 1.6
Should the *Output* window contain embedded YAML format text (see above for a
demonstration), for example from using :doc:`thermo_style yaml
<thermo_style>` or :doc:`thermo_modify line yaml <thermo_modify>`, the
keyboard shortcut `Ctrl-Y` (`Command-Y` on macOS) is available to save
only the YAML parts to a file. This option is also available from a
context menu by clicking with the right mouse button into the *Output* window
text area.
Charts Window
-------------
By default, when starting a run, a *Charts* window opens that displays a
plot of thermodynamic output of the LAMMPS calculation as shown below.
.. image:: JPG/lammps-gui-chart.png
:align: center
:scale: 33%
The drop down menu on the top right allows selection of different The drop down menu on the top right allows selection of different
properties that are computed and written to thermo output. Only one properties that are computed and written to thermo output. Only one
property can be shown at a time. The plots will be updated with new property can be shown at a time. The plots are updated with new data as
data as the run progresses, so they can be used to visually monitor the the run progresses, so they can be used to visually monitor the
evolution of available properties. The window title will show the evolution of available properties. The window title shows the current
current run number that this chart window corresponds to. Same as run number that this chart window corresponds to. Same as for the
explained for the log window above, by default, the chart window will *Output* window, the chart window is replaced on each new run, but the
be replaced on each new run, but the behavior can be changed in the behavior can be changed in the preferences dialog.
preferences dialog.
.. versionadded:: 1.6
Support for YAML export added
From the ``File`` menu on the top left, it is possible to save an image From the ``File`` menu on the top left, it is possible to save an image
of the currently displayed plot or export the data in either plain text of the currently displayed plot or export the data in either plain text
columns (for use by plotting tools like `gnuplot columns (for use by plotting tools like `gnuplot
<http://www.gnuplot.info/>`_ or `grace <http://www.gnuplot.info/>`_ or `grace
<https://plasma-gate.weizmann.ac.il/Grace/>`_), or as CSV data which can <https://plasma-gate.weizmann.ac.il/Grace/>`_), as CSV data which can be
be imported for further processing with Microsoft Excel or `pandas imported for further processing with Microsoft Excel `LibreOffice Calc
<https://pandas.pydata.org/>`_ <https://www.libreoffice.org/>`_ or with Python via `pandas
<https://pandas.pydata.org/>`_, or as YAML which can be imported into
Python with `PyYAML <https://pyyaml.org/>`_ or pandas.
Thermo output data from successive run commands in the input script will Thermo output data from successive run commands in the input script is
be combined into a single data set unless the format, number, or names combined into a single data set unless the format, number, or names of
of output columns are changed with a :doc:`thermo_style <thermo_style>` output columns are changed with a :doc:`thermo_style <thermo_style>` or
or a :doc:`thermo_modify <thermo_modify>` command, or the current time a :doc:`thermo_modify <thermo_modify>` command, or the current time step
step is reset with :doc:`reset_timestep <reset_timestep>`, or if a is reset with :doc:`reset_timestep <reset_timestep>`, or if a
:doc:`clear <clear>` command is issued. :doc:`clear <clear>` command is issued. This is where the YAML export
from the *Charts* window differs from that of the *Output* window:
here you get the compounded data set starting with the last change of
output fields or timestep setting, while the export from the log will
contain *all* YAML output but *segmented* into individual runs.
Image Slide Show Image Slide Show
---------------- ----------------
By default, if the LAMMPS input contains a :doc:`dump image By default, if the LAMMPS input contains a :doc:`dump image
<dump_image>` command, a "Slide Show" window will open which loads and <dump_image>` command, a "Slide Show" window opens which loads and
displays the images created by LAMMPS as they are written. displays the images created by LAMMPS as they are written. This is a
convenient way to visually monitor the progress of the simulation.
.. image:: JPG/lammps-gui-slideshow.png .. image:: JPG/lammps-gui-slideshow.png
:align: center :align: center
@ -250,9 +329,17 @@ displays the images created by LAMMPS as they are written.
The various buttons at the bottom right of the window allow single The various buttons at the bottom right of the window allow single
stepping through the sequence of images or playing an animation (as a stepping through the sequence of images or playing an animation (as a
continuous loop or once from first to last). It is also possible to continuous loop or once from first to last). It is also possible to
zoom in or zoom out of the displayed images, and to export the slide zoom in or zoom out of the displayed images. The button on the very
show animation to a movie file, if `ffmpeg <https://ffmpeg.org/>`_ is left triggers an export of the slide show animation to a movie file,
installed. provided the `FFmpeg program <https://ffmpeg.org/>`_ is installed.
.. versionadded:: 1.6
When clicking on the "garbage can" icon, all image files of the slide
show will be deleted. Since their number can be large for long
simulations, this option enables to safely and quickly clean up the
clutter caused in the working directory by those image files without
risk of deleting other files by accident when using wildcards.
Variable Info Variable Info
------------- -------------
@ -260,23 +347,22 @@ Variable Info
During a run, it may be of interest to monitor the value of input script During a run, it may be of interest to monitor the value of input script
variables, for example to monitor the progress of loops. This can be variables, for example to monitor the progress of loops. This can be
done by enabling the "Variables Window" in the ``View`` menu or by using done by enabling the "Variables Window" in the ``View`` menu or by using
the `Ctrl-Shift-W` keyboard shortcut. This will show info similar to the `Ctrl-Shift-W` keyboard shortcut. This shows info similar to the
the :doc:`info variables <info>` command in a separate window as shown :doc:`info variables <info>` command in a separate window as shown
below. below.
.. image:: JPG/lammps-gui-variable-info.png .. image:: JPG/lammps-gui-variable-info.png
:align: center :align: center
:scale: 75% :scale: 75%
Like the log and chart windows, its content is continuously updated Like for the *Output* and *Charts* windows, its content is continuously
during a run. It will show "(none)" if there are no variables updated during a run. It will show "(none)" if there are no variables
defined. Note that it is also possible to *set* :doc:`index style defined. Note that it is also possible to *set* :doc:`index style
variables <variable>`, that would normally be set via command line variables <variable>`, that would normally be set via command line
flags, via the "Set Variables..." dialog from the ``Run`` menu. flags, via the "Set Variables..." dialog from the ``Run`` menu.
LAMMPS GUI will automatically set the variable "gui_run" to the LAMMPS-GUI automatically defines the variable "gui_run" to the current
current value of the run counter. That way it would be possible value of the run counter. That way it is possible to automatically
to automatically record a log for each run attempt by using the record a separate log for each run attempt by using the command
command
.. code-block:: LAMMPS .. code-block:: LAMMPS
@ -285,26 +371,34 @@ command
at the beginning of an input file. That would record logs to files at the beginning of an input file. That would record logs to files
``logfile-1.txt``, ``logfile-2.txt``, and so on for successive runs. ``logfile-1.txt``, ``logfile-2.txt``, and so on for successive runs.
Viewing Snapshot Images Snapshot Image Viewer
----------------------- ---------------------
By selecting the ``Create Image`` entry in the ``Run`` menu, or by By selecting the ``Create Image`` entry in the ``Run`` menu, or by
hitting the `Ctrl-I` (`Command-I` on macOS) keyboard shortcut, or by hitting the `Ctrl-I` (`Command-I` on macOS) keyboard shortcut, or by
clicking on the "palette" button in the status bar, LAMMPS GUI will send clicking on the "palette" button in the status bar of the *Editor*
a custom :doc:`write_dump image <dump_image>` command to LAMMPS and read window, LAMMPS-GUI sends a custom :doc:`write_dump image <dump_image>`
the resulting snapshot image with the current state of the system into command to LAMMPS and reads back the resulting snapshot image with the
an image viewer window. This functionality is not available *during* an current state of the system into an image viewer. This functionality is
ongoing run. When LAMMPS is not yet initialized, LAMMPS GUI will try to *not* available *during* an ongoing run. In case LAMMPS is not yet
identify the line with the first run or minimize command and execute all initialized, LAMMPS-GUI tries to identify the line with the first run or
command up to that line from the input buffer and then add a "run 0" minimize command and execute all commands from the input buffer up to
command. This will initialize the system so an image of the initial that line, and then executes a "run 0" command. This initializes the
state of the system can be rendered. If there was an error, the system so an image of the initial state of the system can be rendered.
snapshot image viewer will not appear. If there was an error in that process, the snapshot image viewer does
not appear.
When possible, LAMMPS GUI will try to detect which elements the atoms When possible, LAMMPS-GUI tries to detect which elements the atoms
correspond to (via their mass) and then colorize them in the image correspond to (via their mass) and then colorize them in the image and
accordingly. Otherwise the default predefined sequence of colors is set their atom diameters accordingly. If this is not possible, for
assigned to the different atom types. instance when using reduced (= 'lj') :doc:`units <units>`, then
LAMMPS-GUI will check the current pair style and if it is a
Lennard-Jones type potential, it will extract the *sigma* parameter
for each atom type and assign atom diameters from those numbers.
Otherwise the default sequence of colors of the :doc:`dump image
<dump_image>` command is assigned to the different atom types and the
diameters are all the same.
.. image:: JPG/lammps-gui-image.png .. image:: JPG/lammps-gui-image.png
:align: center :align: center
@ -314,33 +408,44 @@ The default image size, some default image quality settings, the view
style and some colors can be changed in the ``Preferences`` dialog style and some colors can be changed in the ``Preferences`` dialog
window. From the image viewer window further adjustments can be made: window. From the image viewer window further adjustments can be made:
actual image size, high-quality (SSAO) rendering, anti-aliasing, view actual image size, high-quality (SSAO) rendering, anti-aliasing, view
style, display of box or axes, zoom factor. The view of the system style, display of box or axes, zoom factor. The view of the system can
can be rotated horizontally and vertically. It is also possible to be rotated horizontally and vertically. It is also possible to only
only display the atoms within a group defined in the input script display the atoms within a group defined in the input script (default is
(default is "all"). After each change, the image is rendered again "all"). The image can also be re-centered on the center of mass of the
and the display updated. The small palette icon on the top left will selected group. After each change, the image is rendered again and the
be colored while LAMMPS is running to render the new image; it will be display updated. The small palette icon on the top left is colored
grayed out when it is finished. When there are many atoms to render while LAMMPS is running to render the new image; it is grayed out when
and high quality images with anti-aliasing are requested, re-rendering LAMMPS is finished. When there are many atoms to render and high
may take several seconds. From the ``File`` menu of the image window, quality images with anti-aliasing are requested, re-rendering may take
the current image can be saved to a file or copied into the several seconds. From the ``File`` menu of the image window, the
cut-n-paste buffer for pasting into another application. current image can be saved to a file (keyboard shortcut `Ctrl-S`) or
copied to the clipboard (keyboard shortcut `Ctrl-C`) for pasting the
image into another application.
Editor Functions .. versionadded:: 1.6
----------------
The editor has most of the usual functionality that similar programs From the ``File`` menu it is also possible to copy the current
have: text selection via mouse or with cursor moves while holding the :doc:`dump image <dump_image>` and :doc:`dump_modify <dump_image>`
Shift key, Cut (`Ctrl-X`), Copy (`Ctrl-C`), Paste (`Ctrl-V`), Undo commands to the clipboard so they can be pasted into a LAMMPS input file
(`Ctrl-Z`), Redo (`Ctrl-Shift-Z`), Select All (`Ctrl-A`). When trying so that the visualization settings of the snapshot image can be repeated
to exit the editor with a modified buffer, a dialog will pop up asking for the entire simulation (and thus be repeated in the slide show
whether to cancel the exit operation, or to save or not save the buffer viewer). This feature has the keyboard shortcut `Ctrl-D`.
contents to a file.
Editor Window
-------------
The *Editor* window of LAMMPS-GUI has most of the usual functionality
that similar programs have: text selection via mouse or with cursor
moves while holding the Shift key, Cut (`Ctrl-X`), Copy (`Ctrl-C`),
Paste (`Ctrl-V`), Undo (`Ctrl-Z`), Redo (`Ctrl-Shift-Z`), Select All
(`Ctrl-A`). When trying to exit the editor with a modified buffer, a
dialog will pop up asking whether to cancel the exit operation, or to
save or not save the buffer contents to a file.
Context Specific Word Completion Context Specific Word Completion
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By default, LAMMPS GUI will display a small pop-up frame with possible By default, LAMMPS-GUI displays a small pop-up frame with possible
choices for LAMMPS input script commands or styles after 2 characters of choices for LAMMPS input script commands or styles after 2 characters of
a word have been typed. a word have been typed.
@ -354,10 +459,10 @@ by clicking on the entry with the mouse. The automatic completion
pop-up can be disabled in the ``Preferences`` dialog, but the completion pop-up can be disabled in the ``Preferences`` dialog, but the completion
can still be requested manually by either hitting the 'Shift-TAB' key or can still be requested manually by either hitting the 'Shift-TAB' key or
by right-clicking with the mouse and selecting the option from the by right-clicking with the mouse and selecting the option from the
context menu. Most of the completion information is taken from the context menu. Most of the completion information is retrieved from the
LAMMPS instance and thus it will be adjusted to only show available active LAMMPS instance and thus it shows only available options that
options that have been enabled while compiling LAMMPS. That, however, have been enabled when compiling LAMMPS. That list, however, excludes
excludes accelerated styles and commands; for improved clarity, only the accelerated styles and commands; for improved clarity, only the
non-suffix version of styles are shown. non-suffix version of styles are shown.
Line Reformatting Line Reformatting
@ -369,8 +474,8 @@ whitespace padding to commands, type specifiers, IDs and names. This
reformatting is performed by default when hitting the 'Enter' key to reformatting is performed by default when hitting the 'Enter' key to
start a new line. This feature can be turned on or off in the start a new line. This feature can be turned on or off in the
``Preferences`` dialog, but it can still be manually performed by ``Preferences`` dialog, but it can still be manually performed by
hitting the 'TAB' key. The amount of padding can also be changed in the hitting the 'TAB' key. The amount of padding can be adjusted in the
``Preferences`` dialog. ``Preferences`` dialog for the *Editor*.
Internally this functionality is achieved by splitting the line into Internally this functionality is achieved by splitting the line into
"words" and then putting it back together with padding added where the "words" and then putting it back together with padding added where the
@ -379,17 +484,32 @@ context can be detected; otherwise a single space is used between words.
Context Specific Help Context Specific Help
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
.. image:: JPG/lammps-gui-popup-help.png .. |gui-popup1| image:: JPG/lammps-gui-popup-help.png
:align: center :width: 48%
:scale: 50%
A unique feature of the LAMMPS GUI is the option to look up the .. |gui-popup2| image:: JPG/lammps-gui-popup-view.png
:width: 48%
|gui-popup1| |gui-popup2|
A unique feature of LAMMPS-GUI is the option to look up the LAMMPS
documentation for the command in the current line. This can be done by documentation for the command in the current line. This can be done by
either clicking the right mouse button or by using the `Ctrl-?` keyboard either clicking the right mouse button or by using the `Ctrl-?` keyboard
shortcut. When clicking the mouse there are additional entries in the shortcut. When using the mouse, there are additional entries in the
context menu that will open the corresponding documentation page in the context menu that open the corresponding documentation page in the
online LAMMPS documentation. When using the keyboard, the first of online LAMMPS documentation in a web browser window. When using the
those entries will be chosen directly. keyboard, the first of those entries is chosen.
.. versionadded:: 1.6
If the word under the cursor is a file, then additionally the context
menu has an entry to open the file in a read-only text viewer window.
This is a convenient way to view the contents of files that are
referenced in the input. The file viewer also supports on-the-fly
decompression based on the file name suffix in a :ref:`similar fashion
as available with LAMMPS <gzip>`. If the necessary decompression
program is missing or the file cannot be decompressed, the viewer window
will contain a corresponding message.
Menu Menu
---- ----
@ -397,9 +517,9 @@ Menu
The menu bar has entries ``File``, ``Edit``, ``Run``, ``View``, and The menu bar has entries ``File``, ``Edit``, ``Run``, ``View``, and
``About``. Instead of using the mouse to click on them, the individual ``About``. Instead of using the mouse to click on them, the individual
menus can also be activated by hitting the `Alt` key together with the menus can also be activated by hitting the `Alt` key together with the
corresponding underlined letter, that is `Alt-F` will activate the corresponding underlined letter, that is `Alt-F` activates the
``File`` menu. For the corresponding activated sub-menus, the key ``File`` menu. For the corresponding activated sub-menus, the key
corresponding the underlined letters can again be used to select entries corresponding the underlined letters can be used to select entries
instead of using the mouse. instead of using the mouse.
File File
@ -407,19 +527,22 @@ File
The ``File`` menu offers the usual options: The ``File`` menu offers the usual options:
- ``New`` will clear the current buffer and reset the file name to ``*unknown*`` - ``New`` clears the current buffer and resets the file name to ``*unknown*``
- ``Open`` will open a dialog to select a new file - ``Open`` opens a dialog to select a new file for editing in the *Editor*
- ``Save`` will save the current file; if the file name is ``*unknown*`` - ``View`` opens a dialog to select a file for viewing in a *separate* window (read-only) with support for on-the-fly decompression as explained above.
- ``Save`` saves the current file; if the file name is ``*unknown*``
a dialog will open to select a new file name a dialog will open to select a new file name
- ``Save As`` will open a dialog to select and new file name and save - ``Save As`` opens a dialog to select and new file name (and folder, if
the buffer to it desired) and saves the buffer to it. Writing the buffer to a
- ``Quit`` will exit LAMMPS GUI. If there are unsaved changes, a dialog different folder will also switch the current working directory to
will appear to either cancel the operation, or to save or not save the that folder.
edited file. - ``Quit`` exits LAMMPS-GUI. If there are unsaved changes, a dialog will
appear to either cancel the operation, or to save, or to not save the
modified buffer.
In addition, up to 5 recent file names will be listed after the In addition, up to 5 recent file names will be listed after the ``Open``
``Open`` entry that allows re-opening recent files. This list is entry that allows re-opening recently opened files. This list is stored
stored when quitting and recovered when starting again. when quitting and recovered when starting again.
Edit Edit
^^^^ ^^^^
@ -427,19 +550,20 @@ Edit
The ``Edit`` menu offers the usual editor functions like ``Undo``, The ``Edit`` menu offers the usual editor functions like ``Undo``,
``Redo``, ``Cut``, ``Copy``, ``Paste``. It can also open a ``Redo``, ``Cut``, ``Copy``, ``Paste``. It can also open a
``Preferences`` dialog (keyboard shortcut `Ctrl-P`) and allows deletion ``Preferences`` dialog (keyboard shortcut `Ctrl-P`) and allows deletion
of all stored preferences so they will be reset to default values. of all stored preferences and settings, so they are reset to their
default values.
Run Run
^^^ ^^^
The ``Run`` menu has options to start and stop a LAMMPS process. The ``Run`` menu has options to start and stop a LAMMPS process. Rather
Rather than calling the LAMMPS executable as a separate executable, than calling the LAMMPS executable as a separate executable, the
the LAMMPS GUI is linked to the LAMMPS library and thus can run LAMMPS LAMMPS-GUI is linked to the LAMMPS library and thus can run LAMMPS
internally through the :ref:`LAMMPS C-library interface internally through the :ref:`LAMMPS C-library interface <lammps_c_api>`
<lammps_c_api>`. in a separate thread.
Specifically, a LAMMPS instance will be created by calling Specifically, a LAMMPS instance will be created by calling
:cpp:func:`lammps_open_no_mpi`. The buffer contents then executed by :cpp:func:`lammps_open_no_mpi`. The buffer contents are then executed by
calling :cpp:func:`lammps_commands_string`. Certain commands and calling :cpp:func:`lammps_commands_string`. Certain commands and
features are only available after a LAMMPS instance is created. Its features are only available after a LAMMPS instance is created. Its
presence is indicated by a small LAMMPS ``L`` logo in the status bar presence is indicated by a small LAMMPS ``L`` logo in the status bar
@ -449,16 +573,16 @@ reading the file. This is mainly provided as a fallback option in
case the input uses some feature that is not available when running case the input uses some feature that is not available when running
from a string buffer. from a string buffer.
The LAMMPS calculation will be run in a concurrent thread so that the The LAMMPS calculations are run in a concurrent thread so that the GUI
GUI can stay responsive and be updated during the run. This can be can stay responsive and be updated during the run. The GUI can retrieve
used to tell the running LAMMPS instance to stop at the next timestep. data from the running LAMMPS instance and tell it to stop at the next
The ``Stop LAMMPS`` entry will do this by calling timestep. The ``Stop LAMMPS`` entry will do this by calling the
:cpp:func:`lammps_force_timeout`, which is equivalent to a :doc:`timer :cpp:func:`lammps_force_timeout` library function, which is equivalent
timeout 0 <timer>` command. to a :doc:`timer timeout 0 <timer>` command.
The ``Set Variables...`` entry will open a dialog box where The ``Set Variables...`` entry opens a dialog box where
:doc:`index style variables <variable>` can be set. Those variables :doc:`index style variables <variable>` can be set. Those variables
will be passed to the LAMMPS instance when it is created and are thus are passed to the LAMMPS instance when it is created and are thus
set *before* a run is started. set *before* a run is started.
.. image:: JPG/lammps-gui-variables.png .. image:: JPG/lammps-gui-variables.png
@ -478,12 +602,12 @@ in an ``Image Viewer`` window.
The ``View in OVITO`` entry will launch `OVITO <https://ovito.org>`_ The ``View in OVITO`` entry will launch `OVITO <https://ovito.org>`_
with a :doc:`data file <write_data>` containing the current state of with a :doc:`data file <write_data>` containing the current state of
the system. This option is only available if the LAMMPS GUI can find the system. This option is only available if LAMMPS-GUI can find
the OVITO executable in the system path. the OVITO executable in the system path.
The ``View in VMD`` entry will launch VMD with a :doc:`data file The ``View in VMD`` entry will launch VMD with a :doc:`data file
<write_data>` containing the current state of the system. This option <write_data>` containing the current state of the system. This option
is only available if the LAMMPS GUI can find the VMD executable in the is only available if LAMMPS-GUI can find the VMD executable in the
system path. system path.
View View
@ -498,14 +622,17 @@ About
^^^^^ ^^^^^
The ``About`` menu finally offers a couple of dialog windows and an The ``About`` menu finally offers a couple of dialog windows and an
option to launch the LAMMPS online documentation in a web browser. option to launch the LAMMPS online documentation in a web browser. The
The ``About LAMMPS`` entry displays a dialog with a summary of the ``About LAMMPS-GUI`` entry displays a dialog with a summary of the
configuration settings of the LAMMPS library in use and the version configuration settings of the LAMMPS library in use and the version
number of LAMMPS GUI itself. The ``Quick Help`` displays a dialog number of LAMMPS-GUI itself. The ``Quick Help`` displays a dialog with
with a minimal description of LAMMPS GUI. The ``LAMMPS GUI Howto`` a minimal description of LAMMPS-GUI. The ``LAMMPS-GUI Howto`` entry
entry will open this documentation page from the online documentation will open this documentation page from the online documentation in a web
in a web browser window. The ``LAMMPS Manual`` entry will open the browser window. The ``LAMMPS Manual`` entry will open the main page of
main page of the LAMMPS documentation in the web browser. the LAMMPS online documentation in a web browser window.
The ``LAMMPS Tutorial`` entry will open the main page of the set of
LAMMPS tutorials authored and maintained by Simon Gravelle at
https://lammpstutorials.github.io/ in a web browser window.
----- -----
@ -513,8 +640,8 @@ Preferences
----------- -----------
The ``Preferences`` dialog allows customization of the behavior and The ``Preferences`` dialog allows customization of the behavior and
look of the LAMMPS GUI application. The settings are grouped and each look of LAMMPS-GUI. The settings are grouped and each group is
group is displayed within a tab. displayed within a tab.
.. |guiprefs1| image:: JPG/lammps-gui-prefs-general.png .. |guiprefs1| image:: JPG/lammps-gui-prefs-general.png
:width: 24% :width: 24%
@ -534,9 +661,9 @@ General Settings:
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
- *Echo input to log:* when checked, all input commands, including - *Echo input to log:* when checked, all input commands, including
variable expansions, will be echoed to the log window. This is variable expansions, are echoed to the *Output* window. This is
equivalent to using `-echo screen` at the command line. There is no equivalent to using `-echo screen` at the command line. There is no
log *file* produced by default, since LAMMPS GUI uses `-log none`. log *file* produced by default, since LAMMPS-GUI uses `-log none`.
- *Include citation details:* when checked full citation info will be - *Include citation details:* when checked full citation info will be
included to the log window. This is equivalent to using `-cite included to the log window. This is equivalent to using `-cite
screen` on the command line. screen` on the command line.
@ -558,12 +685,12 @@ General Settings:
chart window will be replaced when a new snapshot image is requested, chart window will be replaced when a new snapshot image is requested,
otherwise each command will create a new image window. otherwise each command will create a new image window.
- *Path to LAMMPS Shared Library File:* this option is only visible - *Path to LAMMPS Shared Library File:* this option is only visible
when LAMMPS GUI was compiled to load the LAMMPS library at run time when LAMMPS-GUI was compiled to load the LAMMPS library at run time
instead of being linked to it directly. With the ``Browse..`` button instead of being linked to it directly. With the ``Browse..`` button
or by changing the text, a different shared library file with a or by changing the text, a different shared library file with a
different compilation of LAMMPS with different settings or from a different compilation of LAMMPS with different settings or from a
different version can be loaded. After this setting was changed, different version can be loaded. After this setting was changed,
LAMMPS GUI needs to be re-launched. LAMMPS-GUI needs to be re-launched.
- *Select Default Font:* Opens a font selection dialog where the type - *Select Default Font:* Opens a font selection dialog where the type
and size for the default font (used for everything but the editor and and size for the default font (used for everything but the editor and
log) of the application can be set. log) of the application can be set.
@ -571,11 +698,12 @@ General Settings:
size for the text editor and log font of the application can be set. size for the text editor and log font of the application can be set.
- *GUI update interval:* Allows to set the time interval between GUI - *GUI update interval:* Allows to set the time interval between GUI
and data updates during a LAMMPS run in milliseconds. The default is and data updates during a LAMMPS run in milliseconds. The default is
to update the GUI every 100 milliseconds. This is good for most cases. to update the GUI every 10 milliseconds. This is good for most cases.
For LAMMPS runs that run very fast, however, data may be missed and For LAMMPS runs that run *very* fast, however, data may be missed and
through lowering this interval, this can be corrected. However, this through lowering this interval, this can be corrected. However, this
will make the GUI use more resources, which may be a problem on some will make the GUI use more resources, which may be a problem on some
computers with slower CPUs. The default value is 100 milliseconds. computers with slower CPUs and a small number of CPU cores. This
setting may be changed to a value between 1 and 1000 milliseconds.
Accelerators: Accelerators:
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
@ -648,48 +776,54 @@ available (On macOS use the Command key instead of Ctrl/Control).
- Redo edit - Redo edit
- Ctrl+/ - Ctrl+/
- Stop Active Run - Stop Active Run
* - Ctrl+S * - Ctrl+Shift+F
- Save File - View File
- Ctrl+C - Ctrl+C
- Copy text - Copy text
- Ctrl+Shift+V - Ctrl+Shift+V
- Set Variables - Set Variables
* - Ctrl+Shift+S * - Ctrl+S
- Save File As - Save File
- Ctrl+X - Ctrl+X
- Cut text - Cut text
- Ctrl+I - Ctrl+I
- Snapshot Image - Snapshot Image
* - Ctrl+Q * - Ctrl+Shift+S
- Quit Application - Save File As
- Ctrl+V - Ctrl+V
- Paste text - Paste text
- Ctrl+L - Ctrl+L
- Slide Show - Slide Show
* - Ctrl+W * - Ctrl+Q
- Close Window - Quit Application
- Ctrl+A - Ctrl+A
- Select All - Select All
- Ctrl+P - Ctrl+P
- Preferences - Preferences
* - Ctrl+Shift+A * - Ctrl+W
- About LAMMPS - Close Window
- Ctrl+Shift+H - Ctrl+Shift+H
- Quick Help - Quick Help
- Ctrl+Shift+G - Ctrl+Shift+G
- LAMMPS GUI Howto - LAMMPS-GUI Howto
* - Ctrl+Shift+M * - Ctrl+Shift+A
- LAMMPS Manual - About LAMMPS
- Ctrl+? - Ctrl+?
- Context Help - Context Help
- Ctrl+Shift+W - Ctrl+Shift+W
- Show Variables - Show Variables
* - Ctrl+Shift+Enter * - Ctrl+Shift+M
- Run File - LAMMPS Manual
- TAB - TAB
- Reformat line - Reformat line
- Shift+TAB - Shift+TAB
- Show Completions - Show Completions
* - Ctrl+Shift+T
- LAMMPS Tutorial
- Ctrl+Shift+Enter
- Run File
-
-
Further editing keybindings `are documented with the Qt documentation Further editing keybindings `are documented with the Qt documentation
<https://doc.qt.io/qt-5/qplaintextedit.html#editing-key-bindings>`_. In <https://doc.qt.io/qt-5/qplaintextedit.html#editing-key-bindings>`_. In

View File

@ -6,19 +6,22 @@ PyLammps Tutorial
Overview Overview
-------- --------
``PyLammps`` is a Python wrapper class for LAMMPS which can be created :py:class:`PyLammps <lammps.PyLammps>` is a Python wrapper class for
on its own or use an existing lammps Python object. It creates a simpler, LAMMPS which can be created on its own or use an existing
:py:class:`lammps Python <lammps.lammps>` object. It creates a simpler,
more "pythonic" interface to common LAMMPS functionality, in contrast to more "pythonic" interface to common LAMMPS functionality, in contrast to
the ``lammps`` wrapper for the C-style LAMMPS library interface which the :py:class:`lammps <lammps.lammps>` wrapper for the LAMMPS :ref:`C
is written using `Python ctypes <ctypes_>`_. The ``lammps`` wrapper language library interface API <lammps_c_api>` which is written using
is discussed on the :doc:`Python_head` doc page. `Python ctypes <ctypes_>`_. The :py:class:`lammps <lammps.lammps>`
wrapper is discussed on the :doc:`Python_head` doc page.
Unlike the flat ``ctypes`` interface, PyLammps exposes a discoverable Unlike the flat `ctypes <ctypes_>`_ interface, PyLammps exposes a
API. It no longer requires knowledge of the underlying C++ code discoverable API. It no longer requires knowledge of the underlying C++
implementation. Finally, the ``IPyLammps`` wrapper builds on top of code implementation. Finally, the :py:class:`IPyLammps
``PyLammps`` and adds some additional features for <lammps.IPyLammps>` wrapper builds on top of :py:class:`PyLammps
`IPython integration <ipython_>`_ into `Jupyter notebooks <jupyter_>`_, <lammps.PyLammps>` and adds some additional features for `IPython
e.g. for embedded visualization output from :doc:`dump style image <dump_image>`. integration <ipython_>`_ into `Jupyter notebooks <jupyter_>`_, e.g. for
embedded visualization output from :doc:`dump style image <dump_image>`.
.. _ctypes: https://docs.python.org/3/library/ctypes.html .. _ctypes: https://docs.python.org/3/library/ctypes.html
.. _ipython: https://ipython.org/ .. _ipython: https://ipython.org/
@ -30,19 +33,22 @@ Comparison of lammps and PyLammps interfaces
lammps.lammps lammps.lammps
""""""""""""" """""""""""""
* uses ``ctypes`` * uses `ctypes <ctypes_>`_
* direct memory access to native C++ data * direct memory access to native C++ data with optional support for NumPy arrays
* provides functions to send and receive data to LAMMPS * provides functions to send and receive data to LAMMPS
* interface modeled after the LAMMPS :ref:`C language library interface API <lammps_c_api>`
* requires knowledge of how LAMMPS internally works (C pointers, etc) * requires knowledge of how LAMMPS internally works (C pointers, etc)
* full support for running Python with MPI using `mpi4py <https://mpi4py.readthedocs.io>`_
lammps.PyLammps lammps.PyLammps
""""""""""""""" """""""""""""""
* higher-level abstraction built on top of original ctypes interface * higher-level abstraction built on *top* of original :py:class:`ctypes based interface <lammps.lammps>`
* manipulation of Python objects * manipulation of Python objects
* communication with LAMMPS is hidden from API user * communication with LAMMPS is hidden from API user
* shorter, more concise Python * shorter, more concise Python
* better IPython integration, designed for quick prototyping * better IPython integration, designed for quick prototyping
* designed for serial execution
Quick Start Quick Start
----------- -----------
@ -506,14 +512,26 @@ inside of the IPython notebook.
Using PyLammps and mpi4py (Experimental) Using PyLammps and mpi4py (Experimental)
---------------------------------------- ----------------------------------------
PyLammps can be run in parallel using mpi4py. This python package can be installed using PyLammps can be run in parallel using `mpi4py
<https://mpi4py.readthedocs.io>`_. This python package can be installed
using
.. code-block:: bash .. code-block:: bash
pip install mpi4py pip install mpi4py
The following is a short example which reads in an existing LAMMPS input file and .. warning::
executes it in parallel. You can find in.melt in the examples/melt folder.
Usually, any :py:class:`PyLammps <lammps.PyLammps>` command must be
executed by *all* MPI processes. However, evaluations and querying
the system state is only available on MPI rank 0. Using these
functions from other MPI ranks will raise an exception.
The following is a short example which reads in an existing LAMMPS input
file and executes it in parallel. You can find in.melt in the
examples/melt folder. Please take note that the
:py:meth:`PyLammps.eval() <lammps.PyLammps.eval>` is called only from
MPI rank 0.
.. code-block:: python .. code-block:: python
@ -535,10 +553,6 @@ following mpirun command:
mpirun -np 4 python melt.py mpirun -np 4 python melt.py
.. warning::
Any command must be executed by all MPI processes. However, evaluations and querying the system state is only available on rank 0.
Feedback and Contributing Feedback and Contributing
------------------------- -------------------------

116
doc/src/Howto_rheo.rst Normal file
View File

@ -0,0 +1,116 @@
Reproducing hydrodynamics and elastic objects (RHEO)
====================================================
The RHEO package is a hybrid implementation of smoothed particle
hydrodynamics (SPH) for fluid flow, which can couple to the :doc:`BPM package
<Howto_bpm>` to model solid elements. RHEO combines these methods to enable
mesh-free modeling of multi-phase material systems. Its SPH solver supports
many advanced options including reproducing kernels, particle shifting, free
surface identification, and solid surface reconstruction. To model fluid-solid
systems, the status of particles can dynamically change between a fluid and
solid state, e.g. during melting/solidification, which determines how they
interact and their physical behavior. The package is designed with modularity
in mind, so one can easily turn various features on/off, adjust physical
details of the system, or develop new capabilities. For instance, the numerics
associated with calculating gradients, reproducing kernels, etc. are separated
into distinct classes to simplify the development of new integration schemes
which can call these calculations. Additional numerical details can be found in
:ref:`(Palermo) <howto_rheo_palermo>` and
:ref:`(Clemmer) <howto_rheo_clemmer>`.
Note, if you simply want to run a traditional SPH simulation, the :ref:`SPH package
<PKG-SPH>` package is likely better suited for your application. It has fewer advanced
features and therefore benefits from improved performance. The :ref:`MACHDYN
<PKG-MACHDYN>` package for solids may also be relevant for fluid-solid problems.
----------
At the core of the package is :doc:`fix rheo <fix_rheo>` which integrates
particle trajectories and controls many optional features (e.g. the use
of reproducing kernels). In conjunction to fix rheo, one must specify an
instance of :doc:`fix rheo/pressure <fix_rheo_pressure>` and
:doc:`fix rheo/viscosity <fix_rheo_viscosity>` to define a pressure equation
of state and viscosity model, respectively. Optionally, one can model
a heat equation with :doc:`fix rheo/thermal <fix_rheo_thermal>`, which also
allows the user to specify equations for a particle's thermal conductivity,
specific heat, latent heat, and melting temperature. The ordering of these
fixes in an an input script matters. Fix rheo must be defined prior to all
other RHEO fixes.
Typically, RHEO requires atom style rheo. In addition to typical atom
properties like positions and forces, particles store a local density,
viscosity, pressure, and status. If thermal evolution is modeled, one must
use atom style rheo/thermal which also includes a local energy, temperature, and
conductivity. Note that the temperature is always derived from the energy.
This implies the *temperature* attribute of :doc:`the set command <set>` does not
affect particles. Instead, one should use the *sph/e* attribute.
The status variable uses bit-masking to track various properties of a particle
such as its current state of matter (fluid or solid) and its location relative
to a surface. Some of these properties (and others) can be accessed using
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`. The *status*
attribute in :doc:`the set command <set>` only allows control over the first bit
which sets the state of matter, 0 is fluid and 1 is solid.
Fluid interactions, including pressure forces, viscous forces, and heat exchange,
are calculated using :doc:`pair rheo <pair_rheo>`. Unlike typical pair styles,
pair rheo ignores the :doc:`special bond <special_bonds>` settings. Instead,
it determines whether to calculate forces based on the status of particles: e.g.,
hydrodynamic forces are only calculated if a fluid particle is involved.
----------
To model elastic objects, there are currently two mechanisms in RHEO, one designed
for bulk solid bodies and the other for thin shells. Both mechanisms rely on
introducing bonded forces between particles and therefore require a hybrid of atom
style bond and rheo (or rheo/thermal).
To create an elastic solid body, one has to (a) change the status of constituent
particles to solid (e.g. with the :doc:`set <set>` command), (b) create bpm
bonds between the particles (see the :doc:`bpm howto <Howto_bpm>` page for
more details), and (c) use :doc:`pair rheo/solid <pair_rheo_solid>` to
apply repulsive contact forces between distinct solid bodies. Akin to pair rheo,
pair rheo/solid considers a particles fluid/solid phase to determine whether to
apply forces. However, unlike pair rheo, pair rheo/solid does obey special bond
settings such that contact forces do not have to be calculated between two bonded
solid particles in the same elastic body.
In systems with thermal evolution, fix rheo/thermal can optionally set a
melting/solidification temperature allowing particles to dynamically swap their
state between fluid and solid when the temperature exceeds or drops below the
critical temperature, respectively. Using the *react* option, one can specify a maximum
bond length and a bond type. Then, when solidifying, particles will search their
local neighbors and automatically create bonds with any neighboring solid particles
in range. For BPM bond styles, bonds will then use the immediate position of the two
particles to calculate a reference state. When melting, particles will delete any
bonds of the specified type when reverting to a fluid state. Special bonds are updated
as bonds are created/broken.
The other option for elastic objects is an elastic shell that is nominally much
thinner than a particle diameter, e.g. a oxide skin which gradually forms over time
on the surface of a fluid. Currently, this is implemented using
:doc:`fix rheo/oxidation <fix_rheo_oxidation>` and bond style
:doc:`rheo/shell <bond_rheo_shell>`. Essentially, fix rheo/oxidation creates candidate
bonds of a specified type between surface fluid particles within a specified distance.
a newly created rheo/shell bond will then start a timer. While the timer is counting
down, the bond will delete itself if particles move too far apart or move away from the
surface. However, if the timer reaches a user-defined threshold, then the bond will
activate and apply additional forces to the fluid particles. Bond style rheo/shell
then operates very similarly to a BPM bond style, storing a reference length and
breaking if stretched too far. Unlike the above method, this option does not remove
the underlying fluid interactions (although particle shifting is turned off) and does
not modify special bond settings of particles.
While these two options are not expected to be appropriate for every system,
either framework can be modified to create more suitable models (e.g. by changing the
criteria for creating/deleting a bond or altering force calculations).
----------
.. _howto_rheo_palermo:
**(Palermo)** Palermo, Wolf, Clemmer, O'Connor, in preparation.
.. _howto_rheo_clemmer:
**(Clemmer)** Clemmer, Pierce, O'Connor, Nevins, Jones, Lechman, Tencer, Appl. Math. Model., 130, 310-326 (2024).

View File

@ -35,11 +35,11 @@ packages listed below), they do not depend on any installed software and
thus should run on *any* 64-bit x86 machine with *any* Linux version. thus should run on *any* 64-bit x86 machine with *any* Linux version.
These executable include most of the available packages and multi-thread These executable include most of the available packages and multi-thread
parallelization (via INTEL, KOKKOS, or OPENMP package). They are **not** parallelization (via INTEL, KOKKOS, or OPENMP package). They are
compatible with MPI. Several of the LAMMPS tools executables (e.g. ``msi2lmp``) **not** compatible with MPI. Several of the LAMMPS tools executables
and the ``lammps-shell`` program are included as well. Because of the (e.g. ``msi2lmp``) are included as well. Because of the static linkage,
static linkage, there is no ``liblammps.so`` library file and thus also the there is no ``liblammps.so`` library file and thus also the LAMMPS
LAMMPS python module, which depends on it, is not included. python module, which depends on it, is not included.
The compressed tar archives available for download have names following The compressed tar archives available for download have names following
the pattern ``lammps-linux-x86_64-<version>.tar.gz`` and will all unpack the pattern ``lammps-linux-x86_64-<version>.tar.gz`` and will all unpack

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

View File

@ -13,6 +13,8 @@ This section documents the following functions:
- :cpp:func:`lammps_extract_setting` - :cpp:func:`lammps_extract_setting`
- :cpp:func:`lammps_extract_global_datatype` - :cpp:func:`lammps_extract_global_datatype`
- :cpp:func:`lammps_extract_global` - :cpp:func:`lammps_extract_global`
- :cpp:func:`lammps_extract_pair_dimension`
- :cpp:func:`lammps_extract_pair`
- :cpp:func:`lammps_map_atom` - :cpp:func:`lammps_map_atom`
-------------------- --------------------
@ -123,6 +125,16 @@ subdomains and processors.
----------------------- -----------------------
.. doxygenfunction:: lammps_extract_pair_dimension
:project: progguide
-----------------------
.. doxygenfunction:: lammps_extract_pair
:project: progguide
-----------------------
.. doxygenfunction:: lammps_map_atom .. doxygenfunction:: lammps_map_atom
:project: progguide :project: progguide

View File

@ -8,12 +8,12 @@ info on how to download or build any extra library it requires. It also
gives links to documentation, example scripts, and pictures/movies (if gives links to documentation, example scripts, and pictures/movies (if
available) that illustrate use of the package. available) that illustrate use of the package.
The majority of packages can be included in a LAMMPS build with a The majority of packages can be included in a LAMMPS build with a single
single setting (``-D PKG_<NAME>=on`` for CMake) or command setting (``-D PKG_<NAME>=on`` for CMake) or command (``make yes-<name>``
(``make yes-<name>`` for make). See the :doc:`Build package <Build_package>` for make). See the :doc:`Build package <Build_package>` page for more
page for more info. A few packages may require additional steps; info. A few packages may require additional steps; this is indicated in
this is indicated in the descriptions below. The :doc:`Build extras <Build_extras>` the descriptions below. The :doc:`Build extras <Build_extras>` page
page gives those details. gives those details.
.. note:: .. note::
@ -103,6 +103,7 @@ page gives those details.
* :ref:`QEQ <PKG-QEQ>` * :ref:`QEQ <PKG-QEQ>`
* :ref:`QMMM <PKG-QMMM>` * :ref:`QMMM <PKG-QMMM>`
* :ref:`QTB <PKG-QTB>` * :ref:`QTB <PKG-QTB>`
* :ref:`RHEO <PKG-RHEO>`
* :ref:`REACTION <PKG-REACTION>` * :ref:`REACTION <PKG-REACTION>`
* :ref:`REAXFF <PKG-REAXFF>` * :ref:`REAXFF <PKG-REAXFF>`
* :ref:`REPLICA <PKG-REPLICA>` * :ref:`REPLICA <PKG-REPLICA>`
@ -1323,18 +1324,19 @@ KSPACE package
**Contents:** **Contents:**
A variety of long-range Coulombic solvers, as well as pair styles A variety of long-range Coulombic solvers, as well as pair styles which
which compute the corresponding short-range pairwise Coulombic compute the corresponding short-range pairwise Coulombic interactions.
interactions. These include Ewald, particle-particle particle-mesh These include Ewald, particle-particle particle-mesh (PPPM), and
(PPPM), and multilevel summation method (MSM) solvers. multilevel summation method (MSM) solvers.
**Install:** **Install:**
Building with this package requires a 1d FFT library be present on Building with this package requires a 1d FFT library be present on your
your system for use by the PPPM solvers. This can be the KISS FFT system for use by the PPPM solvers. This can be the KISS FFT library
library provided with LAMMPS, third party libraries like FFTW, or a provided with LAMMPS, third party libraries like FFTW, or a
vendor-supplied FFT library. See the :doc:`Build settings <Build_settings>` page for details on how to select vendor-supplied FFT library. See the :doc:`Build settings
different FFT options for your LAMPMS build. <Build_settings>` page for details on how to select different FFT
options for your LAMMPS build.
**Supporting info:** **Supporting info:**
@ -2624,6 +2626,45 @@ another set.
---------- ----------
.. _PKG-RHEO:
RHEO package
------------
**Contents:**
Pair styles, bond styles, fixes, and computes for reproducing
hydrodynamics and elastic objects. See the :doc:`Howto rheo
<Howto_rheo>` page for an overview.
**Install:**
This package has :ref:`specific installation instructions <rheo>` on the :doc:`Build extras <Build_extras>` page.
**Authors:** Joel T. Clemmer (Sandia National Labs),
Thomas C. O'Connor (Carnegie Mellon University)
.. versionadded:: TBD
**Supporting info:**
* src/RHEO filenames -> commands
* :doc:`Howto_rheo <Howto_rheo>`
* :doc:`atom_style rheo <atom_style>`
* :doc:`atom_style rheo/thermal <atom_style>`
* :doc:`bond_style rheo/shell <bond_rheo_shell>`
* :doc:`compute rheo/property/atom <compute_rheo_property_atom>`
* :doc:`fix rheo <fix_rheo>`
* :doc:`fix rheo/oxidation <fix_rheo_oxidation>`
* :doc:`fix rheo/pressure <fix_rheo_pressure>`
* :doc:`fix rheo/thermal <fix_rheo_thermal>`
* :doc:`fix rheo/viscosity <fix_rheo_viscosity>`
* :doc:`pair_style rheo <pair_rheo>`
* :doc:`pair_style rheo/solid <pair_rheo_solid>`
* examples/rheo
----------
.. _PKG-RIGID: .. _PKG-RIGID:
RIGID package RIGID package

View File

@ -413,6 +413,11 @@ whether an extra library is needed to build and use the package:
- :doc:`fix qtb <fix_qtb>` :doc:`fix qbmsst <fix_qbmsst>` - :doc:`fix qtb <fix_qtb>` :doc:`fix qbmsst <fix_qbmsst>`
- qtb - qtb
- no - no
* - :ref:`RHEO <PKG-RHEO>`
- reproducing hydrodynamics and elastic objects
- :doc:`Howto rheo <Howto_rheo>`
- rheo
- no
* - :ref:`REACTION <PKG-REACTION>` * - :ref:`REACTION <PKG-REACTION>`
- chemical reactions in classical MD - chemical reactions in classical MD
- :doc:`fix bond/react <fix_bond_react>` - :doc:`fix bond/react <fix_bond_react>`

View File

@ -92,7 +92,6 @@ Miscellaneous tools
* :ref:`emacs <emacs>` * :ref:`emacs <emacs>`
* :ref:`i-PI <ipi>` * :ref:`i-PI <ipi>`
* :ref:`kate <kate>` * :ref:`kate <kate>`
* :ref:`LAMMPS shell <lammps_shell>`
* :ref:`LAMMPS GUI <lammps_gui>` * :ref:`LAMMPS GUI <lammps_gui>`
* :ref:`LAMMPS magic patterns for file(1) <magic>` * :ref:`LAMMPS magic patterns for file(1) <magic>`
* :ref:`Offline build tool <offline>` * :ref:`Offline build tool <offline>`
@ -444,219 +443,9 @@ The file was provided by Alessandro Luigi Sellerio
---------- ----------
.. _lammps_shell:
LAMMPS shell
------------
.. versionadded:: 9Oct2020
Overview
^^^^^^^^
The LAMMPS Shell, ``lammps-shell`` is a program that functions very
similar to the regular LAMMPS executable but has several modifications
and additions that make it more powerful for interactive sessions,
i.e. where you type LAMMPS commands from the prompt instead of reading
them from a file.
- It uses the readline and history libraries to provide command line
editing and context aware TAB-expansion (details on that below).
- When processing an input file with the '-in' or '-i' flag from the
command line, it does not exit at the end of that input file but
stops at a prompt, so that additional commands can be issued
- Errors will not abort the shell but return to the prompt.
- It has additional commands aimed at interactive use (details below).
- Interrupting a calculation with CTRL-C will not terminate the
session but rather enforce a timeout to cleanly stop an ongoing
run (more info on timeouts is in the :doc:`timer command <timer>`
documentation).
These enhancements make the LAMMPS shell an attractive choice for
interactive LAMMPS sessions in graphical desktop environments
(e.g. Gnome, KDE, Cinnamon, XFCE, Windows).
TAB-expansion
^^^^^^^^^^^^^
When writing commands interactively at the shell prompt, you can hit
the TAB key at any time to try and complete the text. This completion
is context aware and will expand any first word only to commands
available in that executable.
- For style commands it will expand to available styles of the
corresponding category (e.g. pair styles after a
:doc:`pair_style <pair_style>` command).
- For :doc:`compute <compute>`, :doc:`fix <fix>`, or :doc:`dump <dump>`
it will also expand only to already defined groups for the group-ID
keyword.
- For commands like :doc:`compute_modify <compute_modify>`,
:doc:`fix_modify <fix_modify>`, or :doc:`dump_modify <dump_modify>`
it will expand to known compute/fix/dump IDs only.
- When typing references to computes, fixes, or variables with a
"c\_", "f\_", or "v\_" prefix, respectively, then the expansion will
be to known compute/fix IDs and variable names. Variable name
expansion is also available for the ${name} variable syntax.
- In all other cases TAB expansion will complete to names of files
and directories.
Command line editing and history
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When typing commands, command line editing similar to what BASH
provides is available. Thus it is possible to move around the
currently line and perform various cut and insert and edit operations.
Previous commands can be retrieved by scrolling up (and down)
or searching (e.g. with CTRL-r).
Also history expansion through using the exclamation mark '!'
can be performed. Examples: '!!' will be replaced with the previous
command, '!-2' will repeat the command before that, '!30' will be
replaced with event number 30 in the command history list, and
'!run' with the last command line that started with "run". Adding
a ":p" to such a history expansion will result that the expansion is
printed and added to the history list, but NOT executed.
On exit the LAMMPS shell will write the history list to a file
".lammps_history" in the current working directory. If such a
file exists when the LAMMPS shell is launched it will be read to
populate the history list.
This is realized via the readline library and can thus be customized
with an ``.inputrc`` file in the home directory. For application
specific customization, the LAMMPS shell uses the name "lammps-shell".
For more information about using and customizing an application using
readline, please see the available documentation at:
https://www.gnu.org/software/readline/
Additional commands
^^^^^^^^^^^^^^^^^^^
The following commands are added to the LAMMPS shell on top of the
regular LAMMPS commands:
.. parsed-literal::
help (or ?) print a brief help message
history display the current command history list
clear_history wipe out the current command history list
save_history <range> <file>
write commands from the history to file.
The range is given as <from>-<to>, where <from> and <to>
may be empty. Example: save_history 100- in.recent
source <file> read commands from file (same as "include")
pwd print current working directory
cd <directory> change current working directory (same as pwd if no directory)
mem print current and maximum memory usage
\|<command> execute <command> as a shell command and return to the command prompt
exit exit the LAMMPS shell cleanly (unlike the "quit" command)
Please note that some known shell operations are implemented in the
LAMMPS :doc:`shell command <shell>` in a platform neutral fashion,
while using the '\|' character will always pass the following text
to the operating system's shell command.
Compilation
^^^^^^^^^^^
Compilation of the LAMMPS shell can be enabled by setting the CMake
variable ``BUILD_LAMMPS_SHELL`` to "on" or using the makefile in the
``tools/lammps-shell`` folder to compile after building LAMMPS using
the conventional make procedure. The makefile will likely need
customization depending on the features and settings used for
compiling LAMMPS.
Limitations
^^^^^^^^^^^
The LAMMPS shell was not designed for use with MPI parallelization
via ``mpirun`` or ``mpiexec`` or ``srun``.
Readline customization
^^^^^^^^^^^^^^^^^^^^^^
The behavior of the readline functionality can be customized in the
``${HOME}/.inputrc`` file. This can be used to alter the default
settings or change the key-bindings. The LAMMPS Shell sets the
application name ``lammps-shell``, so settings can be either applied
globally or only for the LAMMPS shell by bracketing them between
``$if lammps-shell`` and ``$endif`` like in the following example:
.. code-block:: bash
$if lammps-shell
# disable "beep" or "screen flash"
set bell-style none
# bind the "Insert" key to toggle overwrite mode
"\e[2~": overwrite-mode
$endif
More details about this are in the `readline documentation <https://tiswww.cwru.edu/php/chet/readline/rluserman.html#SEC9>`_.
LAMMPS Shell tips and tricks
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Below are some suggestions for how to use and customize the LAMMPS shell.
Enable tilde expansion
""""""""""""""""""""""
Adding ``set expand-tilde on`` to ``${HOME}/.inputrc`` is recommended as
this will change the filename expansion behavior to replace any text
starting with "~" by the full path to the corresponding user's home
directory. While the expansion of filenames **will** happen on all
arguments where the context is not known (e.g. ``~/compile/lamm<TAB>``
will expand to ``~/compile/lammps/``), it will not replace the tilde by
default. But since LAMMPS does not do tilde expansion itself (unlike a
shell), this will result in errors. Instead the tilde-expression should
be expanded into a valid path, where the plain "~/" stands for the
current user's home directory and "~someuser/" stands for
"/home/someuser" or whatever the full path to that user's home directory
is.
File extension association
""""""""""""""""""""""""""
Since the LAMMPS shell (unlike the regular LAMMPS executable) does not
exit when an input file is passed on the command line with the "-in" or
"-i" flag (the behavior is like for ``python -i <filename>``), it makes
the LAMMPS shell suitable for associating it with input files based on
their filename extension (e.g. ".lmp"). Since ``lammps-shell`` is a
console application, you have to run it inside a terminal program with a
command line like this:
.. code-block:: bash
xterm -title "LAMMPS Shell" -e /path/to/lammps-shell -i in.file.lmp
Use history to create an input file
"""""""""""""""""""""""""""""""""""
When experimenting with commands to interactively to figure out a
suitable choice of settings or simply the correct syntax, you may want
to record part of your commands to a file for later use. This can be
done with the ``save_history`` commands, which allows to selectively
write a section of the command history to a file (Example:
``save_history 25-30 in.run``). This file can be further edited
(Example: ``|vim in.run``) and then the file read back in and tried out
(Example: ``source in.run``). If the input also creates a system box,
you first need to use the :doc:`clear` command.
----------
.. _lammps_gui: .. _lammps_gui:
LAMMPS GUI LAMMPS-GUI
---------- ----------
.. versionadded:: 2Aug2023 .. versionadded:: 2Aug2023
@ -664,25 +453,28 @@ LAMMPS GUI
Overview Overview
^^^^^^^^ ^^^^^^^^
LAMMPS GUI is a graphical text editor customized for editing LAMMPS LAMMPS-GUI is a graphical text editor customized for editing LAMMPS
input files that is linked to the :ref:`LAMMPS C-library <lammps_c_api>` input files that is linked to the :ref:`LAMMPS C-library <lammps_c_api>`
and thus can run LAMMPS directly using the contents of the editor's text and thus can run LAMMPS directly using the contents of the editor's text
buffer as input. It can retrieve and display information from LAMMPS buffer as input. It can retrieve and display information from LAMMPS
while it is running, display visualizations created with the :doc:`dump while it is running, display visualizations created with the :doc:`dump
image command <dump_image>`, and is adapted specifically for editing image command <dump_image>`, and is adapted specifically for editing
LAMMPS input files through text completion and reformatting, and linking LAMMPS input files through syntax highlighting, text completion, and
to the online LAMMPS documentation for known LAMMPS commands and styles. reformatting, and linking to the online LAMMPS documentation for known
LAMMPS commands and styles.
This is similar to what people traditionally would do to run LAMMPS: This is similar to what people traditionally would do to run LAMMPS but
using a regular text editor to edit the input and run the necessary all rolled into a single application: that is, using a text editor,
commands, possibly including the text editor, too, from a command line plotting program, and a visualization program to edit the input, run
terminal window. This similarity is a design goal. While making it easy LAMMPS, process the output into graphs and visualizations from a command
for beginners to start with LAMMPS, it is also the intention to simplify line window. This similarity is a design goal. While making it easy for
the transition to workflows like most experienced LAMMPS users do. beginners to start with LAMMPS, it is also the expectation that
LAMMPS-GUI users will eventually transition to workflows that most
experienced LAMMPS users employ.
All features have been extensively exposed to keyboard shortcuts, so All features have been extensively exposed to keyboard shortcuts, so
that there is also appeal for experienced LAMMPS users for prototyping that there is also appeal for experienced LAMMPS users for prototyping
and testing simulations setups. and testing simulation setups.
Features Features
^^^^^^^^ ^^^^^^^^
@ -690,46 +482,46 @@ Features
A detailed discussion and explanation of all features and functionality A detailed discussion and explanation of all features and functionality
are in the :doc:`Howto_lammps_gui` tutorial Howto page. are in the :doc:`Howto_lammps_gui` tutorial Howto page.
Here are a few highlights of LAMMPS GUI Here are a few highlights of LAMMPS-GUI
- Text editor with syntax highlighting customized for LAMMPS - Text editor with line numbers and syntax highlighting customized for LAMMPS
- Text editor will switch working directory to folder of file in buffer - Text editor features command completion and auto-indentation for known commands and styles
- Text editor will remember up to 5 recent files - Text editor will switch its working directory to folder of file in buffer
- Many adjustable settings and preferences that are persistent including the 5 most recent files
- Context specific LAMMPS command help via online documentation - Context specific LAMMPS command help via online documentation
- LAMMPS is running in a concurrent thread, so the GUI remains responsive - LAMMPS is running in a concurrent thread, so the GUI remains responsive
- Support for most accelerator packages
- Progress bar indicates how far a run command is completed - Progress bar indicates how far a run command is completed
- LAMMPS can be started and stopped with a hotkey - LAMMPS can be started and stopped with a mouse click or a hotkey
- Screen output is captured in a Log Window - Screen output is captured in an *Output* Window
- Thermodynamic output is captured and displayed as line graph in a Chart Window - Thermodynamic output is captured and displayed as line graph in a *Chart* Window
- Indicator for currently executed command - Indicator for currently executed command
- Indicator for line that caused an error - Indicator for line that caused an error
- Visualization of current state in Image Viewer (via :doc:`dump image <dump_image>`) - Visualization of current state in Image Viewer (via calling :doc:`write_dump image <dump_image>`)
- Many adjustable settings and preferences that are persistent - Capture of images created via :doc:`dump image <dump_image>` in Slide show window
- Dialog to set variables from the LAMMPS command line - Dialog to set variables, similar to the LAMMPS command line flag '-v' / '-var'
- Support for GPU, INTEL, KOKKOS/OpenMP, OPENMAP, and OPT and accelerator packages
Parallelization Parallelization
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
Due to its nature as a graphical application, it is not possible to use Due to its nature as a graphical application, it is not possible to use
the LAMMPS GUI in parallel with MPI, but OpenMP multi-threading and GPU the LAMMPS-GUI in parallel with MPI, but OpenMP multi-threading and GPU
acceleration is available and enabled by default. acceleration is available and enabled by default.
Prerequisites and portability Prerequisites and portability
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LAMMPS GUI is programmed in C++ based on the C++11 standard and using LAMMPS-GUI is programmed in C++ based on the C++11 standard and using
the `Qt GUI framework <https://www.qt.io/product/framework>`_. the `Qt GUI framework <https://www.qt.io/product/framework>`_.
Currently, Qt version 5.12 or later is required; Qt 5.15LTS is Currently, Qt version 5.12 or later is required; Qt 5.15LTS is
recommended; support for Qt version 6.x is under active development and recommended; support for Qt version 6.x is available. Building LAMMPS
thus far only tested with Qt 6.5LTS on Linux. Building LAMMPS with with CMake is required.
CMake is required.
The LAMMPS GUI has been successfully compiled and tested on: The LAMMPS-GUI has been successfully compiled and tested on:
- Ubuntu Linux 20.04LTS x86_64 using GCC 9, Qt version 5.12 - Ubuntu Linux 20.04LTS x86_64 using GCC 9, Qt version 5.12
- Fedora Linux 40 x86\_64 using GCC 14 and Clang 17, Qt version 5.15LTS - Fedora Linux 40 x86\_64 using GCC 14 and Clang 17, Qt version 5.15LTS
- Fedora Linux 40 x86\_64 using GCC 14, Qt version 6.5LTS - Fedora Linux 40 x86\_64 using GCC 14, Qt version 6.7
- Apple macOS 12 (Monterey) and macOS 13 (Ventura) with Xcode on arm64 and x86\_64, Qt version 5.15LTS - Apple macOS 12 (Monterey) and macOS 13 (Ventura) with Xcode on arm64 and x86\_64, Qt version 5.15LTS
- Windows 10 and 11 x86_64 with Visual Studio 2022 and Visual C++ 14.36, Qt version 5.15LTS - Windows 10 and 11 x86_64 with Visual Studio 2022 and Visual C++ 14.36, Qt version 5.15LTS
- Windows 10 and 11 x86_64 with MinGW / GCC 10.0 cross-compiler on Fedora 38, Qt version 5.15LTS - Windows 10 and 11 x86_64 with MinGW / GCC 10.0 cross-compiler on Fedora 38, Qt version 5.15LTS
@ -745,20 +537,22 @@ available from https://download.lammps.org/static or
https://github.com/lammps/lammps/releases. You can unpack the archives https://github.com/lammps/lammps/releases. You can unpack the archives
(or mount the macOS disk image) and run the GUI directly in place. The (or mount the macOS disk image) and run the GUI directly in place. The
folder may also be moved around and added to the ``PATH`` environment folder may also be moved around and added to the ``PATH`` environment
variable so the executables will be found automatically. The LAMMPS GUI variable so the executables will be found automatically. The LAMMPS-GUI
executable is called ``lammps-gui`` and either takes no arguments or executable is called ``lammps-gui`` and either takes no arguments or
attempts to load the first argument as LAMMPS input file. attempts to load the first argument as LAMMPS input file.
.. _lammps_gui_compilation:
Compilation Compilation
^^^^^^^^^^^ ^^^^^^^^^^^
The source for the LAMMPS GUI is included with the LAMMPS source code The source for the LAMMPS-GUI is included with the LAMMPS source code
distribution in the folder ``tools/lammps-gui`` and thus it can be can distribution in the folder ``tools/lammps-gui`` and thus it can be can
be built as part of a regular LAMMPS compilation. :doc:`Using CMake be built as part of a regular LAMMPS compilation. :doc:`Using CMake
<Howto_cmake>` is required. To enable its compilation, the CMake <Howto_cmake>` is required. To enable its compilation, the CMake
variable ``-D BUILD_LAMMPS_GUI=on`` must be set when creating the CMake variable ``-D BUILD_LAMMPS_GUI=on`` must be set when creating the CMake
configuration. All other settings (compiler, flags, compile type) for configuration. All other settings (compiler, flags, compile type) for
LAMMPS GUI are then inherited from the regular LAMMPS build. If the Qt LAMMPS-GUI are then inherited from the regular LAMMPS build. If the Qt
library is packaged for Linux distributions, then its location is library is packaged for Linux distributions, then its location is
typically auto-detected since the required CMake configuration files are typically auto-detected since the required CMake configuration files are
stored in a location where CMake can find them without additional help. stored in a location where CMake can find them without additional help.
@ -766,17 +560,17 @@ Otherwise, the location of the Qt library installation must be indicated
by setting ``-D Qt5_DIR=/path/to/qt5/lib/cmake/Qt5``, which is a path to by setting ``-D Qt5_DIR=/path/to/qt5/lib/cmake/Qt5``, which is a path to
a folder inside the Qt installation that contains the file a folder inside the Qt installation that contains the file
``Qt5Config.cmake``. Similarly, for Qt6 the location of the Qt library ``Qt5Config.cmake``. Similarly, for Qt6 the location of the Qt library
installation can be indicated by setting ``-D Qt6_DIR=/path/to/qt6/lib/cmake/Qt6``, installation can be indicated by setting ``-D
if necessary. When both, Qt5 and Qt6 are available, Qt6 will be preferred Qt6_DIR=/path/to/qt6/lib/cmake/Qt6``, if necessary. When both, Qt5 and
unless ``-D LAMMPS_GUI_USE_QT5=yes`` is set. Qt6 are available, Qt6 will be preferred unless ``-D
LAMMPS_GUI_USE_QT5=yes`` is set.
It should be possible to build the LAMMPS GUI as a standalone It is possible to build the LAMMPS-GUI as a standalone compilation
compilation (e.g. when LAMMPS has been compiled with traditional make). (e.g. when LAMMPS has been compiled with traditional make). Then the
Then the CMake configuration needs to be told where to find the LAMMPS CMake configuration needs to be told where to find the LAMMPS headers
headers and the LAMMPS library, via ``-D and the LAMMPS library, via ``-D LAMMPS_SOURCE_DIR=/path/to/lammps/src``.
LAMMPS_SOURCE_DIR=/path/to/lammps/src``. CMake will try to guess a CMake will try to guess a build folder with the LAMMPS library from that
build folder with the LAMMPS library from that path, but it can also be path, but it can also be set with ``-D LAMMPS_LIB_DIR=/path/to/lammps/lib``.
set with ``-D LAMMPS_LIB_DIR=/path/to/lammps/lib``.
Rather than linking to the LAMMPS library during compilation, it is also Rather than linking to the LAMMPS library during compilation, it is also
possible to compile the GUI with a plugin loader that will load possible to compile the GUI with a plugin loader that will load
@ -827,13 +621,13 @@ There is a custom `x64-GUI-MSVC` build configuration provided in the
compilation settings for project. Choosing this configuration will compilation settings for project. Choosing this configuration will
activate building the `lammps-gui.exe` executable in addition to LAMMPS activate building the `lammps-gui.exe` executable in addition to LAMMPS
through importing package selection from the ``windows.cmake`` preset through importing package selection from the ``windows.cmake`` preset
file and enabling building the LAMMPS GUI and disabling building with MPI. file and enabling building the LAMMPS-GUI and disabling building with MPI.
When requesting an installation from the `Build` menu in Visual Studio, When requesting an installation from the `Build` menu in Visual Studio,
it will create a compressed ``LAMMPS-Win10-amd64.zip`` zip file with the it will create a compressed ``LAMMPS-Win10-amd64.zip`` zip file with the
executables and required dependent .dll files. This zip file can be executables and required dependent .dll files. This zip file can be
uncompressed and ``lammps-gui.exe`` run directly from there. The uncompressed and ``lammps-gui.exe`` run directly from there. The
uncompressed folder can be added to the ``PATH`` environment and LAMMPS uncompressed folder can be added to the ``PATH`` environment and LAMMPS
and LAMMPS GUI can be launched from anywhere from the command line. and LAMMPS-GUI can be launched from anywhere from the command line.
**MinGW64 Cross-compiler** **MinGW64 Cross-compiler**
@ -1329,7 +1123,7 @@ for Tcl with:
.. code-block:: bash .. code-block:: bash
swig -tcl -module tcllammps lammps.i swig -tcl -module tcllammps lammps.i
gcc -fPIC -shared $(pkgconf --cflags tcl) -o tcllammps.so \ gcc -fPIC -shared $(pkg-config tcl --cflags) -o tcllammps.so \
lammps_wrap.c -L ../src/ -llammps lammps_wrap.c -L ../src/ -llammps
tclsh tclsh
@ -1340,8 +1134,8 @@ functions included with:
swig -tcl -module tcllmps lammps_shell.i swig -tcl -module tcllmps lammps_shell.i
gcc -o tcllmpsh lammps_wrap.c -Xlinker -export-dynamic \ gcc -o tcllmpsh lammps_wrap.c -Xlinker -export-dynamic \
-DHAVE_CONFIG_H $(pkgconf --cflags tcl) \ -DHAVE_CONFIG_H $(pkg-config tcl --cflags) \
$(pkgconf --libs tcl) -L ../src -llammps $(pkg-config tcl --libs) -L ../src -llammps
In both cases it is assumed that the LAMMPS library was compiled In both cases it is assumed that the LAMMPS library was compiled
as a shared library in the ``src`` folder. Otherwise the last as a shared library in the ``src`` folder. Otherwise the last

View File

@ -1,8 +1,11 @@
.. index:: angle_style hybrid .. index:: angle_style hybrid
.. index:: angle_style hybrid/kk
angle_style hybrid command angle_style hybrid command
========================== ==========================
Accelerator Variants: *hybrid/kk*
Syntax Syntax
"""""" """"""
@ -79,6 +82,10 @@ for specific angle types.
---------- ----------
.. include:: accel_styles.rst
----------
Restrictions Restrictions
"""""""""""" """"""""""""
@ -87,8 +94,9 @@ MOLECULE package. See the :doc:`Build package <Build_package>` doc page
for more info. for more info.
Unlike other angle styles, the hybrid angle style does not store angle Unlike other angle styles, the hybrid angle style does not store angle
coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when restarting a simulation from a restart coefficient info for individual sub-styles in :doc:`binary restart files
file, you need to re-specify :doc:`angle_coeff <angle_coeff>` commands. <restart>` or :doc:`data files <write_data>`. Thus when restarting a
simulation, you need to re-specify the angle_coeff commands.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -1,10 +1,11 @@
.. index:: angle_style spica .. index:: angle_style spica
.. index:: angle_style spica/omp .. index:: angle_style spica/omp
.. index:: angle_style spica/kk
angle_style spica command angle_style spica command
========================= =========================
Accelerator Variants: *spica/omp* Accelerator Variants: *spica/omp*, *spica/kk*
Syntax Syntax
"""""" """"""

View File

@ -71,11 +71,11 @@ all atoms, e.g. in a data or restart file.
atom IDs are required, due to how neighbor lists are built. atom IDs are required, due to how neighbor lists are built.
The *map* keyword determines how atoms with specific IDs are found The *map* keyword determines how atoms with specific IDs are found
when required. An example are the bond (angle, etc) methods which when required. For example, the bond (angle, etc) methods need to
need to find the local index of an atom with a specific global ID find the local index of an atom with a specific global ID which is a
which is a bond (angle, etc) partner. LAMMPS performs this operation bond (angle, etc) partner. LAMMPS performs this operation efficiently
efficiently by creating a "map", which is either an *array* or *hash* by creating a "map", which is either an *array* or *hash* table, as
table, as described below. described below.
When the *map* keyword is not specified in your input script, LAMMPS When the *map* keyword is not specified in your input script, LAMMPS
only creates a map for :doc:`atom_styles <atom_style>` for molecular only creates a map for :doc:`atom_styles <atom_style>` for molecular
@ -83,34 +83,39 @@ systems which have permanent bonds (angles, etc). No map is created
for atomic systems, since it is normally not needed. However some for atomic systems, since it is normally not needed. However some
LAMMPS commands require a map, even for atomic systems, and will LAMMPS commands require a map, even for atomic systems, and will
generate an error if one does not exist. The *map* keyword thus generate an error if one does not exist. The *map* keyword thus
allows you to force the creation of a map. The *yes* value will allows you to force the creation of a map.
create either an *array* or *hash* style map, as explained in the next
paragraph. The *array* and *hash* values create an array-style or
hash-style map respectively.
For an *array*\ -style map, each processor stores a lookup table of Specifying a value of *yes* will create either an array-style or
length N, where N is the largest atom ID in the system. This is a hash-style map, depending on the size of the system. If no atom ID is
fast, simple method for many simulations, but requires too much memory larger than 1 million, then an array-style map is used, otherwise a
for large simulations. For a *hash*\ -style map, a hash table is hash-style map is used. Specifying a value of *array* or *hash*
created on each processor, which finds an atom ID in constant time creates an array-style or hash-style map respectively, regardless of
(independent of the global number of atom IDs). It can be slightly the size of the system.
slower than the *array* map, but its memory cost is proportional to
the number of atoms owned by a processor, i.e. N/P when N is the total
number of atoms in the system and P is the number of processors.
The *first* keyword allows a :doc:`group <group>` to be specified whose For an array-style map, each processor stores a lookup table of length
atoms will be maintained as the first atoms in each processor's list N, where N is the largest atom ID in the system. This is a fast,
of owned atoms. This in only useful when the specified group is a simple method for many simulations, but requires too much memory for
small fraction of all the atoms, and there are other operations LAMMPS large simulations. For a hash-style map, a hash table is created on
is performing that will be sped-up significantly by being able to loop each processor, which finds an atom ID in constant time (independent
over the smaller set of atoms. Otherwise the reordering required by of the global number of atom IDs). It can be slightly slower than the
this option will be a net slow-down. The :doc:`neigh_modify include <neigh_modify>` and :doc:`comm_modify group <comm_modify>` *array* map, but its memory cost is proportional to the number of
commands are two examples of commands that require this setting to atoms owned by a processor, i.e. N/P when N is the total number of
work efficiently. Several :doc:`fixes <fix>`, most notably time atoms in the system and P is the number of processors.
integration fixes like :doc:`fix nve <fix_nve>`, also take advantage of
this setting if the group they operate on is the group specified by The *first* keyword allows a :doc:`group <group>` to be specified
this command. Note that specifying "all" as the group-ID effectively whose atoms will be maintained as the first atoms in each processor's
turns off the *first* option. list of owned atoms. This in only useful when the specified group is
a small fraction of all the atoms, and there are other operations
LAMMPS is performing that will be sped-up significantly by being able
to loop over the smaller set of atoms. Otherwise the reordering
required by this option will be a net slow-down. The
:doc:`neigh_modify include <neigh_modify>` and :doc:`comm_modify group
<comm_modify>` commands are two examples of commands that require this
setting to work efficiently. Several :doc:`fixes <fix>`, most notably
time integration fixes like :doc:`fix nve <fix_nve>`, also take
advantage of this setting if the group they operate on is the group
specified by this command. Note that specifying "all" as the group-ID
effectively turns off the *first* option.
It is OK to use the *first* keyword with a group that has not yet been It is OK to use the *first* keyword with a group that has not yet been
defined, e.g. to use the atom_modify first command at the beginning of defined, e.g. to use the atom_modify first command at the beginning of
@ -148,15 +153,16 @@ cache locality will be undermined.
.. note:: .. note::
Running a simulation with sorting on versus off should not Running a simulation with sorting on versus off should not change
change the simulation results in a statistical sense. However, a the simulation results in a statistical sense. However, a
different ordering will induce round-off differences, which will lead different ordering will induce round-off differences, which will
to diverging trajectories over time when comparing two simulations. lead to diverging trajectories over time when comparing two
Various commands, particularly those which use random numbers simulations. Various commands, particularly those which use random
(e.g. :doc:`velocity create <velocity>`, and :doc:`fix langevin <fix_langevin>`), may generate (statistically identical) numbers (e.g. :doc:`velocity create <velocity>`, and :doc:`fix
results which depend on the order in which atoms are processed. The langevin <fix_langevin>`), may generate (statistically identical)
order of atoms in a :doc:`dump <dump>` file will also typically change results which depend on the order in which atoms are processed.
if sorting is enabled. The order of atoms in a :doc:`dump <dump>` file will also typically
change if sorting is enabled.
.. note:: .. note::
@ -183,12 +189,13 @@ Default
By default, *id* is yes. By default, atomic systems (no bond topology By default, *id* is yes. By default, atomic systems (no bond topology
info) do not use a map. For molecular systems (with bond topology info) do not use a map. For molecular systems (with bond topology
info), a map is used. The default map style is array if no atom ID is info), the default is to use a map of either *array* or *hash* style
larger than 1 million, otherwise the default is hash. By default, a depending on the size of the system, as explained above for the *map
"first" group is not defined. By default, sorting is enabled with a yes* keyword/value option. By default, a *first* group is not
frequency of 1000 and a binsize of 0.0, which means the neighbor defined. By default, sorting is enabled with a frequency of 1000 and
cutoff will be used to set the bin size. If no neighbor cutoff is a binsize of 0.0, which means the neighbor cutoff will be used to set
defined, sorting will be turned off. the bin size. If no neighbor cutoff is defined, sorting will be turned
off.
---------- ----------

View File

@ -189,6 +189,14 @@ the Additional Information section below.
- *atomic* + molecule, radius, rmass + "smd data" - *atomic* + molecule, radius, rmass + "smd data"
- :ref:`MACHDYN <PKG-MACHDYN>` - :ref:`MACHDYN <PKG-MACHDYN>`
- Smooth Mach Dynamics models - Smooth Mach Dynamics models
* - *rheo*
- *atomic* + rho, status
- :ref:`RHEO <PKG-RHEO>`
- solid and fluid RHEO particles
* - *rheo/thermal*
- *atomic* + rho, status, energy, temperature
- :ref:`RHEO <PKG-RHEO>`
- RHEO particles with temperature
* - *sph* * - *sph*
- *atomic* + "sph data" - *atomic* + "sph data"
- :ref:`SPH <PKG-SPH>` - :ref:`SPH <PKG-SPH>`

View File

@ -75,8 +75,9 @@ package. See the :doc:`Build package <Build_package>` page for more
info. info.
Unlike other bond styles, the hybrid bond style does not store bond Unlike other bond styles, the hybrid bond style does not store bond
coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when restarting a simulation from a restart coefficient info for individual sub-styles in :doc:`binary restart files
file, you need to re-specify bond_coeff commands. <restart>` or :doc:`data files <write_data>`. Thus when restarting a
simulation, you need to re-specify the bond_coeff commands.
Related commands Related commands
"""""""""""""""" """"""""""""""""

188
doc/src/bond_rheo_shell.rst Normal file
View File

@ -0,0 +1,188 @@
.. index:: bond_style rheo/shell
bond_style rheo/shell command
=============================
Syntax
""""""
.. code-block:: LAMMPS
bond_style rheo/shell keyword value attribute1 attribute2 ...
* required keyword = *t/form*
* optional keyword = *store/local*
.. parsed-literal::
*t/form* value = formation time for a bond (time units)
*store/local* values = fix_ID N attributes ...
* fix_ID = ID of associated internal fix to store data
* N = prepare data for output every this many timesteps
* attributes = zero or more of the below attributes may be appended
*id1, id2* = IDs of 2 atoms in the bond
*time* = the timestep the bond broke
*x, y, z* = the center of mass position of the 2 atoms when the bond broke (distance units)
*x/ref, y/ref, z/ref* = the initial center of mass position of the 2 atoms (distance units)
Examples
""""""""
.. code-block:: LAMMPS
bond_style rheo/shell t/form 10.0
bond_coeff 1 1.0 0.05 0.1
Description
"""""""""""
.. versionadded:: TBD
The *rheo/shell* bond style is designed to work with
:doc:`fix rheo/oxidation <fix_rheo_oxidation>` which creates candidate
bonds between eligible surface or near-surface particles. When a bond
is first created, it computes no forces and starts a timer. Forces are
not computed until the timer reaches the specified bond formation time,
*t/form*, and the bond is enabled and applies forces. If the two particles
move outside of the maximum bond distance or move into the bulk before
the timer reaches *t/form*, the bond automatically deletes itself. This
deletion is not recorded as a broken bond in the optional *store/local* fix.
Before bonds are enabled, they are still treated as regular bonds by
all other parts of LAMMPS. This means they are written to data files
and counted in computes such as :doc:`nbond/atom <compute_nbond_atom>`.
To only count enabled bonds, use the *nbond/shell* attribute in
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`.
When enabled, the bond then computes forces based on deviations from
the initial reference state of the two atoms much like a BPM style
bond (as further discussed in the :doc:`BPM howto page <Howto_bpm>`).
The reference state is stored by each bond when it is first enabled.
Data is then preserved across run commands and is written to
:doc:`binary restart files <restart>` such that restarting the system
will not reset the reference state of a bond or the timer.
This bond style is based on a model described in
:ref:`(Clemmer) <rheo_clemmer>`. The force has a magnitude of
.. math::
F = 2 k (r - r_0) + \frac{2 k}{r_0^2 \epsilon_c^2} (r - r_0)^3
where :math:`k` is a stiffness, :math:`r` is the current distance
and :math:`r_0` is the initial distance between the two particles, and
:math:`\epsilon_c` is maximum strain beyond which a bond breaks. This
is done by setting the bond type to 0 such that forces are no longer
computed.
A damping force proportional to the difference in the normal velocity
of particles is also applied to bonded particles:
.. math::
F_D = - \gamma w (\hat{r} \bullet \vec{v})
where :math:`\gamma` is the damping strength, :math:`\hat{r}` is the
displacement normal vector, and :math:`\vec{v}` is the velocity difference
between the two particles.
The following coefficients must be defined for each bond type via the
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
the data file or restart files read by the :doc:`read_data
<read_data>` or :doc:`read_restart <read_restart>` commands:
* :math:`k` (force/distance units)
* :math:`\epsilon_c` (unit less)
* :math:`\gamma` (force/velocity units)
Unlike other BPM-style bonds, this bond style does not update special
bond settings when bonds are created or deleted. This bond style also
does not enforce specific :doc:`special_bonds <special_bonds>` settings.
This behavior is purposeful such :doc:`RHEO pair <pair_rheo>` forces
and heat flows are still calculated.
If the *store/local* keyword is used, an internal fix will track bonds that
break during the simulation. Whenever a bond breaks, data is processed
and transferred to an internal fix labeled *fix_ID*. This allows the
local data to be accessed by other LAMMPS commands. Following this optional
keyword, a list of one or more attributes is specified. These include the
IDs of the two atoms in the bond. The other attributes for the two atoms
include the timestep during which the bond broke and the current/initial
center of mass position of the two atoms.
Data is continuously accumulated over intervals of *N*
timesteps. At the end of each interval, all of the saved accumulated
data is deleted to make room for new data. Individual datum may
therefore persist anywhere between *1* to *N* timesteps depending on
when they are saved. This data can be accessed using the *fix_ID* and a
:doc:`dump local <dump>` command. To ensure all data is output,
the dump frequency should correspond to the same interval of *N*
timesteps. A dump frequency of an integer multiple of *N* can be used
to regularly output a sample of the accumulated data.
Note that when unbroken bonds are dumped to a file via the
:doc:`dump local <dump>` command, bonds with type 0 (broken bonds)
are not included.
The :doc:`delete_bonds <delete_bonds>` command can also be used to
query the status of broken bonds or permanently delete them, e.g.:
.. code-block:: LAMMPS
delete_bonds all stats
delete_bonds all bond 0 remove
----------
Restart and other info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This bond style writes the reference state of each bond to
:doc:`binary restart files <restart>`. Loading a restart
file will properly restore bonds. However, the reference state is NOT
written to data files. Therefore reading a data file will not
restore bonds and will cause their reference states to be redefined.
If the *store/local* option is used, an internal fix will calculate
a local vector or local array depending on the number of input values.
The length of the vector or number of rows in the array is the number
of recorded, broken bonds. If a single input is specified, a local
vector is produced. If two or more inputs are specified, a local array
is produced where the number of columns = the number of inputs. The
vector or array can be accessed by any command that uses local values
from a compute as input. See the :doc:`Howto output <Howto_output>` page
for an overview of LAMMPS output options.
The vector or array will be floating point values that correspond to
the specified attribute.
The single() function of this bond style returns 0.0 for the energy
of a bonded interaction, since energy is not conserved in these
dissipative potentials. The single() function also calculates two
extra bond quantities, the initial distance :math:`r_0` and a time.
These extra quantities can be accessed by the
:doc:`compute bond/local <compute_bond_local>` command as *b1* and *b2*\ .
Restrictions
""""""""""""
This bond style is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`bond_coeff <bond_coeff>`, :doc:`fix rheo/oxidation <fix_rheo_oxidation>`
Default
"""""""
NA
----------
.. _rheo_clemmer:
**(Clemmer)** Clemmer, Pierce, O'Connor, Nevins, Jones, Lechman, Tencer, Appl. Math. Model., 130, 310-326 (2024).

View File

@ -105,6 +105,7 @@ accelerated styles exist.
* :doc:`oxdna2/fene <bond_oxdna>` - same as oxdna but used with different pair styles * :doc:`oxdna2/fene <bond_oxdna>` - same as oxdna but used with different pair styles
* :doc:`oxrna2/fene <bond_oxdna>` - modified FENE bond suitable for RNA modeling * :doc:`oxrna2/fene <bond_oxdna>` - modified FENE bond suitable for RNA modeling
* :doc:`quartic <bond_quartic>` - breakable quartic bond * :doc:`quartic <bond_quartic>` - breakable quartic bond
* :doc:`rheo/shell <bond_rheo_shell>` - shell bond for oxidation modeling in RHEO
* :doc:`special <bond_special>` - enable special bond exclusions for 1-5 pairs and beyond * :doc:`special <bond_special>` - enable special bond exclusions for 1-5 pairs and beyond
* :doc:`table <bond_table>` - tabulated by bond length * :doc:`table <bond_table>` - tabulated by bond length

View File

@ -290,6 +290,7 @@ The individual style names on the :doc:`Commands compute <Commands_compute>` pag
* :doc:`reduce <compute_reduce>` - combine per-atom quantities into a single global value * :doc:`reduce <compute_reduce>` - combine per-atom quantities into a single global value
* :doc:`reduce/chunk <compute_reduce_chunk>` - reduce per-atom quantities within each chunk * :doc:`reduce/chunk <compute_reduce_chunk>` - reduce per-atom quantities within each chunk
* :doc:`reduce/region <compute_reduce>` - same as compute reduce, within a region * :doc:`reduce/region <compute_reduce>` - same as compute reduce, within a region
* :doc:`rheo/property/atom <compute_rheo_property_atom>` - convert atom attributes in RHEO package to per-atom vectors/arrays
* :doc:`rigid/local <compute_rigid_local>` - extract rigid body attributes * :doc:`rigid/local <compute_rigid_local>` - extract rigid body attributes
* :doc:`saed <compute_saed>` - electron diffraction intensity on a mesh of reciprocal lattice nodes * :doc:`saed <compute_saed>` - electron diffraction intensity on a mesh of reciprocal lattice nodes
* :doc:`slcsa/atom <compute_slcsa_atom>` - perform Supervised Learning Crystal Structure Analysis (SL-CSA) * :doc:`slcsa/atom <compute_slcsa_atom>` - perform Supervised Learning Crystal Structure Analysis (SL-CSA)

View File

@ -8,10 +8,17 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
compute ID group-ID nbond/atom compute ID group-ID nbond/atom keyword value
* ID, group-ID are documented in :doc:`compute <compute>` command * ID, group-ID are documented in :doc:`compute <compute>` command
* nbond/atom = style name of this compute command * nbond/atom = style name of this compute command
* zero or more keyword/value pairs may be appended
* keyword = *bond/type*
.. parsed-literal::
*bond/type* value = *btype*
*btype* = bond type included in count
Examples Examples
"""""""" """"""""
@ -19,6 +26,7 @@ Examples
.. code-block:: LAMMPS .. code-block:: LAMMPS
compute 1 all nbond/atom compute 1 all nbond/atom
compute 1 all nbond/atom bond/type 2
Description Description
""""""""""" """""""""""
@ -31,6 +39,9 @@ the :doc:`Howto broken bonds <Howto_bpm>` page for more information.
The number of bonds will be zero for atoms not in the specified The number of bonds will be zero for atoms not in the specified
compute group. This compute does not depend on Newton bond settings. compute group. This compute does not depend on Newton bond settings.
If the keyword *bond/type* is specified, only bonds of *btype* are
counted.
Output info Output info
""""""""""" """""""""""

View File

@ -0,0 +1,143 @@
.. index:: compute rheo/property/atom
compute rheo/property/atom command
==================================
Syntax
""""""
.. code-block:: LAMMPS
compute ID group-ID rheo/property/atom input1 input2 ...
* ID, group-ID are documented in :doc:`compute <compute>` command
* rheo/property/atom = style name of this compute command
* input = one or more atom attributes
.. parsed-literal::
possible attributes = phase, surface, surface/r,
surface/divr, surface/n/a, coordination,
shift/v/a, energy, temperature, heatflow,
conductivity, cv, viscosity, pressure, rho,
grad/v/ab, stress/v/ab, stress/t/ab, nbond/shell
.. parsed-literal::
*phase* = atom phase state
*surface* = atom surface status
*surface/r* = atom distance from the surface
*surface/divr* = divergence of position at atom position
*surface/n/a* = a-component of surface normal vector
*coordination* = coordination number
*shift/v/a* = a-component of atom shifting velocity
*energy* = atom energy
*temperature* = atom temperature
*heatflow* = atom heat flow
*conductivity* = atom conductivity
*cv* = atom specific heat
*viscosity* = atom viscosity
*pressure* = atom pressure
*rho* = atom density
*grad/v/ab* = ab-component of atom velocity gradient tensor
*stress/v/ab* = ab-component of atom viscous stress tensor
*stress/t/ab* = ab-component of atom total stress tensor (pressure and viscous)
*nbond/shell* = number of oxide bonds
Examples
""""""""
.. code-block:: LAMMPS
compute 1 all rheo/property/atom phase surface/r surface/n/* pressure
compute 2 all rheo/property/atom shift/v/x grad/v/xx stress/v/*
Description
"""""""""""
.. versionadded:: TBD
Define a computation that stores atom attributes specific to the RHEO
package for each atom in the group. This is useful so that the values
can be used by other :doc:`output commands <Howto_output>` that take
computes as inputs. See for example, the
:doc:`compute reduce <compute_reduce>`,
:doc:`fix ave/atom <fix_ave_atom>`,
:doc:`fix ave/histo <fix_ave_histo>`,
:doc:`fix ave/chunk <fix_ave_chunk>`, and
:doc:`atom-style variable <variable>` commands.
For vector attributes, e.g. *shift/v/*:math:`\alpha`, one must specify
:math:`\alpha` as the *x*, *y*, or *z* component, e.g. *shift/v/x*.
Alternatively, a wild card \* will include all components, *x* and *y* in
2D or *x*, *y*, and *z* in 3D.
For tensor attributes, e.g. *grad/v/*:math:`\alpha \beta`, one must specify
both :math:`\alpha` and :math:`\beta` as *x*, *y*, or *z*, e.g. *grad/v/xy*.
Alternatively, a wild card \* will include all components. In 2D, this
includes *xx*, *xy*, *yx*, and *yy*. In 3D, this includes *xx*, *xy*, *xz*,
*yx*, *yy*, *yz*, *zx*, *zy*, and *zz*.
Many properties require their respective fixes, listed below in related
commands, be defined. For instance, the *viscosity* attribute is the
viscosity of a particle calculated by
:doc:`fix rheo/viscous <fix_rheo_viscosity>`. The meaning of less obvious
properties is described below.
The *phase* property indicates whether the particle is in a fluid state,
a value of 0, or a solid state, a value of 1.
The *surface* property indicates the surface designation produced by
the *interface/reconstruct* option of :doc:`fix rheo <fix_rheo>`. Bulk
particles have a value of 0, surface particles have a value of 1, and
splash particles have a value of 2. The *surface/r* property is the
distance from the surface, up to the kernel cutoff length. Surface particles
have a value of 0. The *surface/n/*:math:`\alpha` properties are the
components of the surface normal vector.
The *shift/v/*:math:`\alpha` properties are the components of the shifting
velocity produced by the *shift* option of :doc:`fix rheo <fix_rheo>`.
The *nbond/shell* property is the number of shell bonds that have been
activated from :doc:`bond style rheo/shell <bond_rheo_shell>`.
The values are stored in a per-atom vector or array as discussed
below. Zeroes are stored for atoms not in the specified group or for
quantities that are not defined for a particular particle in the group
Output info
"""""""""""
This compute calculates a per-atom vector or per-atom array depending
on the number of input values. Generally, if a single input is specified,
a per-atom vector is produced. If two or more inputs are specified, a
per-atom array is produced where the number of columns = the number of
inputs. However, if a wild card \* is used for a vector or tensor, then
the number of inputs is considered to be incremented by the dimension or
the dimension squared, respectively. The vector or array can be accessed
by any command that uses per-atom values from a compute as input. See the
:doc:`Howto output <Howto_output>` page for an overview of LAMMPS output
options.
The vector or array values will be in whatever :doc:`units <units>` the
corresponding attribute is in (e.g., density units for *rho*).
Restrictions
""""""""""""
none
Related commands
""""""""""""""""
:doc:`dump custom <dump>`, :doc:`compute reduce <compute_reduce>`,
:doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`,
:doc:`fix rheo/viscosity <fix_rheo_viscosity>`,
:doc:`fix rheo/pressure <fix_rheo_pressure>`,
:doc:`fix rheo/thermal <fix_rheo_thermal>`,
:doc:`fix rheo/oxdiation <fix_rheo_oxidation>`,
:doc:`fix rheo <fix_rheo>`
Default
"""""""
none

View File

@ -1,8 +1,11 @@
.. index:: dihedral_style hybrid .. index:: dihedral_style hybrid
.. index:: dihedral_style hybrid/kk
dihedral_style hybrid command dihedral_style hybrid command
============================= =============================
Accelerator Variants: *hybrid/kk*
Syntax Syntax
"""""" """"""
@ -80,6 +83,10 @@ for specific dihedral types.
---------- ----------
.. include:: accel_styles.rst
----------
Restrictions Restrictions
"""""""""""" """"""""""""
@ -88,8 +95,10 @@ MOLECULE package. See the :doc:`Build package <Build_package>` doc page
for more info. for more info.
Unlike other dihedral styles, the hybrid dihedral style does not store Unlike other dihedral styles, the hybrid dihedral style does not store
dihedral coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when restarting a simulation from a dihedral coefficient info for individual sub-styles in :doc:`binary
restart file, you need to re-specify dihedral_coeff commands. restart files <restart>` or :doc:`data files <write_data>`. Thus when
restarting a simulation, you need to re-specify the dihedral_coeff
commands.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -107,6 +107,13 @@ Syntax
*checksum* args = *yes* or *no* (add checksum at end of zst file) *checksum* args = *yes* or *no* (add checksum at end of zst file)
* these keywords apply only to the vtk* dump style
* keyword = *binary*
.. parsed-literal::
*binary* args = *yes* or *no* (select between binary and text mode VTK files)
Examples Examples
"""""""" """"""""
@ -907,11 +914,11 @@ box size stored with the snapshot.
---------- ----------
The COMPRESS package offers both GZ and Zstd compression variants of The :ref:`COMPRESS package <PKG-COMPRESS>` offers both GZ and Zstd
styles atom, custom, local, cfg, and xyz. When using these styles the compression variants of styles atom, custom, local, cfg, and xyz. When
compression level can be controlled by the :code:`compression_level` using these styles the compression level can be controlled by the
keyword. File names with these styles have to end in either :code:`compression_level` keyword. File names with these styles have to
:code:`.gz` or :code:`.zst`. end in either :code:`.gz` or :code:`.zst`.
GZ supports compression levels from :math:`-1` (default), 0 (no compression), GZ supports compression levels from :math:`-1` (default), 0 (no compression),
and 1 to 9, 9 being the best compression. The COMPRESS :code:`/gz` styles use 9 and 1 to 9, 9 being the best compression. The COMPRESS :code:`/gz` styles use 9
@ -930,6 +937,17 @@ default and it can be disabled with the :code:`checksum` keyword.
---------- ----------
The :ref:`VTK package <PKG-VTK>` offers writing dump files in `VTK file
formats <https://www.vtk.org/>`_ that can be read by a variety of
visualization tools based on the VTK library. These VTK files follow
naming conventions that collide with the LAMMPS convention to append
".bin" to a file name in order to switch to a binary output. Thus for
:doc:`vtk style dumps <dump_vtk>` the dump_modify command supports the
keyword *binary* which selects between generating text mode and binary
style VTK files.
----------
Restrictions Restrictions
"""""""""""" """"""""""""

View File

@ -193,6 +193,7 @@ accelerated styles exist.
* :doc:`adapt <fix_adapt>` - change a simulation parameter over time * :doc:`adapt <fix_adapt>` - change a simulation parameter over time
* :doc:`adapt/fep <fix_adapt_fep>` - enhanced version of fix adapt * :doc:`adapt/fep <fix_adapt_fep>` - enhanced version of fix adapt
* :doc:`addforce <fix_addforce>` - add a force to each atom * :doc:`addforce <fix_addforce>` - add a force to each atom
* :doc:`add/heat <fix_add_heat>` - add a heat flux to each atom
* :doc:`addtorque <fix_addtorque>` - add a torque to a group of atoms * :doc:`addtorque <fix_addtorque>` - add a torque to a group of atoms
* :doc:`alchemy <fix_alchemy>` - perform an "alchemical transformation" between two partitions * :doc:`alchemy <fix_alchemy>` - perform an "alchemical transformation" between two partitions
* :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>` - torsion/torsion terms in AMOEBA force field * :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>` - torsion/torsion terms in AMOEBA force field
@ -369,6 +370,11 @@ accelerated styles exist.
* :doc:`reaxff/species <fix_reaxff_species>` - write out ReaxFF molecule information * :doc:`reaxff/species <fix_reaxff_species>` - write out ReaxFF molecule information
* :doc:`recenter <fix_recenter>` - constrain the center-of-mass position of a group of atoms * :doc:`recenter <fix_recenter>` - constrain the center-of-mass position of a group of atoms
* :doc:`restrain <fix_restrain>` - constrain a bond, angle, dihedral * :doc:`restrain <fix_restrain>` - constrain a bond, angle, dihedral
* :doc:`rheo <fix_rheo>` - integrator for the RHEO package
* :doc:`rheo/thermal <fix_rheo_thermal>` - thermal integrator for the RHEO package
* :doc:`rheo/oxidation <fix_rheo_oxidation>` - create oxidation bonds for the RHEO package
* :doc:`rheo/pressure <fix_rheo_pressure>` - pressure calculation for the RHEO package
* :doc:`rheo/viscosity <fix_rheo_pressure>` - viscosity calculation for the RHEO package
* :doc:`rhok <fix_rhok>` - add bias potential for long-range ordered systems * :doc:`rhok <fix_rhok>` - add bias potential for long-range ordered systems
* :doc:`rigid <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with NVE integration * :doc:`rigid <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with NVE integration
* :doc:`rigid/meso <fix_rigid_meso>` - constrain clusters of mesoscopic SPH/SDPD particles to move as a rigid body * :doc:`rigid/meso <fix_rigid_meso>` - constrain clusters of mesoscopic SPH/SDPD particles to move as a rigid body

111
doc/src/fix_add_heat.rst Normal file
View File

@ -0,0 +1,111 @@
.. index:: fix add/heat
fix add/heat command
====================
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID add/heat style args keyword values ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* add/heat = style name of this fix command
* style = *constant* or *linear* or *quartic*
.. parsed-literal::
*constant* args = *rate*
*rate* = rate of heat flow (energy/time units)
*linear* args = :math:`T_{target}` *k*
:math:`T_{target}` = target temperature (temperature units)
*k* = prefactor (energy/(time*temperature) units)
*quartic* args = :math:`T_{target}` *k*
:math:`T_{target}` = target temperature (temperature units)
*k* = prefactor (energy/(time*temperature^4) units)
* zero or more keyword/value pairs may be appended to args
* keyword = *overwrite*
.. parsed-literal::
*overwrite* value = *yes* or *no*
*yes* = sets current heat flow of particle
*no* = adds to current heat flow of particle
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all add/heat constant v_heat
fix 1 all add/heat linear 10.0 1.0 overwrite yes
Description
"""""""""""
This fix adds heat to particles with the temperature attribute every timestep.
Note that this is an internal temperature of a particle intended for use with
non-atomistic models like the discrete element method.
For the *constant* style, heat is added at the specified rate. For the *linear* style,
heat is added at a rate of :math:`k (T_{target} - T)` where :math:`k` is the
specified prefactor, :math:`T_{target}` is the specified target temperature, and
:math:`T` is the temperature of the atom. This may be more representative of a
conductive process. For the *quartic* style, heat is added at a rate of
:math:`k (T_{target}^4 - T^4)`, akin to radiative heat transfer.
The rate or temperature can be can be specified as an equal-style or atom-style
:doc:`variable <variable>`. If the value is a variable, it should be
specified as v_name, where name is the variable name. In this case, the
variable will be evaluated each time step, and its value will be used to
determine the rate of heat added.
Equal-style variables can specify formulas with various mathematical
functions and include :doc:`thermo_style <thermo_style>` command
keywords for the simulation box parameters, time step, and elapsed time
to specify time-dependent heating.
Atom-style variables can specify the same formulas as equal-style
variables but can also include per-atom values, such as atom
coordinates to specify spatially-dependent heating.
If the *overwrite* keyword is set to *yes*, this fix will set the total
heat flow on a particle every timestep, overwriting contributions from pair
styles or other fixes. If *overwrite* is *no*, this fix will add heat on
top of other contributions.
----------
Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options are relevant to this fix.
No global or per-atom quantities are stored by this fix for access by various
:doc:`output commands <Howto_output>`. No 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>`.
Restrictions
""""""""""""
This pair style is part of the GRANULAR package. It is
only enabled if LAMMPS was built with that package.
See the :doc:`Build package <Build_package>` page for more info.
This fix requires that atoms store temperature and heat flow
as defined by the :doc:`fix property/atom <fix_property_atom>` command.
Related commands
""""""""""""""""
:doc:`fix heat/flow <fix_heat_flow>`,
:doc:`fix property/atom <fix_property_atom>`,
:doc:`fix rheo/thermal <fix_rheo_thermal>`
Default
"""""""
The default for the *overwrite* keyword is *no*

View File

@ -4,9 +4,6 @@
fix deform command fix deform command
================== ==================
:doc:`fix deform/pressure <fix_deform_pressure>` command
========================================================
Accelerator Variants: *deform/kk* Accelerator Variants: *deform/kk*
Syntax Syntax
@ -14,12 +11,11 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
fix ID group-ID fix_style N parameter style args ... keyword value ... fix ID group-ID deform N parameter style args ... keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* fix_style = *deform* or *deform/pressure*
* N = perform box deformation every this many timesteps * N = perform box deformation every this many timesteps
* one or more parameter/style/args sequences of arguments may be appended * one or more parameter/args sequences may be appended
.. parsed-literal:: .. parsed-literal::
@ -46,12 +42,6 @@ Syntax
*variable* values = v_name1 v_name2 *variable* values = v_name1 v_name2
v_name1 = variable with name1 for box length change as function of time v_name1 = variable with name1 for box length change as function of time
v_name2 = variable with name2 for change rate as function of time v_name2 = variable with name2 for change rate as function of time
*pressure* values = target gain (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
*pressure/mean* values = target gain (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
*xy*, *xz*, *yz* args = style value *xy*, *xz*, *yz* args = style value
style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable* style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable*
@ -64,8 +54,6 @@ Syntax
effectively an engineering shear strain rate effectively an engineering shear strain rate
*erate* value = R *erate* value = R
R = engineering shear strain rate (1/time units) R = engineering shear strain rate (1/time units)
*erate/rescale* value = R (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
R = engineering shear strain rate (1/time units)
*trate* value = R *trate* value = R
R = true shear strain rate (1/time units) R = true shear strain rate (1/time units)
*wiggle* values = A Tp *wiggle* values = A Tp
@ -74,9 +62,6 @@ Syntax
*variable* values = v_name1 v_name2 *variable* values = v_name1 v_name2
v_name1 = variable with name1 for tilt change as function of time v_name1 = variable with name1 for tilt change as function of time
v_name2 = variable with name2 for change rate as function of time v_name2 = variable with name2 for change rate as function of time
*pressure* values = target gain (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
* zero or more keyword/value pairs may be appended * zero or more keyword/value pairs may be appended
* keyword = *remap* or *flip* or *units* or *couple* or *vol/balance/p* or *max/rate* or *normalize/pressure* * keyword = *remap* or *flip* or *units* or *couple* or *vol/balance/p* or *max/rate* or *normalize/pressure*
@ -92,15 +77,6 @@ Syntax
*units* value = *lattice* or *box* *units* value = *lattice* or *box*
lattice = distances are defined in lattice units lattice = distances are defined in lattice units
box = distances are defined in simulation box units box = distances are defined in simulation box units
*couple* value = *none* or *xyz* or *xy* or *yz* or *xz* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
couple pressure values of various dimensions
*vol/balance/p* value = *yes* or *no* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
Modifies the behavior of the *volume* option to try and balance pressures
*max/rate* value = *rate* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
rate = maximum strain rate for pressure control
*normalize/pressure* value = *yes* or *no* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
Modifies pressure controls such that the deviation in pressure is normalized by the target pressure
Examples Examples
"""""""" """"""""
@ -112,8 +88,6 @@ Examples
fix 1 all deform 1 xy erate 0.001 remap v fix 1 all deform 1 xy erate 0.001 remap v
fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.0 fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.0
See examples for :doc:`fix deform/pressure <fix_deform_pressure>` on its doc page
Description Description
""""""""""" """""""""""
@ -123,17 +97,13 @@ run. Orthogonal simulation boxes have 3 adjustable parameters
adjustable parameters (x,y,z,xy,xz,yz). Any or all of them can be adjustable parameters (x,y,z,xy,xz,yz). Any or all of them can be
adjusted independently and simultaneously. adjusted independently and simultaneously.
The fix deform command allows use of all the arguments listed above, The :doc:`fix deform/pressure <fix_deform_pressure>` command extends
except those flagged as available ONLY for the :doc:`fix this command with additional keywords and arguments. The rest of this
deform/pressure <fix_deform_pressure>` command, which are page explains the options common to both commands. The :doc:`fix
pressure-based controls. The fix deform/pressure command allows use deform/pressure <fix_deform_pressure>` page explains the options
of all the arguments listed above. available ONLY with the fix deform/pressure command. Note that a
simulation can define only a single deformation command: fix deform or
The rest of this doc page explains the options common to both fix deform/pressure.
commands. The :doc:`fix deform/pressure <fix_deform_pressure>` doc
page explains the options available ONLY with the fix deform/pressure
command. Note that a simulation can define only a single deformation
command: fix deform or fix deform/pressure.
Both these fixes can be used to perform non-equilibrium MD (NEMD) Both these fixes can be used to perform non-equilibrium MD (NEMD)
simulations of a continuously strained system. See the :doc:`fix simulations of a continuously strained system. See the :doc:`fix
@ -143,6 +113,24 @@ simulation of a continuously extended system (extensional flow) can be
modeled using the :ref:`UEF package <PKG-UEF>` and its :doc:`fix modeled using the :ref:`UEF package <PKG-UEF>` and its :doc:`fix
commands <fix_nh_uef>`. commands <fix_nh_uef>`.
.. admonition:: Inconsistent trajectories due to image flags
:class: warning
When running long simulations while shearing the box or using a high
shearing rate, it is possible that the image flags used for storing
unwrapped atom positions will "wrap around". When LAMMPS is compiled
with the default settings, case image flags are limited to a range of
:math:`-512 \le i \le 511`, which will overflow when atoms starting
at zero image flag value have passed through a periodic box dimension
more than 512 times.
Changing the :ref:`size of LAMMPS integer types <size>` to the
"bigbig" setting can make this overflow much less likely, since it
increases the image flag value range to :math:`- 1,048,576 \le i \le
1\,048\,575`
----------
For the *x*, *y*, *z* parameters, the associated dimension cannot be For the *x*, *y*, *z* parameters, the associated dimension cannot be
shrink-wrapped. For the *xy*, *yz*, *xz* parameters, the associated shrink-wrapped. For the *xy*, *yz*, *xz* parameters, the associated
second dimension cannot be shrink-wrapped. Dimensions not varied by second dimension cannot be shrink-wrapped. Dimensions not varied by

View File

@ -13,29 +13,66 @@ Syntax
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* deform/pressure = style name of this fix command * deform/pressure = style name of this fix command
* N = perform box deformation every this many timesteps * N = perform box deformation every this many timesteps
* one or more parameter/arg sequences may be appended * one or more parameter/args sequences may be appended
.. parsed-literal:: .. parsed-literal::
parameter = *x* or *y* or *z* or *xy* or *xz* or *yz* or *box* parameter = *x* or *y* or *z* or *xy* or *xz* or *yz* or *box*
*x*, *y*, *z* args = style value(s) *x*, *y*, *z* args = style value(s)
style = *final* or *delta* or *scale* or *vel* or *erate* or *trate* or *volume* or *wiggle* or *variable* or *pressure* or *pressure/mean* style = *final* or *delta* or *scale* or *vel* or *erate* or *trate* or *volume* or *wiggle* or *variable* or *pressure* or *pressure/mean*
*final* values = lo hi
lo hi = box boundaries at end of run (distance units)
*delta* values = dlo dhi
dlo dhi = change in box boundaries at end of run (distance units)
*scale* values = factor
factor = multiplicative factor for change in box length at end of run
*vel* value = V
V = change box length at this velocity (distance/time units),
effectively an engineering strain rate
*erate* value = R
R = engineering strain rate (1/time units)
*trate* value = R
R = true strain rate (1/time units)
*volume* value = none = adjust this dim to preserve volume of system
*wiggle* values = A Tp
A = amplitude of oscillation (distance units)
Tp = period of oscillation (time units)
*variable* values = v_name1 v_name2
v_name1 = variable with name1 for box length change as function of time
v_name2 = variable with name2 for change rate as function of time
*pressure* values = target gain *pressure* values = target gain
target = target pressure (pressure units) target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units) gain = proportional gain constant (1/(time * pressure) or 1/time units)
*pressure/mean* values = target gain *pressure/mean* values = target gain
target = target pressure (pressure units) target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units) gain = proportional gain constant (1/(time * pressure) or 1/time units)
NOTE: All other styles are documented by the :doc:`fix deform <fix_deform>` command
*xy*, *xz*, *yz* args = style value *xy*, *xz*, *yz* args = style value
style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable* or *pressure* or *erate/rescale* style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable* or *pressure* or *erate/rescale*
*final* value = tilt
tilt = tilt factor at end of run (distance units)
*delta* value = dtilt
dtilt = change in tilt factor at end of run (distance units)
*vel* value = V
V = change tilt factor at this velocity (distance/time units),
effectively an engineering shear strain rate
*erate* value = R
R = engineering shear strain rate (1/time units)
*erate/rescale* value = R
R = engineering shear strain rate (1/time units)
*trate* value = R
R = true shear strain rate (1/time units)
*wiggle* values = A Tp
A = amplitude of oscillation (distance units)
Tp = period of oscillation (time units)
*variable* values = v_name1 v_name2
v_name1 = variable with name1 for tilt change as function of time
v_name2 = variable with name2 for change rate as function of time
*pressure* values = target gain *pressure* values = target gain
target = target pressure (pressure units) target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units) gain = proportional gain constant (1/(time * pressure) or 1/time units)
*erate/rescale* value = R *erate/rescale* value = R
R = engineering shear strain rate (1/time units) R = engineering shear strain rate (1/time units)
NOTE: All other styles are documented by the :doc:`fix deform <fix_deform>` command
*box* = style value *box* = style value
style = *volume* or *pressure* style = *volume* or *pressure*
@ -49,6 +86,15 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*remap* value = *x* or *v* or *none*
x = remap coords of atoms in group into deforming box
v = remap velocities of atoms in group when they cross periodic boundaries
none = no remapping of x or v
*flip* value = *yes* or *no*
allow or disallow box flips when it becomes highly skewed
*units* value = *lattice* or *box*
lattice = distances are defined in lattice units
box = distances are defined in simulation box units
*couple* value = *none* or *xyz* or *xy* or *yz* or *xz* *couple* value = *none* or *xyz* or *xy* or *yz* or *xz*
couple pressure values of various dimensions couple pressure values of various dimensions
*vol/balance/p* value = *yes* or *no* *vol/balance/p* value = *yes* or *no*
@ -57,7 +103,6 @@ Syntax
rate = maximum strain rate for pressure control rate = maximum strain rate for pressure control
*normalize/pressure* value = *yes* or *no* *normalize/pressure* value = *yes* or *no*
Modifies pressure controls such that the deviation in pressure is normalized by the target pressure Modifies pressure controls such that the deviation in pressure is normalized by the target pressure
NOTE: All other keywords are documented by the :doc:`fix deform <fix_deform>` command
Examples Examples
"""""""" """"""""
@ -79,10 +124,26 @@ pressure-based controls implemented by this command.
All arguments described on the :doc:`fix deform <fix_deform>` doc page All arguments described on the :doc:`fix deform <fix_deform>` doc page
also apply to this fix unless otherwise noted below. The rest of this also apply to this fix unless otherwise noted below. The rest of this
doc page explains the arguments specific to this fix. Note that a page explains the arguments specific to this fix only. Note that a
simulation can define only a single deformation command: fix deform or simulation can define only a single deformation command: fix deform or
fix deform/pressure. fix deform/pressure.
.. admonition:: Inconsistent trajectories due to image flags
:class: warning
When running long simulations while shearing the box or using a high
shearing rate, it is possible that the image flags used for storing
unwrapped atom positions will "wrap around". When LAMMPS is compiled
with the default settings, case image flags are limited to a range of
:math:`-512 \le i \le 511`, which will overflow when atoms starting
at zero image flag value have passed through a periodic box dimension
more than 512 times.
Changing the :ref:`size of LAMMPS integer types <size>` to the
"bigbig" setting can make this overflow much less likely, since it
increases the image flag value range to :math:`- 1,048,576 \le i \le
1\,048\,575`
---------- ----------
For the *x*, *y*, and *z* parameters, this is the meaning of the For the *x*, *y*, and *z* parameters, this is the meaning of the

View File

@ -38,7 +38,7 @@ Syntax
*electrode/thermo* args = potential eta *temp* values *electrode/thermo* args = potential eta *temp* values
potential = electrode potential potential = electrode potential
charge = electrode charge charge = electrode charge
eta = reciprocal width of electrode charge smearing eta = reciprocal width of electrode charge smearing (can be NULL if eta keyword is used)
*temp* values = T_v tau_v rng_v *temp* values = T_v tau_v rng_v
T_v = temperature of thermo-potentiostat T_v = temperature of thermo-potentiostat
tau_v = time constant of thermo-potentiostat tau_v = time constant of thermo-potentiostat
@ -287,8 +287,18 @@ The *fix_modify tf* option enables the Thomas-Fermi metallicity model
fix_modify ID tf type length voronoi fix_modify ID tf type length voronoi
If this option is used parameters must be set for all atom types of the If this option is used, these two parameters must be set for
electrode. all atom types of the electrode:
* `tf` is the Thomas-Fermi length :math:`l_{TF}`
* `voronoi` is the Voronoi volume per atom in units of length cubed
Different types may have different `tf` and `voronoi` values.
The following self-energy term is then added for all electrode atoms:
.. math::
A_{ii} += \frac{1}{4 \pi \epsilon_0} \times \frac{4 \pi l_{TF}^2}{\mathrm{Voronoi volume}}
The *fix_modify timer* option turns on (off) additional timer outputs in the log The *fix_modify timer* option turns on (off) additional timer outputs in the log
file, for code developers to track optimization. file, for code developers to track optimization.
@ -321,9 +331,11 @@ The global array has *N* rows and *2N+1* columns, where the fix manages
array, the elements are: array, the elements are:
* array[I][1] = total charge that group *I* would have had *if it were * array[I][1] = total charge that group *I* would have had *if it were
at 0 V applied potential* * array[I][2 to *N* + 1] = the *N* entries at 0 V applied potential*
* array[I][2 to *N* + 1] = the *N* entries
of the *I*-th row of the electrode capacitance matrix (definition of the *I*-th row of the electrode capacitance matrix (definition
follows) * array[I][*N* + 2 to *2N* + 1] = the *N* entries of the follows)
* array[I][*N* + 2 to *2N* + 1] = the *N* entries of the
*I*-th row of the electrode elastance matrix (the inverse of the *I*-th row of the electrode elastance matrix (the inverse of the
electrode capacitance matrix) electrode capacitance matrix)

View File

@ -1,7 +1,7 @@
.. index:: fix heat/flow .. index:: fix heat/flow
fix heat/flow command fix heat/flow command
========================== =====================
Syntax Syntax
"""""" """"""
@ -56,13 +56,19 @@ not invoked during :doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""
This pair style is part of the GRANULAR package. It is
only enabled if LAMMPS was built with that package.
See the :doc:`Build package <Build_package>` page for more info.
This fix requires that atoms store temperature and heat flow This fix requires that atoms store temperature and heat flow
as defined by the :doc:`fix property/atom <fix_property_atom>` command. as defined by the :doc:`fix property/atom <fix_property_atom>` command.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`pair granular <pair_granular>`, :doc:`fix property/atom <fix_property_atom>` :doc:`pair granular <pair_granular>`,
:doc:`fix add/heat <fix_add_heat>`,
:doc:`fix property/atom <fix_property_atom>`
Default Default
""""""" """""""

View File

@ -68,10 +68,10 @@ material or as an obstacle in a flow. Alternatively, it can be used as a
constraining wall around a simulation; see the discussion of the constraining wall around a simulation; see the discussion of the
*side* keyword below. *side* keyword below.
The *gstyle* geometry of the indenter can either be a sphere, a The *gstyle* keyword selects the geometry of the indenter and it can
cylinder, a cone, or a plane. either have the value of *sphere*, *cylinder*, *cone*, or *plane*\ .
A spherical indenter exerts a force of magnitude A spherical indenter (*gstyle* = *sphere*) exerts a force of magnitude
.. math:: .. math::
@ -82,13 +82,16 @@ distance from the atom to the center of the indenter, and *R* is the
radius of the indenter. The force is repulsive and F(r) = 0 for *r* > radius of the indenter. The force is repulsive and F(r) = 0 for *r* >
*R*\ . *R*\ .
A cylindrical indenter exerts the same force, except that *r* is the A cylindrical indenter (*gstyle* = *cylinder*) follows the same formula
distance from the atom to the center axis of the cylinder. The for the force as a sphere, except that *r* is defined the distance
cylinder extends infinitely along its axis. from the atom to the center axis of the cylinder. The cylinder extends
infinitely along its axis.
A conical indenter is similar to a cylindrical indenter except that it .. versionadded:: 17April2024
has a finite length (between *lo* and *hi*), and that two different
radii (one at each end, *radlo* and *radhi*) can be defined. A conical indenter (*gstyle* = *cone*) is similar to a cylindrical indenter
except that it has a finite length (between *lo* and *hi*), and that two
different radii (one at each end, *radlo* and *radhi*) can be defined.
Spherical, cylindrical, and conical indenters account for periodic Spherical, cylindrical, and conical indenters account for periodic
boundaries in two ways. First, the center point of a spherical boundaries in two ways. First, the center point of a spherical
@ -101,15 +104,15 @@ or axis accounts for periodic boundaries. Both of these mean that an
indenter can effectively move through and straddle one or more indenter can effectively move through and straddle one or more
periodic boundaries. periodic boundaries.
A planar indenter is really an axis-aligned infinite-extent wall A planar indenter (*gstyle* = *plane*) behaves like an axis-aligned
exerting the same force on atoms in the system, where *R* is the infinite-extent wall with the same force expression on atoms in the
position of the plane and *r-R* is the distance from the plane. If system as before, but where *R* is the position of the plane and *r-R*
the *side* parameter of the plane is specified as *lo* then it will is the distance of an from the plane. If the *side* parameter of the
indent from the lo end of the simulation box, meaning that atoms with plane is specified as *lo* then it will indent from the lo end of the
a coordinate less than the plane's current position will be pushed simulation box, meaning that atoms with a coordinate less than the
towards the hi end of the box and atoms with a coordinate higher than plane's current position will be pushed towards the hi end of the box
the plane's current position will feel no force. Vice versa if *side* and atoms with a coordinate higher than the plane's current position
is specified as *hi*\ . will feel no force. Vice versa if *side* is specified as *hi*\ .
Any of the 4 quantities defining a spherical indenter's geometry can Any of the 4 quantities defining a spherical indenter's geometry can
be specified as an equal-style :doc:`variable <variable>`, namely *x*, be specified as an equal-style :doc:`variable <variable>`, namely *x*,

View File

@ -247,6 +247,11 @@ defined by the :doc:`atom_style sph <atom_style>` command.
All particles in the group must be mesoscopic SPH/SDPD particles. All particles in the group must be mesoscopic SPH/SDPD particles.
.. versionchanged:: TBD
This fix is incompatible with deformation controls that remap velocity,
for instance the *remap v* option of :doc:`fix deform <fix_deform>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -97,6 +97,11 @@ These fixes are part of the DPD-MESO package. They are only enabled if
LAMMPS was built with that package. See the :doc:`Build package LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info. <Build_package>` page for more info.
.. versionchanged:: TBD
This fix is incompatible with deformation controls that remap velocity,
for instance the *remap v* option of :doc:`fix deform <fix_deform>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -236,7 +236,7 @@ The keyword *fixcom* specifies whether the center-of-mass of the extended ring-p
Once *fixcom* is set to be *yes*, the center-of-mass velocity will be distracted from the centroid-mode velocities in each step. Once *fixcom* is set to be *yes*, the center-of-mass velocity will be distracted from the centroid-mode velocities in each step.
The keyword *lj* should be used if :doc:`lj units <units>` is used for *fix pimd/langevin*. Typically one may want to use The keyword *lj* should be used if :doc:`lj units <units>` is used for *fix pimd/langevin*. Typically one may want to use
reduced units to run the simulation, and then convert the results into some physical units (for example, :doc:`metal units <units>`). In this case, the 5 quantities in the physical mass units are needed: epsilon (energy scale), sigma (length scale), mass, Planck's constant, mvv2e (mass * velocity^2 to energy conversion factor). Planck's constant and mvv2e can be found in src/update.cpp. If there is no need to convert reduced units to physical units, set all these five value to 1. reduced units to run the simulation, and then convert the results into some physical units (for example, :doc:`metal units <units>`). In this case, the 5 quantities in the physical mass units are needed: epsilon (energy scale), sigma (length scale), mass, Planck's constant, mvv2e (mass * velocity^2 to energy conversion factor). Planck's constant and mvv2e can be found in src/update.cpp. If there is no need to convert reduced units to physical units, you can omit the keyword *lj* and these five values will be set to 1.
The PIMD algorithm in LAMMPS is implemented as a hyper-parallel scheme The PIMD algorithm in LAMMPS is implemented as a hyper-parallel scheme
as described in :ref:`Calhoun <Calhoun>`. In LAMMPS this is done by using as described in :ref:`Calhoun <Calhoun>`. In LAMMPS this is done by using

180
doc/src/fix_rheo.rst Normal file
View File

@ -0,0 +1,180 @@
.. index:: fix rheo
fix rheo command
================
Syntax
""""""
.. parsed-literal::
fix ID group-ID rheo cut kstyle zmin keyword values...
* ID, group-ID are documented in :doc:`fix <fix>` command
* rheo = style name of this fix command
* cut = cutoff for the kernel (distance)
* kstyle = *quintic* or *RK0* or *RK1* or *RK2*
* zmin = minimal number of neighbors for reproducing kernels
* zero or more keyword/value pairs may be appended to args
* keyword = *thermal* or *interface/reconstruct* or *surface/detection* or
*shift* or *rho/sum* or *density* or *self/mass* or *speed/sound*
.. parsed-literal::
*thermal* values = none, turns on thermal evolution
*interface/reconstruct* values = none, reconstructs interfaces with solid particles
*surface/detection* values = *sdstyle* *limit* *limit/splash*
*sdstyle* = *coordination* or *divergence*
*limit* = threshold for surface particles
*limit/splash* = threshold for splash particles
*shift* values = none, turns on velocity shifting
*rho/sum* values = none, uses the kernel to compute the density of particles
*self/mass* values = none, a particle uses its own mass in a rho summation
*density* values = *rho01*, ... *rho0N* (density)
*speed/sound* values = *cs0*, ... *csN* (velocity)
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all rheo 3.0 quintic 0 thermal density 0.1 0.1 speed/sound 10.0 1.0
fix 1 all rheo 3.0 RK1 10 shift surface/detection coordination 40
Description
"""""""""""
.. versionadded:: TBD
Perform time integration for RHEO particles, updating positions, velocities,
and densities. For a detailed breakdown of the integration timestep and
numerical details, see :ref:`(Palermo) <rheo_palermo>`. For an
overview of other features available in the RHEO package, see
:doc:`the RHEO howto <Howto_rheo>`.
The type of kernel is specified using *kstyle* and the cutoff is *cut*. Four
kernels are currently available. The *quintic* kernel is a standard quintic
spline function commonly used in SPH. The other options, *RK0*, *RK1*, and
*RK2*, are zeroth, first, and second order reproducing. To generate a
reproducing kernel, a particle must have sufficient neighbors inside the
kernel cutoff distance (a coordination number) to accurately calculate
moments. This threshold is set by *zmin*. If reproducing kernels are
requested but a particle has fewer neighbors, then it will revert to a
non-reproducing quintic kernel until it gains more neighbors.
To model temperature evolution, one must specify the *thermal* keyword,
define a separate instance of :doc:`fix rheo/thermal <fix_rheo_thermal>`,
and use atom style rheo/thermal.
By default, the density of solid RHEO particles does not evolve and forces
with fluid particles are calculated using the current velocity of the solid
particle. If the *interface/reconstruct* keyword is used, then the density
and velocity of solid particles are alternatively reconstructed for every
fluid-solid interaction to ensure no-slip and pressure-balanced boundaries.
This is done by estimating the location of the fluid-solid interface and
extrapolating fluid particle properties across the interface to calculate a
temporary apparent density and velocity for a solid particle. The numerical
details are the same as those described in
:ref:`(Palermo) <howto_rheo_palermo>` except there is an additional
restriction that the reconstructed solid density cannot be less than the
equilibrium density. This prevents fluid particles from sticking to solid
surfaces.
A modified form of Fickian particle shifting can be enabled with the
*shift* keyword. This effectively shifts particle positions to generate a
more uniform spatial distribution. Shifting currently does not consider the
type of a particle and therefore may be inappropriate in systems consisting
of multiple fluid phases.
In systems with free surfaces, the *surface/detection* keyword can be used
to classify the location of particles as being within the bulk fluid, on a
free surface, or isolated from other particles in a splash or droplet.
Shifting is then disabled in the normal direction away from the free surface
to prevent particles from diffusing away. Surface detection can also be used
to control surface-nucleated effects like oxidation when used in combination
with :doc:`fix rheo/oxidation <fix_rheo_oxidation>`. Surface detection is not
performed on solid bodies.
The *surface/detection* keyword takes three arguments: *sdstyle*, *limit*,
and *limit/splash*. The first, *sdstyle*, specifies whether surface particles
are identified using a coordination number (*coordination*) or the divergence
of the local particle positions (*divergence*). The threshold value for a
surface particle for either of these criteria is set by the numerical value
of *limit*. Additionally, if a particle's coordination number is too low,
i.e. if it has separated off from the bulk in a droplet, it is not possible
to define surfaces and the particle is classified as a splash. The coordination
threshold for this classification is set by the numerical value of
*limit/splash*.
By default, RHEO integrates particles' densities using a mass diffusion
equation. Alternatively, one can update densities every timestep by performing
a kernel summation of the masses of neighboring particles by specifying the *rho/sum*
keyword.
The *self/mass* keyword modifies the behavior of the density summation in *rho/sum*.
Typically, the density :math:`\rho` of a particle is calculated as the sum over neighbors
.. math::
\rho_i = \sum_{j} W_{ij} M_j
where :math:`W_{ij}` is the kernel, and :math:`M_j` is the mass of particle :math:`j`.
The *self/mass* keyword augments this expression by replacing :math:`M_j` with
:math:`M_i`. This may be useful in simulations of multiple fluid phases with large
differences in density, :ref:`(Hu) <fix_rheo_hu>`.
The *density* keyword is used to specify the equilibrium density of each of the N
particle types. It must be followed by N numerical values specifying each type's
equilibrium density *rho0*.
The *speed/sound* keyword is used to specify the speed of sound of each of the
N particle types. It must be followed by N numerical values specifying each type's
speed of sound *cs*.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No 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>`.
Restrictions
""""""""""""
This fix must be used with atom style rheo or rheo/thermal. This fix must
be used in conjunction with :doc:`fix rheo/pressure <fix_rheo_pressure>`.
and :doc:`fix rheo/viscosity <fix_rheo_viscosity>`. If the *thermal* setting
is used, there must also be an instance of
:doc:`fix rheo/thermal <fix_rheo_thermal>`. The fix group must be set to all.
Only one instance of fix rheo may be defined and it must be defined prior
to all other RHEO fixes in the input script.
This fix is part of the RHEO package. It is only enabled if LAMMPS was built
with that package. See the :doc:`Build package <Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo/viscosity <fix_rheo_viscosity>`,
:doc:`fix rheo/pressure <fix_rheo_pressure>`,
:doc:`fix rheo/thermal <fix_rheo_thermal>`,
:doc:`pair rheo <pair_rheo>`,
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`
Default
"""""""
*rho0* and *cs* are set to 1.0 for all atom types.
----------
.. _rheo_palermo:
**(Palermo)** Palermo, Wolf, Clemmer, O'Connor, in preparation.
.. _fix_rheo_hu:
**(Hu)** Hu, and Adams J. Comp. Physics, 213, 844-861 (2006).

View File

@ -0,0 +1,85 @@
.. index:: fix rheo/oxidation
fix rheo/oxidation command
==========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID rheo/oxidation cut btype rsurf
* ID, group-ID are documented in :doc:`fix <fix>` command
* rheo/oxidation = style name of this fix command
* cut = maximum bond length (distance units)
* btype = type of bonds created
* rsurf = distance from surface to create bonds (distance units)
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all rheo/oxidation 1.5 2 0.0
fix 1 all rheo/oxidation 1.0 1 2.0
Description
"""""""""""
.. versionadded:: TBD
This fix dynamically creates bonds on the surface of fluids to
represent physical processes such as oxidation. It is intended
for use with bond style :doc:`bond rheo/shell <bond_rheo_shell>`.
Every timestep, particles check neighbors within a distance of *cut*.
This distance must be smaller than the kernel length defined in
:doc:`fix rheo <fix_rheo>`. Bonds of type *btype* are created between
a fluid particle and either a fluid or solid neighbor. The fluid particles
must also be on the fluid surface, or within a distance of *rsurf* from
the surface. This process is further described in
:ref:`(Clemmer) <howto_rheo_clemmer2>`.
If used in conjunction with solid bodies, such as those generated
by the *react* option of :doc:`fix rheo/thermal <fix_rheo_thermal>`,
it is recommended to use a :doc:`hybrid bond style <bond_hybrid>`
with different bond types for solid and oxide bonds.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No 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>`.
Restrictions
""""""""""""
This fix must be used with the bond style :doc:`rheo/shell <bond_rheo_shell>`
and :doc:`fix rheo <fix_rheo>` with surface detection enabled.
This fix is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>`
page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo <fix_rheo>`,
:doc:`bond rheo/shell <bond_rheo_shell>`,
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`
Default
"""""""
none
----------
.. _howto_rheo_clemmer2:
**(Clemmer)** Clemmer, Pierce, O'Connor, Nevins, Jones, Lechman, Tencer, Appl. Math. Model., 130, 310-326 (2024).

View File

@ -0,0 +1,106 @@
.. index:: fix rheo/pressure
fix rheo/pressure command
=========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID rheo/pressure type1 pstyle1 args1 ... typeN pstyleN argsN
* ID, group-ID are documented in :doc:`fix <fix>` command
* rheo/pressure = style name of this fix command
* one or more types and pressure styles must be appended
* types = lists of types (see below)
* pstyle = *linear* or *taitwater* or *cubic*
.. parsed-literal::
*linear* args = none
*taitwater* args = none
*cubic* args = cubic prefactor :math:`A_3` (pressure/density\^2)
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all rheo/pressure * linear
fix 1 all rheo/pressure 1 linear 2 cubic 10.0
Description
"""""""""""
.. versionadded:: TBD
This fix defines a pressure equation of state for RHEO particles. One can
define different equations of state for different atom types. An equation
must be specified for every atom type.
One first defines the atom *types*. A wild-card asterisk can be used in place
of or in conjunction with the *types* argument to set the coefficients for
multiple pairs of atom types. This takes the form "\*" or "\*n" or "m\*"
or "m\*n". If :math:`N` is the number of atom types, then an asterisk with
no numeric values means all types from 1 to :math:`N`. A leading asterisk
means all types from 1 to n (inclusive). A trailing asterisk means all types
from m to :math:`N` (inclusive). A middle asterisk means all types from m to n
(inclusive).
The *types* definition is followed by the pressure style, *pstyle*. Current
options *linear*, *taitwater*, and *cubic*. Style *linear* is a linear
equation of state with a particle pressure :math:`P` calculated as
.. math::
P = c (\rho - \rho_0)
where :math:`c` is the speed of sound, :math:`\rho_0` is the equilibrium density,
and :math:`\rho` is the current density of a particle. The numerical values of
:math:`c` and :math:`\rho_0` are set in :doc:`fix rheo <fix_rheo>`. Style *cubic*
is a cubic equation of state which has an extra argument :math:`A_3`,
.. math::
P = c ((\rho - \rho_0) + A_3 (\rho - \rho_0)^3) .
Style *taitwater* is Tait's equation of state:
.. math::
P = \frac{c^2 \rho_0}{7} \biggl[\left(\frac{\rho}{\rho_0}\right)^{7} - 1\biggr].
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No 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>`.
Restrictions
""""""""""""
This fix must be used with an atom style that includes density
such as atom_style rheo or rheo/thermal. This fix must be used in
conjunction with :doc:`fix rheo <fix_rheo>`. The fix group must be
set to all. Only one instance of fix rheo/pressure can be defined.
This fix is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>`
page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo <fix_rheo>`,
:doc:`pair rheo <pair_rheo>`,
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`
Default
"""""""
none

View File

@ -0,0 +1,128 @@
.. index:: fix rheo/thermal
fix rheo/thermal command
========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID rheo/thermal attribute values ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* rheo/thermal = style name of this fix command
* one or more attributes may be appended
* attribute = *conductivity* or *specific/heat* or *latent/heat* or *Tfreeze* or *react*
.. parsed-literal::
*conductivity* args = types style args
types = lists of types (see below)
style = *constant*
*constant* arg = conductivity (power/temperature)
*specific/heat* args = types style args
types = lists of types (see below)
style = *constant*
*constant* arg = specific heat (energy/(mass*temperature))
*latent/heat* args = types style args
types = lists of types (see below)
style = *constant*
*constant* arg = latent heat (energy/mass)
*Tfreeze* args = types style args
types = lists of types (see below)
style = *constant*
*constant* arg = freezing temperature (temperature)
*react* args = cut type
cut = maximum bond distance
type = bond type
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all rheo/thermal conductivity * constant 1.0 specific/heat * constant 1.0 Tfreeze * constant 1.0
fix 1 all rheo/pressure conductivity 1*2 constant 1.0 conductivity 3*4 constant 2.0 specific/heat * constant 1.0
Description
"""""""""""
.. versionadded:: TBD
This fix performs time integration of temperature for atom style rheo/thermal.
In addition, it defines multiple thermal properties of particles and handles
melting/solidification, if applicable. For more details on phase transitions
in RHEO, see :doc:`the RHEO howto <Howto_rheo>`.
Note that the temperature of a particle is always derived from the energy.
This implies the *temperature* attribute of :doc:`the set command <set>` does
not affect particles. Instead, one should use the *sph/e* attribute.
For each atom type, one can define expressions for the *conductivity*,
*specific/heat*, *latent/heat*, and critical temperature (*Tfreeze*).
The conductivity and specific heat must be defined for all atom types.
The latent heat and critical temperature are optional. However, a
critical temperature must be defined to specify a latent heat.
Note, if shifting is turned on in :doc:`fix rheo <fix_rheo>`, the gradient
of the energy is used to shift energies. This may be inappropriate in systems
with multiple atom types with different specific heats.
For each property, one must first define a list of atom types. A wild-card
asterisk can be used in place of or in conjunction with the *types* argument
to set the coefficients for multiple pairs of atom types. This takes the
form "\*" or "\*n" or "m\*" or "m\*n". If :math:`N` is the number of atom
types, then an asterisk with no numeric values means all types from 1 to
:math:`N`. A leading asterisk means all types from 1 to n (inclusive).
A trailing asterisk means all types from m to :math:`N` (inclusive). A
middle asterisk means all types from m to n (inclusive).
The *types* definition for each property is followed by the style. Currently,
the only option is *constant*. Style *constant* simply applies a constant value
of respective property to each particle of the assigned type.
The *react* keyword controls whether bonds are created/deleted when particles
transition between a fluid and solid state. This option only applies to atom
types that have a defined value of *Tfreeze*. When a fluid particle's
temperature drops below *Tfreeze*, bonds of type *btype* are created between
nearby solid particles within a distance of *cut*. The particle's status also
swaps to a solid state. When a solid particle's temperature rises above
*Tfreeze*, all bonds of type *btype* are broken and the particle's status swaps
to a fluid state.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No 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>`.
Restrictions
""""""""""""
This fix must be used with an atom style that includes temperature,
heatflow, and conductivity such as atom_style rheo/thermal This fix
must be used in conjunction with :doc:`fix rheo <fix_rheo>` with the
*thermal* setting. The fix group must be set to all. Only one
instance of fix rheo/pressure can be defined.
This fix is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>`
page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo <fix_rheo>`,
:doc:`pair rheo <pair_rheo>`,
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`,
:doc:`fix add/heat <fix_add_heat>`
Default
"""""""
none

View File

@ -0,0 +1,117 @@
.. index:: fix rheo/viscosity
fix rheo/viscosity command
==========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID rheo/viscosity type1 pstyle1 args1 ... typeN pstyleN argsN
* ID, group-ID are documented in :doc:`fix <fix>` command
* rheo/viscosity = style name of this fix command
* one or more types and viscosity styles must be appended
* types = lists of types (see below)
* vstyle = *constant* or *power*
.. parsed-literal::
*constant* args = *eta*
*eta* = viscosity
*power* args = *eta*, *gd0*, *K*, *n*
*eta* = viscosity
*gd0* = critical strain rate
*K* = consistency index
*n* = power-law exponent
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all rheo/viscosity * constant 1.0
fix 1 all rheo/viscosity 1 constant 1.0 2 power 0.1 5e-4 0.001 0.5
Description
"""""""""""
.. versionadded:: TBD
This fix defines a viscosity for RHEO particles. One can define different
viscosities for different atom types, but a viscosity must be specified for
every atom type.
One first defines the atom *types*. A wild-card asterisk can be used in place
of or in conjunction with the *types* argument to set the coefficients for
multiple pairs of atom types. This takes the form "\*" or "\*n" or "m\*"
or "m\*n". If :math:`N` is the number of atom types, then an asterisk with
no numeric values means all types from 1 to :math:`N`. A leading asterisk
means all types from 1 to n (inclusive). A trailing asterisk means all types
from m to :math:`N` (inclusive). A middle asterisk means all types from m to n
(inclusive).
The *types* definition is followed by the viscosity style, *vstyle*. Two
options are available, *constant* and *power*. Style *constant* simply
applies a constant value of the viscosity *eta* to each particle of the
assigned type. Style *power* is a Hershchel-Bulkley constitutive equation
for the stress :math:`\tau`
.. math::
\tau = \left(\frac{\tau_0}{\dot{\gamma}} + K \dot{\gamma}^{n - 1}\right) \dot{\gamma}, \tau \ge \tau_0
where :math:`\dot{\gamma}` is the strain rate and :math:`\tau_0` is the critical
yield stress, below which :math:`\dot{\gamma} = 0.0`. To avoid divergences, this
expression is regularized by defining a critical strain rate *gd0*. If the local
strain rate on a particle falls below this limit, a constant viscosity of *eta*
is assigned. This implies a value of
.. math::
\tau_0 = \eta \dot{\gamma}_0 - K \dot{\gamma}_0^N
as further discussed in :ref:`(Palermo) <rheo_palermo2>`.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No 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>`.
Restrictions
""""""""""""
This fix must be used with an atom style that includes viscosity
such as atom_style rheo or rheo/thermal. This fix must be used in
conjunction with :doc:`fix rheo <fix_rheo>`. The fix group must be
set to all. Only one instance of fix rheo/viscosity can be defined.
This fix is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the
:doc:`Build package <Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo <fix_rheo>`,
:doc:`pair rheo <pair_rheo>`,
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`
Default
"""""""
none
----------
.. _rheo_palermo2:
**(Palermo)** Palermo, Wolf, Clemmer, O'Connor, in preparation.

View File

@ -353,6 +353,11 @@ defined by the :doc:`atom_style sph <atom_style>` command.
All particles in the group must be mesoscopic SPH/SDPD particles. All particles in the group must be mesoscopic SPH/SDPD particles.
.. versionchanged:: TBD
This fix is incompatible with deformation controls that remap velocity,
for instance the *remap v* option of :doc:`fix deform <fix_deform>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -27,9 +27,9 @@ Syntax
.. parsed-literal:: .. parsed-literal::
*b* values = one or more bond types *b* values = one or more bond types (may use type labels)
*a* values = one or more angle types *a* values = one or more angle types (may use type labels)
*t* values = one or more atom types *t* values = one or more atom types (may use type labels)
*m* value = one or more mass values *m* value = one or more mass values
* zero or more keyword/value pairs may be appended * zero or more keyword/value pairs may be appended
@ -137,7 +137,17 @@ constrained (within a fudge factor of MASSDELTA specified in
both bonds in the angle are constrained then the angle will also be both bonds in the angle are constrained then the angle will also be
constrained if its type is in the list. constrained if its type is in the list.
For all constraints, a particular bond is only constrained if both .. versionchanged:: TBD
The types may be given as type labels *only* if there is no atom, bond,
or angle type label named *b*, *a*, *t*, or *m* defined in the
simulation. If that is the case, type labels cannot be used as
constraint type index with these two fixes, because the type labels
would be incorrectly treated as a new type of constraint instead.
Thus, LAMMPS will print a warning and type label handling is disabled
and numeric types must be used.
For all constraints, a particular bond is only constrained if *both*
atoms in the bond are in the group specified with the SHAKE fix. atoms in the bond are in the group specified with the SHAKE fix.
The degrees-of-freedom removed by SHAKE bonds and angles are accounted The degrees-of-freedom removed by SHAKE bonds and angles are accounted

View File

@ -53,6 +53,11 @@ Restrictions
This fix is part of the MACHDYN package. It is only enabled if This fix is part of the MACHDYN package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info. LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info.
.. versionchanged:: TBD
This fix is incompatible with deformation controls that remap velocity,
for instance the *remap v* option of :doc:`fix deform <fix_deform>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -61,6 +61,11 @@ Restrictions
This fix is part of the MACHDYN package. It is only enabled if This fix is part of the MACHDYN package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info. LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info.
.. versionchanged:: TBD
This fix is incompatible with deformation controls that remap velocity,
for instance the *remap v* option of :doc:`fix deform <fix_deform>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -23,11 +23,12 @@ Examples
Description Description
""""""""""" """""""""""
Store the forces on atoms in the group at the point during each Store the forces on atoms in the group at the point during each timestep
timestep when the fix is invoked, as described below. This is useful when the fix is invoked, as described below. This is useful for storing
for storing forces before constraints or other boundary conditions are forces before constraints or other boundary conditions are computed
computed which modify the forces, so that unmodified forces can be which modify the forces, so that unmodified forces can be :doc:`written
:doc:`written to a dump file <dump>` or accessed by other :doc:`output commands <Howto_output>` that use per-atom quantities. to a dump file <dump>` or accessed by other :doc:`output commands
<Howto_output>` that use per-atom quantities.
This fix is invoked at the point in the velocity-Verlet timestepping This fix is invoked at the point in the velocity-Verlet timestepping
immediately after :doc:`pair <pair_style>`, :doc:`bond <bond_style>`, immediately after :doc:`pair <pair_style>`, :doc:`bond <bond_style>`,
@ -36,12 +37,13 @@ immediately after :doc:`pair <pair_style>`, :doc:`bond <bond_style>`,
forces have been calculated. It is the point in the timestep when forces have been calculated. It is the point in the timestep when
various fixes that compute constraint forces are calculated and various fixes that compute constraint forces are calculated and
potentially modify the force on each atom. Examples of such fixes are potentially modify the force on each atom. Examples of such fixes are
:doc:`fix shake <fix_shake>`, :doc:`fix wall <fix_wall>`, and :doc:`fix indent <fix_indent>`. :doc:`fix shake <fix_shake>`, :doc:`fix wall <fix_wall>`, and :doc:`fix
indent <fix_indent>`.
.. note:: .. note::
The order in which various fixes are applied which operate at The order in which various fixes are applied which operate at the
the same point during the timestep, is the same as the order they are same point during the timestep, is the same as the order they are
specified in the input script. Thus normally, if you want to store specified in the input script. Thus normally, if you want to store
per-atom forces due to force field interactions, before constraints per-atom forces due to force field interactions, before constraints
are applied, you should list this fix first within that set of fixes, are applied, you should list this fix first within that set of fixes,
@ -52,8 +54,9 @@ potentially modify the force on each atom. Examples of such fixes are
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 produces a per-atom array which can be accessed by various This fix produces a per-atom array which can be accessed by various
:doc:`output commands <Howto_output>`. The number of columns for each :doc:`output commands <Howto_output>`. The number of columns for each
@ -61,7 +64,8 @@ atom is 3, and the columns store the x,y,z forces on each atom. The
per-atom values be accessed on any timestep. per-atom values be accessed on any timestep.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`. the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions Restrictions
"""""""""""" """"""""""""

View File

@ -1,8 +1,11 @@
.. index:: improper_style hybrid .. index:: improper_style hybrid
.. index:: improper_style hybrid/kk
improper_style hybrid command improper_style hybrid command
============================= =============================
Accelerator Variants: *hybrid/kk*
Syntax Syntax
"""""" """"""
@ -79,6 +82,10 @@ types.
---------- ----------
.. include:: accel_styles.rst
----------
Restrictions Restrictions
"""""""""""" """"""""""""
@ -87,9 +94,10 @@ MOLECULE package. See the :doc:`Build package <Build_package>` doc page
for more info. for more info.
Unlike other improper styles, the hybrid improper style does not store Unlike other improper styles, the hybrid improper style does not store
improper coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. improper coefficient info for individual sub-styles in :doc:`binary
Thus when restarting a simulation from a restart files <restart>` or :doc:`data files <write_data>`. Thus when
restart file, you need to re-specify improper_coeff commands. restarting a simulation, you need to re-specify the improper_coeff
commands.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -32,7 +32,7 @@ Syntax
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 (M and N may be type labels)
*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
@ -159,15 +159,19 @@ sample scenarios where this is useful:
* When one or more rigid bodies are specified, interactions within each * When one or more rigid bodies are specified, interactions within each
body can be turned off to save needless computation. See the :doc:`fix rigid <fix_rigid>` command for more details. body can be turned off to save needless computation. See the :doc:`fix rigid <fix_rigid>` command for more details.
The *exclude type* option turns off the pairwise interaction if one .. versionchanged:: TBD
atom is of type M and the other of type N. M can equal N. The
*exclude group* option turns off the interaction if one atom is in the Support for type labels was added.
first group and the other is the second. Group1-ID can equal
group2-ID. The *exclude molecule/intra* option turns off the The *exclude type* option turns off the pairwise interaction if one atom
interaction if both atoms are in the specified group and in the same is of type M and the other of type N. M can equal N. The *exclude
molecule, as determined by their molecule ID. The *exclude group* option turns off the interaction if one atom is in the first
molecule/inter* turns off the interaction between pairs of atoms that group and the other is the second. Group1-ID can equal group2-ID. The
have different molecule IDs and are both in the specified group. *exclude molecule/intra* option turns off the interaction if both atoms
are in the specified group and in the same molecule, as determined by
their molecule ID. The *exclude molecule/inter* turns off the
interaction between pairs of atoms that have different molecule IDs and
are both in the specified group.
Each of the exclude options can be specified multiple times. The Each of the exclude options can be specified multiple times. The
*exclude type* option is the most efficient option to use; it requires *exclude type* option is the most efficient option to use; it requires
@ -219,30 +223,30 @@ atom can have.
The *binsize* option allows you to specify what size of bins will be The *binsize* option allows you to specify what size of bins will be
used in neighbor list construction to sort and find neighboring atoms. used in neighbor list construction to sort and find neighboring atoms.
By default, for :doc:`neighbor style bin <neighbor>`, LAMMPS uses bins By default, for :doc:`neighbor style bin <neighbor>`, LAMMPS uses bins
that are 1/2 the size of the maximum pair cutoff. For :doc:`neighbor style multi <neighbor>`, that are 1/2 the size of the maximum pair cutoff. For :doc:`neighbor
the bins are 1/2 the size of the collection interaction cutoff. style multi <neighbor>`, the bins are 1/2 the size of the collection
Typically these are good values for minimizing the time for interaction cutoff. Typically these are good values for minimizing the
neighbor list construction. This setting overrides the default. time for neighbor list construction. This setting overrides the
If you make it too big, there is little overhead due to default. If you make it too big, there is little overhead due to
looping over bins, but more atoms are checked. If you make it too looping over bins, but more atoms are checked. If you make it too
small, the optimal number of atoms is checked, but bin overhead goes small, the optimal number of atoms is checked, but bin overhead goes up.
up. If you set the binsize to 0.0, LAMMPS will use the default If you set the binsize to 0.0, LAMMPS will use the default binsize of
binsize of 1/2 the cutoff. 1/2 the cutoff.
The *collection/type* option allows you to define collections of atom The *collection/type* option allows you to define collections of atom
types, used by the *multi* neighbor mode. By grouping atom types with types, used by the *multi* neighbor mode. By grouping atom types with
similar physical size or interaction cutoff lengths, one may be able similar physical size or interaction cutoff lengths, one may be able to
to improve performance by reducing improve performance by reducing overhead. You must first specify the
overhead. You must first specify the number of collections N to be number of collections N to be defined followed by N lists of types.
defined followed by N lists of types. Each list consists of a series of type Each list consists of a series of type ranges separated by commas. The
ranges separated by commas. The range can be specified as a range can be specified as a single numeric value, or a wildcard asterisk
single numeric value, or a wildcard asterisk can be used to specify a range can be used to specify a range of values. This takes the form "\*" or
of values. This takes the form "\*" or "\*n" or "n\*" or "m\*n". For "\*n" or "n\*" or "m\*n". For example, if M = the number of atom types,
example, if M = the number of atom types, then an asterisk with no numeric then an asterisk with no numeric values means all types from 1 to M. A
values means all types from 1 to M. A leading asterisk means all types leading asterisk means all types from 1 to n (inclusive). A trailing
from 1 to n (inclusive). A trailing asterisk means all types from n to M asterisk means all types from n to M (inclusive). A middle asterisk
(inclusive). A middle asterisk means all types from m to n (inclusive). means all types from m to n (inclusive). Note that all atom types must
Note that all atom types must be included in exactly one of the N collections. be included in exactly one of the N collections.
The *collection/interval* option provides a similar capability. This The *collection/interval* option provides a similar capability. This
command allows a user to define collections by specifying a series of command allows a user to define collections by specifying a series of

View File

@ -19,7 +19,7 @@ Examples
.. code-block:: LAMMPS .. code-block:: LAMMPS
pair_style born/gauss 10.0 pair_style born/gauss 10.0
pair_coeff 1 1 1 1 8.2464e13 12.48 0.042644277 0.44 3.56 pair_coeff 1 1 8.2464e13 12.48 0.042644277 0.44 3.56
Description Description
""""""""""" """""""""""

View File

@ -2,6 +2,8 @@
.. index:: pair_style coul/cut/gpu .. index:: pair_style coul/cut/gpu
.. index:: pair_style coul/cut/kk .. index:: pair_style coul/cut/kk
.. index:: pair_style coul/cut/omp .. index:: pair_style coul/cut/omp
.. index:: pair_style coul/cut/global
.. index:: pair_style coul/cut/global/omp
.. index:: pair_style coul/debye .. index:: pair_style coul/debye
.. index:: pair_style coul/debye/gpu .. index:: pair_style coul/debye/gpu
.. index:: pair_style coul/debye/kk .. index:: pair_style coul/debye/kk
@ -11,8 +13,6 @@
.. index:: pair_style coul/dsf/kk .. index:: pair_style coul/dsf/kk
.. index:: pair_style coul/dsf/omp .. index:: pair_style coul/dsf/omp
.. index:: pair_style coul/exclude .. index:: pair_style coul/exclude
.. index:: pair_style coul/cut/global
.. index:: pair_style coul/cut/global/omp
.. index:: pair_style coul/long .. index:: pair_style coul/long
.. index:: pair_style coul/long/omp .. index:: pair_style coul/long/omp
.. index:: pair_style coul/long/kk .. index:: pair_style coul/long/kk
@ -33,6 +33,11 @@ pair_style coul/cut command
Accelerator Variants: *coul/cut/gpu*, *coul/cut/kk*, *coul/cut/omp* Accelerator Variants: *coul/cut/gpu*, *coul/cut/kk*, *coul/cut/omp*
pair_style coul/cut/global command
==================================
Accelerator Variants: *coul/cut/omp*
pair_style coul/debye command pair_style coul/debye command
============================= =============================
@ -46,11 +51,6 @@ Accelerator Variants: *coul/dsf/gpu*, *coul/dsf/kk*, *coul/dsf/omp*
pair_style coul/exclude command pair_style coul/exclude command
=============================== ===============================
pair_style coul/cut/global command
==================================
Accelerator Variants: *coul/cut/omp*
pair_style coul/long command pair_style coul/long command
============================ ============================
@ -79,16 +79,17 @@ pair_style tip4p/long command
Accelerator Variants: *tip4p/long/omp* Accelerator Variants: *tip4p/long/omp*
Syntax Syntax
"""""" """"""
.. code-block:: LAMMPS .. code-block:: LAMMPS
pair_style coul/cut cutoff pair_style coul/cut cutoff
pair_style coul/cut/global cutoff
pair_style coul/debye kappa cutoff pair_style coul/debye kappa cutoff
pair_style coul/dsf alpha cutoff pair_style coul/dsf alpha cutoff
pair_style coul/exclude cutoff pair_style coul/exclude cutoff
pair_style coul/cut/global cutoff
pair_style coul/long cutoff pair_style coul/long cutoff
pair_style coul/wolf alpha cutoff pair_style coul/wolf alpha cutoff
pair_style coul/streitz cutoff keyword alpha pair_style coul/streitz cutoff keyword alpha
@ -152,6 +153,11 @@ the 2 atoms, and :math:`\epsilon` is the dielectric constant which can be set
by the :doc:`dielectric <dielectric>` command. The cutoff :math:`r_c` truncates by the :doc:`dielectric <dielectric>` command. The cutoff :math:`r_c` truncates
the interaction distance. the interaction distance.
Pair style *coul/cut/global* computes the same Coulombic interactions
as style *coul/cut* except that it allows only a single global cutoff
and thus makes it compatible for use in combination with long-range
coulomb styles in :doc:`hybrid pair styles <pair_hybrid>`.
---------- ----------
Style *coul/debye* adds an additional exp() damping factor to the Style *coul/debye* adds an additional exp() damping factor to the
@ -262,11 +268,6 @@ Streitz-Mintmire parameterization for the material being modeled.
---------- ----------
Pair style *coul/cut/global* computes the same Coulombic interactions
as style *coul/cut* except that it allows only a single global cutoff
and thus makes it compatible for use in combination with long-range
coulomb styles in :doc:`hybrid pair styles <pair_hybrid>`.
Pair style *coul/exclude* computes Coulombic interactions like *coul/cut* Pair style *coul/exclude* computes Coulombic interactions like *coul/cut*
but **only** applies them to excluded pairs using a scaling factor but **only** applies them to excluded pairs using a scaling factor
of :math:`\gamma - 1.0` with :math:`\gamma` being the factor assigned of :math:`\gamma - 1.0` with :math:`\gamma` being the factor assigned

View File

@ -479,11 +479,12 @@ For the hybrid pair styles, the list of sub-styles and their respective
settings are written to :doc:`binary restart files <restart>`, so a settings are written to :doc:`binary restart files <restart>`, so a
:doc:`pair_style <pair_style>` command does not need to specified in an :doc:`pair_style <pair_style>` command does not need to specified in an
input script that reads a restart file. However, the coefficient input script that reads a restart file. However, the coefficient
information is not stored in the restart file. Thus, pair_coeff information is not stored in the restart file. The same is true for
commands need to be re-specified in the restart input script. For pair :doc:`data files <write_data>`. Thus, pair_coeff commands need to be
style *hybrid/scaled* also the names of any variables used as scale re-specified in the restart input script. For pair style
factors are restored, but not the variables themselves, so those may *hybrid/scaled* also the names of any variables used as scale factors
need to be redefined when continuing from a restart. are restored, but not the variables themselves, so those may need to be
redefined when continuing from a restart.
These pair styles support the use of the *inner*, *middle*, and These pair styles support the use of the *inner*, *middle*, and
*outer* keywords of the :doc:`run_style respa <run_style>` command, if *outer* keywords of the :doc:`run_style respa <run_style>` command, if

102
doc/src/pair_rheo.rst Normal file
View File

@ -0,0 +1,102 @@
.. index:: pair_style rheo
pair_style rheo command
=======================
Syntax
""""""
.. code-block:: LAMMPS
pair_style rheo cutoff keyword values
* cutoff = global cutoff for kernel (distance units)
* zero or more keyword/value pairs may be appended to args
* keyword = *rho/damp* or *artificial/visc* or *harmonic/means*
.. parsed-literal::
*rho/damp* args = density damping prefactor :math:`\xi`
*artificial/visc* args = artificial viscosity prefactor :math:`\zeta`
*harmonic/means* args = none
Examples
""""""""
.. code-block:: LAMMPS
pair_style rheo 3.0 rho/damp 1.0 artificial/visc 2.0
pair_coeff * *
Description
"""""""""""
.. versionadded:: TBD
Pair style *rheo* computes pressure and viscous forces between particles
in the :doc:`rheo package <Howto_rheo>`. If thermal evolution is turned
on in :doc:`fix rheo <fix_rheo>`, then the pair style also calculates
heat exchanged between particles.
The *artificial/viscosity* keyword is used to specify the magnitude
:math:`\zeta` of an optional artificial viscosity contribution to forces.
This factor can help stabilize simulations by smoothing out small length
scale variations in velocity fields. Artificial viscous forces typically
are only exchanged by fluid particles. However, if interfaces are not
reconstructed in fix rheo, fluid particles will also exchange artificial
viscous forces with solid particles to improve stability.
The *rho/damp* keyword is used to specify the magnitude :math:`\xi` of
an optional pairwise damping term between the density of particles. This
factor can help stabilize simulations by smoothing out small length
scale variations in density fields. However, in systems that develop
a density gradient in equilibrium (e.g. in a hydrostatic column underlying
gravity), this option may be inappropriate.
If particles have different viscosities or conductivities, the
*harmonic/means* keyword changes how they are averaged before calculating
pairwise forces or heat exchanges. By default, an arithmetic averaged is
used, however, a harmonic mean may improve stability in systems with multiple
fluid phases with large disparities in viscosities.
No coefficients are defined for each pair of atoms types via the
:doc:`pair_coeff <pair_coeff>` command as in the examples
above.
----------
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This style does not support the :doc:`pair_modify <pair_modify>`
shift, table, and tail options.
This style does not write information to :doc:`binary restart files <restart>`.
Thus, you need to re-specify the pair_style and pair_coeff commands in an input
script that reads a restart file.
This style can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. It does not support the *inner*,
*middle*, *outer* keywords.
Restrictions
""""""""""""
This fix is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the
:doc:`Build package <Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo <fix_rheo>`,
:doc:`fix rheo/pressure <fix_rheo_pressure>`,
:doc:`fix rheo/thermal <fix_rheo_thermal>`,
:doc:`fix rheo/viscosity <fix_rheo_viscosity>`,
:doc:`compute rheo/property/atom <compute_rheo_property_atom>`
Default
"""""""
Density damping and artificial viscous forces are not calculated.
Arithmetic means are used for mixing particle properties.

112
doc/src/pair_rheo_solid.rst Normal file
View File

@ -0,0 +1,112 @@
.. index:: pair_style rheo/solid
pair_style rheo/solid command
=============================
Syntax
""""""
.. code-block:: LAMMPS
pair_style rheo/solid
Examples
""""""""
.. code-block:: LAMMPS
pair_style rheo/solid
pair_coeff * * 1.0 1.5 1.0
Description
"""""""""""
.. versionadded:: TBD
Style *rheo/solid* is effectively a copy of pair style
:doc:`bpm/spring <pair_bpm_spring>` except it only applies forces
between solid RHEO particles, determined by checking the status of
each pair of neighboring particles before calculating forces.
The style computes pairwise forces with the formula
.. math::
F = k (r - r_c)
where :math:`k` is a stiffness and :math:`r_c` is the cutoff length.
An additional damping force is also applied to interacting
particles. The force is proportional to the difference in the
normal velocity of particles
.. math::
F_D = - \gamma w (\hat{r} \bullet \vec{v})
where :math:`\gamma` is the damping strength, :math:`\hat{r}` is the
displacement normal vector, :math:`\vec{v}` is the velocity difference
between the two particles, and :math:`w` is a smoothing factor.
This smoothing factor is constructed such that damping forces go to zero
as particles come out of contact to avoid discontinuities. It is
given by
.. math::
w = 1.0 - \left( \frac{r}{r_c} \right)^8 .
The following coefficients must be defined for each pair of atom types
via the :doc:`pair_coeff <pair_coeff>` command as in the examples
above, or in the data file or restart files read by the
:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
commands, or by mixing as described below:
* :math:`k` (force/distance units)
* :math:`r_c` (distance units)
* :math:`\gamma` (force/velocity units)
----------
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
For atom type pairs I,J and I != J, the A coefficient and cutoff
distance for this pair style can be mixed. A is always mixed via a
*geometric* rule. The cutoff is mixed according to the pair_modify
mix value. The default mix value is *geometric*\ . See the
"pair_modify" command for details.
This pair style does not support the :doc:`pair_modify <pair_modify>`
shift option, since the pair interaction goes to 0.0 at the cutoff.
The :doc:`pair_modify <pair_modify>` table and tail options are not
relevant for this pair style.
This pair style writes its information to :doc:`binary restart files
<restart>`, so pair_style and pair_coeff commands do not need to be
specified in an input script that reads a restart file.
This pair style can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. It does not support the
*inner*, *middle*, *outer* keywords.
----------
Restrictions
""""""""""""
This pair style is part of the RHEO package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix rheo <fix_rheo>`,
:doc:`fix rheo/thermal <fix_rheo_thermal>`,
:doc:`pair bpm/spring <pair_bpm_spring>`
Default
"""""""
none

View File

@ -5,6 +5,7 @@
.. index:: pair_style lj/spica/coul/long .. index:: pair_style lj/spica/coul/long
.. index:: pair_style lj/spica/coul/long/gpu .. index:: pair_style lj/spica/coul/long/gpu
.. index:: pair_style lj/spica/coul/long/omp .. index:: pair_style lj/spica/coul/long/omp
.. index:: pair_style lj/spica/coul/long/kk
.. index:: pair_style lj/spica/coul/msm .. index:: pair_style lj/spica/coul/msm
.. index:: pair_style lj/spica/coul/msm/omp .. index:: pair_style lj/spica/coul/msm/omp
@ -16,7 +17,7 @@ Accelerator Variants: *lj/spica/gpu*, *lj/spica/kk*, *lj/spica/omp*
pair_style lj/spica/coul/long command pair_style lj/spica/coul/long command
===================================== =====================================
Accelerator Variants: *lj/spica/coul/long/gpu*, *lj/spica/coul/long/omp* Accelerator Variants: *lj/spica/coul/long/gpu*, *lj/spica/coul/long/omp*, *lj/spica/coul/long/kk*
pair_style lj/spica/coul/msm command pair_style lj/spica/coul/msm command
==================================== ====================================

View File

@ -292,6 +292,7 @@ accelerated styles exist.
* :doc:`mesocnt/viscous <pair_mesocnt>` - Mesoscopic vdW potential for (carbon) nanotubes with friction * :doc:`mesocnt/viscous <pair_mesocnt>` - Mesoscopic vdW potential for (carbon) nanotubes with friction
* :doc:`mgpt <pair_mgpt>` - Simplified model generalized pseudopotential theory (MGPT) potential * :doc:`mgpt <pair_mgpt>` - Simplified model generalized pseudopotential theory (MGPT) potential
* :doc:`mie/cut <pair_mie>` - Mie potential * :doc:`mie/cut <pair_mie>` - Mie potential
* :doc:`mliap <pair_mliap>` - Multiple styles of machine-learning potential
* :doc:`mm3/switch3/coulgauss/long <pair_lj_switch3_coulgauss_long>` - Smoothed MM3 vdW potential with Gaussian electrostatics * :doc:`mm3/switch3/coulgauss/long <pair_lj_switch3_coulgauss_long>` - Smoothed MM3 vdW potential with Gaussian electrostatics
* :doc:`momb <pair_momb>` - Many-Body Metal-Organic (MOMB) force field * :doc:`momb <pair_momb>` - Many-Body Metal-Organic (MOMB) force field
* :doc:`morse <pair_morse>` - Morse potential * :doc:`morse <pair_morse>` - Morse potential
@ -337,6 +338,8 @@ accelerated styles exist.
* :doc:`reaxff <pair_reaxff>` - ReaxFF potential * :doc:`reaxff <pair_reaxff>` - ReaxFF potential
* :doc:`rebo <pair_airebo>` - Second generation REBO potential of Brenner * :doc:`rebo <pair_airebo>` - Second generation REBO potential of Brenner
* :doc:`rebomos <pair_rebomos>` - REBOMoS potential for MoS2 * :doc:`rebomos <pair_rebomos>` - REBOMoS potential for MoS2
* :doc:`rheo <pair_rheo>` - fluid interactions in RHEO package
* :doc:`rheo/solid <pair_rheo_solid>` - solid interactions in RHEO package
* :doc:`resquared <pair_resquared>` - Everaers RE-Squared ellipsoidal potential * :doc:`resquared <pair_resquared>` - Everaers RE-Squared ellipsoidal potential
* :doc:`saip/metal <pair_saip_metal>` - Interlayer potential for hetero-junctions formed with hexagonal 2D materials and metal surfaces * :doc:`saip/metal <pair_saip_metal>` - Interlayer potential for hetero-junctions formed with hexagonal 2D materials and metal surfaces
* :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>` - Smoothed dissipative particle dynamics for water at isothermal conditions * :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>` - Smoothed dissipative particle dynamics for water at isothermal conditions
@ -347,7 +350,6 @@ accelerated styles exist.
* :doc:`smd/tri_surface <pair_smd_triangulated_surface>` - * :doc:`smd/tri_surface <pair_smd_triangulated_surface>` -
* :doc:`smd/ulsph <pair_smd_ulsph>` - * :doc:`smd/ulsph <pair_smd_ulsph>` -
* :doc:`smtbq <pair_smtbq>` - * :doc:`smtbq <pair_smtbq>` -
* :doc:`mliap <pair_mliap>` - Multiple styles of machine-learning potential
* :doc:`snap <pair_snap>` - SNAP machine-learning potential * :doc:`snap <pair_snap>` - SNAP machine-learning potential
* :doc:`soft <pair_soft>` - Soft (cosine) potential * :doc:`soft <pair_soft>` - Soft (cosine) potential
* :doc:`sph/heatconduction <pair_sph_heatconduction>` - * :doc:`sph/heatconduction <pair_sph_heatconduction>` -

View File

@ -12,7 +12,7 @@ Syntax
* file = name of data file to read in * file = name of data file to read in
* zero or more keyword/arg pairs may be appended * zero or more keyword/arg pairs may be appended
* keyword = *add* or *offset* or *shift* or *extra/atom/types* or *extra/bond/types* or *extra/angle/types* or *extra/dihedral/types* or *extra/improper/types* or *extra/bond/per/atom* or *extra/angle/per/atom* or *extra/dihedral/per/atom* or *extra/improper/per/atom* or *group* or *nocoeff* or *fix* * keyword = *add* or *offset* or *shift* or *extra/atom/types* or *extra/bond/types* or *extra/angle/types* or *extra/dihedral/types* or *extra/improper/types* or *extra/bond/per/atom* or *extra/angle/per/atom* or *extra/dihedral/per/atom* or *extra/improper/per/atom* or *extra/special/per/atom* or *group* or *nocoeff* or *fix*
.. parsed-literal:: .. parsed-literal::
@ -859,6 +859,10 @@ of analysis.
- atom-ID molecule-ID atom-type x y z - atom-ID molecule-ID atom-type x y z
* - peri * - peri
- atom-ID atom-type volume density x y z - atom-ID atom-type volume density x y z
* - rheo
- atom-ID atom-type status rho x y z
* - rheo/thermal
- atom-ID atom-type status rho energy x y z
* - smd * - smd
- atom-ID atom-type molecule volume mass kradius cradius x0 y0 z0 x y z - atom-ID atom-type molecule volume mass kradius cradius x0 y0 z0 x y z
* - sph * - sph

View File

@ -32,7 +32,7 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
reset atoms mol group-ID keyword value ... reset_atoms mol group-ID keyword value ...
* group-ID = ID of group of atoms whose molecule IDs will be reset * group-ID = ID of group of atoms whose molecule IDs will be reset
* zero or more keyword/value pairs can be appended * zero or more keyword/value pairs can be appended
@ -66,16 +66,16 @@ Description
.. versionadded:: 22Dec2022 .. versionadded:: 22Dec2022
The *reset_atoms* command resets the values of a specified atom The *reset_atoms* command resets the values of a specified atom
property. In contrast to the set command, it does this in a property. In contrast to the *set* command, it does this in a
collective manner which resets the values for many atoms in a collective manner which resets the values for many atoms in a
self-consistent way. This is often useful when the simulated system self-consistent way. This command is often useful when the simulated
has undergone significant modifications like adding or removing atoms system has undergone significant modifications like adding or removing
or molecules, joining data files, changing bonds, or large-scale atoms or molecules, joining data files, changing bonds, or large-scale
diffusion. diffusion.
The new values can be thought of as a *reset*, similar to values atoms The new values can be thought of as a *reset*, similar to values atoms
would have if a new data file were being read or a new simulation would have if a new data file were being read or a new simulation
performed. Note that the set command also resets atom properties to performed. Note that the *set* command also resets atom properties to
new values, but it treats each atom independently. new values, but it treats each atom independently.
The *property* setting can be *id* or *image* or *mol*. For *id*, the The *property* setting can be *id* or *image* or *mol*. For *id*, the
@ -90,7 +90,7 @@ keyword/value settings are given below.
---------- ----------
*Property id* Property: *id*
Reset atom IDs for the entire system, including all the global IDs Reset atom IDs for the entire system, including all the global IDs
stored for bond, angle, dihedral, improper topology data. This will stored for bond, angle, dihedral, improper topology data. This will
@ -146,7 +146,7 @@ processor have consecutive IDs, as the :doc:`create_atoms
---------- ----------
*Property image* Property: *image*
Reset the image flags of atoms so that at least one atom in each Reset the image flags of atoms so that at least one atom in each
molecule has an image flag of 0. Molecular topology is respected so molecule has an image flag of 0. Molecular topology is respected so
@ -191,7 +191,7 @@ flags.
---------- ----------
*Property mol* Property: *mol*
Reset molecule IDs for a specified group of atoms based on current Reset molecule IDs for a specified group of atoms based on current
bond connectivity. This will typically create a new set of molecule bond connectivity. This will typically create a new set of molecule
@ -203,7 +203,7 @@ For purposes of this operation, molecules are identified by the current
bond connectivity in the system, which may or may not be consistent with bond connectivity in the system, which may or may not be consistent with
the current molecule IDs. A molecule in this context is a set of atoms the current molecule IDs. A molecule in this context is a set of atoms
connected to each other with explicit bonds. The specific algorithm connected to each other with explicit bonds. The specific algorithm
used is the one of :doc:`compute fragment/atom <compute_cluster_atom>` used is the one of :doc:`compute fragment/atom <compute_cluster_atom>`.
Once the molecules are identified and a new molecule ID computed for Once the molecules are identified and a new molecule ID computed for
each, this command will update the current molecule ID for all atoms in each, this command will update the current molecule ID for all atoms in
the group with the new molecule ID. Note that if the group excludes the group with the new molecule ID. Note that if the group excludes
@ -266,7 +266,7 @@ The *image* property can only be used when the atom style supports bonds.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`compute fragment/atom <compute_cluster_atom>` :doc:`compute fragment/atom <compute_cluster_atom>`,
:doc:`fix bond/react <fix_bond_react>`, :doc:`fix bond/react <fix_bond_react>`,
:doc:`fix bond/create <fix_bond_create>`, :doc:`fix bond/create <fix_bond_create>`,
:doc:`fix bond/break <fix_bond_break>`, :doc:`fix bond/break <fix_bond_break>`,

View File

@ -120,6 +120,8 @@ Syntax
*angle* value = numeric angle type or angle type label, for all angles between selected atoms *angle* value = numeric angle type or angle type label, for all angles between selected atoms
*dihedral* value = numeric dihedral type or dihedral type label, for all dihedrals between selected atoms *dihedral* value = numeric dihedral type or dihedral type label, for all dihedrals between selected atoms
*improper* value = numeric improper type or improper type label, for all impropers between selected atoms *improper* value = numeric improper type or improper type label, for all impropers between selected atoms
*rheo/rho* value = density of RHEO particles (mass/distance\^3)
*rheo/status* value = status or phase of RHEO particles (unitless)
*sph/e* value = energy of SPH particles (need units) *sph/e* value = energy of SPH particles (need units)
value can be an atom-style variable (see below) value can be an atom-style variable (see below)
*sph/cv* value = heat capacity of SPH particles (need units) *sph/cv* value = heat capacity of SPH particles (need units)
@ -506,6 +508,10 @@ by the *bond types* (\ *angle types*, etc) field in the header of the
data file read by the :doc:`read_data <read_data>` command. These data file read by the :doc:`read_data <read_data>` command. These
keywords do not allow use of an atom-style variable. keywords do not allow use of an atom-style variable.
Keywords *rheo/rho* and *rheo/status* set the density and the status of
rheo particles. In particular, one can only set the phase in the status
as described by the :doc:`RHEO howto page <Howto_rheo>`.
Keywords *sph/e*, *sph/cv*, and *sph/rho* set the energy, heat capacity, Keywords *sph/e*, *sph/cv*, and *sph/rho* set the energy, heat capacity,
and density of smoothed particle hydrodynamics (SPH) particles. See and density of smoothed particle hydrodynamics (SPH) particles. See
`this PDF guide <PDF/SPH_LAMMPS_userguide.pdf>`_ to using SPH in LAMMPS. `this PDF guide <PDF/SPH_LAMMPS_userguide.pdf>`_ to using SPH in LAMMPS.

View File

@ -67,7 +67,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), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label) special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label), is_timeout()
feature functions = is_available(category,feature), is_active(category,feature), is_defined(category,id) feature functions = is_available(category,feature), is_active(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, radius, q, x, y, z, vx, vy, vz, fx, fy, fz atom vector = id, mass, type, mol, radius, q, x, y, z, vx, vy, vz, fx, fy, fz
@ -547,7 +547,7 @@ variables.
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) | | Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) |
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label) | | Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label), is_timeout() |
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Feature functions | is_available(category,feature), is_active(category,feature), is_defined(category,id) | | Feature functions | is_available(category,feature), is_active(category,feature), is_defined(category,id) |
+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@ -1042,6 +1042,20 @@ label2type(), but returns 1 if the type label has been assigned,
otherwise it returns 0. This function can be used to check if a otherwise it returns 0. This function can be used to check if a
particular type label already exists in the simulation. particular type label already exists in the simulation.
.. versionadded:: TBD
The is_timeout() function returns 1 when the :doc:`timer timeout
<timer>` has expired otherwise it returns 0. This function can be used
to check inputs in combination with the :doc:`if command <if>` to
execute commands after the timer has expired. Example:
.. code-block:: LAMMPS
variable timeout equal is_timeout()
timer timeout 0:10:00 every 10
run 10000
if ${timeout} then "print 'Timer has expired'"
---------- ----------
Feature Functions Feature Functions

View File

@ -51,10 +51,12 @@ value.
The write_data command may not always write all coefficient settings The write_data command may not always write all coefficient settings
to the corresponding Coeff sections of the data file. This can have to the corresponding Coeff sections of the data file. This can have
one of multiple reasons. 1) A few styles may be missing the code that one of multiple reasons. 1) The style may be a hybrid style. In that
would write those sections (if you come across one, please notify case *no* coeff information is written. 2) A few styles may be
the LAMMPS developers). 2) Some pair styles require a single pair_coeff missing the code that would write those sections (This is rare these
statement and those are not compatible with data files. 3) The days, but if you come across one, please notify the LAMMPS
developers). 3) Some pair styles require a single pair_coeff
statement and those are not compatible with data files. 4) The
default for write_data is to write a PairCoeff section, which has default for write_data is to write a PairCoeff section, which has
only entries for atom types i == j. The remaining coefficients would only entries for atom types i == j. The remaining coefficients would
be inferred through the currently selected mixing rule. If there has be inferred through the currently selected mixing rule. If there has

View File

@ -41,7 +41,7 @@ sys.path.append(os.path.join(LAMMPS_DOC_DIR, 'utils', 'sphinx-config', '_themes'
# -- General configuration ------------------------------------------------ # -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here. # If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '5.2.0' needs_sphinx = '5.3.0'
# Add any Sphinx extension module names here, as strings. They can be # Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
@ -69,7 +69,7 @@ images_config = {
templates_path = ['_templates'] templates_path = ['_templates']
# The suffix of source filenames. # The suffix of source filenames.
source_suffix = '.rst' source_suffix = {'.rst': 'restructuredtext'}
# The encoding of source files. # The encoding of source files.
#source_encoding = 'utf-8-sig' #source_encoding = 'utf-8-sig'

View File

@ -393,6 +393,7 @@ buf
builtin builtin
Bulacu Bulacu
Bulatov Bulatov
Bulkley
Bureekaew Bureekaew
burlywood burlywood
Bussi Bussi
@ -564,6 +565,7 @@ cond
conda conda
Conda Conda
Condens Condens
conductivities
conf conf
config config
configfile configfile
@ -1099,6 +1101,7 @@ excv
exe exe
executables executables
extep extep
extractable
extrema extrema
extxyz extxyz
exy exy
@ -1352,6 +1355,7 @@ Grama
grana grana
granregion granregion
graphene graphene
Gravelle
Greathouse Greathouse
greenyellow greenyellow
Greffet Greffet
@ -1440,6 +1444,7 @@ henrich
Henrich Henrich
Hermitian Hermitian
Herrmann Herrmann
Hershchel
Hertizian Hertizian
hertzian hertzian
Hertzsch Hertzsch
@ -1831,6 +1836,7 @@ Kspace
KSpace KSpace
KSpaceStyle KSpaceStyle
Kspring Kspring
kstyle
kT kT
kTequil kTequil
kth kth
@ -2271,6 +2277,7 @@ modelled
modelling modelling
Modelling Modelling
Modine Modine
modularity
moduli moduli
mofff mofff
MOFFF MOFFF
@ -2488,6 +2495,7 @@ Neumann
Nevent Nevent
nevery nevery
Nevery Nevery
Nevins
newfile newfile
Newns Newns
newtype newtype
@ -3067,17 +3075,20 @@ quatw
queryargs queryargs
Queteschiner Queteschiner
quickmin quickmin
quintic
qw qw
qx qx
qy qy
qz qz
Rackers Rackers
Radeon
radi radi
radialscreened radialscreened
radialscreenedspin radialscreenedspin
radialspin radialspin
radian radian
radians radians
radiative
radj radj
Rafferty Rafferty
rahman rahman
@ -3181,6 +3192,7 @@ rg
Rg Rg
Rhaphson Rhaphson
Rhe Rhe
rheo
rheological rheological
rheology rheology
rhodo rhodo
@ -3268,6 +3280,7 @@ rsort
rsq rsq
rst rst
rstyle rstyle
rsurf
Rubensson Rubensson
Rubia Rubia
Rud Rud
@ -3651,6 +3664,7 @@ Telsa
tempCorrCoeff tempCorrCoeff
templated templated
Templeton Templeton
Tencer
Tequil Tequil
ters ters
tersoff tersoff
@ -3997,6 +4011,7 @@ Vries
Vsevolod Vsevolod
Vsmall Vsmall
Vstream Vstream
vstyle
vtarget vtarget
vtk vtk
VTK VTK

View File

@ -101,6 +101,8 @@ liblammpsplugin_t *liblammpsplugin_load(const char *lib)
ADDSYM(extract_setting); ADDSYM(extract_setting);
ADDSYM(extract_global_datatype); ADDSYM(extract_global_datatype);
ADDSYM(extract_global); ADDSYM(extract_global);
ADDSYM(extract_pair_dimension);
ADDSYM(extract_pair);
ADDSYM(map_atom); ADDSYM(map_atom);
ADDSYM(extract_atom_datatype); ADDSYM(extract_atom_datatype);

View File

@ -144,11 +144,13 @@ struct _liblammpsplugin {
int (*get_mpi_comm)(void *); int (*get_mpi_comm)(void *);
int (*extract_setting)(void *, const char *); int (*extract_setting)(void *, const char *);
int *(*extract_global_datatype)(void *, const char *); int (*extract_global_datatype)(void *, const char *);
void *(*extract_global)(void *, const char *); void *(*extract_global)(void *, const char *);
void *(*map_atom)(void *, const void *); int (*extract_pair_dimension)(void *, const char *);
void *(*extract_pair)(void *, const char *);
int (*map_atom)(void *, const void *);
int *(*extract_atom_datatype)(void *, const char *); int (*extract_atom_datatype)(void *, const char *);
void *(*extract_atom)(void *, const char *); void *(*extract_atom)(void *, const char *);
void *(*extract_compute)(void *, const char *, int, int); void *(*extract_compute)(void *, const char *, int, int);

View File

@ -5,9 +5,9 @@ dimension 3
atom_style full atom_style full
processors * * 1 processors * * 1
pair_style lj/sdk/coul/long 15.0 # compatible with "lj/spica/coul/long" pair_style lj/spica/coul/long 15.0
bond_style harmonic bond_style harmonic
angle_style sdk # compatible with "spica" angle_style spica
special_bonds lj/coul 0.0 0.0 1.0 special_bonds lj/coul 0.0 0.0 1.0
read_data data.sds.gz read_data data.sds.gz

View File

@ -1,2 +1,3 @@
*.csv *.csv
*.txt *.txt
*.lammpstrj

View File

@ -17,14 +17,22 @@ q_ref = float(ref_line[3])
inv11_ref = float(ref_line[4]) inv11_ref = float(ref_line[4])
inv12_ref = float(ref_line[5]) inv12_ref = float(ref_line[5])
b1_ref = float(ref_line[6]) b1_ref = float(ref_line[6])
felec1_ref = float(ref_line[8])
felyt1_ref = float(ref_line[10])
press_ref = float(ref_line[12])
# out.csv # out.csv
with open(sys.argv[2]) as f: with open(sys.argv[2]) as f:
out_line = f.readlines()[-1].split(", ") out_line = f.readlines()[-1].split(", ")
e_out = float(out_line[0]) e_out = float(out_line[0])
q_out = float(out_line[1]) q_out = float(out_line[1])
press_out = float(out_line[2])
out_lines = [("energy", e_ref, e_out), ("charge", q_ref, q_out)] out_lines = [
("energy", e_ref, e_out),
("charge", q_ref, q_out),
("pressure", press_ref, press_out),
]
# vec.csv # vec.csv
vec_file = "vec.csv" vec_file = "vec.csv"
@ -44,6 +52,14 @@ if op.isfile(inv_file):
inv12_out = float(inv_line[1]) inv12_out = float(inv_line[1])
out_lines.append(("inv11", inv11_ref, inv11_out)) out_lines.append(("inv11", inv11_ref, inv11_out))
# forces.lammpstrj
force_file = "forces.lammpstrj"
with open(force_file) as f:
lines = f.readlines()[9:]
for name, i, f_ref in [("felec1", "1", felec1_ref), ("felyt1", "3", felyt1_ref)]:
f_out = next(float(y[3]) for x in lines if (y := x.split()) and y[0] == i)
out_lines.append((name, f_ref, f_out))
lines = [] lines = []
for label, ref, out in out_lines: for label, ref, out in out_lines:
error = rel_error(out, ref) error = rel_error(out, ref)

View File

@ -8,7 +8,7 @@ thermo_style custom step pe c_qbot c_qtop
fix feta all property/atom d_eta ghost on fix feta all property/atom d_eta ghost on
set group bot d_eta 0.5 set group bot d_eta 0.5
set group top d_eta 3.0 set group top d_eta 3.0
fix conp bot electrode/conp 0 2 couple top 1 symm on eta d_eta algo cg 1e-6 fix conp bot electrode/conp 0 NULL couple top 1 symm on eta d_eta algo cg 1e-6
run 0 run 0

View File

@ -8,7 +8,7 @@ thermo_style custom step pe c_qbot c_qtop
fix feta all property/atom d_eta ghost on fix feta all property/atom d_eta ghost on
set group bot d_eta 0.5 set group bot d_eta 0.5
set group top d_eta 3.0 set group top d_eta 3.0
fix conp bot electrode/conp 0 2 couple top 1 symm on eta d_eta write_inv inv.csv write_vec vec.csv fix conp bot electrode/conp 0 NULL couple top 1 symm on eta d_eta write_inv inv.csv write_vec vec.csv
run 0 run 0

View File

@ -1,12 +1,17 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import time
import numpy as np import numpy as np
from scipy.special import erf from scipy.special import erf
SQRT2 = np.sqrt(2) SQRT2 = np.sqrt(2)
SQRTPI_INV = 1 / np.sqrt(np.pi)
COULOMB = 332.06371 # Coulomb constant in Lammps 'real' units COULOMB = 332.06371 # Coulomb constant in Lammps 'real' units
QE2F = 23.060549 QE2F = 23.060549
NKTV2P = 68568.415 # pressure in 'real' units
LENGTH = 10000 # convergence parameter LENGTH = 10000 # convergence parameter
LZ = 20
def lattice(length): def lattice(length):
@ -26,6 +31,25 @@ def b_element(r, q, eta):
return q * erf(eta * r) / r return q * erf(eta * r) / r
def force_gauss(r, qq, eta):
etar = eta * r
return (qq / np.square(r)) * (
erf(etar) - 2 * etar * SQRTPI_INV * np.exp(-np.square(etar))
)
def force_point(r, qq):
return qq / np.square(r)
def force_component(dx, d, qq, eta=None):
if eta:
return np.sum(dx / d * force_gauss(d, qq, eta))
else:
return np.sum(dx / d * force_point(d, qq))
time_start = time.perf_counter()
a = 1 # nearest neighbor distance i.e. lattice constant / sqrt(2) a = 1 # nearest neighbor distance i.e. lattice constant / sqrt(2)
x_elec = [-2, 2] x_elec = [-2, 2]
x_elyt = [-1, 1] x_elyt = [-1, 1]
@ -36,8 +60,20 @@ v = np.array([-0.5, 0.5]) * (QE2F / COULOMB)
# distances to images within electrode and to opposite electrode # distances to images within electrode and to opposite electrode
distances = a * np.linalg.norm(lattice(LENGTH), axis=1) distances = a * np.linalg.norm(lattice(LENGTH), axis=1)
opposite_distances = np.sqrt(np.square(distances) + distance_plates**2) opposite_distances = np.sqrt(np.square(distances) + distance_plates**2)
image_distances = []
for x in x_elec:
image_distances.append([])
for y in x_elyt:
image_distances[-1].append(np.sqrt(np.square(distances) + np.abs(y - x) ** 2))
image_elyt_distances = [[None for _ in range(len(x_elyt))] for _ in range(len(x_elyt))]
for i, (xi, qi) in enumerate(zip(x_elyt, q_elyt)):
for j, (xj, qj) in list(enumerate(zip(x_elyt, q_elyt)))[i + 1 :]:
image_elyt_distances[i][j] = np.sqrt(
np.square(distances) + np.abs(xj - xi) ** 2
)
for name, eta_elec in [("", [2.0, 2.0]), ("_eta_mix", [0.5, 3.0])]: for name, eta_elec in [("", [2.0, 2.0]), ("_eta_mix", [0.5, 3.0])]:
# for name, eta_elec in [("", [2.0, 2.0])]:
eta_mix = np.prod(eta_elec) / np.sqrt(np.sum(np.square(eta_elec))) eta_mix = np.prod(eta_elec) / np.sqrt(np.sum(np.square(eta_elec)))
# self interaction and within original box # self interaction and within original box
A_11 = np.sqrt(2 / np.pi) * eta_elec[0] A_11 = np.sqrt(2 / np.pi) * eta_elec[0]
@ -55,22 +91,18 @@ for name, eta_elec in [("", [2.0, 2.0]), ("_eta_mix", [0.5, 3.0])]:
# electrode-electrolyte interaction # electrode-electrolyte interaction
b = [] b = []
for x, eta in zip(x_elec, eta_elec): for i, (x, eta) in enumerate(zip(x_elec, eta_elec)):
bi = 0 bi = 0
for y, q in zip(x_elyt, q_elyt): for j, (y, q) in enumerate(zip(x_elyt, q_elyt)):
d = abs(y - x) bi += b_element(np.abs(y - x), q, eta)
bi += b_element(d, q, eta) bi += 4 * np.sum(b_element(image_distances[i][j], q, eta))
image_distances = np.sqrt(np.square(distances) + d**2)
bi += 4 * np.sum(b_element(image_distances, q, eta))
b.append(bi) b.append(bi)
b = np.array(b) b = np.array(b)
# electrolyte-electrolyte energy # electrolyte-electrolyte energy
elyt_11 = 4 * np.sum(1 / distances) elyt_11 = 4 * np.sum(1 / distances)
distance_elyt = x_elyt[1] - x_elyt[0] distance_elyt = x_elyt[1] - x_elyt[0]
elyt_12 = 1 / distance_elyt + 4 * np.sum( elyt_12 = 1 / distance_elyt + 4 * np.sum(1 / image_elyt_distances[0][1])
1 / np.sqrt(np.square(distances) + distance_elyt**2)
)
elyt = np.array([[elyt_11, elyt_12], [elyt_12, elyt_11]]) elyt = np.array([[elyt_11, elyt_12], [elyt_12, elyt_11]])
energy_elyt = 0.5 * np.dot(q_elyt, np.dot(elyt, q_elyt)) energy_elyt = 0.5 * np.dot(q_elyt, np.dot(elyt, q_elyt))
@ -78,9 +110,48 @@ for name, eta_elec in [("", [2.0, 2.0]), ("_eta_mix", [0.5, 3.0])]:
q = np.dot(inv, v - b) q = np.dot(inv, v - b)
energy = COULOMB * (0.5 * np.dot(q, np.dot(A, q)) + np.dot(b, q) + energy_elyt) energy = COULOMB * (0.5 * np.dot(q, np.dot(A, q)) + np.dot(b, q) + energy_elyt)
# forces in out-of-plane direction
f_elec = np.zeros(len(x_elec))
f_elyt = np.zeros(len(x_elyt))
# electrode-electrode
dx = x_elec[1] - x_elec[0]
fij_box = force_component(dx, np.abs(dx), q[0] * q[1], eta_mix)
fij_img = 4 * force_component(dx, opposite_distances, q[0] * q[1], eta_mix)
f_elec[0] -= fij_box + fij_img
f_elec[1] += fij_box + fij_img
# electrode-electrolyte
for i, (xi, qi, etai) in enumerate(zip(x_elec, q, eta_elec)):
for j, (xj, qj) in enumerate(zip(x_elyt, q_elyt)):
dx = xj - xi
fij_box = force_component(dx, np.abs(dx), qi * qj, etai)
fij_img = 4 * force_component(dx, image_distances[i][j], qi * qj, etai)
f_elec[i] -= fij_box + fij_img
f_elyt[j] += fij_box + fij_img
# electrolyte-electrolyte
for i, (xi, qi) in enumerate(zip(x_elyt, q_elyt)):
for j, (xj, qj) in list(enumerate(zip(x_elyt, q_elyt)))[i + 1 :]:
dx = xj - xi
fij_box = force_component(dx, np.abs(dx), qi * qj)
fij_img = 4 * force_component(dx, image_elyt_distances[i][j], qi * qj)
f_elyt[i] -= fij_img + fij_box
f_elyt[j] += fij_img + fij_box
# force units
assert np.abs(np.sum(f_elec) + np.sum(f_elyt)) < 1e-8
f_elec *= COULOMB
f_elyt *= COULOMB
# Virial
volume = a**2 * LZ
virial = 0.0
for x, f in [(x_elec, f_elec), (x_elyt, f_elyt)]:
virial += np.dot(x, f)
pressure = NKTV2P * virial / volume
with open(f"plate_cap{name}.csv", "w") as f: with open(f"plate_cap{name}.csv", "w") as f:
f.write( f.write(
"length, energy / kcal/mol, q1 / e, q2 / e, inv11 / A, inv12 / A, b1 / e/A, b2 / e/A\n" "length, energy / kcal/mol, q1 / e, q2 / e, inv11 / A, inv12 / A"
+ ", b1 / e/A, b2 / e/A, felec1 / kcal/mol/A, felec2 / kcal/mol/A"
+ ", felyt1 / kcal/mol/A, felyt2 / kcal/mol/A, press\n"
) )
f.write( f.write(
", ".join( ", ".join(
@ -93,7 +164,14 @@ for name, eta_elec in [("", [2.0, 2.0]), ("_eta_mix", [0.5, 3.0])]:
f"{inv[0, 1]:.10f}", f"{inv[0, 1]:.10f}",
f"{b[0]:.8f}", f"{b[0]:.8f}",
f"{b[1]:.8f}", f"{b[1]:.8f}",
f"{f_elec[0]:.5f}",
f"{f_elec[1]:.5f}",
f"{f_elyt[0]:.5f}",
f"{f_elyt[1]:.5f}",
f"{pressure:.2f}",
] ]
) )
+ "\n" + "\n"
) )
time_end = time.perf_counter()
print(f"{time_end - time_start:0.4f} seconds")

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