Merge branch 'upstream' into regression-tests
This commit is contained in:
@ -204,7 +204,7 @@ 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()
|
||||||
@ -306,6 +306,7 @@ set(STANDARD_PACKAGES
|
|||||||
REACTION
|
REACTION
|
||||||
REAXFF
|
REAXFF
|
||||||
REPLICA
|
REPLICA
|
||||||
|
RHEO
|
||||||
RIGID
|
RIGID
|
||||||
SCAFACOS
|
SCAFACOS
|
||||||
SHOCK
|
SHOCK
|
||||||
@ -410,6 +411,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)
|
||||||
@ -550,7 +552,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()
|
||||||
@ -940,6 +942,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)
|
||||||
|
|||||||
@ -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}")
|
||||||
|
|||||||
2
cmake/Modules/Packages/RHEO.cmake
Normal file
2
cmake/Modules/Packages/RHEO.cmake
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
find_package(GSL 2.7 REQUIRED)
|
||||||
|
target_link_libraries(lammps PRIVATE GSL::gsl)
|
||||||
@ -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)
|
||||||
|
|||||||
@ -82,6 +82,7 @@ set(ALL_PACKAGES
|
|||||||
REACTION
|
REACTION
|
||||||
REAXFF
|
REAXFF
|
||||||
REPLICA
|
REPLICA
|
||||||
|
RHEO
|
||||||
RIGID
|
RIGID
|
||||||
SCAFACOS
|
SCAFACOS
|
||||||
SHOCK
|
SHOCK
|
||||||
|
|||||||
@ -84,6 +84,7 @@ set(ALL_PACKAGES
|
|||||||
REACTION
|
REACTION
|
||||||
REAXFF
|
REAXFF
|
||||||
REPLICA
|
REPLICA
|
||||||
|
RHEO
|
||||||
RIGID
|
RIGID
|
||||||
SCAFACOS
|
SCAFACOS
|
||||||
SHOCK
|
SHOCK
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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>`
|
||||||
@ -1566,10 +1567,11 @@ LAMMPS build.
|
|||||||
.. 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
|
||||||
|
|
||||||
@ -2040,6 +2042,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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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>`
|
||||||
|
|||||||
@ -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>`
|
||||||
|
|
||||||
|
|||||||
@ -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>`
|
||||||
|
|||||||
@ -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>`
|
||||||
|
|||||||
@ -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>`
|
||||||
@ -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>`
|
||||||
|
|||||||
@ -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 |
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -571,11 +571,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:
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|||||||
116
doc/src/Howto_rheo.rst
Normal file
116
doc/src/Howto_rheo.rst
Normal 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 distinctclasses 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).
|
||||||
@ -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:**
|
||||||
|
|
||||||
@ -2621,6 +2623,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
|
||||||
|
|||||||
@ -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>`
|
||||||
|
|||||||
@ -1329,7 +1329,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 +1340,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
|
||||||
|
|||||||
@ -190,7 +190,7 @@ 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), the default is to use a map of either *array* or *hash* style
|
info), the default is to use a map of either *array* or *hash* style
|
||||||
depending on the size of the sustem, as explained above for the *map
|
depending on the size of the system, as explained above for the *map
|
||||||
yes* keyword/value option. By default, a *first* group is not
|
yes* keyword/value option. By default, a *first* group is not
|
||||||
defined. By default, sorting is enabled with a frequency of 1000 and
|
defined. By default, sorting is enabled with a frequency of 1000 and
|
||||||
a binsize of 0.0, which means the neighbor cutoff will be used to set
|
a binsize of 0.0, which means the neighbor cutoff will be used to set
|
||||||
|
|||||||
@ -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>`
|
||||||
|
|||||||
188
doc/src/bond_rheo_shell.rst
Normal file
188
doc/src/bond_rheo_shell.rst
Normal 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).
|
||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
|
|||||||
143
doc/src/compute_rheo_property_atom.rst
Normal file
143
doc/src/compute_rheo_property_atom.rst
Normal 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
|
||||||
@ -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
111
doc/src/fix_add_heat.rst
Normal 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*
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
@ -110,7 +110,7 @@ electrostatic configurations:
|
|||||||
:ref:`(Deissenbeck)<Deissenbeck>` between two electrodes
|
:ref:`(Deissenbeck)<Deissenbeck>` between two electrodes
|
||||||
|
|
||||||
* (resulting in changing charges and potentials with appropriate
|
* (resulting in changing charges and potentials with appropriate
|
||||||
average potential difference and thermal variance)
|
average potential difference and thermal variance)
|
||||||
|
|
||||||
The first group-ID provided to each fix specifies the first electrode
|
The first group-ID provided to each fix specifies the first electrode
|
||||||
group, and more group(s) are added using the *couple* keyword for each
|
group, and more group(s) are added using the *couple* keyword for each
|
||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
"""""""
|
"""""""
|
||||||
|
|||||||
@ -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*,
|
||||||
|
|||||||
180
doc/src/fix_rheo.rst
Normal file
180
doc/src/fix_rheo.rst
Normal 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).
|
||||||
85
doc/src/fix_rheo_oxidation.rst
Normal file
85
doc/src/fix_rheo_oxidation.rst
Normal 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).
|
||||||
106
doc/src/fix_rheo_pressure.rst
Normal file
106
doc/src/fix_rheo_pressure.rst
Normal 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
|
||||||
128
doc/src/fix_rheo_thermal.rst
Normal file
128
doc/src/fix_rheo_thermal.rst
Normal 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
|
||||||
117
doc/src/fix_rheo_viscosity.rst
Normal file
117
doc/src/fix_rheo_viscosity.rst
Normal 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.
|
||||||
@ -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
|
||||||
""""""""""""
|
""""""""""""
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
102
doc/src/pair_rheo.rst
Normal file
102
doc/src/pair_rheo.rst
Normal 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
112
doc/src/pair_rheo_solid.rst
Normal 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
|
||||||
@ -337,6 +337,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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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>`,
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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'
|
||||||
|
|||||||
@ -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
|
||||||
@ -1440,6 +1442,7 @@ henrich
|
|||||||
Henrich
|
Henrich
|
||||||
Hermitian
|
Hermitian
|
||||||
Herrmann
|
Herrmann
|
||||||
|
Hershchel
|
||||||
Hertizian
|
Hertizian
|
||||||
hertzian
|
hertzian
|
||||||
Hertzsch
|
Hertzsch
|
||||||
@ -1831,6 +1834,7 @@ Kspace
|
|||||||
KSpace
|
KSpace
|
||||||
KSpaceStyle
|
KSpaceStyle
|
||||||
Kspring
|
Kspring
|
||||||
|
kstyle
|
||||||
kT
|
kT
|
||||||
kTequil
|
kTequil
|
||||||
kth
|
kth
|
||||||
@ -2271,6 +2275,7 @@ modelled
|
|||||||
modelling
|
modelling
|
||||||
Modelling
|
Modelling
|
||||||
Modine
|
Modine
|
||||||
|
modularity
|
||||||
moduli
|
moduli
|
||||||
mofff
|
mofff
|
||||||
MOFFF
|
MOFFF
|
||||||
@ -2488,6 +2493,7 @@ Neumann
|
|||||||
Nevent
|
Nevent
|
||||||
nevery
|
nevery
|
||||||
Nevery
|
Nevery
|
||||||
|
Nevins
|
||||||
newfile
|
newfile
|
||||||
Newns
|
Newns
|
||||||
newtype
|
newtype
|
||||||
@ -3067,6 +3073,7 @@ quatw
|
|||||||
queryargs
|
queryargs
|
||||||
Queteschiner
|
Queteschiner
|
||||||
quickmin
|
quickmin
|
||||||
|
quintic
|
||||||
qw
|
qw
|
||||||
qx
|
qx
|
||||||
qy
|
qy
|
||||||
@ -3078,6 +3085,7 @@ radialscreenedspin
|
|||||||
radialspin
|
radialspin
|
||||||
radian
|
radian
|
||||||
radians
|
radians
|
||||||
|
radiative
|
||||||
radj
|
radj
|
||||||
Rafferty
|
Rafferty
|
||||||
rahman
|
rahman
|
||||||
@ -3181,6 +3189,7 @@ rg
|
|||||||
Rg
|
Rg
|
||||||
Rhaphson
|
Rhaphson
|
||||||
Rhe
|
Rhe
|
||||||
|
rheo
|
||||||
rheological
|
rheological
|
||||||
rheology
|
rheology
|
||||||
rhodo
|
rhodo
|
||||||
@ -3268,6 +3277,7 @@ rsort
|
|||||||
rsq
|
rsq
|
||||||
rst
|
rst
|
||||||
rstyle
|
rstyle
|
||||||
|
rsurf
|
||||||
Rubensson
|
Rubensson
|
||||||
Rubia
|
Rubia
|
||||||
Rud
|
Rud
|
||||||
@ -3651,6 +3661,7 @@ Telsa
|
|||||||
tempCorrCoeff
|
tempCorrCoeff
|
||||||
templated
|
templated
|
||||||
Templeton
|
Templeton
|
||||||
|
Tencer
|
||||||
Tequil
|
Tequil
|
||||||
ters
|
ters
|
||||||
tersoff
|
tersoff
|
||||||
@ -3997,6 +4008,7 @@ Vries
|
|||||||
Vsevolod
|
Vsevolod
|
||||||
Vsmall
|
Vsmall
|
||||||
Vstream
|
Vstream
|
||||||
|
vstyle
|
||||||
vtarget
|
vtarget
|
||||||
vtk
|
vtk
|
||||||
VTK
|
VTK
|
||||||
|
|||||||
@ -1,2 +1,3 @@
|
|||||||
*.csv
|
*.csv
|
||||||
*.txt
|
*.txt
|
||||||
|
*.lammpstrj
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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")
|
||||||
|
|||||||
@ -19,4 +19,8 @@ compute qtop top reduce sum v_q
|
|||||||
compute compute_pe all pe
|
compute compute_pe all pe
|
||||||
variable vpe equal c_compute_pe
|
variable vpe equal c_compute_pe
|
||||||
variable charge equal c_qtop
|
variable charge equal c_qtop
|
||||||
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
|
compute press all pressure NULL virial
|
||||||
|
variable p3 equal c_press[3]
|
||||||
|
fix fxprint all print 1 "${vpe}, ${charge}, ${p3}" file "out.csv"
|
||||||
|
|
||||||
|
dump dump_forces all custom 1 forces.lammpstrj id fx fy fz
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,11 @@ fix fxforce_au gold setforce 0.0 0.0 0.0
|
|||||||
|
|
||||||
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
|
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
|
||||||
fix fxforce_wa wall setforce 0.0 0.0 NULL
|
fix fxforce_wa wall setforce 0.0 0.0 NULL
|
||||||
fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p
|
variable atm equal 1/68568.415 # 1/force->nktv2p
|
||||||
|
variable area equal (xhi-xlo)*(yhi-ylo)
|
||||||
|
variable wall_force equal -v_atm*v_area/count(wall)
|
||||||
|
print "Wall force per atom: ${wall_force}"
|
||||||
|
fix fxpressure wall aveforce 0 0 ${wall_force} # atomspheric pressure: area/force->nktv2p
|
||||||
fix fxdrag wall viscous 100
|
fix fxdrag wall viscous 100
|
||||||
fix fxrigid wall rigid/nve single
|
fix fxrigid wall rigid/nve single
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
LAMMPS (3 Nov 2022)
|
LAMMPS (7 Feb 2024 - Development - patch_7Feb2024_update1-217-g1909233c69-modified)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
# The intention is to find the average position of one wall at atmospheric
|
# The intention is to find the average position of one wall at atmospheric
|
||||||
# pressure. The output is the wall position over time which can be used to
|
# pressure. The output is the wall position over time which can be used to
|
||||||
# find the average position for a run with fixed wall position.
|
# find the average position for a run with fixed wall position.
|
||||||
@ -40,8 +41,8 @@ Finding 1-2 1-3 1-4 neighbors ...
|
|||||||
1 = max # of 1-3 neighbors
|
1 = max # of 1-3 neighbors
|
||||||
1 = max # of 1-4 neighbors
|
1 = max # of 1-4 neighbors
|
||||||
2 = max # of special neighbors
|
2 = max # of special neighbors
|
||||||
special bonds CPU = 0.001 seconds
|
special bonds CPU = 0.000 seconds
|
||||||
read_data CPU = 0.011 seconds
|
read_data CPU = 0.012 seconds
|
||||||
|
|
||||||
# ----------------- Settings Section -----------------
|
# ----------------- Settings Section -----------------
|
||||||
|
|
||||||
@ -77,7 +78,13 @@ fix fxforce_au gold setforce 0.0 0.0 0.0
|
|||||||
|
|
||||||
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
|
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
|
||||||
fix fxforce_wa wall setforce 0.0 0.0 NULL
|
fix fxforce_wa wall setforce 0.0 0.0 NULL
|
||||||
fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p
|
variable atm equal 1/68568.415 # 1/force->nktv2p
|
||||||
|
variable area equal (xhi-xlo)*(yhi-ylo)
|
||||||
|
variable wall_force equal -v_atm*v_area/count(wall)
|
||||||
|
print "Wall force per atom: ${wall_force}"
|
||||||
|
Wall force per atom: -0.000109285996244287
|
||||||
|
fix fxpressure wall aveforce 0 0 ${wall_force} # atomspheric pressure: area/force->nktv2p
|
||||||
|
fix fxpressure wall aveforce 0 0 -0.000109285996244287
|
||||||
fix fxdrag wall viscous 100
|
fix fxdrag wall viscous 100
|
||||||
fix fxrigid wall rigid/nve single
|
fix fxrigid wall rigid/nve single
|
||||||
1 rigid bodies with 48 atoms
|
1 rigid bodies with 48 atoms
|
||||||
@ -134,7 +141,7 @@ PPPM/electrode initialization ...
|
|||||||
stencil order = 5
|
stencil order = 5
|
||||||
estimated absolute RMS force accuracy = 0.02930901
|
estimated absolute RMS force accuracy = 0.02930901
|
||||||
estimated relative force accuracy = 8.8263214e-05
|
estimated relative force accuracy = 8.8263214e-05
|
||||||
using double precision MKL FFT
|
using double precision FFTW3
|
||||||
3d grid and FFT values/proc = 15884 6480
|
3d grid and FFT values/proc = 15884 6480
|
||||||
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
||||||
Neighbor list info ...
|
Neighbor list info ...
|
||||||
@ -157,54 +164,54 @@ Neighbor list info ...
|
|||||||
Per MPI rank memory allocation (min/avg/max) = 11.7 | 11.7 | 11.7 Mbytes
|
Per MPI rank memory allocation (min/avg/max) = 11.7 | 11.7 | 11.7 Mbytes
|
||||||
Step c_temp_mobile c_qwa c_qau v_top_wall
|
Step c_temp_mobile c_qwa c_qau v_top_wall
|
||||||
0 303.38967 -0.042963484 0.042963484 21.4018
|
0 303.38967 -0.042963484 0.042963484 21.4018
|
||||||
5000 285.08828 -0.26105255 0.26105255 25.155629
|
5000 311.85363 0.03543775 -0.03543775 24.79665
|
||||||
10000 323.19176 -0.26264003 0.26264003 24.541676
|
10000 285.91321 -0.16873703 0.16873703 23.103088
|
||||||
15000 310.479 -0.27318148 0.27318148 23.141522
|
15000 295.39476 -0.44424612 0.44424612 23.767107
|
||||||
20000 295.18544 -0.11313444 0.11313444 23.828735
|
20000 296.12969 -0.14120993 0.14120993 23.96361
|
||||||
25000 295.38607 -0.25433086 0.25433086 23.673314
|
25000 306.59629 -0.29333182 0.29333182 23.884488
|
||||||
30000 288.0613 -0.30099901 0.30099901 23.438086
|
30000 297.98559 -0.10749684 0.10749684 23.73316
|
||||||
35000 278.5591 -0.15823576 0.15823576 24.311915
|
35000 297.98503 -0.11809975 0.11809975 23.984669
|
||||||
40000 303.95751 -0.19941381 0.19941381 23.69594
|
40000 300.26292 -0.32784184 0.32784184 23.462748
|
||||||
45000 279.026 -0.1659962 0.1659962 23.588604
|
45000 295.68441 -0.25940165 0.25940165 23.516403
|
||||||
50000 298.79278 -0.28866703 0.28866703 23.372508
|
50000 315.12883 -0.36037614 0.36037614 23.627879
|
||||||
55000 301.03353 -0.078370381 0.078370381 23.192985
|
55000 290.55151 -0.0032838106 0.0032838106 23.684931
|
||||||
60000 306.77965 -0.12807205 0.12807205 23.968574
|
60000 316.4625 -0.17245368 0.17245368 24.126883
|
||||||
65000 309.86008 -0.27162663 0.27162663 23.616704
|
65000 296.79343 -0.054061851 0.054061851 23.695094
|
||||||
70000 287.31116 -0.029751882 0.029751882 23.667495
|
70000 305.99923 -0.11363801 0.11363801 23.55476
|
||||||
75000 312.48654 -0.10759866 0.10759866 23.504105
|
75000 297.40131 -0.27054153 0.27054153 23.928994
|
||||||
80000 309.94267 -0.2558548 0.2558548 23.810576
|
80000 306.54811 -0.25409719 0.25409719 23.869448
|
||||||
85000 328.04389 -0.1575471 0.1575471 24.013437
|
85000 303.95231 -0.17895561 0.17895561 23.658833
|
||||||
90000 302.9806 -0.032002164 0.032002164 24.264432
|
90000 313.43739 -0.059036514 0.059036514 23.36056
|
||||||
95000 294.20804 -0.27797238 0.27797238 23.291758
|
95000 290.3077 -0.31394478 0.31394478 23.885538
|
||||||
100000 307.63019 -0.19047448 0.19047448 23.632147
|
100000 297.5156 -0.30730083 0.30730083 23.511674
|
||||||
Loop time of 530.844 on 1 procs for 100000 steps with 726 atoms
|
Loop time of 1586.06 on 1 procs for 100000 steps with 726 atoms
|
||||||
|
|
||||||
Performance: 32.552 ns/day, 0.737 hours/ns, 188.379 timesteps/s, 136.763 katom-step/s
|
Performance: 10.895 ns/day, 2.203 hours/ns, 63.049 timesteps/s, 45.774 katom-step/s
|
||||||
100.0% CPU use with 1 MPI tasks x no OpenMP threads
|
99.6% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
MPI task timing breakdown:
|
MPI task timing breakdown:
|
||||||
Section | min time | avg time | max time |%varavg| %total
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
---------------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
Pair | 190.47 | 190.47 | 190.47 | 0.0 | 35.88
|
Pair | 460.91 | 460.91 | 460.91 | 0.0 | 29.06
|
||||||
Bond | 0.10754 | 0.10754 | 0.10754 | 0.0 | 0.02
|
Bond | 0.047873 | 0.047873 | 0.047873 | 0.0 | 0.00
|
||||||
Kspace | 73.179 | 73.179 | 73.179 | 0.0 | 13.79
|
Kspace | 341.4 | 341.4 | 341.4 | 0.0 | 21.53
|
||||||
Neigh | 24.209 | 24.209 | 24.209 | 0.0 | 4.56
|
Neigh | 52.868 | 52.868 | 52.868 | 0.0 | 3.33
|
||||||
Comm | 1.6857 | 1.6857 | 1.6857 | 0.0 | 0.32
|
Comm | 5.2321 | 5.2321 | 5.2321 | 0.0 | 0.33
|
||||||
Output | 0.0016861 | 0.0016861 | 0.0016861 | 0.0 | 0.00
|
Output | 0.00099102 | 0.00099102 | 0.00099102 | 0.0 | 0.00
|
||||||
Modify | 240.23 | 240.23 | 240.23 | 0.0 | 45.26
|
Modify | 724.63 | 724.63 | 724.63 | 0.0 | 45.69
|
||||||
Other | | 0.9595 | | | 0.18
|
Other | | 0.9741 | | | 0.06
|
||||||
|
|
||||||
Nlocal: 726 ave 726 max 726 min
|
Nlocal: 726 ave 726 max 726 min
|
||||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
Nghost: 2335 ave 2335 max 2335 min
|
Nghost: 2336 ave 2336 max 2336 min
|
||||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
Neighs: 120271 ave 120271 max 120271 min
|
Neighs: 120321 ave 120321 max 120321 min
|
||||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
Total # of neighbors = 120271
|
Total # of neighbors = 120321
|
||||||
Ave neighs/atom = 165.66253
|
Ave neighs/atom = 165.7314
|
||||||
Ave special neighs/atom = 1.7355372
|
Ave special neighs/atom = 1.7355372
|
||||||
Neighbor list builds = 7722
|
Neighbor list builds = 7670
|
||||||
Dangerous builds = 0
|
Dangerous builds = 0
|
||||||
write_data "data.piston.final"
|
write_data "data.piston.final"
|
||||||
System init for write_data ...
|
System init for write_data ...
|
||||||
@ -213,11 +220,11 @@ PPPM/electrode initialization ...
|
|||||||
G vector (1/distance) = 0.32814871
|
G vector (1/distance) = 0.32814871
|
||||||
grid = 12 15 36
|
grid = 12 15 36
|
||||||
stencil order = 5
|
stencil order = 5
|
||||||
estimated absolute RMS force accuracy = 0.029311365
|
estimated absolute RMS force accuracy = 0.029311329
|
||||||
estimated relative force accuracy = 8.8270304e-05
|
estimated relative force accuracy = 8.8270197e-05
|
||||||
using double precision MKL FFT
|
using double precision FFTW3
|
||||||
3d grid and FFT values/proc = 15884 6480
|
3d grid and FFT values/proc = 15884 6480
|
||||||
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
||||||
|
|
||||||
Average conjugate gradient steps: 1.981
|
Average conjugate gradient steps: 1.981
|
||||||
Total wall time: 0:08:50
|
Total wall time: 0:26:26
|
||||||
@ -1,4 +1,5 @@
|
|||||||
LAMMPS (3 Nov 2022)
|
LAMMPS (7 Feb 2024 - Development - patch_7Feb2024_update1-217-g1909233c69-modified)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
# The intention is to find the average position of one wall at atmospheric
|
# The intention is to find the average position of one wall at atmospheric
|
||||||
# pressure. The output is the wall position over time which can be used to
|
# pressure. The output is the wall position over time which can be used to
|
||||||
# find the average position for a run with fixed wall position.
|
# find the average position for a run with fixed wall position.
|
||||||
@ -41,8 +42,8 @@ Finding 1-2 1-3 1-4 neighbors ...
|
|||||||
1 = max # of 1-3 neighbors
|
1 = max # of 1-3 neighbors
|
||||||
1 = max # of 1-4 neighbors
|
1 = max # of 1-4 neighbors
|
||||||
2 = max # of special neighbors
|
2 = max # of special neighbors
|
||||||
special bonds CPU = 0.001 seconds
|
special bonds CPU = 0.000 seconds
|
||||||
read_data CPU = 0.017 seconds
|
read_data CPU = 0.012 seconds
|
||||||
|
|
||||||
# ----------------- Settings Section -----------------
|
# ----------------- Settings Section -----------------
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ Finding SHAKE clusters ...
|
|||||||
0 = # of size 3 clusters
|
0 = # of size 3 clusters
|
||||||
0 = # of size 4 clusters
|
0 = # of size 4 clusters
|
||||||
210 = # of frozen angles
|
210 = # of frozen angles
|
||||||
find clusters CPU = 0.002 seconds
|
find clusters CPU = 0.000 seconds
|
||||||
pair_modify mix arithmetic
|
pair_modify mix arithmetic
|
||||||
|
|
||||||
# ----------------- Run Section -----------------
|
# ----------------- Run Section -----------------
|
||||||
@ -78,7 +79,13 @@ fix fxforce_au gold setforce 0.0 0.0 0.0
|
|||||||
|
|
||||||
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
|
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
|
||||||
fix fxforce_wa wall setforce 0.0 0.0 NULL
|
fix fxforce_wa wall setforce 0.0 0.0 NULL
|
||||||
fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p
|
variable atm equal 1/68568.415 # 1/force->nktv2p
|
||||||
|
variable area equal (xhi-xlo)*(yhi-ylo)
|
||||||
|
variable wall_force equal -v_atm*v_area/count(wall)
|
||||||
|
print "Wall force per atom: ${wall_force}"
|
||||||
|
Wall force per atom: -0.000109285996244287
|
||||||
|
fix fxpressure wall aveforce 0 0 ${wall_force} # atomspheric pressure: area/force->nktv2p
|
||||||
|
fix fxpressure wall aveforce 0 0 -0.000109285996244287
|
||||||
fix fxdrag wall viscous 100
|
fix fxdrag wall viscous 100
|
||||||
fix fxrigid wall rigid/nve single
|
fix fxrigid wall rigid/nve single
|
||||||
1 rigid bodies with 48 atoms
|
1 rigid bodies with 48 atoms
|
||||||
@ -135,7 +142,7 @@ PPPM/electrode initialization ...
|
|||||||
stencil order = 5
|
stencil order = 5
|
||||||
estimated absolute RMS force accuracy = 0.02930901
|
estimated absolute RMS force accuracy = 0.02930901
|
||||||
estimated relative force accuracy = 8.8263214e-05
|
estimated relative force accuracy = 8.8263214e-05
|
||||||
using double precision MKL FFT
|
using double precision FFTW3
|
||||||
3d grid and FFT values/proc = 8512 2880
|
3d grid and FFT values/proc = 8512 2880
|
||||||
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
||||||
Neighbor list info ...
|
Neighbor list info ...
|
||||||
@ -158,54 +165,54 @@ Neighbor list info ...
|
|||||||
Per MPI rank memory allocation (min/avg/max) = 10.06 | 10.22 | 10.41 Mbytes
|
Per MPI rank memory allocation (min/avg/max) = 10.06 | 10.22 | 10.41 Mbytes
|
||||||
Step c_temp_mobile c_qwa c_qau v_top_wall
|
Step c_temp_mobile c_qwa c_qau v_top_wall
|
||||||
0 303.38967 -0.042963484 0.042963484 21.4018
|
0 303.38967 -0.042963484 0.042963484 21.4018
|
||||||
5000 292.03027 -0.19040435 0.19040435 24.581338
|
5000 291.6303 -0.1820085 0.1820085 24.641399
|
||||||
10000 309.52764 -0.48308301 0.48308301 23.776985
|
10000 299.42886 -0.19823095 0.19823095 23.820522
|
||||||
15000 295.00243 -0.16591109 0.16591109 23.672038
|
15000 288.23071 -0.065261869 0.065261869 23.360845
|
||||||
20000 293.5536 -0.086669084 0.086669084 23.426455
|
20000 299.4644 -0.042993777 0.042993777 23.987554
|
||||||
25000 303.0079 -0.16488112 0.16488112 23.862966
|
25000 304.26497 -0.15665293 0.15665293 23.729006
|
||||||
30000 306.31463 -0.23192653 0.23192653 23.819882
|
30000 292.29674 -0.25142779 0.25142779 23.960725
|
||||||
35000 303.66268 -0.2317907 0.2317907 23.495344
|
35000 295.57492 -0.01269228 0.01269228 23.445383
|
||||||
40000 301.39435 -0.34661329 0.34661329 23.657835
|
40000 303.38438 -0.13941727 0.13941727 23.517483
|
||||||
45000 291.61205 -0.30539427 0.30539427 23.437303
|
45000 302.211 -0.19589892 0.19589892 23.704043
|
||||||
50000 298.65319 -0.096107034 0.096107034 23.57809
|
50000 281.64939 -0.18057298 0.18057298 23.542137
|
||||||
55000 282.65069 -0.14943539 0.14943539 23.823728
|
55000 274.90565 -0.15453379 0.15453379 23.734347
|
||||||
60000 310.64182 -0.17418813 0.17418813 23.286959
|
60000 290.70459 -0.27977436 0.27977436 23.835365
|
||||||
65000 308.47141 -0.02075662 0.02075662 23.91313
|
65000 293.42241 -0.2454241 0.2454241 23.59269
|
||||||
70000 292.5186 -0.080163162 0.080163162 23.96283
|
70000 295.20229 -0.041314995 0.041314995 23.73856
|
||||||
75000 270.13928 -0.029528648 0.029528648 23.488972
|
75000 297.79519 -0.11231755 0.11231755 23.57262
|
||||||
80000 322.10914 0.030761045 -0.030761045 23.47592
|
80000 285.17858 -0.070796508 0.070796508 23.817135
|
||||||
85000 310.60347 -0.24069996 0.24069996 23.987091
|
85000 311.71609 -0.068920177 0.068920177 23.861127
|
||||||
90000 294.35695 -0.070458235 0.070458235 23.397929
|
90000 287.80446 -0.19183387 0.19183387 23.369393
|
||||||
95000 308.69043 -0.2652581 0.2652581 23.473813
|
95000 309.43345 -0.15238671 0.15238671 23.597792
|
||||||
100000 318.71883 0.024035956 -0.024035956 23.449863
|
100000 294.12422 -0.14284353 0.14284353 23.526286
|
||||||
Loop time of 590.232 on 4 procs for 100000 steps with 726 atoms
|
Loop time of 876.546 on 4 procs for 100000 steps with 726 atoms
|
||||||
|
|
||||||
Performance: 29.277 ns/day, 0.820 hours/ns, 169.425 timesteps/s, 123.003 katom-step/s
|
Performance: 19.714 ns/day, 1.217 hours/ns, 114.084 timesteps/s, 82.825 katom-step/s
|
||||||
72.5% CPU use with 4 MPI tasks x no OpenMP threads
|
98.6% CPU use with 4 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
MPI task timing breakdown:
|
MPI task timing breakdown:
|
||||||
Section | min time | avg time | max time |%varavg| %total
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
---------------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
Pair | 57.391 | 75.867 | 96.292 | 212.1 | 12.85
|
Pair | 123.63 | 171.23 | 215.73 | 336.6 | 19.53
|
||||||
Bond | 0.10177 | 0.11042 | 0.12415 | 2.7 | 0.02
|
Bond | 0.068261 | 0.075883 | 0.081822 | 1.9 | 0.01
|
||||||
Kspace | 102.79 | 123.16 | 141.5 | 165.7 | 20.87
|
Kspace | 187.59 | 231.71 | 279.01 | 287.1 | 26.43
|
||||||
Neigh | 12.808 | 12.895 | 12.982 | 2.3 | 2.18
|
Neigh | 29.28 | 29.462 | 29.637 | 2.5 | 3.36
|
||||||
Comm | 18.885 | 19.973 | 21.064 | 24.0 | 3.38
|
Comm | 12.544 | 13.731 | 14.929 | 29.1 | 1.57
|
||||||
Output | 0.0022573 | 0.0022749 | 0.0023225 | 0.1 | 0.00
|
Output | 0.0010182 | 0.0014585 | 0.0016071 | 0.7 | 0.00
|
||||||
Modify | 355.89 | 356.74 | 357.61 | 4.2 | 60.44
|
Modify | 428.74 | 429.25 | 429.74 | 2.3 | 48.97
|
||||||
Other | | 1.478 | | | 0.25
|
Other | | 1.092 | | | 0.12
|
||||||
|
|
||||||
Nlocal: 181.5 ave 207 max 169 min
|
Nlocal: 181.5 ave 195 max 166 min
|
||||||
Histogram: 2 0 1 0 0 0 0 0 0 1
|
Histogram: 1 1 0 0 0 0 0 0 0 2
|
||||||
Nghost: 1961.5 ave 1984 max 1926 min
|
Nghost: 1955.5 ave 1978 max 1931 min
|
||||||
Histogram: 1 0 0 0 0 0 1 0 1 1
|
Histogram: 1 0 0 0 1 0 1 0 0 1
|
||||||
Neighs: 30051 ave 41646 max 20775 min
|
Neighs: 30343 ave 39847 max 20428 min
|
||||||
Histogram: 1 1 0 0 0 0 1 0 0 1
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
|
||||||
Total # of neighbors = 120204
|
Total # of neighbors = 121372
|
||||||
Ave neighs/atom = 165.57025
|
Ave neighs/atom = 167.17906
|
||||||
Ave special neighs/atom = 1.7355372
|
Ave special neighs/atom = 1.7355372
|
||||||
Neighbor list builds = 7663
|
Neighbor list builds = 7698
|
||||||
Dangerous builds = 0
|
Dangerous builds = 0
|
||||||
write_data "data.piston.final"
|
write_data "data.piston.final"
|
||||||
System init for write_data ...
|
System init for write_data ...
|
||||||
@ -214,11 +221,11 @@ PPPM/electrode initialization ...
|
|||||||
G vector (1/distance) = 0.32814871
|
G vector (1/distance) = 0.32814871
|
||||||
grid = 12 15 36
|
grid = 12 15 36
|
||||||
stencil order = 5
|
stencil order = 5
|
||||||
estimated absolute RMS force accuracy = 0.029311028
|
estimated absolute RMS force accuracy = 0.029310954
|
||||||
estimated relative force accuracy = 8.8269289e-05
|
estimated relative force accuracy = 8.8269069e-05
|
||||||
using double precision MKL FFT
|
using double precision FFTW3
|
||||||
3d grid and FFT values/proc = 8512 2880
|
3d grid and FFT values/proc = 8512 2880
|
||||||
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
|
||||||
|
|
||||||
Average conjugate gradient steps: 1.982
|
Average conjugate gradient steps: 1.981
|
||||||
Total wall time: 0:09:50
|
Total wall time: 0:14:36
|
||||||
75
examples/rheo/balloon/in.rheo.balloon
Normal file
75
examples/rheo/balloon/in.rheo.balloon
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# ------ 2D water balloon ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style hybrid rheo bond
|
||||||
|
boundary m m p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
region box block -40 40 0 80 -0.01 0.01 units box
|
||||||
|
create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50
|
||||||
|
|
||||||
|
region fluid sphere -10 40 0 30 units box side in
|
||||||
|
lattice hex 1.0
|
||||||
|
create_atoms 1 region fluid
|
||||||
|
|
||||||
|
region shell sphere -10 40 0 27 units box side out
|
||||||
|
group shell region shell
|
||||||
|
|
||||||
|
set group shell rheo/status 1
|
||||||
|
set group all vx 0.005 vy -0.04
|
||||||
|
|
||||||
|
# ------ Model parameters ------#
|
||||||
|
|
||||||
|
variable cut equal 3.0
|
||||||
|
variable n equal 1.0
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable zeta equal 0.05
|
||||||
|
variable kappa equal 0.01*${rho0}/${mp}
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable Cv equal 1.0
|
||||||
|
variable L equal 1.0
|
||||||
|
variable Tf equal 1.0
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style hybrid/overlay rheo ${cut} artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_coeff * * rheo
|
||||||
|
pair_coeff * * rheo/solid 1.0 1.0 1.0
|
||||||
|
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
|
||||||
|
create_bonds many shell shell 1 0 1.5
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
|
||||||
|
|
||||||
|
bond_style bpm/spring
|
||||||
|
bond_coeff 1 1.0 1.0 1.0
|
||||||
|
|
||||||
|
# A lower critical strain allows the balloon to pop
|
||||||
|
#bond_coeff 1 1.0 0.05 1.0
|
||||||
|
|
||||||
|
# ------ Drop balloon ------#
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 &
|
||||||
|
shift &
|
||||||
|
surface/detection coordination 22 8
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all wall/harmonic ylo EDGE 2.0 1.0 1.0
|
||||||
|
fix 5 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute phase all rheo/property/atom phase
|
||||||
|
compute nbond all nbond/atom
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press atoms
|
||||||
|
|
||||||
|
#dump 1 all custom 200 atomDump id type x y vx vy fx fy c_phase c_nbond c_rho
|
||||||
|
run 30000
|
||||||
382
examples/rheo/balloon/log.17Apr2024.balloon.g++.4
Normal file
382
examples/rheo/balloon/log.17Apr2024.balloon.g++.4
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_5May2020-18508-g3c0eaf6870-modified)
|
||||||
|
# ------ 2D water balloon ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style hybrid rheo bond
|
||||||
|
boundary m m p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
region box block -40 40 0 80 -0.01 0.01 units box
|
||||||
|
create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50
|
||||||
|
Created orthogonal box = (-40 0 -0.01) to (40 80 0.01)
|
||||||
|
2 by 2 by 1 MPI processor grid
|
||||||
|
|
||||||
|
region fluid sphere -10 40 0 30 units box side in
|
||||||
|
lattice hex 1.0
|
||||||
|
Lattice spacing in x,y,z = 1.0745699 1.8612097 1.0745699
|
||||||
|
create_atoms 1 region fluid
|
||||||
|
Created 2830 atoms
|
||||||
|
using lattice units in orthogonal box = (-40 0 -0.01) to (40 80 0.01)
|
||||||
|
create_atoms CPU = 0.001 seconds
|
||||||
|
|
||||||
|
region shell sphere -10 40 0 27 units box side out
|
||||||
|
group shell region shell
|
||||||
|
544 atoms in group shell
|
||||||
|
|
||||||
|
set group shell rheo/status 1
|
||||||
|
Setting atom values ...
|
||||||
|
544 settings made for rheo/status
|
||||||
|
set group all vx 0.005 vy -0.04
|
||||||
|
Setting atom values ...
|
||||||
|
2830 settings made for vx
|
||||||
|
2830 settings made for vy
|
||||||
|
|
||||||
|
# ------ Model parameters ------#
|
||||||
|
|
||||||
|
variable cut equal 3.0
|
||||||
|
variable n equal 1.0
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable mp equal 1/${n}
|
||||||
|
variable mp equal 1/1
|
||||||
|
variable zeta equal 0.05
|
||||||
|
variable kappa equal 0.01*${rho0}/${mp}
|
||||||
|
variable kappa equal 0.01*1/${mp}
|
||||||
|
variable kappa equal 0.01*1/1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/1/3
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable Cv equal 1.0
|
||||||
|
variable L equal 1.0
|
||||||
|
variable Tf equal 1.0
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
mass * 1
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style hybrid/overlay rheo ${cut} artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_style hybrid/overlay rheo 3 artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_style hybrid/overlay rheo 3 artificial/visc 0.05 rheo/solid
|
||||||
|
pair_coeff * * rheo
|
||||||
|
pair_coeff * * rheo/solid 1.0 1.0 1.0
|
||||||
|
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 1 1
|
||||||
|
special bond factors coul: 0 1 1
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
101 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
create_bonds many shell shell 1 0 1.5
|
||||||
|
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 49 49 1
|
||||||
|
3 neighbor lists, perpetual/occasional/extra = 2 1 0
|
||||||
|
(1) command create_bonds, occasional
|
||||||
|
attributes: full, newton off
|
||||||
|
pair build: full/bin
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(2) pair rheo, perpetual
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: half/bin/newtoff
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(3) pair rheo/solid, perpetual, trim from (2)
|
||||||
|
attributes: half, newton off, cut 1.3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Added 1263 bonds, new total = 1263
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 1 1
|
||||||
|
special bond factors coul: 0 1 1
|
||||||
|
6 = max # of 1-2 neighbors
|
||||||
|
101 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
|
||||||
|
|
||||||
|
bond_style bpm/spring
|
||||||
|
bond_coeff 1 1.0 1.0 1.0
|
||||||
|
|
||||||
|
# A lower critical strain allows the balloon to pop
|
||||||
|
#bond_coeff 1 1.0 0.05 1.0
|
||||||
|
|
||||||
|
# ------ Drop balloon ------#
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 shift surface/detection coordination 22 8
|
||||||
|
fix 1 all rheo 3 quintic 0 shift surface/detection coordination 22 8
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 2 all rheo/viscosity * constant 0.05
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all wall/harmonic ylo EDGE 2.0 1.0 1.0
|
||||||
|
fix 5 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute phase all rheo/property/atom phase
|
||||||
|
compute nbond all nbond/atom
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press atoms
|
||||||
|
|
||||||
|
dump 1 all custom 200 atomDump id type x y vx vy fx fy c_phase c_nbond c_rho
|
||||||
|
run 30000
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Your simulation uses code contributions which should be cited:
|
||||||
|
|
||||||
|
- BPM bond style: doi:10.1039/D3SM01373A
|
||||||
|
|
||||||
|
@Article{Clemmer2024,
|
||||||
|
author = {Clemmer, Joel T. and Monti, Joseph M. and Lechman, Jeremy B.},
|
||||||
|
title = {A soft departure from jamming: the compaction of deformable
|
||||||
|
granular matter under high pressures},
|
||||||
|
journal = {Soft Matter},
|
||||||
|
year = 2024,
|
||||||
|
volume = 20,
|
||||||
|
number = 8,
|
||||||
|
pages = {1702--1718}
|
||||||
|
}
|
||||||
|
|
||||||
|
- @article{PalermoInPrep,
|
||||||
|
journal = {in prep},
|
||||||
|
title = {RHEO: A Hybrid Mesh-Free Model Framework for Dynamic Multi-Phase Flows},
|
||||||
|
year = {2024},
|
||||||
|
author = {Eric T. Palermo and Ki T. Wolf and Joel T. Clemmer and Thomas C. O'Connor},
|
||||||
|
}
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 49 49 1
|
||||||
|
6 neighbor lists, perpetual/occasional/extra = 6 0 0
|
||||||
|
(1) pair rheo, perpetual, half/full from (3)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: halffull/newtoff
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(2) pair rheo/solid, perpetual, trim from (1)
|
||||||
|
attributes: half, newton off, cut 1.3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(3) compute RHEO/KERNEL, perpetual
|
||||||
|
attributes: full, newton off
|
||||||
|
pair build: full/bin
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(4) compute RHEO/GRAD, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(5) compute RHEO/VSHIFT, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(6) compute RHEO/SURFACE, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 17.63 | 17.64 | 17.65 Mbytes
|
||||||
|
Step Time KinEng Press Atoms
|
||||||
|
0 0 0.0008125 0.00035927734 2830
|
||||||
|
200 20 0.0008125 0.00035927734 2830
|
||||||
|
400 40 0.0008125 0.00035927734 2830
|
||||||
|
600 60 0.0008125 0.00035927734 2830
|
||||||
|
800 80 0.0008125 0.00035927734 2830
|
||||||
|
1000 100 0.0008125 0.00035927734 2830
|
||||||
|
1200 120 0.0008125 0.00035927734 2830
|
||||||
|
1400 140 0.0008125 0.00035927734 2830
|
||||||
|
1600 160 0.0008125 0.00035927734 2830
|
||||||
|
1800 180 0.0008125 0.00035927734 2830
|
||||||
|
2000 200 0.0008125 0.00035927734 2830
|
||||||
|
2200 220 0.0008125 0.00035927734 2830
|
||||||
|
2400 240 0.00079033569 0.00043037861 2830
|
||||||
|
2600 260 0.0007549229 0.00045188383 2830
|
||||||
|
2800 280 0.00072808836 0.00031695003 2830
|
||||||
|
3000 300 0.0007017958 1.6121754e-05 2830
|
||||||
|
3200 320 0.00067479047 -0.00015725514 2830
|
||||||
|
3400 340 0.00064762254 -0.00023361314 2830
|
||||||
|
3600 360 0.00061960255 -0.00033837679 2830
|
||||||
|
3800 380 0.0005857206 -0.00051770716 2830
|
||||||
|
4000 400 0.00055061733 -0.00070309251 2830
|
||||||
|
4200 420 0.00051884719 -0.0008247795 2830
|
||||||
|
4400 440 0.00049022236 -0.00099918413 2830
|
||||||
|
4600 460 0.00046060011 -0.0010923159 2830
|
||||||
|
4800 480 0.00042900173 -0.0011524571 2830
|
||||||
|
5000 500 0.00039751503 -0.0012586358 2830
|
||||||
|
5200 520 0.00036620054 -0.0013973543 2830
|
||||||
|
5400 540 0.00033130023 -0.0015185231 2830
|
||||||
|
5600 560 0.00030565892 -0.0016159836 2830
|
||||||
|
5800 580 0.00028209836 -0.0016925198 2830
|
||||||
|
6000 600 0.00024695044 -0.0017796892 2830
|
||||||
|
6200 620 0.00021190635 -0.0018706272 2830
|
||||||
|
6400 640 0.0001947093 -0.0019146643 2830
|
||||||
|
6600 660 0.00018903936 -0.0019146199 2830
|
||||||
|
6800 680 0.00017753371 -0.0019390155 2830
|
||||||
|
7000 700 0.00015170593 -0.0020247472 2830
|
||||||
|
7200 720 0.00011509692 -0.0021222209 2830
|
||||||
|
7400 740 7.9861785e-05 -0.0022033181 2830
|
||||||
|
7600 760 6.1350463e-05 -0.0022511971 2830
|
||||||
|
7800 780 6.5269523e-05 -0.0022222806 2830
|
||||||
|
8000 800 8.5709569e-05 -0.0021089664 2830
|
||||||
|
8200 820 0.00011746348 -0.0019351493 2830
|
||||||
|
8400 840 0.00015698134 -0.0017079928 2830
|
||||||
|
8600 860 0.00019758065 -0.0014618965 2830
|
||||||
|
8800 880 0.00023338199 -0.0012365832 2830
|
||||||
|
9000 900 0.00026282353 -0.0010348527 2830
|
||||||
|
9200 920 0.00028604776 -0.00085287884 2830
|
||||||
|
9400 940 0.00030388767 -0.000681122 2830
|
||||||
|
9600 960 0.000317589 -0.00052203521 2830
|
||||||
|
9800 980 0.00032716728 -0.00037501187 2830
|
||||||
|
10000 1000 0.00033270692 -0.00025576132 2830
|
||||||
|
10200 1020 0.00033485986 -0.00016554207 2830
|
||||||
|
10400 1040 0.00033476763 -9.8525417e-05 2830
|
||||||
|
10600 1060 0.00033351922 -5.1166347e-05 2830
|
||||||
|
10800 1080 0.00033161645 -2.0773965e-05 2830
|
||||||
|
11000 1100 0.00032913022 2.2384421e-07 2830
|
||||||
|
11200 1120 0.00032618376 1.2304773e-05 2830
|
||||||
|
11400 1140 0.00032310409 1.3725982e-05 2830
|
||||||
|
11600 1160 0.0003202128 9.0431945e-06 2830
|
||||||
|
11800 1180 0.00031760386 -5.3537879e-07 2830
|
||||||
|
12000 1200 0.00031518884 -1.331708e-05 2830
|
||||||
|
12200 1220 0.00031283958 -3.0838612e-05 2830
|
||||||
|
12400 1240 0.0003104901 -5.0038548e-05 2830
|
||||||
|
12600 1260 0.00030811597 -6.9699925e-05 2830
|
||||||
|
12800 1280 0.00030555782 -8.9972287e-05 2830
|
||||||
|
13000 1300 0.00030256671 -0.00011712941 2830
|
||||||
|
13200 1320 0.00029907961 -0.00015495826 2830
|
||||||
|
13400 1340 0.00029504656 -0.00020292633 2830
|
||||||
|
13600 1360 0.0002905184 -0.00024892421 2830
|
||||||
|
13800 1380 0.00028564542 -0.000295085 2830
|
||||||
|
14000 1400 0.00028073246 -0.00034571956 2830
|
||||||
|
14200 1420 0.00027611457 -0.00039341977 2830
|
||||||
|
14400 1440 0.00027217382 -0.0004281012 2830
|
||||||
|
14600 1460 0.00026919129 -0.00045342545 2830
|
||||||
|
14800 1480 0.00026727674 -0.00047323419 2830
|
||||||
|
15000 1500 0.0002663482 -0.00048423944 2830
|
||||||
|
15200 1520 0.00026616663 -0.0004816085 2830
|
||||||
|
15400 1540 0.00026634862 -0.00047573486 2830
|
||||||
|
15600 1560 0.0002664314 -0.00046803192 2830
|
||||||
|
15800 1580 0.00026603348 -0.00045753668 2830
|
||||||
|
16000 1600 0.00026511015 -0.00044676105 2830
|
||||||
|
16200 1620 0.00026373403 -0.00044075794 2830
|
||||||
|
16400 1640 0.00026217342 -0.00043684036 2830
|
||||||
|
16600 1660 0.0002607038 -0.00042774771 2830
|
||||||
|
16800 1680 0.00025951097 -0.00041603026 2830
|
||||||
|
17000 1700 0.00025869088 -0.00040302996 2830
|
||||||
|
17200 1720 0.00025825588 -0.00038415247 2830
|
||||||
|
17400 1740 0.00025818373 -0.00035742127 2830
|
||||||
|
17600 1760 0.00025843381 -0.00032854722 2830
|
||||||
|
17800 1780 0.00025897836 -0.00029821183 2830
|
||||||
|
18000 1800 0.00025981472 -0.00026108907 2830
|
||||||
|
18200 1820 0.00026095775 -0.00021731058 2830
|
||||||
|
18400 1840 0.00026239688 -0.00017030825 2830
|
||||||
|
18600 1860 0.00026404432 -0.00011868778 2830
|
||||||
|
18800 1880 0.00026574247 -5.9556286e-05 2830
|
||||||
|
19000 1900 0.00026729563 2.3014881e-06 2830
|
||||||
|
19200 1920 0.00026852418 6.2100169e-05 2830
|
||||||
|
19400 1940 0.00026929086 0.00012090325 2830
|
||||||
|
19600 1960 0.0002695407 0.00017904223 2830
|
||||||
|
19800 1980 0.00026929677 0.00023112254 2830
|
||||||
|
20000 2000 0.00026863577 0.0002756697 2830
|
||||||
|
20200 2020 0.00026765699 0.0003158399 2830
|
||||||
|
20400 2040 0.00026646841 0.00035200747 2830
|
||||||
|
20600 2060 0.00026516938 0.00038018442 2830
|
||||||
|
20800 2080 0.00026383495 0.00040179111 2830
|
||||||
|
21000 2100 0.00026252489 0.00042030921 2830
|
||||||
|
21200 2120 0.00026128616 0.00043466976 2830
|
||||||
|
21400 2140 0.00026014896 0.00044221445 2830
|
||||||
|
21600 2160 0.00025912325 0.00044531883 2830
|
||||||
|
21800 2180 0.00025821515 0.00044661709 2830
|
||||||
|
22000 2200 0.00025742576 0.00044409089 2830
|
||||||
|
22200 2220 0.00025674938 0.00043634999 2830
|
||||||
|
22400 2240 0.00025617111 0.00042630344 2830
|
||||||
|
22600 2260 0.0002556791 0.00041561603 2830
|
||||||
|
22800 2280 0.00025525963 0.00040166735 2830
|
||||||
|
23000 2300 0.00025489538 0.00038430419 2830
|
||||||
|
23200 2320 0.00025456861 0.0003669402 2830
|
||||||
|
23400 2340 0.00025426747 0.00034972373 2830
|
||||||
|
23600 2360 0.00025398353 0.0003302242 2830
|
||||||
|
23800 2380 0.00025370842 0.00030993088 2830
|
||||||
|
24000 2400 0.00025344084 0.00029143258 2830
|
||||||
|
24200 2420 0.00025318683 0.00027421708 2830
|
||||||
|
24400 2440 0.0002529591 0.00025603123 2830
|
||||||
|
24600 2460 0.0002527713 0.00023950245 2830
|
||||||
|
24800 2480 0.00025264228 0.00022644812 2830
|
||||||
|
25000 2500 0.00025259021 0.00021540748 2830
|
||||||
|
25200 2520 0.00025262892 0.00020544201 2830
|
||||||
|
25400 2540 0.00025276229 0.00019845807 2830
|
||||||
|
25600 2560 0.0002529876 0.00019449958 2830
|
||||||
|
25800 2580 0.00025329374 0.00019082606 2830
|
||||||
|
26000 2600 0.00025366066 0.00018700064 2830
|
||||||
|
26200 2620 0.00025406164 0.00018426061 2830
|
||||||
|
26400 2640 0.00025446737 0.00018098339 2830
|
||||||
|
26600 2660 0.00025484714 0.00017471869 2830
|
||||||
|
26800 2680 0.00025516604 0.00016565557 2830
|
||||||
|
27000 2700 0.00025538911 0.00015493626 2830
|
||||||
|
27200 2720 0.00025548177 0.00014075592 2830
|
||||||
|
27400 2740 0.00025541168 0.00012205573 2830
|
||||||
|
27600 2760 0.00025514889 0.00010039772 2830
|
||||||
|
27800 2780 0.00025467547 7.7069215e-05 2830
|
||||||
|
28000 2800 0.0002539915 5.1158042e-05 2830
|
||||||
|
28200 2820 0.00025312083 2.3468384e-05 2830
|
||||||
|
28400 2840 0.00025211323 -3.2184465e-06 2830
|
||||||
|
28600 2860 0.00025104366 -2.7726301e-05 2830
|
||||||
|
28800 2880 0.00025000263 -5.0202987e-05 2830
|
||||||
|
29000 2900 0.00024907814 -6.9244776e-05 2830
|
||||||
|
29200 2920 0.00024833815 -8.2874516e-05 2830
|
||||||
|
29400 2940 0.0002478155 -9.1854992e-05 2830
|
||||||
|
29600 2960 0.00024750313 -9.766055e-05 2830
|
||||||
|
29800 2980 0.00024735538 -9.9681291e-05 2830
|
||||||
|
30000 3000 0.00024730191 -9.818759e-05 2830
|
||||||
|
Loop time of 177.982 on 4 procs for 30000 steps with 2830 atoms
|
||||||
|
|
||||||
|
Performance: 1456330.235 tau/day, 168.557 timesteps/s, 477.016 katom-step/s
|
||||||
|
99.7% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 22.913 | 27.061 | 34.594 | 87.2 | 15.20
|
||||||
|
Bond | 0.22386 | 0.26159 | 0.30792 | 6.0 | 0.15
|
||||||
|
Neigh | 0.84412 | 0.84509 | 0.8462 | 0.1 | 0.47
|
||||||
|
Comm | 0.50015 | 0.55579 | 0.60346 | 5.2 | 0.31
|
||||||
|
Output | 0.65854 | 0.69412 | 0.72473 | 2.8 | 0.39
|
||||||
|
Modify | 133.13 | 136 | 137.38 | 14.5 | 76.41
|
||||||
|
Other | | 12.57 | | | 7.06
|
||||||
|
|
||||||
|
Nlocal: 707.5 ave 1576 max 53 min
|
||||||
|
Histogram: 2 0 0 0 0 0 1 0 0 1
|
||||||
|
Nghost: 164.75 ave 239 max 94 min
|
||||||
|
Histogram: 1 0 1 0 0 0 0 1 0 1
|
||||||
|
Neighs: 12307.8 ave 27380 max 983 min
|
||||||
|
Histogram: 2 0 0 0 0 0 1 0 0 1
|
||||||
|
FullNghs: 23517 ave 53040 max 1502 min
|
||||||
|
Histogram: 2 0 0 0 0 0 1 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 94068
|
||||||
|
Ave neighs/atom = 33.239576
|
||||||
|
Ave special neighs/atom = 0.89257951
|
||||||
|
Neighbor list builds = 783
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:02:58
|
||||||
76
examples/rheo/dam-break/in.rheo.dam.break
Normal file
76
examples/rheo/dam-break/in.rheo.dam.break
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# ------ 2D dam break ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style rheo
|
||||||
|
boundary f s p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
# ------ Create simulation box ------ #
|
||||||
|
|
||||||
|
variable n equal 1.0
|
||||||
|
variable cut equal 2.2
|
||||||
|
variable dx equal 3.0
|
||||||
|
|
||||||
|
region box block -1 150 -1 80 -0.1 0.1 units box
|
||||||
|
create_box 2 box
|
||||||
|
lattice hex ${n}
|
||||||
|
|
||||||
|
region fluid block $(xlo+v_dx+1.0) $(xlo+40.0) $(ylo+v_dx+1.0) $(yhi-20.0) EDGE EDGE units box
|
||||||
|
region walls1 block $(xlo+v_dx) $(xhi-v_dx) $(ylo+v_dx) $(yhi-v_dx) EDGE EDGE side out units box
|
||||||
|
region walls2 block EDGE EDGE EDGE $(yhi-v_dx) EDGE EDGE side in units box
|
||||||
|
region walls intersect 2 walls1 walls2
|
||||||
|
|
||||||
|
create_atoms 1 region fluid
|
||||||
|
create_atoms 2 region walls
|
||||||
|
|
||||||
|
group fluid type 1
|
||||||
|
group rig type 2
|
||||||
|
|
||||||
|
# ------ Model parameters ------ #
|
||||||
|
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable zeta equal 0.1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable eta equal 0.1
|
||||||
|
variable Dr equal 0.1
|
||||||
|
|
||||||
|
mass 1 ${mp}
|
||||||
|
mass 2 $(2*v_mp)
|
||||||
|
set group all rheo/rho ${rho0}
|
||||||
|
|
||||||
|
set group all rheo/status 0
|
||||||
|
set group rig rheo/status 1
|
||||||
|
|
||||||
|
timestep ${dt_max}
|
||||||
|
|
||||||
|
pair_style rheo ${cut} artificial/visc ${zeta} #rho/damp ${Dr}
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
# ------ Fixes & computes ------ #
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 10 &
|
||||||
|
surface/detection coordination 22 8 &
|
||||||
|
rho/sum
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all gravity 1e-3 vector 0 -1 0
|
||||||
|
fix 5 rig setforce 0.0 0.0 0.0
|
||||||
|
fix 6 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute p all rheo/property/atom pressure
|
||||||
|
compute surf all rheo/property/atom surface
|
||||||
|
compute sn all rheo/property/atom surface/n/x surface/n/y
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 20
|
||||||
|
thermo_style custom step time ke press
|
||||||
|
|
||||||
|
#dump 1 all custom 200 atomDump id type x y vx vy fx fy c_rho c_surf c_p c_sn[*]
|
||||||
|
|
||||||
|
run 30000
|
||||||
1694
examples/rheo/dam-break/log.17Apr2024.dam.g++.4
Normal file
1694
examples/rheo/dam-break/log.17Apr2024.dam.g++.4
Normal file
File diff suppressed because it is too large
Load Diff
82
examples/rheo/ice-cubes/in.rheo.ice.cubes
Normal file
82
examples/rheo/ice-cubes/in.rheo.ice.cubes
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# ------ 2D Ice Cube Pour ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style hybrid rheo/thermal bond
|
||||||
|
boundary m m p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
|
||||||
|
|
||||||
|
region box block -25 25 0 100 -0.01 0.01 units box
|
||||||
|
create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50
|
||||||
|
|
||||||
|
region fluid block $(xlo+1) $(xhi-1) $(ylo+1) $(ylo+30) EDGE EDGE units box
|
||||||
|
lattice sq 1.0
|
||||||
|
create_atoms 1 region fluid
|
||||||
|
|
||||||
|
set group all sph/e 8.0
|
||||||
|
|
||||||
|
# ------ Model parameters ------#
|
||||||
|
|
||||||
|
variable cut equal 3.0
|
||||||
|
variable n equal 1.0
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable zeta equal 0.05
|
||||||
|
variable kappa equal 0.01*${rho0}/${mp}
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable Cv equal 1.0
|
||||||
|
variable L equal 1.0
|
||||||
|
variable Tf equal 1.0
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style hybrid/overlay rheo ${cut} artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_coeff * * rheo
|
||||||
|
pair_coeff * * rheo/solid 1.0 1.0 1.0
|
||||||
|
|
||||||
|
bond_style bpm/spring
|
||||||
|
bond_coeff 1 1.0 1.0 1.0
|
||||||
|
|
||||||
|
# ------ Pour particles ------#
|
||||||
|
|
||||||
|
molecule my_mol "square.mol"
|
||||||
|
|
||||||
|
# Wall region extends far enough in z to avoid contact
|
||||||
|
region wall block EDGE EDGE EDGE EDGE -5 5 side in open 4 units box
|
||||||
|
region drop block -16 16 70 90 EDGE EDGE side in units box
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 &
|
||||||
|
thermal &
|
||||||
|
shift &
|
||||||
|
surface/detection coordination 22 8
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all rheo/thermal conductivity * constant ${kappa} &
|
||||||
|
specific/heat * constant ${Cv} &
|
||||||
|
Tfreeze * constant ${Tf} &
|
||||||
|
latent/heat * constant ${L} &
|
||||||
|
react 1.5 1
|
||||||
|
fix 5 all wall/region wall harmonic 1.0 1.0 1.0
|
||||||
|
fix 6 all gravity 5e-4 vector 0 -1 0
|
||||||
|
fix 7 all deposit 8 0 1000 37241459 mol my_mol region drop near 2.0 vy -0.02 -0.02
|
||||||
|
fix 8 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute phase all rheo/property/atom phase
|
||||||
|
compute temp all rheo/property/atom temperature
|
||||||
|
compute eng all rheo/property/atom energy
|
||||||
|
compute nbond all nbond/atom
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press atoms
|
||||||
|
|
||||||
|
#dump 1 all custom 200 atomDump id type x y vx vy fx fy c_phase c_temp c_eng c_nbond c_rho
|
||||||
|
|
||||||
|
run 30000
|
||||||
379
examples/rheo/ice-cubes/log.17Apr2024.ice.g++.4
Normal file
379
examples/rheo/ice-cubes/log.17Apr2024.ice.g++.4
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_5May2020-18508-g3c0eaf6870-modified)
|
||||||
|
# ------ 2D Ice Cube Pour ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style hybrid rheo/thermal bond
|
||||||
|
boundary m m p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
|
||||||
|
|
||||||
|
region box block -25 25 0 100 -0.01 0.01 units box
|
||||||
|
create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50
|
||||||
|
Created orthogonal box = (-25 0 -0.01) to (25 100 0.01)
|
||||||
|
2 by 2 by 1 MPI processor grid
|
||||||
|
|
||||||
|
region fluid block $(xlo+1) $(xhi-1) $(ylo+1) $(ylo+30) EDGE EDGE units box
|
||||||
|
region fluid block -24 $(xhi-1) $(ylo+1) $(ylo+30) EDGE EDGE units box
|
||||||
|
region fluid block -24 24 $(ylo+1) $(ylo+30) EDGE EDGE units box
|
||||||
|
region fluid block -24 24 1 $(ylo+30) EDGE EDGE units box
|
||||||
|
region fluid block -24 24 1 30 EDGE EDGE units box
|
||||||
|
lattice sq 1.0
|
||||||
|
Lattice spacing in x,y,z = 1 1 1
|
||||||
|
create_atoms 1 region fluid
|
||||||
|
Created 1470 atoms
|
||||||
|
using lattice units in orthogonal box = (-25 0 -0.01) to (25 100 0.01)
|
||||||
|
create_atoms CPU = 0.001 seconds
|
||||||
|
|
||||||
|
set group all sph/e 8.0
|
||||||
|
Setting atom values ...
|
||||||
|
1470 settings made for sph/e
|
||||||
|
|
||||||
|
# ------ Model parameters ------#
|
||||||
|
|
||||||
|
variable cut equal 3.0
|
||||||
|
variable n equal 1.0
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable mp equal 1/${n}
|
||||||
|
variable mp equal 1/1
|
||||||
|
variable zeta equal 0.05
|
||||||
|
variable kappa equal 0.01*${rho0}/${mp}
|
||||||
|
variable kappa equal 0.01*1/${mp}
|
||||||
|
variable kappa equal 0.01*1/1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/1/3
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable Cv equal 1.0
|
||||||
|
variable L equal 1.0
|
||||||
|
variable Tf equal 1.0
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
mass * 1
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style hybrid/overlay rheo ${cut} artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_style hybrid/overlay rheo 3 artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_style hybrid/overlay rheo 3 artificial/visc 0.05 rheo/solid
|
||||||
|
pair_coeff * * rheo
|
||||||
|
pair_coeff * * rheo/solid 1.0 1.0 1.0
|
||||||
|
|
||||||
|
bond_style bpm/spring
|
||||||
|
bond_coeff 1 1.0 1.0 1.0
|
||||||
|
|
||||||
|
# ------ Pour particles ------#
|
||||||
|
|
||||||
|
molecule my_mol "square.mol"
|
||||||
|
Read molecule template my_mol:
|
||||||
|
#Made with create_mol.py
|
||||||
|
1 molecules
|
||||||
|
0 fragments
|
||||||
|
100 atoms with max type 1
|
||||||
|
342 bonds with max type 1
|
||||||
|
0 angles with max type 0
|
||||||
|
0 dihedrals with max type 0
|
||||||
|
0 impropers with max type 0
|
||||||
|
|
||||||
|
# Wall region extends far enough in z to avoid contact
|
||||||
|
region wall block EDGE EDGE EDGE EDGE -5 5 side in open 4 units box
|
||||||
|
region drop block -16 16 70 90 EDGE EDGE side in units box
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 thermal shift surface/detection coordination 22 8
|
||||||
|
fix 1 all rheo 3 quintic 0 thermal shift surface/detection coordination 22 8
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 2 all rheo/viscosity * constant 0.05
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all rheo/thermal conductivity * constant ${kappa} specific/heat * constant ${Cv} Tfreeze * constant ${Tf} latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.01 specific/heat * constant ${Cv} Tfreeze * constant ${Tf} latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.01 specific/heat * constant 1 Tfreeze * constant ${Tf} latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.01 specific/heat * constant 1 Tfreeze * constant 1 latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.01 specific/heat * constant 1 Tfreeze * constant 1 latent/heat * constant 1 react 1.5 1
|
||||||
|
fix 5 all wall/region wall harmonic 1.0 1.0 1.0
|
||||||
|
fix 6 all gravity 5e-4 vector 0 -1 0
|
||||||
|
fix 7 all deposit 8 0 1000 37241459 mol my_mol region drop near 2.0 vy -0.02 -0.02
|
||||||
|
WARNING: Molecule attributes do not match system attributes (../molecule.cpp:1881)
|
||||||
|
fix 8 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute phase all rheo/property/atom phase
|
||||||
|
compute temp all rheo/property/atom temperature
|
||||||
|
compute eng all rheo/property/atom energy
|
||||||
|
compute nbond all nbond/atom
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press atoms
|
||||||
|
|
||||||
|
dump 1 all custom 200 atomDump id type x y vx vy fx fy c_phase c_temp c_eng c_nbond c_rho
|
||||||
|
|
||||||
|
run 30000
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Your simulation uses code contributions which should be cited:
|
||||||
|
|
||||||
|
- BPM bond style: doi:10.1039/D3SM01373A
|
||||||
|
|
||||||
|
@Article{Clemmer2024,
|
||||||
|
author = {Clemmer, Joel T. and Monti, Joseph M. and Lechman, Jeremy B.},
|
||||||
|
title = {A soft departure from jamming: the compaction of deformable
|
||||||
|
granular matter under high pressures},
|
||||||
|
journal = {Soft Matter},
|
||||||
|
year = 2024,
|
||||||
|
volume = 20,
|
||||||
|
number = 8,
|
||||||
|
pages = {1702--1718}
|
||||||
|
}
|
||||||
|
|
||||||
|
- @article{PalermoInPrep,
|
||||||
|
journal = {in prep},
|
||||||
|
title = {RHEO: A Hybrid Mesh-Free Model Framework for Dynamic Multi-Phase Flows},
|
||||||
|
year = {2024},
|
||||||
|
author = {Eric T. Palermo and Ki T. Wolf and Joel T. Clemmer and Thomas C. O'Connor},
|
||||||
|
}
|
||||||
|
|
||||||
|
- @article{ApplMathModel.130.310,
|
||||||
|
title = {A hybrid smoothed-particle hydrodynamics model of oxide skins on molten aluminum},
|
||||||
|
journal = {Applied Mathematical Modelling},
|
||||||
|
volume = {130},
|
||||||
|
pages = {310-326},
|
||||||
|
year = {2024},
|
||||||
|
issn = {0307-904X},
|
||||||
|
doi = {https://doi.org/10.1016/j.apm.2024.02.027},
|
||||||
|
author = {Joel T. Clemmer and Flint Pierce and Thomas C. O'Connor and Thomas D. Nevins and Elizabeth M.C. Jones and Jeremy B. Lechman and John Tencer},
|
||||||
|
}
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 31 61 1
|
||||||
|
7 neighbor lists, perpetual/occasional/extra = 6 1 0
|
||||||
|
(1) pair rheo, perpetual, half/full from (3)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: halffull/newtoff
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(2) pair rheo/solid, perpetual, trim from (4)
|
||||||
|
attributes: half, newton off, cut 1.3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(3) compute RHEO/KERNEL, perpetual
|
||||||
|
attributes: full, newton off
|
||||||
|
pair build: full/bin
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(4) compute RHEO/GRAD, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(5) compute RHEO/VSHIFT, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(6) compute RHEO/SURFACE, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(7) fix rheo/thermal, occasional, trim from (4)
|
||||||
|
attributes: half, newton off, cut 3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 15.53 | 15.61 | 15.69 Mbytes
|
||||||
|
Step Time KinEng Press Atoms
|
||||||
|
0 0 0 0 1470
|
||||||
|
200 20 5.6002982e-05 3.4434234e-05 1570
|
||||||
|
400 40 8.2173099e-05 8.6171768e-05 1570
|
||||||
|
600 60 8.019018e-05 0.00010750355 1570
|
||||||
|
800 80 0.00013866953 0.00010265608 1570
|
||||||
|
1000 100 0.00018965028 8.1985605e-05 1570
|
||||||
|
1200 120 0.00022033242 7.4736443e-05 1670
|
||||||
|
1400 140 0.00030767062 0.00011264333 1670
|
||||||
|
1600 160 0.00040770127 0.00018779992 1670
|
||||||
|
1800 180 0.00047476332 0.00023153009 1670
|
||||||
|
2000 200 0.00059116774 0.00027200445 1670
|
||||||
|
2200 220 0.0007151733 0.0002919963 1770
|
||||||
|
2400 240 0.00083392135 0.00029757889 1770
|
||||||
|
2600 260 0.00099653466 0.00036547269 1770
|
||||||
|
2800 280 0.0011964069 0.00045983458 1770
|
||||||
|
3000 300 0.0013716953 0.00055013647 1770
|
||||||
|
3200 320 0.0015174096 0.00064203572 1870
|
||||||
|
3400 340 0.0016539743 0.00086671622 1870
|
||||||
|
3600 360 0.0015887858 0.00066353749 1870
|
||||||
|
3800 380 0.0016451684 0.00070551483 1870
|
||||||
|
4000 400 0.0017330971 0.00080722283 1870
|
||||||
|
4200 420 0.001812193 0.00073573903 1970
|
||||||
|
4400 440 0.001755871 0.0010621909 1970
|
||||||
|
4600 460 0.0016190772 0.00072913706 1970
|
||||||
|
4800 480 0.0015741931 0.00073524088 1970
|
||||||
|
5000 500 0.0016488815 0.00088684275 1970
|
||||||
|
5200 520 0.0017213288 0.00077042378 2070
|
||||||
|
5400 540 0.0018509598 0.0010219434 2070
|
||||||
|
5600 560 0.0020251064 0.00083182483 2070
|
||||||
|
5800 580 0.0022473255 0.00095076144 2070
|
||||||
|
6000 600 0.0024843519 0.0011247014 2070
|
||||||
|
6200 620 0.0022282321 0.0018105932 2170
|
||||||
|
6400 640 0.0020289063 0.0014158497 2170
|
||||||
|
6600 660 0.002145241 0.0011359383 2170
|
||||||
|
6800 680 0.0024313937 0.0016475504 2170
|
||||||
|
7000 700 0.0021000599 0.0020983745 2170
|
||||||
|
7200 720 0.0019137235 0.0010439152 2270
|
||||||
|
7400 740 0.0018801367 0.00095436448 2270
|
||||||
|
7600 760 0.0017979449 0.0011184039 2270
|
||||||
|
7800 780 0.0018005205 0.0009243205 2270
|
||||||
|
8000 800 0.0017827073 0.0013671228 2270
|
||||||
|
8200 820 0.0018387108 0.0015426012 2270
|
||||||
|
8400 840 0.0016000788 0.0016751514 2270
|
||||||
|
8600 860 0.0013954964 0.0016884335 2270
|
||||||
|
8800 880 0.0013283728 0.0012399398 2270
|
||||||
|
9000 900 0.001389385 0.0012968496 2270
|
||||||
|
9200 920 0.0012295438 0.0012995821 2270
|
||||||
|
9400 940 0.0010522655 0.00082245528 2270
|
||||||
|
9600 960 0.00097085496 0.00053833131 2270
|
||||||
|
9800 980 0.0009398987 0.00063467387 2270
|
||||||
|
10000 1000 0.00092710392 0.00059494446 2270
|
||||||
|
10200 1020 0.00095545471 0.00074560644 2270
|
||||||
|
10400 1040 0.0009645841 0.00085429807 2270
|
||||||
|
10600 1060 0.00064037148 0.0017222246 2270
|
||||||
|
10800 1080 0.00046790978 0.00088204234 2270
|
||||||
|
11000 1100 0.00030106229 0.00074950209 2270
|
||||||
|
11200 1120 0.00027746016 0.00052831745 2270
|
||||||
|
11400 1140 0.0002533348 0.0006272715 2270
|
||||||
|
11600 1160 0.00021825085 0.00029691552 2270
|
||||||
|
11800 1180 0.0001451308 0.00015037478 2270
|
||||||
|
12000 1200 0.0001314823 0.00017227174 2270
|
||||||
|
12200 1220 0.00013693632 0.00017791384 2270
|
||||||
|
12400 1240 0.00014987347 0.0002286677 2270
|
||||||
|
12600 1260 0.00015092598 0.0003698436 2270
|
||||||
|
12800 1280 0.0001291653 0.00047229532 2270
|
||||||
|
13000 1300 0.00011949988 0.00049560375 2270
|
||||||
|
13200 1320 0.00011694665 0.00057542084 2270
|
||||||
|
13400 1340 9.6164519e-05 0.00062714755 2270
|
||||||
|
13600 1360 8.4517591e-05 0.00044156913 2270
|
||||||
|
13800 1380 0.00019140516 0.0003264745 2270
|
||||||
|
14000 1400 0.00013868599 0.00037753497 2270
|
||||||
|
14200 1420 9.3701636e-05 0.00031517848 2270
|
||||||
|
14400 1440 6.7389077e-05 0.0002946861 2270
|
||||||
|
14600 1460 5.3640086e-05 0.00026650711 2270
|
||||||
|
14800 1480 4.2699992e-05 0.00023789279 2270
|
||||||
|
15000 1500 5.3012016e-05 0.00019933234 2270
|
||||||
|
15200 1520 5.8834197e-05 0.00022407007 2270
|
||||||
|
15400 1540 5.0899982e-05 0.00029695531 2270
|
||||||
|
15600 1560 3.0476742e-05 0.00039119066 2270
|
||||||
|
15800 1580 1.6633264e-05 0.00033770401 2270
|
||||||
|
16000 1600 1.098906e-05 0.00036684894 2270
|
||||||
|
16200 1620 1.464848e-05 0.00036449759 2270
|
||||||
|
16400 1640 1.9598429e-05 0.00021056689 2270
|
||||||
|
16600 1660 1.2644955e-05 0.00020781781 2270
|
||||||
|
16800 1680 8.8428553e-06 0.000165 2270
|
||||||
|
17000 1700 8.8971439e-06 0.00012266475 2270
|
||||||
|
17200 1720 1.7032781e-05 0.00019873443 2270
|
||||||
|
17400 1740 1.9448563e-05 0.00025661663 2270
|
||||||
|
17600 1760 1.3714713e-05 0.000324022 2270
|
||||||
|
17800 1780 9.1326468e-06 0.00031392513 2270
|
||||||
|
18000 1800 9.2464802e-06 0.00029729527 2270
|
||||||
|
18200 1820 1.5553042e-05 0.00027488475 2270
|
||||||
|
18400 1840 1.4132933e-05 0.00019565459 2270
|
||||||
|
18600 1860 9.4734832e-06 0.00016716988 2270
|
||||||
|
18800 1880 5.5115145e-06 0.00013728033 2270
|
||||||
|
19000 1900 8.268812e-06 0.00015119605 2270
|
||||||
|
19200 1920 1.2470136e-05 0.00020222131 2270
|
||||||
|
19400 1940 9.9387775e-06 0.00024503373 2270
|
||||||
|
19600 1960 5.4241999e-06 0.00026921858 2270
|
||||||
|
19800 1980 2.7987348e-06 0.00026201267 2270
|
||||||
|
20000 2000 6.272538e-06 0.00025626323 2270
|
||||||
|
20200 2020 8.0157781e-06 0.000220139 2270
|
||||||
|
20400 2040 6.1652093e-06 0.00017089058 2270
|
||||||
|
20600 2060 2.9967592e-06 0.00014582864 2270
|
||||||
|
20800 2080 3.016678e-06 0.000148629 2270
|
||||||
|
21000 2100 7.287645e-06 0.00016486102 2270
|
||||||
|
21200 2120 8.6905277e-06 0.00020276916 2270
|
||||||
|
21400 2140 6.8453018e-06 0.00023156153 2270
|
||||||
|
21600 2160 3.3853799e-06 0.0002432462 2270
|
||||||
|
21800 2180 4.1241209e-06 0.00022829024 2270
|
||||||
|
22000 2200 7.0802396e-06 0.00020784823 2270
|
||||||
|
22200 2220 7.3361691e-06 0.00018114134 2270
|
||||||
|
22400 2240 5.0764593e-06 0.00014351106 2270
|
||||||
|
22600 2260 2.7487537e-06 0.00012919872 2270
|
||||||
|
22800 2280 4.620167e-06 0.00013746218 2270
|
||||||
|
23000 2300 6.9819357e-06 0.00015985102 2270
|
||||||
|
23200 2320 6.8923916e-06 0.00018713045 2270
|
||||||
|
23400 2340 4.1795088e-06 0.00019846682 2270
|
||||||
|
23600 2360 2.2871028e-06 0.00021068421 2270
|
||||||
|
23800 2380 3.862046e-06 0.00019553306 2270
|
||||||
|
24000 2400 5.2448555e-06 0.00017398041 2270
|
||||||
|
24200 2420 4.7565441e-06 0.00015008142 2270
|
||||||
|
24400 2440 2.2952135e-06 0.00012747106 2270
|
||||||
|
24600 2460 2.1575617e-06 0.00012516996 2270
|
||||||
|
24800 2480 4.1777868e-06 0.0001331902 2270
|
||||||
|
25000 2500 5.5679133e-06 0.00015504562 2270
|
||||||
|
25200 2520 4.5758741e-06 0.00017146032 2270
|
||||||
|
25400 2540 2.3403277e-06 0.00017611666 2270
|
||||||
|
25600 2560 2.7029302e-06 0.00016850788 2270
|
||||||
|
25800 2580 4.3601102e-06 0.00015884642 2270
|
||||||
|
26000 2600 5.2244249e-06 0.00013793898 2270
|
||||||
|
26200 2620 3.4577672e-06 0.00012395875 2270
|
||||||
|
26400 2640 2.361577e-06 0.00011600057 2270
|
||||||
|
26600 2660 2.8515644e-06 0.00011277063 2270
|
||||||
|
26800 2680 4.0851213e-06 0.0001290832 2270
|
||||||
|
27000 2700 4.2579644e-06 0.0001476495 2270
|
||||||
|
27200 2720 2.6593858e-06 0.00015977745 2270
|
||||||
|
27400 2740 1.990115e-06 0.00015612787 2270
|
||||||
|
27600 2760 2.6756835e-06 0.00014913772 2270
|
||||||
|
27800 2780 3.9032806e-06 0.00014014763 2270
|
||||||
|
28000 2800 3.2729446e-06 0.00012216846 2270
|
||||||
|
28200 2820 1.9357278e-06 0.00011078621 2270
|
||||||
|
28400 2840 1.7094832e-06 0.00010910509 2270
|
||||||
|
28600 2860 2.8731406e-06 0.00011179644 2270
|
||||||
|
28800 2880 3.7062354e-06 0.00012254091 2270
|
||||||
|
29000 2900 2.7844262e-06 0.00013060331 2270
|
||||||
|
29200 2920 1.7680655e-06 0.00013797514 2270
|
||||||
|
29400 2940 1.706873e-06 0.0001350685 2270
|
||||||
|
29600 2960 2.8764562e-06 0.00012428508 2270
|
||||||
|
29800 2980 3.1502029e-06 0.00011456718 2270
|
||||||
|
30000 3000 2.1833409e-06 0.00010317469 2270
|
||||||
|
Loop time of 165.611 on 4 procs for 30000 steps with 2270 atoms
|
||||||
|
|
||||||
|
Performance: 1565111.240 tau/day, 181.147 timesteps/s, 411.204 katom-step/s
|
||||||
|
99.7% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.63183 | 21.226 | 42.266 | 444.6 | 12.82
|
||||||
|
Bond | 0.095073 | 0.17799 | 0.27877 | 17.0 | 0.11
|
||||||
|
Neigh | 2.0745 | 2.0781 | 2.0822 | 0.2 | 1.25
|
||||||
|
Comm | 0.32024 | 0.38703 | 0.45564 | 8.1 | 0.23
|
||||||
|
Output | 0.60459 | 0.76798 | 0.93724 | 18.6 | 0.46
|
||||||
|
Modify | 119.85 | 140.76 | 161.36 | 172.2 | 85.00
|
||||||
|
Other | | 0.2124 | | | 0.13
|
||||||
|
|
||||||
|
Nlocal: 567.5 ave 1139 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Nghost: 75.5 ave 152 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Neighs: 9238.25 ave 18490 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
FullNghs: 17945 ave 35917 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
|
||||||
|
Total # of neighbors = 71780
|
||||||
|
Ave neighs/atom = 31.621145
|
||||||
|
Ave special neighs/atom = 0.22026432
|
||||||
|
Neighbor list builds = 2071
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
Total wall time: 0:02:45
|
||||||
658
examples/rheo/ice-cubes/square.mol
Normal file
658
examples/rheo/ice-cubes/square.mol
Normal file
@ -0,0 +1,658 @@
|
|||||||
|
#Made with create_mol.py
|
||||||
|
|
||||||
|
100 atoms
|
||||||
|
342 bonds
|
||||||
|
|
||||||
|
Coords
|
||||||
|
#ID x y z
|
||||||
|
1 -4 -4 0
|
||||||
|
2 -3 -4 0
|
||||||
|
3 -2 -4 0
|
||||||
|
4 -1 -4 0
|
||||||
|
5 0 -4 0
|
||||||
|
6 1 -4 0
|
||||||
|
7 2 -4 0
|
||||||
|
8 3 -4 0
|
||||||
|
9 4 -4 0
|
||||||
|
10 5 -4 0
|
||||||
|
11 -4 -3 0
|
||||||
|
12 -3 -3 0
|
||||||
|
13 -2 -3 0
|
||||||
|
14 -1 -3 0
|
||||||
|
15 0 -3 0
|
||||||
|
16 1 -3 0
|
||||||
|
17 2 -3 0
|
||||||
|
18 3 -3 0
|
||||||
|
19 4 -3 0
|
||||||
|
20 5 -3 0
|
||||||
|
21 -4 -2 0
|
||||||
|
22 -3 -2 0
|
||||||
|
23 -2 -2 0
|
||||||
|
24 -1 -2 0
|
||||||
|
25 0 -2 0
|
||||||
|
26 1 -2 0
|
||||||
|
27 2 -2 0
|
||||||
|
28 3 -2 0
|
||||||
|
29 4 -2 0
|
||||||
|
30 5 -2 0
|
||||||
|
31 -4 -1 0
|
||||||
|
32 -3 -1 0
|
||||||
|
33 -2 -1 0
|
||||||
|
34 -1 -1 0
|
||||||
|
35 0 -1 0
|
||||||
|
36 1 -1 0
|
||||||
|
37 2 -1 0
|
||||||
|
38 3 -1 0
|
||||||
|
39 4 -1 0
|
||||||
|
40 5 -1 0
|
||||||
|
41 -4 0 0
|
||||||
|
42 -3 0 0
|
||||||
|
43 -2 0 0
|
||||||
|
44 -1 0 0
|
||||||
|
45 0 0 0
|
||||||
|
46 1 0 0
|
||||||
|
47 2 0 0
|
||||||
|
48 3 0 0
|
||||||
|
49 4 0 0
|
||||||
|
50 5 0 0
|
||||||
|
51 -4 1 0
|
||||||
|
52 -3 1 0
|
||||||
|
53 -2 1 0
|
||||||
|
54 -1 1 0
|
||||||
|
55 0 1 0
|
||||||
|
56 1 1 0
|
||||||
|
57 2 1 0
|
||||||
|
58 3 1 0
|
||||||
|
59 4 1 0
|
||||||
|
60 5 1 0
|
||||||
|
61 -4 2 0
|
||||||
|
62 -3 2 0
|
||||||
|
63 -2 2 0
|
||||||
|
64 -1 2 0
|
||||||
|
65 0 2 0
|
||||||
|
66 1 2 0
|
||||||
|
67 2 2 0
|
||||||
|
68 3 2 0
|
||||||
|
69 4 2 0
|
||||||
|
70 5 2 0
|
||||||
|
71 -4 3 0
|
||||||
|
72 -3 3 0
|
||||||
|
73 -2 3 0
|
||||||
|
74 -1 3 0
|
||||||
|
75 0 3 0
|
||||||
|
76 1 3 0
|
||||||
|
77 2 3 0
|
||||||
|
78 3 3 0
|
||||||
|
79 4 3 0
|
||||||
|
80 5 3 0
|
||||||
|
81 -4 4 0
|
||||||
|
82 -3 4 0
|
||||||
|
83 -2 4 0
|
||||||
|
84 -1 4 0
|
||||||
|
85 0 4 0
|
||||||
|
86 1 4 0
|
||||||
|
87 2 4 0
|
||||||
|
88 3 4 0
|
||||||
|
89 4 4 0
|
||||||
|
90 5 4 0
|
||||||
|
91 -4 5 0
|
||||||
|
92 -3 5 0
|
||||||
|
93 -2 5 0
|
||||||
|
94 -1 5 0
|
||||||
|
95 0 5 0
|
||||||
|
96 1 5 0
|
||||||
|
97 2 5 0
|
||||||
|
98 3 5 0
|
||||||
|
99 4 5 0
|
||||||
|
100 5 5 0
|
||||||
|
|
||||||
|
Types
|
||||||
|
#ID type
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
3 1
|
||||||
|
4 1
|
||||||
|
5 1
|
||||||
|
6 1
|
||||||
|
7 1
|
||||||
|
8 1
|
||||||
|
9 1
|
||||||
|
10 1
|
||||||
|
11 1
|
||||||
|
12 1
|
||||||
|
13 1
|
||||||
|
14 1
|
||||||
|
15 1
|
||||||
|
16 1
|
||||||
|
17 1
|
||||||
|
18 1
|
||||||
|
19 1
|
||||||
|
20 1
|
||||||
|
21 1
|
||||||
|
22 1
|
||||||
|
23 1
|
||||||
|
24 1
|
||||||
|
25 1
|
||||||
|
26 1
|
||||||
|
27 1
|
||||||
|
28 1
|
||||||
|
29 1
|
||||||
|
30 1
|
||||||
|
31 1
|
||||||
|
32 1
|
||||||
|
33 1
|
||||||
|
34 1
|
||||||
|
35 1
|
||||||
|
36 1
|
||||||
|
37 1
|
||||||
|
38 1
|
||||||
|
39 1
|
||||||
|
40 1
|
||||||
|
41 1
|
||||||
|
42 1
|
||||||
|
43 1
|
||||||
|
44 1
|
||||||
|
45 1
|
||||||
|
46 1
|
||||||
|
47 1
|
||||||
|
48 1
|
||||||
|
49 1
|
||||||
|
50 1
|
||||||
|
51 1
|
||||||
|
52 1
|
||||||
|
53 1
|
||||||
|
54 1
|
||||||
|
55 1
|
||||||
|
56 1
|
||||||
|
57 1
|
||||||
|
58 1
|
||||||
|
59 1
|
||||||
|
60 1
|
||||||
|
61 1
|
||||||
|
62 1
|
||||||
|
63 1
|
||||||
|
64 1
|
||||||
|
65 1
|
||||||
|
66 1
|
||||||
|
67 1
|
||||||
|
68 1
|
||||||
|
69 1
|
||||||
|
70 1
|
||||||
|
71 1
|
||||||
|
72 1
|
||||||
|
73 1
|
||||||
|
74 1
|
||||||
|
75 1
|
||||||
|
76 1
|
||||||
|
77 1
|
||||||
|
78 1
|
||||||
|
79 1
|
||||||
|
80 1
|
||||||
|
81 1
|
||||||
|
82 1
|
||||||
|
83 1
|
||||||
|
84 1
|
||||||
|
85 1
|
||||||
|
86 1
|
||||||
|
87 1
|
||||||
|
88 1
|
||||||
|
89 1
|
||||||
|
90 1
|
||||||
|
91 1
|
||||||
|
92 1
|
||||||
|
93 1
|
||||||
|
94 1
|
||||||
|
95 1
|
||||||
|
96 1
|
||||||
|
97 1
|
||||||
|
98 1
|
||||||
|
99 1
|
||||||
|
100 1
|
||||||
|
|
||||||
|
Masses
|
||||||
|
#ID mass
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
3 1
|
||||||
|
4 1
|
||||||
|
5 1
|
||||||
|
6 1
|
||||||
|
7 1
|
||||||
|
8 1
|
||||||
|
9 1
|
||||||
|
10 1
|
||||||
|
11 1
|
||||||
|
12 1
|
||||||
|
13 1
|
||||||
|
14 1
|
||||||
|
15 1
|
||||||
|
16 1
|
||||||
|
17 1
|
||||||
|
18 1
|
||||||
|
19 1
|
||||||
|
20 1
|
||||||
|
21 1
|
||||||
|
22 1
|
||||||
|
23 1
|
||||||
|
24 1
|
||||||
|
25 1
|
||||||
|
26 1
|
||||||
|
27 1
|
||||||
|
28 1
|
||||||
|
29 1
|
||||||
|
30 1
|
||||||
|
31 1
|
||||||
|
32 1
|
||||||
|
33 1
|
||||||
|
34 1
|
||||||
|
35 1
|
||||||
|
36 1
|
||||||
|
37 1
|
||||||
|
38 1
|
||||||
|
39 1
|
||||||
|
40 1
|
||||||
|
41 1
|
||||||
|
42 1
|
||||||
|
43 1
|
||||||
|
44 1
|
||||||
|
45 1
|
||||||
|
46 1
|
||||||
|
47 1
|
||||||
|
48 1
|
||||||
|
49 1
|
||||||
|
50 1
|
||||||
|
51 1
|
||||||
|
52 1
|
||||||
|
53 1
|
||||||
|
54 1
|
||||||
|
55 1
|
||||||
|
56 1
|
||||||
|
57 1
|
||||||
|
58 1
|
||||||
|
59 1
|
||||||
|
60 1
|
||||||
|
61 1
|
||||||
|
62 1
|
||||||
|
63 1
|
||||||
|
64 1
|
||||||
|
65 1
|
||||||
|
66 1
|
||||||
|
67 1
|
||||||
|
68 1
|
||||||
|
69 1
|
||||||
|
70 1
|
||||||
|
71 1
|
||||||
|
72 1
|
||||||
|
73 1
|
||||||
|
74 1
|
||||||
|
75 1
|
||||||
|
76 1
|
||||||
|
77 1
|
||||||
|
78 1
|
||||||
|
79 1
|
||||||
|
80 1
|
||||||
|
81 1
|
||||||
|
82 1
|
||||||
|
83 1
|
||||||
|
84 1
|
||||||
|
85 1
|
||||||
|
86 1
|
||||||
|
87 1
|
||||||
|
88 1
|
||||||
|
89 1
|
||||||
|
90 1
|
||||||
|
91 1
|
||||||
|
92 1
|
||||||
|
93 1
|
||||||
|
94 1
|
||||||
|
95 1
|
||||||
|
96 1
|
||||||
|
97 1
|
||||||
|
98 1
|
||||||
|
99 1
|
||||||
|
100 1
|
||||||
|
|
||||||
|
Bonds
|
||||||
|
#ID type atom1 atom2
|
||||||
|
1 1 1 2
|
||||||
|
2 1 1 11
|
||||||
|
3 1 1 12
|
||||||
|
4 1 2 3
|
||||||
|
5 1 2 11
|
||||||
|
6 1 2 12
|
||||||
|
7 1 2 13
|
||||||
|
8 1 3 4
|
||||||
|
9 1 3 12
|
||||||
|
10 1 3 13
|
||||||
|
11 1 3 14
|
||||||
|
12 1 4 5
|
||||||
|
13 1 4 13
|
||||||
|
14 1 4 14
|
||||||
|
15 1 4 15
|
||||||
|
16 1 5 6
|
||||||
|
17 1 5 14
|
||||||
|
18 1 5 15
|
||||||
|
19 1 5 16
|
||||||
|
20 1 6 7
|
||||||
|
21 1 6 15
|
||||||
|
22 1 6 16
|
||||||
|
23 1 6 17
|
||||||
|
24 1 7 8
|
||||||
|
25 1 7 16
|
||||||
|
26 1 7 17
|
||||||
|
27 1 7 18
|
||||||
|
28 1 8 9
|
||||||
|
29 1 8 17
|
||||||
|
30 1 8 18
|
||||||
|
31 1 8 19
|
||||||
|
32 1 9 10
|
||||||
|
33 1 9 18
|
||||||
|
34 1 9 19
|
||||||
|
35 1 9 20
|
||||||
|
36 1 10 19
|
||||||
|
37 1 10 20
|
||||||
|
38 1 11 21
|
||||||
|
39 1 11 12
|
||||||
|
40 1 11 22
|
||||||
|
41 1 12 21
|
||||||
|
42 1 12 13
|
||||||
|
43 1 12 22
|
||||||
|
44 1 12 23
|
||||||
|
45 1 13 22
|
||||||
|
46 1 13 23
|
||||||
|
47 1 13 14
|
||||||
|
48 1 13 24
|
||||||
|
49 1 14 23
|
||||||
|
50 1 14 24
|
||||||
|
51 1 14 15
|
||||||
|
52 1 14 25
|
||||||
|
53 1 15 24
|
||||||
|
54 1 15 16
|
||||||
|
55 1 15 25
|
||||||
|
56 1 15 26
|
||||||
|
57 1 16 25
|
||||||
|
58 1 16 26
|
||||||
|
59 1 16 17
|
||||||
|
60 1 16 27
|
||||||
|
61 1 17 26
|
||||||
|
62 1 17 18
|
||||||
|
63 1 17 27
|
||||||
|
64 1 17 28
|
||||||
|
65 1 18 27
|
||||||
|
66 1 18 28
|
||||||
|
67 1 18 19
|
||||||
|
68 1 18 29
|
||||||
|
69 1 19 28
|
||||||
|
70 1 19 29
|
||||||
|
71 1 19 20
|
||||||
|
72 1 19 30
|
||||||
|
73 1 20 29
|
||||||
|
74 1 20 30
|
||||||
|
75 1 21 22
|
||||||
|
76 1 21 31
|
||||||
|
77 1 21 32
|
||||||
|
78 1 22 23
|
||||||
|
79 1 22 31
|
||||||
|
80 1 22 32
|
||||||
|
81 1 22 33
|
||||||
|
82 1 23 24
|
||||||
|
83 1 23 32
|
||||||
|
84 1 23 33
|
||||||
|
85 1 23 34
|
||||||
|
86 1 24 25
|
||||||
|
87 1 24 33
|
||||||
|
88 1 24 34
|
||||||
|
89 1 24 35
|
||||||
|
90 1 25 26
|
||||||
|
91 1 25 34
|
||||||
|
92 1 25 35
|
||||||
|
93 1 25 36
|
||||||
|
94 1 26 27
|
||||||
|
95 1 26 35
|
||||||
|
96 1 26 36
|
||||||
|
97 1 26 37
|
||||||
|
98 1 27 28
|
||||||
|
99 1 27 36
|
||||||
|
100 1 27 37
|
||||||
|
101 1 27 38
|
||||||
|
102 1 28 29
|
||||||
|
103 1 28 37
|
||||||
|
104 1 28 38
|
||||||
|
105 1 28 39
|
||||||
|
106 1 29 30
|
||||||
|
107 1 29 38
|
||||||
|
108 1 29 39
|
||||||
|
109 1 29 40
|
||||||
|
110 1 30 39
|
||||||
|
111 1 30 40
|
||||||
|
112 1 31 32
|
||||||
|
113 1 31 41
|
||||||
|
114 1 31 42
|
||||||
|
115 1 32 33
|
||||||
|
116 1 32 41
|
||||||
|
117 1 32 42
|
||||||
|
118 1 32 43
|
||||||
|
119 1 33 34
|
||||||
|
120 1 33 42
|
||||||
|
121 1 33 43
|
||||||
|
122 1 33 44
|
||||||
|
123 1 34 35
|
||||||
|
124 1 34 43
|
||||||
|
125 1 34 44
|
||||||
|
126 1 34 45
|
||||||
|
127 1 35 36
|
||||||
|
128 1 35 44
|
||||||
|
129 1 35 45
|
||||||
|
130 1 35 46
|
||||||
|
131 1 36 37
|
||||||
|
132 1 36 45
|
||||||
|
133 1 36 46
|
||||||
|
134 1 36 47
|
||||||
|
135 1 37 38
|
||||||
|
136 1 37 46
|
||||||
|
137 1 37 47
|
||||||
|
138 1 37 48
|
||||||
|
139 1 38 39
|
||||||
|
140 1 38 47
|
||||||
|
141 1 38 48
|
||||||
|
142 1 38 49
|
||||||
|
143 1 39 40
|
||||||
|
144 1 39 48
|
||||||
|
145 1 39 49
|
||||||
|
146 1 39 50
|
||||||
|
147 1 40 49
|
||||||
|
148 1 40 50
|
||||||
|
149 1 41 51
|
||||||
|
150 1 41 42
|
||||||
|
151 1 41 52
|
||||||
|
152 1 42 51
|
||||||
|
153 1 42 43
|
||||||
|
154 1 42 52
|
||||||
|
155 1 42 53
|
||||||
|
156 1 43 52
|
||||||
|
157 1 43 53
|
||||||
|
158 1 43 44
|
||||||
|
159 1 43 54
|
||||||
|
160 1 44 53
|
||||||
|
161 1 44 54
|
||||||
|
162 1 44 45
|
||||||
|
163 1 44 55
|
||||||
|
164 1 45 54
|
||||||
|
165 1 45 46
|
||||||
|
166 1 45 55
|
||||||
|
167 1 45 56
|
||||||
|
168 1 46 55
|
||||||
|
169 1 46 56
|
||||||
|
170 1 46 47
|
||||||
|
171 1 46 57
|
||||||
|
172 1 47 56
|
||||||
|
173 1 47 48
|
||||||
|
174 1 47 57
|
||||||
|
175 1 47 58
|
||||||
|
176 1 48 57
|
||||||
|
177 1 48 58
|
||||||
|
178 1 48 49
|
||||||
|
179 1 48 59
|
||||||
|
180 1 49 58
|
||||||
|
181 1 49 59
|
||||||
|
182 1 49 50
|
||||||
|
183 1 49 60
|
||||||
|
184 1 50 59
|
||||||
|
185 1 50 60
|
||||||
|
186 1 51 52
|
||||||
|
187 1 51 61
|
||||||
|
188 1 51 62
|
||||||
|
189 1 52 53
|
||||||
|
190 1 52 61
|
||||||
|
191 1 52 62
|
||||||
|
192 1 52 63
|
||||||
|
193 1 53 54
|
||||||
|
194 1 53 62
|
||||||
|
195 1 53 63
|
||||||
|
196 1 53 64
|
||||||
|
197 1 54 55
|
||||||
|
198 1 54 63
|
||||||
|
199 1 54 64
|
||||||
|
200 1 54 65
|
||||||
|
201 1 55 56
|
||||||
|
202 1 55 64
|
||||||
|
203 1 55 65
|
||||||
|
204 1 55 66
|
||||||
|
205 1 56 57
|
||||||
|
206 1 56 65
|
||||||
|
207 1 56 66
|
||||||
|
208 1 56 67
|
||||||
|
209 1 57 58
|
||||||
|
210 1 57 66
|
||||||
|
211 1 57 67
|
||||||
|
212 1 57 68
|
||||||
|
213 1 58 59
|
||||||
|
214 1 58 67
|
||||||
|
215 1 58 68
|
||||||
|
216 1 58 69
|
||||||
|
217 1 59 60
|
||||||
|
218 1 59 68
|
||||||
|
219 1 59 69
|
||||||
|
220 1 59 70
|
||||||
|
221 1 60 69
|
||||||
|
222 1 60 70
|
||||||
|
223 1 61 71
|
||||||
|
224 1 61 62
|
||||||
|
225 1 61 72
|
||||||
|
226 1 62 71
|
||||||
|
227 1 62 63
|
||||||
|
228 1 62 72
|
||||||
|
229 1 62 73
|
||||||
|
230 1 63 72
|
||||||
|
231 1 63 73
|
||||||
|
232 1 63 64
|
||||||
|
233 1 63 74
|
||||||
|
234 1 64 73
|
||||||
|
235 1 64 74
|
||||||
|
236 1 64 65
|
||||||
|
237 1 64 75
|
||||||
|
238 1 65 74
|
||||||
|
239 1 65 66
|
||||||
|
240 1 65 75
|
||||||
|
241 1 65 76
|
||||||
|
242 1 66 75
|
||||||
|
243 1 66 76
|
||||||
|
244 1 66 67
|
||||||
|
245 1 66 77
|
||||||
|
246 1 67 76
|
||||||
|
247 1 67 68
|
||||||
|
248 1 67 77
|
||||||
|
249 1 67 78
|
||||||
|
250 1 68 77
|
||||||
|
251 1 68 78
|
||||||
|
252 1 68 69
|
||||||
|
253 1 68 79
|
||||||
|
254 1 69 78
|
||||||
|
255 1 69 79
|
||||||
|
256 1 69 70
|
||||||
|
257 1 69 80
|
||||||
|
258 1 70 79
|
||||||
|
259 1 70 80
|
||||||
|
260 1 71 72
|
||||||
|
261 1 71 81
|
||||||
|
262 1 71 82
|
||||||
|
263 1 72 73
|
||||||
|
264 1 72 81
|
||||||
|
265 1 72 82
|
||||||
|
266 1 72 83
|
||||||
|
267 1 73 74
|
||||||
|
268 1 73 82
|
||||||
|
269 1 73 83
|
||||||
|
270 1 73 84
|
||||||
|
271 1 74 75
|
||||||
|
272 1 74 83
|
||||||
|
273 1 74 84
|
||||||
|
274 1 74 85
|
||||||
|
275 1 75 76
|
||||||
|
276 1 75 84
|
||||||
|
277 1 75 85
|
||||||
|
278 1 75 86
|
||||||
|
279 1 76 77
|
||||||
|
280 1 76 85
|
||||||
|
281 1 76 86
|
||||||
|
282 1 76 87
|
||||||
|
283 1 77 78
|
||||||
|
284 1 77 86
|
||||||
|
285 1 77 87
|
||||||
|
286 1 77 88
|
||||||
|
287 1 78 79
|
||||||
|
288 1 78 87
|
||||||
|
289 1 78 88
|
||||||
|
290 1 78 89
|
||||||
|
291 1 79 80
|
||||||
|
292 1 79 88
|
||||||
|
293 1 79 89
|
||||||
|
294 1 79 90
|
||||||
|
295 1 80 89
|
||||||
|
296 1 80 90
|
||||||
|
297 1 81 82
|
||||||
|
298 1 81 91
|
||||||
|
299 1 81 92
|
||||||
|
300 1 82 83
|
||||||
|
301 1 82 91
|
||||||
|
302 1 82 92
|
||||||
|
303 1 82 93
|
||||||
|
304 1 83 84
|
||||||
|
305 1 83 92
|
||||||
|
306 1 83 93
|
||||||
|
307 1 83 94
|
||||||
|
308 1 84 85
|
||||||
|
309 1 84 93
|
||||||
|
310 1 84 94
|
||||||
|
311 1 84 95
|
||||||
|
312 1 85 86
|
||||||
|
313 1 85 94
|
||||||
|
314 1 85 95
|
||||||
|
315 1 85 96
|
||||||
|
316 1 86 87
|
||||||
|
317 1 86 95
|
||||||
|
318 1 86 96
|
||||||
|
319 1 86 97
|
||||||
|
320 1 87 88
|
||||||
|
321 1 87 96
|
||||||
|
322 1 87 97
|
||||||
|
323 1 87 98
|
||||||
|
324 1 88 89
|
||||||
|
325 1 88 97
|
||||||
|
326 1 88 98
|
||||||
|
327 1 88 99
|
||||||
|
328 1 89 90
|
||||||
|
329 1 89 98
|
||||||
|
330 1 89 99
|
||||||
|
331 1 89 100
|
||||||
|
332 1 90 99
|
||||||
|
333 1 90 100
|
||||||
|
334 1 91 92
|
||||||
|
335 1 92 93
|
||||||
|
336 1 93 94
|
||||||
|
337 1 94 95
|
||||||
|
338 1 95 96
|
||||||
|
339 1 96 97
|
||||||
|
340 1 97 98
|
||||||
|
341 1 98 99
|
||||||
|
342 1 99 100
|
||||||
102
examples/rheo/oxidation/in.rheo.oxidation
Normal file
102
examples/rheo/oxidation/in.rheo.oxidation
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
# ------ 2D oxidizing bar ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style hybrid rheo/thermal bond
|
||||||
|
boundary m m p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
region box block -60 60 0 80 -0.01 0.01 units box
|
||||||
|
create_box 3 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50
|
||||||
|
|
||||||
|
region lbar block -15 0 3 80 EDGE EDGE units box
|
||||||
|
region rbar block 0 15 3 80 EDGE EDGE units box
|
||||||
|
region bar union 2 lbar rbar
|
||||||
|
region floor block EDGE EDGE EDGE 3.0 EDGE EDGE units box
|
||||||
|
|
||||||
|
lattice hex 1.0
|
||||||
|
create_atoms 1 region bar
|
||||||
|
create_atoms 3 region floor
|
||||||
|
|
||||||
|
set region rbar type 2
|
||||||
|
group bar type 1 2
|
||||||
|
group rbar type 2
|
||||||
|
group floor type 3
|
||||||
|
|
||||||
|
set group all sph/e 0.0
|
||||||
|
set group all rheo/status 1
|
||||||
|
|
||||||
|
# ------ Model parameters ------#
|
||||||
|
|
||||||
|
variable cut equal 3.0
|
||||||
|
variable n equal 1.0
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable zeta equal 0.05
|
||||||
|
variable kappa equal 0.1*${rho0}/${mp}
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable Cv equal 1.0
|
||||||
|
variable L equal 0.1
|
||||||
|
variable Tf equal 1.0
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style hybrid/overlay rheo ${cut} artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_coeff * * rheo
|
||||||
|
pair_coeff * * rheo/solid 1.0 1.0 1.0
|
||||||
|
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
|
||||||
|
create_bonds many bar bar 1 0 1.5
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
|
||||||
|
|
||||||
|
bond_style hybrid bpm/spring rheo/shell t/form 100
|
||||||
|
bond_coeff 1 bpm/spring 1.0 1.0 1.0
|
||||||
|
bond_coeff 2 rheo/shell 0.2 0.2 0.1
|
||||||
|
|
||||||
|
# ------ Apply dynamics ------#
|
||||||
|
|
||||||
|
# Note: surface detection is not performed on solid bodies, so cannot use surface property
|
||||||
|
compute coord all rheo/property/atom coordination
|
||||||
|
variable surf atom c_coord<22
|
||||||
|
group surf dynamic all var surf every 10
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 &
|
||||||
|
thermal &
|
||||||
|
shift &
|
||||||
|
surface/detection coordination 22 8
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all rheo/thermal conductivity * constant ${kappa} &
|
||||||
|
specific/heat * constant ${Cv} &
|
||||||
|
Tfreeze * constant ${Tf} &
|
||||||
|
latent/heat * constant ${L} &
|
||||||
|
react 1.5 1
|
||||||
|
|
||||||
|
fix 5 rbar rheo/oxidation 1.5 2 1.0
|
||||||
|
fix 6 all wall/harmonic ylo EDGE 2.0 1.0 1.0
|
||||||
|
fix 7 all gravity 5e-5 vector 0 -1 0
|
||||||
|
fix 8 floor setforce 0.0 0.0 0.0
|
||||||
|
fix 9 surf add/heat linear 1.1 0.05
|
||||||
|
fix 10 floor add/heat constant 0 overwrite yes # fix the temperature of the floor
|
||||||
|
fix 11 all enforce2d
|
||||||
|
|
||||||
|
compute surf all rheo/property/atom surface
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute phase all rheo/property/atom phase
|
||||||
|
compute temp all rheo/property/atom temperature
|
||||||
|
compute eng all rheo/property/atom energy
|
||||||
|
compute nbond_shell all rheo/property/atom nbond/shell
|
||||||
|
compute nbond_solid all nbond/atom bond/type 1
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press atoms
|
||||||
|
|
||||||
|
#dump 1 all custom 200 atomDump id type x y vx vy fx fy c_phase c_temp c_eng c_nbond_solid c_nbond_shell c_rho c_surf
|
||||||
|
|
||||||
|
run 40000
|
||||||
488
examples/rheo/oxidation/log.17Apr2024.oxidation.g++.4
Normal file
488
examples/rheo/oxidation/log.17Apr2024.oxidation.g++.4
Normal file
@ -0,0 +1,488 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_5May2020-18508-g3c0eaf6870-modified)
|
||||||
|
# ------ 2D oxidizing bar ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style hybrid rheo/thermal bond
|
||||||
|
boundary m m p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
region box block -60 60 0 80 -0.01 0.01 units box
|
||||||
|
create_box 3 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50
|
||||||
|
Created orthogonal box = (-60 0 -0.01) to (60 80 0.01)
|
||||||
|
2 by 2 by 1 MPI processor grid
|
||||||
|
|
||||||
|
region lbar block -15 0 3 80 EDGE EDGE units box
|
||||||
|
region rbar block 0 15 3 80 EDGE EDGE units box
|
||||||
|
region bar union 2 lbar rbar
|
||||||
|
region floor block EDGE EDGE EDGE 3.0 EDGE EDGE units box
|
||||||
|
|
||||||
|
lattice hex 1.0
|
||||||
|
Lattice spacing in x,y,z = 1.0745699 1.8612097 1.0745699
|
||||||
|
create_atoms 1 region bar
|
||||||
|
Created 2255 atoms
|
||||||
|
using lattice units in orthogonal box = (-60 0 -0.01) to (60 80 0.01)
|
||||||
|
create_atoms CPU = 0.001 seconds
|
||||||
|
create_atoms 3 region floor
|
||||||
|
Created 446 atoms
|
||||||
|
using lattice units in orthogonal box = (-60 0 -0.01) to (60 80 0.01)
|
||||||
|
create_atoms CPU = 0.000 seconds
|
||||||
|
|
||||||
|
set region rbar type 2
|
||||||
|
Setting atom values ...
|
||||||
|
1148 settings made for type
|
||||||
|
group bar type 1 2
|
||||||
|
2255 atoms in group bar
|
||||||
|
group rbar type 2
|
||||||
|
1148 atoms in group rbar
|
||||||
|
group floor type 3
|
||||||
|
446 atoms in group floor
|
||||||
|
|
||||||
|
set group all sph/e 0.0
|
||||||
|
Setting atom values ...
|
||||||
|
2701 settings made for sph/e
|
||||||
|
set group all rheo/status 1
|
||||||
|
Setting atom values ...
|
||||||
|
2701 settings made for rheo/status
|
||||||
|
|
||||||
|
# ------ Model parameters ------#
|
||||||
|
|
||||||
|
variable cut equal 3.0
|
||||||
|
variable n equal 1.0
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable mp equal 1/${n}
|
||||||
|
variable mp equal 1/1
|
||||||
|
variable zeta equal 0.05
|
||||||
|
variable kappa equal 0.1*${rho0}/${mp}
|
||||||
|
variable kappa equal 0.1*1/${mp}
|
||||||
|
variable kappa equal 0.1*1/1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/1/3
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable Cv equal 1.0
|
||||||
|
variable L equal 0.1
|
||||||
|
variable Tf equal 1.0
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
mass * 1
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style hybrid/overlay rheo ${cut} artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_style hybrid/overlay rheo 3 artificial/visc ${zeta} rheo/solid
|
||||||
|
pair_style hybrid/overlay rheo 3 artificial/visc 0.05 rheo/solid
|
||||||
|
pair_coeff * * rheo
|
||||||
|
pair_coeff * * rheo/solid 1.0 1.0 1.0
|
||||||
|
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 1 1
|
||||||
|
special bond factors coul: 0 1 1
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
101 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
create_bonds many bar bar 1 0 1.5
|
||||||
|
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 73 49 1
|
||||||
|
3 neighbor lists, perpetual/occasional/extra = 2 1 0
|
||||||
|
(1) command create_bonds, occasional
|
||||||
|
attributes: full, newton off
|
||||||
|
pair build: full/bin
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(2) pair rheo, perpetual
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: half/bin/newtoff
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(3) pair rheo/solid, perpetual, trim from (2)
|
||||||
|
attributes: half, newton off, cut 1.3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Added 6547 bonds, new total = 6547
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 1 1
|
||||||
|
special bond factors coul: 0 1 1
|
||||||
|
6 = max # of 1-2 neighbors
|
||||||
|
101 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
|
||||||
|
|
||||||
|
bond_style hybrid bpm/spring rheo/shell t/form 100
|
||||||
|
bond_coeff 1 bpm/spring 1.0 1.0 1.0
|
||||||
|
bond_coeff 2 rheo/shell 0.2 0.2 0.1
|
||||||
|
|
||||||
|
# ------ Apply dynamics ------#
|
||||||
|
|
||||||
|
# Note: surface detection is not performed on solid bodies, so cannot use surface property
|
||||||
|
compute coord all rheo/property/atom coordination
|
||||||
|
variable surf atom c_coord<22
|
||||||
|
group surf dynamic all var surf every 10
|
||||||
|
dynamic group surf defined
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 thermal shift surface/detection coordination 22 8
|
||||||
|
fix 1 all rheo 3 quintic 0 thermal shift surface/detection coordination 22 8
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 2 all rheo/viscosity * constant 0.05
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all rheo/thermal conductivity * constant ${kappa} specific/heat * constant ${Cv} Tfreeze * constant ${Tf} latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.1 specific/heat * constant ${Cv} Tfreeze * constant ${Tf} latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.1 specific/heat * constant 1 Tfreeze * constant ${Tf} latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.1 specific/heat * constant 1 Tfreeze * constant 1 latent/heat * constant ${L} react 1.5 1
|
||||||
|
fix 4 all rheo/thermal conductivity * constant 0.1 specific/heat * constant 1 Tfreeze * constant 1 latent/heat * constant 0.1 react 1.5 1
|
||||||
|
|
||||||
|
fix 5 rbar rheo/oxidation 1.5 2 1.0
|
||||||
|
fix 6 all wall/harmonic ylo EDGE 2.0 1.0 1.0
|
||||||
|
fix 7 all gravity 5e-5 vector 0 -1 0
|
||||||
|
fix 8 floor setforce 0.0 0.0 0.0
|
||||||
|
fix 9 surf add/heat linear 1.1 0.05
|
||||||
|
fix 10 floor add/heat constant 0 overwrite yes # fix the temperature of the floor
|
||||||
|
fix 11 all enforce2d
|
||||||
|
|
||||||
|
compute surf all rheo/property/atom surface
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
compute phase all rheo/property/atom phase
|
||||||
|
compute status all rheo/property/atom status
|
||||||
|
compute temp all rheo/property/atom temperature
|
||||||
|
compute eng all rheo/property/atom energy
|
||||||
|
compute nbond_shell all rheo/property/atom nbond/shell
|
||||||
|
compute nbond_solid all nbond/atom bond/type 1
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press atoms
|
||||||
|
|
||||||
|
dump 1 all custom 200 atomDump id type x y vx vy fx fy c_phase c_temp c_eng c_nbond_solid c_nbond_shell c_rho c_surf c_status
|
||||||
|
|
||||||
|
run 40000
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Your simulation uses code contributions which should be cited:
|
||||||
|
|
||||||
|
- BPM bond style: doi:10.1039/D3SM01373A
|
||||||
|
|
||||||
|
@Article{Clemmer2024,
|
||||||
|
author = {Clemmer, Joel T. and Monti, Joseph M. and Lechman, Jeremy B.},
|
||||||
|
title = {A soft departure from jamming: the compaction of deformable
|
||||||
|
granular matter under high pressures},
|
||||||
|
journal = {Soft Matter},
|
||||||
|
year = 2024,
|
||||||
|
volume = 20,
|
||||||
|
number = 8,
|
||||||
|
pages = {1702--1718}
|
||||||
|
}
|
||||||
|
|
||||||
|
- @article{PalermoInPrep,
|
||||||
|
journal = {in prep},
|
||||||
|
title = {RHEO: A Hybrid Mesh-Free Model Framework for Dynamic Multi-Phase Flows},
|
||||||
|
year = {2024},
|
||||||
|
author = {Eric T. Palermo and Ki T. Wolf and Joel T. Clemmer and Thomas C. O'Connor},
|
||||||
|
}
|
||||||
|
|
||||||
|
- @article{ApplMathModel.130.310,
|
||||||
|
title = {A hybrid smoothed-particle hydrodynamics model of oxide skins on molten aluminum},
|
||||||
|
journal = {Applied Mathematical Modelling},
|
||||||
|
volume = {130},
|
||||||
|
pages = {310-326},
|
||||||
|
year = {2024},
|
||||||
|
issn = {0307-904X},
|
||||||
|
doi = {https://doi.org/10.1016/j.apm.2024.02.027},
|
||||||
|
author = {Joel T. Clemmer and Flint Pierce and Thomas C. O'Connor and Thomas D. Nevins and Elizabeth M.C. Jones and Jeremy B. Lechman and John Tencer},
|
||||||
|
}
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 73 49 1
|
||||||
|
8 neighbor lists, perpetual/occasional/extra = 7 1 0
|
||||||
|
(1) pair rheo, perpetual, half/full from (3)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: halffull/newtoff
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(2) pair rheo/solid, perpetual, trim from (4)
|
||||||
|
attributes: half, newton off, cut 1.3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(3) compute RHEO/KERNEL, perpetual
|
||||||
|
attributes: full, newton off
|
||||||
|
pair build: full/bin
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(4) compute RHEO/GRAD, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(5) compute RHEO/VSHIFT, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(6) compute RHEO/SURFACE, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(7) fix rheo/thermal, occasional, trim from (4)
|
||||||
|
attributes: half, newton off, cut 3
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(8) fix rheo/oxidation, perpetual, trim from (3)
|
||||||
|
attributes: full, newton off, cut 1.8
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 25.96 | 25.96 | 25.96 Mbytes
|
||||||
|
Step Time KinEng Press Atoms
|
||||||
|
0 0 0 0 2701
|
||||||
|
200 20 4.1743799e-07 1.1743617e-07 2701
|
||||||
|
400 40 1.6697519e-06 4.6974469e-07 2701
|
||||||
|
600 60 3.7127333e-06 1.0646825e-05 2701
|
||||||
|
800 80 4.6683656e-06 0.00015182605 2701
|
||||||
|
1000 100 4.7368707e-06 0.00028128761 2701
|
||||||
|
1200 120 3.4384322e-06 0.00045913378 2701
|
||||||
|
1400 140 1.4119866e-06 0.00055627091 2701
|
||||||
|
1600 160 4.4114517e-07 0.00058247308 2701
|
||||||
|
1800 180 4.8289229e-07 0.0005510948 2701
|
||||||
|
2000 200 1.8494183e-06 0.00048386222 2701
|
||||||
|
2200 220 3.3319816e-06 0.00037903264 2701
|
||||||
|
2400 240 3.8128922e-06 0.00024115906 2701
|
||||||
|
2600 260 3.1943401e-06 9.727407e-05 2701
|
||||||
|
2800 280 1.6172816e-06 -2.632162e-05 2701
|
||||||
|
3000 300 3.6100709e-07 -8.5761867e-05 2701
|
||||||
|
3200 320 1.4745502e-07 -5.9204127e-05 2701
|
||||||
|
3400 340 8.3369782e-07 8.8312464e-07 2701
|
||||||
|
3600 360 2.0484052e-06 5.8521477e-05 2701
|
||||||
|
3800 380 3.1639387e-06 0.0001685663 2701
|
||||||
|
4000 400 3.1692907e-06 0.00026875988 2701
|
||||||
|
4200 420 2.391933e-06 0.00038621787 2701
|
||||||
|
4400 440 1.1964404e-06 0.00048901286 2701
|
||||||
|
4600 460 4.0508824e-07 0.00051863639 2701
|
||||||
|
4800 480 5.4908507e-07 0.00049263754 2701
|
||||||
|
5000 500 1.3139665e-06 0.00041984264 2701
|
||||||
|
5200 520 2.1939161e-06 0.00033095351 2701
|
||||||
|
5400 540 2.3687031e-06 0.00022422981 2701
|
||||||
|
5600 560 1.8280882e-06 0.00011544328 2701
|
||||||
|
5800 580 8.8610517e-07 2.9307791e-05 2701
|
||||||
|
6000 600 2.0989359e-07 -1.7340941e-05 2701
|
||||||
|
6200 620 2.8658301e-07 -8.1237835e-06 2701
|
||||||
|
6400 640 9.7636239e-07 4.3755922e-05 2701
|
||||||
|
6600 660 1.891303e-06 0.0001185719 2701
|
||||||
|
6800 680 2.4149904e-06 0.00020830273 2701
|
||||||
|
7000 700 2.3174953e-06 0.00030114767 2701
|
||||||
|
7200 720 1.7918612e-06 0.00037821537 2701
|
||||||
|
7400 740 1.2114987e-06 0.0004233475 2701
|
||||||
|
7600 760 9.9661553e-07 0.00042958263 2701
|
||||||
|
7800 780 1.1552559e-06 0.00039944618 2701
|
||||||
|
8000 800 1.5249138e-06 0.00034034478 2701
|
||||||
|
8200 820 1.7453861e-06 0.00026826463 2701
|
||||||
|
8400 840 1.6259021e-06 0.00019131768 2701
|
||||||
|
8600 860 1.2612805e-06 0.0001162957 2701
|
||||||
|
8800 880 8.6964518e-07 7.1771506e-05 2701
|
||||||
|
9000 900 7.6892472e-07 5.6170687e-05 2701
|
||||||
|
9200 920 1.0780045e-06 7.1925995e-05 2701
|
||||||
|
9400 940 1.6514902e-06 0.00011635293 2701
|
||||||
|
9600 960 2.1891377e-06 0.00017599885 2701
|
||||||
|
9800 980 2.4551701e-06 0.00024127934 2701
|
||||||
|
10000 1000 2.4277051e-06 0.00029918622 2701
|
||||||
|
10200 1020 2.2655987e-06 0.00034067996 2701
|
||||||
|
10400 1040 2.1767207e-06 0.00035598133 2701
|
||||||
|
10600 1060 2.2796719e-06 0.00034359076 2701
|
||||||
|
10800 1080 2.4884225e-06 0.00030749714 2701
|
||||||
|
11000 1100 2.6387215e-06 0.00025725198 2701
|
||||||
|
11200 1120 2.5968908e-06 0.00020170699 2701
|
||||||
|
11400 1140 2.4108931e-06 0.00015185858 2701
|
||||||
|
11600 1160 2.2375166e-06 0.00011800349 2701
|
||||||
|
11800 1180 2.2407196e-06 0.00010646971 2701
|
||||||
|
12000 1200 2.4845263e-06 0.00011817498 2701
|
||||||
|
12200 1220 2.8733204e-06 0.00015013186 2701
|
||||||
|
12400 1240 3.2437087e-06 0.00019211975 2701
|
||||||
|
12600 1260 3.4732728e-06 0.00023620276 2701
|
||||||
|
12800 1280 3.5836611e-06 0.00027352269 2701
|
||||||
|
13000 1300 3.6592211e-06 0.00029533734 2701
|
||||||
|
13200 1320 3.782506e-06 0.00030032559 2701
|
||||||
|
13400 1340 3.9807086e-06 0.00028395722 2701
|
||||||
|
13600 1360 4.2023176e-06 0.00025390325 2701
|
||||||
|
13800 1380 4.3559781e-06 0.00021794236 2701
|
||||||
|
14000 1400 4.4273371e-06 0.00018026034 2701
|
||||||
|
14200 1420 4.49867e-06 0.0001526569 2701
|
||||||
|
14400 1440 4.6591574e-06 0.00013707051 2701
|
||||||
|
14600 1460 4.9589583e-06 0.00013803875 2701
|
||||||
|
14800 1480 5.3859375e-06 0.00015455425 2701
|
||||||
|
15000 1500 5.8639557e-06 0.00017954785 2701
|
||||||
|
15200 1520 6.3075561e-06 0.0002084257 2701
|
||||||
|
15400 1540 6.7022179e-06 0.0002347669 2701
|
||||||
|
15600 1560 7.0789688e-06 0.00025020766 2701
|
||||||
|
15800 1580 7.4734777e-06 0.00025394845 2701
|
||||||
|
16000 1600 7.8884743e-06 0.00024571725 2701
|
||||||
|
16200 1620 8.3224059e-06 0.00022706648 2701
|
||||||
|
16400 1640 8.7337783e-06 0.00020320706 2701
|
||||||
|
16600 1660 9.1454649e-06 0.00017824346 2701
|
||||||
|
16800 1680 9.5948793e-06 0.00015961835 2701
|
||||||
|
17000 1700 1.0106407e-05 0.00015135471 2701
|
||||||
|
17200 1720 1.0707273e-05 0.00015166884 2701
|
||||||
|
17400 1740 1.1392597e-05 0.0001645916 2701
|
||||||
|
17600 1760 1.2118829e-05 0.00018119729 2701
|
||||||
|
17800 1780 1.2846056e-05 0.0002003616 2701
|
||||||
|
18000 1800 1.3555288e-05 0.00021585952 2701
|
||||||
|
18200 1820 1.4301024e-05 0.00022290158 2701
|
||||||
|
18400 1840 1.5089217e-05 0.00021970192 2701
|
||||||
|
18600 1860 1.5902351e-05 0.00020911128 2701
|
||||||
|
18800 1880 1.6753175e-05 0.00019278718 2701
|
||||||
|
19000 1900 1.7602996e-05 0.00017584076 2701
|
||||||
|
19200 1920 1.8479378e-05 0.00016206226 2701
|
||||||
|
19400 1940 1.9421603e-05 0.00015575677 2701
|
||||||
|
19600 1960 2.0477421e-05 0.00015687558 2701
|
||||||
|
19800 1980 2.1617288e-05 0.00016424998 2701
|
||||||
|
20000 2000 2.2814347e-05 0.00017466664 2701
|
||||||
|
20200 2020 2.4029097e-05 0.00018647149 2701
|
||||||
|
20400 2040 2.5255953e-05 0.00019516077 2701
|
||||||
|
20600 2060 2.649418e-05 0.00019906384 2701
|
||||||
|
20800 2080 2.7755897e-05 0.00019630586 2701
|
||||||
|
21000 2100 2.9067854e-05 0.00018674721 2701
|
||||||
|
21200 2120 3.0396477e-05 0.0001758048 2701
|
||||||
|
21400 2140 3.1759719e-05 0.00016782801 2701
|
||||||
|
21600 2160 3.3193597e-05 0.00016324138 2701
|
||||||
|
21800 2180 3.4729384e-05 0.00016124274 2701
|
||||||
|
22000 2200 3.6367594e-05 0.00016437457 2701
|
||||||
|
22200 2220 3.8095131e-05 0.00017015573 2701
|
||||||
|
22400 2240 3.9867003e-05 0.00017649465 2701
|
||||||
|
22600 2260 4.169511e-05 0.00018111374 2701
|
||||||
|
22800 2280 4.3566134e-05 0.00018104136 2701
|
||||||
|
23000 2300 4.5461538e-05 0.00017822707 2701
|
||||||
|
23200 2320 4.7377333e-05 0.00017285066 2701
|
||||||
|
23400 2340 4.9354403e-05 0.00016826524 2701
|
||||||
|
23600 2360 5.1399791e-05 0.00016517913 2701
|
||||||
|
23800 2380 5.3510931e-05 0.00016299649 2701
|
||||||
|
24000 2400 5.5681048e-05 0.00016256674 2701
|
||||||
|
24200 2420 5.7902429e-05 0.00016513449 2701
|
||||||
|
24400 2440 6.0216049e-05 0.00016895109 2701
|
||||||
|
24600 2460 6.270982e-05 0.00016946227 2701
|
||||||
|
24800 2480 6.5390117e-05 0.00016589426 2701
|
||||||
|
25000 2500 6.8121899e-05 0.00016241676 2701
|
||||||
|
25200 2520 7.0947331e-05 0.00015624292 2701
|
||||||
|
25400 2540 7.4304148e-05 0.0001449537 2701
|
||||||
|
25600 2560 7.7745077e-05 0.00013179658 2701
|
||||||
|
25800 2580 8.0739829e-05 0.00013098838 2701
|
||||||
|
26000 2600 8.3827874e-05 0.00014278841 2701
|
||||||
|
26200 2620 8.7060677e-05 0.00015381649 2701
|
||||||
|
26400 2640 9.0266508e-05 0.00016130999 2701
|
||||||
|
26600 2660 9.3339049e-05 0.00016908268 2701
|
||||||
|
26800 2680 9.6347013e-05 0.00016771087 2701
|
||||||
|
27000 2700 9.9294711e-05 0.00016577315 2701
|
||||||
|
27200 2720 0.00010230007 0.0001670893 2701
|
||||||
|
27400 2740 0.00010547172 0.00016569077 2701
|
||||||
|
27600 2760 0.00010872426 0.00016506303 2701
|
||||||
|
27800 2780 0.00011201844 0.00016482702 2701
|
||||||
|
28000 2800 0.00011532129 0.00016694886 2701
|
||||||
|
28200 2820 0.00011869854 0.00016163005 2701
|
||||||
|
28400 2840 0.00012209747 0.00015339281 2701
|
||||||
|
28600 2860 0.00012549322 0.00014765883 2701
|
||||||
|
28800 2880 0.00012898685 0.00014241765 2701
|
||||||
|
29000 2900 0.00013259039 0.00014215724 2701
|
||||||
|
29200 2920 0.00013628209 0.00014881155 2701
|
||||||
|
29400 2940 0.00014001213 0.00015671333 2701
|
||||||
|
29600 2960 0.00014379216 0.00016446215 2701
|
||||||
|
29800 2980 0.00014764687 0.0001639602 2701
|
||||||
|
30000 3000 0.00015142301 0.00015664816 2701
|
||||||
|
30200 3020 0.00015496407 0.00015545099 2701
|
||||||
|
30400 3040 0.00015797338 0.00015368625 2701
|
||||||
|
30600 3060 0.00016042141 0.00015679918 2701
|
||||||
|
30800 3080 0.00016244716 0.00016093678 2701
|
||||||
|
31000 3100 0.00016202247 0.00016066954 2701
|
||||||
|
31200 3120 0.0001613312 0.00015932059 2701
|
||||||
|
31400 3140 0.00016274961 0.00015988567 2701
|
||||||
|
31600 3160 0.00016541518 0.00015724809 2701
|
||||||
|
31800 3180 0.00016809362 0.00015498827 2701
|
||||||
|
32000 3200 0.00017067801 0.00014830489 2701
|
||||||
|
32200 3220 0.00017333906 0.00014371345 2701
|
||||||
|
32400 3240 0.0001759011 0.00014421259 2701
|
||||||
|
32600 3260 0.00017849952 0.00014228443 2701
|
||||||
|
32800 3280 0.00017801812 0.00014117391 2701
|
||||||
|
33000 3300 0.00017718857 0.00014644675 2701
|
||||||
|
33200 3320 0.00017833666 0.0001291286 2701
|
||||||
|
33400 3340 0.000178576 0.00014878558 2701
|
||||||
|
33600 3360 0.00017846711 0.00013905481 2701
|
||||||
|
33800 3380 0.00017822937 0.00015535996 2701
|
||||||
|
34000 3400 0.00017899663 0.00016094303 2701
|
||||||
|
34200 3420 0.00017924661 0.00015017553 2701
|
||||||
|
34400 3440 0.00018024855 0.00014723549 2701
|
||||||
|
34600 3460 0.00018143865 0.00013903131 2701
|
||||||
|
34800 3480 0.00018258173 0.00013722112 2701
|
||||||
|
35000 3500 0.00018404873 0.00014675949 2701
|
||||||
|
35200 3520 0.00018538521 0.00015108242 2701
|
||||||
|
35400 3540 0.00018669649 0.00014564852 2701
|
||||||
|
35600 3560 0.00018814608 0.00013762161 2701
|
||||||
|
35800 3580 0.00018967415 0.00014602307 2701
|
||||||
|
36000 3600 0.00019146735 0.000126909 2701
|
||||||
|
36200 3620 0.00019414036 0.00012384379 2701
|
||||||
|
36400 3640 0.00019613057 0.00011059573 2701
|
||||||
|
36600 3660 0.00019897104 0.00013621801 2701
|
||||||
|
36800 3680 0.00020169688 0.00013665462 2701
|
||||||
|
37000 3700 0.00020447655 0.00013929258 2701
|
||||||
|
37200 3720 0.00020711105 0.0001363895 2701
|
||||||
|
37400 3740 0.00021077854 0.00013610672 2701
|
||||||
|
37600 3760 0.00021303084 0.00015051235 2701
|
||||||
|
37800 3780 0.00021619561 0.00012664801 2701
|
||||||
|
38000 3800 0.0002194018 0.00012808247 2701
|
||||||
|
38200 3820 0.00022242646 0.0001360174 2701
|
||||||
|
38400 3840 0.00022531568 0.00013311221 2701
|
||||||
|
38600 3860 0.00022821731 0.00013523939 2701
|
||||||
|
38800 3880 0.000231228 0.00014090695 2701
|
||||||
|
39000 3900 0.00023404038 0.00013661835 2701
|
||||||
|
39200 3920 0.00023755044 0.00013659469 2701
|
||||||
|
39400 3940 0.00024009059 0.00012097907 2701
|
||||||
|
39600 3960 0.0002432098 9.7877876e-05 2701
|
||||||
|
39800 3980 0.00024475294 0.0001164688 2701
|
||||||
|
40000 4000 0.00024171274 0.00012432219 2701
|
||||||
|
Loop time of 192.659 on 4 procs for 40000 steps with 2701 atoms
|
||||||
|
|
||||||
|
Performance: 1793840.118 tau/day, 207.620 timesteps/s, 560.783 katom-step/s
|
||||||
|
99.6% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 16.881 | 24.402 | 30.74 | 114.6 | 12.67
|
||||||
|
Bond | 1.1126 | 1.8917 | 2.6935 | 43.3 | 0.98
|
||||||
|
Neigh | 35.387 | 35.508 | 35.625 | 1.5 | 18.43
|
||||||
|
Comm | 1.5499 | 1.6694 | 1.8006 | 7.4 | 0.87
|
||||||
|
Output | 0.99755 | 1.0072 | 1.0165 | 0.8 | 0.52
|
||||||
|
Modify | 120.6 | 127.43 | 135.54 | 54.8 | 66.14
|
||||||
|
Other | | 0.7553 | | | 0.39
|
||||||
|
|
||||||
|
Nlocal: 675.25 ave 1373 max 7 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Nghost: 103 ave 163 max 50 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 1 1
|
||||||
|
Neighs: 10509 ave 21592 max 126 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
FullNghs: 20367 ave 41981 max 141 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
|
||||||
|
Total # of neighbors = 81468
|
||||||
|
Ave neighs/atom = 30.162162
|
||||||
|
Ave special neighs/atom = 1.6593854
|
||||||
|
Neighbor list builds = 39932
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
Total wall time: 0:03:12
|
||||||
75
examples/rheo/poiseuille/in.rheo.poiseuille
Normal file
75
examples/rheo/poiseuille/in.rheo.poiseuille
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# ------ 2D Poiseuille flow ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style rheo
|
||||||
|
boundary p p p
|
||||||
|
comm_modify vel yes
|
||||||
|
|
||||||
|
# ------ Create simulation box ------ #
|
||||||
|
|
||||||
|
variable n equal 1.0
|
||||||
|
variable cut equal 3.0
|
||||||
|
|
||||||
|
region box block 0 20 -10 10 -0.01 0.01
|
||||||
|
create_box 2 box
|
||||||
|
lattice sq ${n}
|
||||||
|
|
||||||
|
region inner block INF INF -7.5 7.5 INF INF units box
|
||||||
|
region walls block INF INF -7.5 7.5 INF INF units box side out
|
||||||
|
|
||||||
|
create_atoms 2 region walls
|
||||||
|
create_atoms 1 region inner
|
||||||
|
|
||||||
|
group fluid type 1
|
||||||
|
group rig type 2
|
||||||
|
|
||||||
|
displace_atoms fluid random 0.1 0.1 0 135414 units box
|
||||||
|
|
||||||
|
# ------ Model parameters ------ #
|
||||||
|
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable zeta equal 1.0
|
||||||
|
variable kappa equal 1.0*${rho0}/${mp}
|
||||||
|
variable fext equal 1e-4/${n}
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable Dr equal 0.05*${cut}*${cs}
|
||||||
|
|
||||||
|
variable eta equal 0.1
|
||||||
|
variable gd0 equal 5e-4
|
||||||
|
variable npow equal 0.5
|
||||||
|
variable K equal 0.001
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
set group all rheo/rho ${rho0}
|
||||||
|
set group all rheo/status 0
|
||||||
|
set group rig rheo/status 1
|
||||||
|
|
||||||
|
timestep ${dt_max}
|
||||||
|
|
||||||
|
pair_style rheo ${cut} artificial/visc ${zeta} rho/damp ${Dr}
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
# ------ Fixes & computes ------ #
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 shift
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
#fix 2 all rheo/viscosity * power ${eta} ${gd0} ${K} ${npow}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 rig setforce 0.0 0.0 0.0
|
||||||
|
fix 5 fluid addforce ${fext} 0.0 0.0
|
||||||
|
fix 6 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press
|
||||||
|
|
||||||
|
#dump 1 all custom 200 atomDump id type x y vx vy fx fy c_rho
|
||||||
|
|
||||||
|
run 20000
|
||||||
|
|
||||||
288
examples/rheo/poiseuille/log.17Apr2024.poiseuille.g++.4
Normal file
288
examples/rheo/poiseuille/log.17Apr2024.poiseuille.g++.4
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_5May2020-18508-g3c0eaf6870-modified)
|
||||||
|
# ------ 2D Poiseuille flow ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style rheo
|
||||||
|
boundary p p p
|
||||||
|
comm_modify vel yes
|
||||||
|
|
||||||
|
# ------ Create simulation box ------ #
|
||||||
|
|
||||||
|
variable n equal 1.0
|
||||||
|
variable cut equal 3.0
|
||||||
|
|
||||||
|
region box block 0 20 -10 10 -0.01 0.01
|
||||||
|
create_box 2 box
|
||||||
|
Created orthogonal box = (0 -10 -0.01) to (20 10 0.01)
|
||||||
|
2 by 2 by 1 MPI processor grid
|
||||||
|
lattice sq ${n}
|
||||||
|
lattice sq 1
|
||||||
|
Lattice spacing in x,y,z = 1 1 1
|
||||||
|
|
||||||
|
region inner block INF INF -7.5 7.5 INF INF units box
|
||||||
|
region walls block INF INF -7.5 7.5 INF INF units box side out
|
||||||
|
|
||||||
|
create_atoms 2 region walls
|
||||||
|
Created 100 atoms
|
||||||
|
using lattice units in orthogonal box = (0 -10 -0.01) to (20 10 0.01)
|
||||||
|
create_atoms CPU = 0.000 seconds
|
||||||
|
create_atoms 1 region inner
|
||||||
|
Created 300 atoms
|
||||||
|
using lattice units in orthogonal box = (0 -10 -0.01) to (20 10 0.01)
|
||||||
|
create_atoms CPU = 0.000 seconds
|
||||||
|
|
||||||
|
group fluid type 1
|
||||||
|
300 atoms in group fluid
|
||||||
|
group rig type 2
|
||||||
|
100 atoms in group rig
|
||||||
|
|
||||||
|
displace_atoms fluid random 0.1 0.1 0 135414 units box
|
||||||
|
Displacing atoms ...
|
||||||
|
|
||||||
|
# ------ Model parameters ------ #
|
||||||
|
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable mp equal 1/${n}
|
||||||
|
variable mp equal 1/1
|
||||||
|
variable zeta equal 1.0
|
||||||
|
variable kappa equal 1.0*${rho0}/${mp}
|
||||||
|
variable kappa equal 1.0*1/${mp}
|
||||||
|
variable kappa equal 1.0*1/1
|
||||||
|
variable fext equal 1e-4/${n}
|
||||||
|
variable fext equal 1e-4/1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/1/3
|
||||||
|
variable Dr equal 0.05*${cut}*${cs}
|
||||||
|
variable Dr equal 0.05*3*${cs}
|
||||||
|
variable Dr equal 0.05*3*1
|
||||||
|
|
||||||
|
variable eta equal 0.1
|
||||||
|
variable gd0 equal 5e-4
|
||||||
|
variable npow equal 0.5
|
||||||
|
variable K equal 0.001
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
mass * 1
|
||||||
|
set group all rheo/rho ${rho0}
|
||||||
|
set group all rheo/rho 1
|
||||||
|
Setting atom values ...
|
||||||
|
400 settings made for rheo/rho
|
||||||
|
set group all rheo/status 0
|
||||||
|
Setting atom values ...
|
||||||
|
400 settings made for rheo/status
|
||||||
|
set group rig rheo/status 1
|
||||||
|
Setting atom values ...
|
||||||
|
100 settings made for rheo/status
|
||||||
|
|
||||||
|
timestep ${dt_max}
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style rheo ${cut} artificial/visc ${zeta} rho/damp ${Dr}
|
||||||
|
pair_style rheo 3 artificial/visc ${zeta} rho/damp ${Dr}
|
||||||
|
pair_style rheo 3 artificial/visc 1 rho/damp ${Dr}
|
||||||
|
pair_style rheo 3 artificial/visc 1 rho/damp 0.15
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
# ------ Fixes & computes ------ #
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} quintic 0 shift
|
||||||
|
fix 1 all rheo 3 quintic 0 shift
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 2 all rheo/viscosity * constant 0.1
|
||||||
|
#fix 2 all rheo/viscosity * power ${eta} ${gd0} ${K} ${npow}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 rig setforce 0.0 0.0 0.0
|
||||||
|
fix 5 fluid addforce ${fext} 0.0 0.0
|
||||||
|
fix 5 fluid addforce 0.0001 0.0 0.0
|
||||||
|
fix 6 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press
|
||||||
|
|
||||||
|
dump 1 all custom 200 atomDump id type x y vx vy fx fy c_rho
|
||||||
|
|
||||||
|
run 20000
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Your simulation uses code contributions which should be cited:
|
||||||
|
|
||||||
|
- @article{PalermoInPrep,
|
||||||
|
journal = {in prep},
|
||||||
|
title = {RHEO: A Hybrid Mesh-Free Model Framework for Dynamic Multi-Phase Flows},
|
||||||
|
year = {2024},
|
||||||
|
author = {Eric T. Palermo and Ki T. Wolf and Joel T. Clemmer and Thomas C. O'Connor},
|
||||||
|
}
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 13 13 1
|
||||||
|
4 neighbor lists, perpetual/occasional/extra = 4 0 0
|
||||||
|
(1) pair rheo, perpetual, half/full from (2)
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: halffull/newton
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(2) compute RHEO/KERNEL, perpetual
|
||||||
|
attributes: full, newton on
|
||||||
|
pair build: full/bin/atomonly
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(3) compute RHEO/GRAD, perpetual, copy from (1)
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(4) compute RHEO/VSHIFT, perpetual, copy from (1)
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.693 | 5.693 | 5.693 Mbytes
|
||||||
|
Step Time KinEng Press
|
||||||
|
0 0 0 0
|
||||||
|
200 20 1.2220462e-06 3.7383146e-05
|
||||||
|
400 40 4.345762e-06 7.5866885e-05
|
||||||
|
600 60 8.8559433e-06 0.00011353743
|
||||||
|
800 80 1.4370506e-05 0.00015135634
|
||||||
|
1000 100 2.0576198e-05 0.00018903722
|
||||||
|
1200 120 2.721926e-05 0.00022533997
|
||||||
|
1400 140 3.4099653e-05 0.00026016069
|
||||||
|
1600 160 4.1064175e-05 0.00029445207
|
||||||
|
1800 180 4.8001225e-05 0.00032893763
|
||||||
|
2000 200 5.4832849e-05 0.00036402396
|
||||||
|
2200 220 6.1508431e-05 0.00039945249
|
||||||
|
2400 240 6.8000141e-05 0.00043534411
|
||||||
|
2600 260 7.430136e-05 0.00046943441
|
||||||
|
2800 280 8.0415328e-05 0.00049807225
|
||||||
|
3000 300 8.6335032e-05 0.00051815375
|
||||||
|
3200 320 9.2021626e-05 0.00052618224
|
||||||
|
3400 340 9.7387936e-05 0.00051877918
|
||||||
|
3600 360 0.00010231526 0.00048650828
|
||||||
|
3800 380 0.00010676617 0.00044578079
|
||||||
|
4000 400 0.00011080098 0.00044777126
|
||||||
|
4200 420 0.00011448127 0.00047047629
|
||||||
|
4400 440 0.00011787852 0.00050280249
|
||||||
|
4600 460 0.00012106805 0.0005397213
|
||||||
|
4800 480 0.00012412056 0.00057885539
|
||||||
|
5000 500 0.0001271078 0.00061396896
|
||||||
|
5200 520 0.00013006637 0.00063981812
|
||||||
|
5400 540 0.00013295039 0.00065094073
|
||||||
|
5600 560 0.00013561487 0.00063918847
|
||||||
|
5800 580 0.00013791796 0.00059087656
|
||||||
|
6000 600 0.00013983422 0.00052171998
|
||||||
|
6200 620 0.00014144833 0.00050658002
|
||||||
|
6400 640 0.00014286538 0.0005248626
|
||||||
|
6600 660 0.00014417734 0.00055826606
|
||||||
|
6800 680 0.00014546931 0.00060063748
|
||||||
|
7000 700 0.00014682553 0.00064421411
|
||||||
|
7200 720 0.0001482833 0.00068252242
|
||||||
|
7400 740 0.00014977996 0.00070671308
|
||||||
|
7600 760 0.00015114829 0.00069774026
|
||||||
|
7800 780 0.0001522719 0.00064408311
|
||||||
|
8000 800 0.00015312897 0.00055977044
|
||||||
|
8200 820 0.00015375669 0.0005225573
|
||||||
|
8400 840 0.00015425683 0.00053833691
|
||||||
|
8600 860 0.00015471278 0.00057447427
|
||||||
|
8800 880 0.0001552059 0.00061980921
|
||||||
|
9000 900 0.00015581593 0.0006659836
|
||||||
|
9200 920 0.0001565564 0.00070813532
|
||||||
|
9400 940 0.00015733573 0.00073378551
|
||||||
|
9600 960 0.00015802107 0.00071560835
|
||||||
|
9800 980 0.00015855339 0.00065636189
|
||||||
|
10000 1000 0.00015890743 0.0005699855
|
||||||
|
10200 1020 0.00015908095 0.00053138971
|
||||||
|
10400 1040 0.00015915523 0.00054790708
|
||||||
|
10600 1060 0.00015921254 0.00058899454
|
||||||
|
10800 1080 0.00015934193 0.00063964906
|
||||||
|
11000 1100 0.00015959891 0.00069241358
|
||||||
|
11200 1120 0.0001599636 0.00073734651
|
||||||
|
11400 1140 0.00016036526 0.00074477329
|
||||||
|
11600 1160 0.00016075471 0.00071047555
|
||||||
|
11800 1180 0.00016109516 0.00064173183
|
||||||
|
12000 1200 0.00016131524 0.00055500553
|
||||||
|
12200 1220 0.00016136366 0.0005290215
|
||||||
|
12400 1240 0.0001613025 0.00055124296
|
||||||
|
12600 1260 0.00016123023 0.00059758627
|
||||||
|
12800 1280 0.00016123043 0.00065488735
|
||||||
|
13000 1300 0.00016132935 0.0007140876
|
||||||
|
13200 1320 0.00016152165 0.00074795629
|
||||||
|
13400 1340 0.00016180372 0.00074730778
|
||||||
|
13600 1360 0.00016216585 0.00071370995
|
||||||
|
13800 1380 0.0001625339 0.00065176323
|
||||||
|
14000 1400 0.00016274999 0.00057515371
|
||||||
|
14200 1420 0.00016271295 0.00055878258
|
||||||
|
14400 1440 0.00016249768 0.00058448193
|
||||||
|
14600 1460 0.00016223675 0.00063096229
|
||||||
|
14800 1480 0.00016201846 0.00068639548
|
||||||
|
15000 1500 0.00016190593 0.00072444357
|
||||||
|
15200 1520 0.00016194466 0.00073830636
|
||||||
|
15400 1540 0.00016216164 0.00072773256
|
||||||
|
15600 1560 0.00016253174 0.00069215481
|
||||||
|
15800 1580 0.00016290895 0.00063239408
|
||||||
|
16000 1600 0.00016306463 0.00057466273
|
||||||
|
16200 1620 0.00016292218 0.00057951567
|
||||||
|
16400 1640 0.00016261117 0.00061504156
|
||||||
|
16600 1660 0.00016225906 0.00066066637
|
||||||
|
16800 1680 0.00016197993 0.00069751908
|
||||||
|
17000 1700 0.0001618568 0.00072202303
|
||||||
|
17200 1720 0.00016194264 0.00073255034
|
||||||
|
17400 1740 0.00016225911 0.0007231031
|
||||||
|
17600 1760 0.00016270465 0.00068931224
|
||||||
|
17800 1780 0.00016304053 0.00062934836
|
||||||
|
18000 1800 0.00016302624 0.00058060272
|
||||||
|
18200 1820 0.00016274847 0.00058859513
|
||||||
|
18400 1840 0.00016236893 0.00061804803
|
||||||
|
18600 1860 0.00016202777 0.00065393237
|
||||||
|
18800 1880 0.0001618184 0.00068747094
|
||||||
|
19000 1900 0.0001618044 0.00071352541
|
||||||
|
19200 1920 0.00016204402 0.00072351769
|
||||||
|
19400 1940 0.00016249999 0.00071330322
|
||||||
|
19600 1960 0.00016297924 0.00067984167
|
||||||
|
19800 1980 0.00016317435 0.00061634142
|
||||||
|
20000 2000 0.00016301186 0.00057234115
|
||||||
|
Loop time of 15.6198 on 4 procs for 20000 steps with 400 atoms
|
||||||
|
|
||||||
|
Performance: 11062881.511 tau/day, 1280.426 timesteps/s, 512.170 katom-step/s
|
||||||
|
99.7% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 2.1979 | 2.4473 | 2.6992 | 15.7 | 15.67
|
||||||
|
Neigh | 0.024709 | 0.027006 | 0.029223 | 1.3 | 0.17
|
||||||
|
Comm | 0.4657 | 0.71686 | 0.9662 | 29.0 | 4.59
|
||||||
|
Output | 0.033698 | 0.036781 | 0.039359 | 1.1 | 0.24
|
||||||
|
Modify | 12.306 | 12.313 | 12.319 | 0.2 | 78.83
|
||||||
|
Other | | 0.07916 | | | 0.51
|
||||||
|
|
||||||
|
Nlocal: 100 ave 107 max 93 min
|
||||||
|
Histogram: 1 0 0 1 0 0 1 0 0 1
|
||||||
|
Nghost: 185.5 ave 192 max 179 min
|
||||||
|
Histogram: 1 0 0 1 0 0 1 0 0 1
|
||||||
|
Neighs: 1712 ave 1848 max 1598 min
|
||||||
|
Histogram: 1 0 1 0 0 1 0 0 0 1
|
||||||
|
FullNghs: 3424 ave 3682 max 3174 min
|
||||||
|
Histogram: 1 0 1 0 0 0 1 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 13696
|
||||||
|
Ave neighs/atom = 34.24
|
||||||
|
Neighbor list builds = 331
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
|
||||||
|
Total wall time: 0:00:15
|
||||||
65
examples/rheo/taylor-green/in.rheo.taylor.green
Normal file
65
examples/rheo/taylor-green/in.rheo.taylor.green
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# ------ 2D Taylor Green vortex ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style rheo
|
||||||
|
boundary p p p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
# ------ Create simulation box ------ #
|
||||||
|
|
||||||
|
variable n equal 1.0
|
||||||
|
variable cut equal 3.0
|
||||||
|
|
||||||
|
region box block 0 40 0 40 -0.01 0.01
|
||||||
|
create_box 1 box
|
||||||
|
lattice sq ${n}
|
||||||
|
|
||||||
|
create_atoms 1 region box
|
||||||
|
|
||||||
|
displace_atoms all random 0.1 0.1 0 135414 units box
|
||||||
|
|
||||||
|
# ------ Model parameters ------ #
|
||||||
|
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable zeta equal 1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable Dr equal 0.1*${cut}*${cs}
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
set group all rheo/rho ${rho0}
|
||||||
|
set group all rheo/status 0
|
||||||
|
|
||||||
|
variable u0 equal 0.05
|
||||||
|
variable uy atom ${u0}*sin(2*PI*x/lx)*cos(2*PI*y/ly)
|
||||||
|
variable ux atom -${u0}*sin(2*PI*y/ly)*cos(2*PI*x/ly)
|
||||||
|
variable d0 atom ${rho0}-${u0}*${u0}*${rho0}*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/${cs}/${cs}
|
||||||
|
|
||||||
|
velocity all set v_ux v_uy 0.0 units box
|
||||||
|
|
||||||
|
timestep ${dt_max}
|
||||||
|
|
||||||
|
pair_style rheo ${cut} artificial/visc ${zeta} rho/damp ${Dr}
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
# ------ Fixes & computes ------ #
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} RK1 8 shift
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press
|
||||||
|
|
||||||
|
#dump 1 all custom 200 atomDump id type x y vx vy fx fy c_rho
|
||||||
|
|
||||||
|
run 10000
|
||||||
224
examples/rheo/taylor-green/log.17Apr2024.taylor.green.g++.4
Normal file
224
examples/rheo/taylor-green/log.17Apr2024.taylor.green.g++.4
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_5May2020-18508-g3c0eaf6870-modified)
|
||||||
|
# ------ 2D Taylor Green vortex ------ #
|
||||||
|
|
||||||
|
dimension 2
|
||||||
|
units lj
|
||||||
|
atom_style rheo
|
||||||
|
boundary p p p
|
||||||
|
comm_modify vel yes
|
||||||
|
newton off
|
||||||
|
|
||||||
|
# ------ Create simulation box ------ #
|
||||||
|
|
||||||
|
variable n equal 1.0
|
||||||
|
variable cut equal 3.0
|
||||||
|
|
||||||
|
region box block 0 40 0 40 -0.01 0.01
|
||||||
|
create_box 1 box
|
||||||
|
Created orthogonal box = (0 0 -0.01) to (40 40 0.01)
|
||||||
|
2 by 2 by 1 MPI processor grid
|
||||||
|
lattice sq ${n}
|
||||||
|
lattice sq 1
|
||||||
|
Lattice spacing in x,y,z = 1 1 1
|
||||||
|
|
||||||
|
create_atoms 1 region box
|
||||||
|
Created 1600 atoms
|
||||||
|
using lattice units in orthogonal box = (0 0 -0.01) to (40 40 0.01)
|
||||||
|
create_atoms CPU = 0.001 seconds
|
||||||
|
|
||||||
|
displace_atoms all random 0.1 0.1 0 135414 units box
|
||||||
|
Displacing atoms ...
|
||||||
|
|
||||||
|
# ------ Model parameters ------ #
|
||||||
|
|
||||||
|
variable rho0 equal 1.0
|
||||||
|
variable mp equal ${rho0}/${n}
|
||||||
|
variable mp equal 1/${n}
|
||||||
|
variable mp equal 1/1
|
||||||
|
variable cs equal 1.0
|
||||||
|
variable eta equal 0.05
|
||||||
|
variable zeta equal 1
|
||||||
|
variable dt_max equal 0.1*${cut}/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/${cs}/3
|
||||||
|
variable dt_max equal 0.1*3/1/3
|
||||||
|
variable Dr equal 0.1*${cut}*${cs}
|
||||||
|
variable Dr equal 0.1*3*${cs}
|
||||||
|
variable Dr equal 0.1*3*1
|
||||||
|
|
||||||
|
mass * ${mp}
|
||||||
|
mass * 1
|
||||||
|
set group all rheo/rho ${rho0}
|
||||||
|
set group all rheo/rho 1
|
||||||
|
Setting atom values ...
|
||||||
|
1600 settings made for rheo/rho
|
||||||
|
set group all rheo/status 0
|
||||||
|
Setting atom values ...
|
||||||
|
1600 settings made for rheo/status
|
||||||
|
|
||||||
|
variable u0 equal 0.05
|
||||||
|
variable uy atom ${u0}*sin(2*PI*x/lx)*cos(2*PI*y/ly)
|
||||||
|
variable uy atom 0.05*sin(2*PI*x/lx)*cos(2*PI*y/ly)
|
||||||
|
variable ux atom -${u0}*sin(2*PI*y/ly)*cos(2*PI*x/ly)
|
||||||
|
variable ux atom -0.05*sin(2*PI*y/ly)*cos(2*PI*x/ly)
|
||||||
|
variable d0 atom ${rho0}-${u0}*${u0}*${rho0}*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/${cs}/${cs}
|
||||||
|
variable d0 atom 1-${u0}*${u0}*${rho0}*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/${cs}/${cs}
|
||||||
|
variable d0 atom 1-0.05*${u0}*${rho0}*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/${cs}/${cs}
|
||||||
|
variable d0 atom 1-0.05*0.05*${rho0}*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/${cs}/${cs}
|
||||||
|
variable d0 atom 1-0.05*0.05*1*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/${cs}/${cs}
|
||||||
|
variable d0 atom 1-0.05*0.05*1*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/1/${cs}
|
||||||
|
variable d0 atom 1-0.05*0.05*1*0.25*(cos(4*PI*x/lx)+cos(4*PI*y/ly))/1/1
|
||||||
|
|
||||||
|
velocity all set v_ux v_uy 0.0 units box
|
||||||
|
|
||||||
|
timestep ${dt_max}
|
||||||
|
timestep 0.1
|
||||||
|
|
||||||
|
pair_style rheo ${cut} artificial/visc ${zeta} rho/damp ${Dr}
|
||||||
|
pair_style rheo 3 artificial/visc ${zeta} rho/damp ${Dr}
|
||||||
|
pair_style rheo 3 artificial/visc 1 rho/damp ${Dr}
|
||||||
|
pair_style rheo 3 artificial/visc 1 rho/damp 0.3
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
# ------ Fixes & computes ------ #
|
||||||
|
|
||||||
|
fix 1 all rheo ${cut} RK1 8 shift
|
||||||
|
fix 1 all rheo 3 RK1 8 shift
|
||||||
|
fix 2 all rheo/viscosity * constant ${eta}
|
||||||
|
fix 2 all rheo/viscosity * constant 0.05
|
||||||
|
fix 3 all rheo/pressure * linear
|
||||||
|
fix 4 all enforce2d
|
||||||
|
|
||||||
|
compute rho all rheo/property/atom rho
|
||||||
|
|
||||||
|
# ------ Output & Run ------ #
|
||||||
|
|
||||||
|
thermo 200
|
||||||
|
thermo_style custom step time ke press
|
||||||
|
|
||||||
|
dump 1 all custom 200 atomDump id type x y vx vy fx fy c_rho
|
||||||
|
|
||||||
|
run 10000
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Your simulation uses code contributions which should be cited:
|
||||||
|
|
||||||
|
- @article{PalermoInPrep,
|
||||||
|
journal = {in prep},
|
||||||
|
title = {RHEO: A Hybrid Mesh-Free Model Framework for Dynamic Multi-Phase Flows},
|
||||||
|
year = {2024},
|
||||||
|
author = {Eric T. Palermo and Ki T. Wolf and Joel T. Clemmer and Thomas C. O'Connor},
|
||||||
|
}
|
||||||
|
|
||||||
|
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
|
||||||
|
|
||||||
|
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3.3
|
||||||
|
ghost atom cutoff = 3.3
|
||||||
|
binsize = 1.65, bins = 25 25 1
|
||||||
|
4 neighbor lists, perpetual/occasional/extra = 4 0 0
|
||||||
|
(1) pair rheo, perpetual, half/full from (2)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: halffull/newtoff
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(2) compute RHEO/KERNEL, perpetual
|
||||||
|
attributes: full, newton off
|
||||||
|
pair build: full/bin/atomonly
|
||||||
|
stencil: full/bin/2d
|
||||||
|
bin: standard
|
||||||
|
(3) compute RHEO/GRAD, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(4) compute RHEO/VSHIFT, perpetual, copy from (1)
|
||||||
|
attributes: half, newton off
|
||||||
|
pair build: copy
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 6.835 | 6.835 | 6.835 Mbytes
|
||||||
|
Step Time KinEng Press
|
||||||
|
0 0 0.00062497276 0.00062607301
|
||||||
|
200 20 0.00056200647 0.00056633785
|
||||||
|
400 40 0.00050570968 0.00051098771
|
||||||
|
600 60 0.00045586684 0.00046081672
|
||||||
|
800 80 0.00041124523 0.00041549607
|
||||||
|
1000 100 0.00037065341 0.00037412741
|
||||||
|
1200 120 0.00033391585 0.00033580899
|
||||||
|
1400 140 0.00030078316 0.00030057307
|
||||||
|
1600 160 0.00027093231 0.00026842603
|
||||||
|
1800 180 0.00024403239 0.00023839026
|
||||||
|
2000 200 0.0002197865 0.00021148941
|
||||||
|
2200 220 0.0001979269 0.00018659386
|
||||||
|
2400 240 0.00017822267 0.00016430442
|
||||||
|
2600 260 0.00016047141 0.00014408514
|
||||||
|
2800 280 0.00014448504 0.00012574125
|
||||||
|
3000 300 0.00013009159 0.00010869938
|
||||||
|
3200 320 0.00011713578 9.414951e-05
|
||||||
|
3400 340 0.00010547564 8.1900579e-05
|
||||||
|
3600 360 9.4982139e-05 7.1285649e-05
|
||||||
|
3800 380 8.5538983e-05 6.1571123e-05
|
||||||
|
4000 400 7.7040171e-05 5.3462572e-05
|
||||||
|
4200 420 6.9390317e-05 4.6338308e-05
|
||||||
|
4400 440 6.2503763e-05 3.9697323e-05
|
||||||
|
4600 460 5.6303766e-05 3.4234465e-05
|
||||||
|
4800 480 5.0721595e-05 3.0841338e-05
|
||||||
|
5000 500 4.5695301e-05 2.7788566e-05
|
||||||
|
5200 520 4.1169161e-05 2.5744409e-05
|
||||||
|
5400 540 3.7093059e-05 2.3912739e-05
|
||||||
|
5600 560 3.3421819e-05 2.2494185e-05
|
||||||
|
5800 580 3.0114735e-05 2.1594384e-05
|
||||||
|
6000 600 2.7135224e-05 2.1164421e-05
|
||||||
|
6200 620 2.4450446e-05 2.0979349e-05
|
||||||
|
6400 640 2.2030925e-05 2.0858567e-05
|
||||||
|
6600 660 1.9850196e-05 2.098115e-05
|
||||||
|
6800 680 1.7884553e-05 2.1134827e-05
|
||||||
|
7000 700 1.6112763e-05 2.1242242e-05
|
||||||
|
7200 720 1.4515783e-05 2.1312763e-05
|
||||||
|
7400 740 1.3076456e-05 2.1370947e-05
|
||||||
|
7600 760 1.1779327e-05 2.1332126e-05
|
||||||
|
7800 780 1.0610469e-05 2.1156562e-05
|
||||||
|
8000 800 9.5573298e-06 2.0898126e-05
|
||||||
|
8200 820 8.6085799e-06 2.0517958e-05
|
||||||
|
8400 840 7.7539888e-06 1.9841551e-05
|
||||||
|
8600 860 6.9843033e-06 1.9114769e-05
|
||||||
|
8800 880 6.2911575e-06 1.8362959e-05
|
||||||
|
9000 900 5.6669785e-06 1.7473404e-05
|
||||||
|
9200 920 5.1049208e-06 1.6452745e-05
|
||||||
|
9400 940 4.5987908e-06 1.5578629e-05
|
||||||
|
9600 960 4.1429972e-06 1.4427274e-05
|
||||||
|
9800 980 3.7324962e-06 1.3169649e-05
|
||||||
|
10000 1000 3.3627455e-06 1.1938723e-05
|
||||||
|
Loop time of 38.2006 on 4 procs for 10000 steps with 1600 atoms
|
||||||
|
|
||||||
|
Performance: 2261743.875 tau/day, 261.776 timesteps/s, 418.841 katom-step/s
|
||||||
|
99.7% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 8.2958 | 8.7273 | 9.3582 | 15.2 | 22.85
|
||||||
|
Neigh | 0.034282 | 0.035689 | 0.037115 | 0.7 | 0.09
|
||||||
|
Comm | 0.16788 | 0.17018 | 0.17278 | 0.4 | 0.45
|
||||||
|
Output | 0.066977 | 0.06882 | 0.071704 | 0.7 | 0.18
|
||||||
|
Modify | 28.483 | 28.793 | 28.962 | 3.6 | 75.37
|
||||||
|
Other | | 0.4053 | | | 1.06
|
||||||
|
|
||||||
|
Nlocal: 400 ave 402 max 399 min
|
||||||
|
Histogram: 2 0 0 1 0 0 0 0 0 1
|
||||||
|
Nghost: 307.25 ave 308 max 305 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 3
|
||||||
|
Neighs: 7618.25 ave 7697 max 7564 min
|
||||||
|
Histogram: 1 0 1 1 0 0 0 0 0 1
|
||||||
|
FullNghs: 13343 ave 13497 max 13258 min
|
||||||
|
Histogram: 1 1 1 0 0 0 0 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 53372
|
||||||
|
Ave neighs/atom = 33.3575
|
||||||
|
Neighbor list builds = 123
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:38
|
||||||
@ -46,8 +46,8 @@ QELIBS += -lgfortran -lmpi_mpifh
|
|||||||
|
|
||||||
# part 3: add-on libraries and main library for LAMMPS
|
# part 3: add-on libraries and main library for LAMMPS
|
||||||
sinclude ../../src/Makefile.package
|
sinclude ../../src/Makefile.package
|
||||||
LAMMPSFLAGS = $(shell pkgconf liblammps --cflags)
|
LAMMPSFLAGS = $(shell pkg-config --cflags liblammps)
|
||||||
LAMMPSLIB = $(shell pkgconf liblammps --libs)
|
LAMMPSLIB = $(shell pkg-config --libs liblammps)
|
||||||
|
|
||||||
# part 4: local QM/MM library and progams
|
# part 4: local QM/MM library and progams
|
||||||
SRC=pwqmmm.c libqmmm.c
|
SRC=pwqmmm.c libqmmm.c
|
||||||
|
|||||||
@ -101,7 +101,7 @@ Makefile.gfortran-cmake and make adjustments to the makefile variables
|
|||||||
according to the comments in the file. You probably need to adjust
|
according to the comments in the file. You probably need to adjust
|
||||||
the QETOPDIR variable to point to the location of your QE
|
the QETOPDIR variable to point to the location of your QE
|
||||||
compilation/installation.
|
compilation/installation.
|
||||||
Please also check that the command "pkgconf liblammps --libs" works.
|
Please also check that the command "pkg-config --libs liblammps" works.
|
||||||
Then you should be able to compile the QM/MM executable with:
|
Then you should be able to compile the QM/MM executable with:
|
||||||
|
|
||||||
make -f Makefile.gfortran-cmake pwqmmm.x
|
make -f Makefile.gfortran-cmake pwqmmm.x
|
||||||
|
|||||||
14
lib/rheo/Makefile.lammps
Normal file
14
lib/rheo/Makefile.lammps
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Settings that the LAMMPS build will import when this package is installed
|
||||||
|
|
||||||
|
ifeq ($(strip $(shell pkg-config --version)),)
|
||||||
|
# manual configuration w/o pkg-config/pkgconf
|
||||||
|
# change this to -I/path/to/your/lib/gsl/include/
|
||||||
|
rheo_SYSINC = -I../../lib/rheo/gsl/include/
|
||||||
|
|
||||||
|
# change this to -L/path/to/your/lib/gsl/lib/
|
||||||
|
rheo_SYSLIB = -L../../lib/rheo/gsl/lib/ -lgsl -lgslcblas
|
||||||
|
else
|
||||||
|
# autodetect GSL settings from pkg-config/pkgconf
|
||||||
|
rheo_SYSINC = $(shell pkg-config --cflags gsl)
|
||||||
|
rheo_SYSLIB = $(shell pkg-config --libs gsl)
|
||||||
|
endif
|
||||||
7
lib/rheo/README
Normal file
7
lib/rheo/README
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
This directory has a Makefile.lammps file with settings that allows LAMMPS to
|
||||||
|
dynamically link to the GSL library. This is required to use the RHEO package
|
||||||
|
in a LAMMPS input script. If you have the pkg-config command available, it
|
||||||
|
will automatically import the GSL settings. Otherwise they will have to be
|
||||||
|
added manually.
|
||||||
|
|
||||||
|
See the header of Makefile.lammps for more info.
|
||||||
5
src/.gitignore
vendored
5
src/.gitignore
vendored
@ -245,6 +245,9 @@
|
|||||||
/pair_tdpd.cpp
|
/pair_tdpd.cpp
|
||||||
/pair_tdpd.h
|
/pair_tdpd.h
|
||||||
|
|
||||||
|
/*rheo*.cpp
|
||||||
|
/*rheo*.h
|
||||||
|
|
||||||
/compute_grid.cpp
|
/compute_grid.cpp
|
||||||
/compute_grid.h
|
/compute_grid.h
|
||||||
/compute_grid_local.cpp
|
/compute_grid_local.cpp
|
||||||
@ -790,6 +793,8 @@
|
|||||||
/fix_acks2_reaxff.h
|
/fix_acks2_reaxff.h
|
||||||
/fix_adapt_fep.cpp
|
/fix_adapt_fep.cpp
|
||||||
/fix_adapt_fep.h
|
/fix_adapt_fep.h
|
||||||
|
/fix_add_heat.cpp
|
||||||
|
/fix_add_heat.h
|
||||||
/fix_addtorque.cpp
|
/fix_addtorque.cpp
|
||||||
/fix_addtorque.h
|
/fix_addtorque.h
|
||||||
/fix_append_atoms.cpp
|
/fix_append_atoms.cpp
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
#include "fix.h"
|
||||||
#include "fix_bond_history.h"
|
#include "fix_bond_history.h"
|
||||||
#include "fix_store_local.h"
|
#include "fix_store_local.h"
|
||||||
#include "fix_update_special_bonds.h"
|
#include "fix_update_special_bonds.h"
|
||||||
@ -53,10 +54,14 @@ BondBPM::BondBPM(LAMMPS *_lmp) :
|
|||||||
pack_choice(nullptr), output_data(nullptr)
|
pack_choice(nullptr), output_data(nullptr)
|
||||||
{
|
{
|
||||||
overlay_flag = 0;
|
overlay_flag = 0;
|
||||||
|
ignore_special_flag = 0;
|
||||||
prop_atom_flag = 0;
|
prop_atom_flag = 0;
|
||||||
break_flag = 1;
|
break_flag = 1;
|
||||||
nvalues = 0;
|
nvalues = 0;
|
||||||
|
|
||||||
|
nhistory = 0;
|
||||||
|
update_flag = 0;
|
||||||
|
|
||||||
r0_max_estimate = 0.0;
|
r0_max_estimate = 0.0;
|
||||||
max_stretch = 1.0;
|
max_stretch = 1.0;
|
||||||
|
|
||||||
@ -64,10 +69,10 @@ BondBPM::BondBPM(LAMMPS *_lmp) :
|
|||||||
// this is so final order of Modify:fix will conform to input script
|
// this is so final order of Modify:fix will conform to input script
|
||||||
// BondHistory technically only needs this if updateflag = 1
|
// BondHistory technically only needs this if updateflag = 1
|
||||||
|
|
||||||
id_fix_dummy = utils::strdup("BPM_DUMMY");
|
id_fix_dummy = utils::strdup(fmt::format("BPM_DUMMY_{}", instance_total));
|
||||||
modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy));
|
modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy));
|
||||||
|
|
||||||
id_fix_dummy2 = utils::strdup("BPM_DUMMY2");
|
id_fix_dummy2 = utils::strdup(fmt::format("BPM_DUMMY2_{}", instance_total));
|
||||||
modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy2));
|
modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy2));
|
||||||
|
|
||||||
if (lmp->citeme) lmp->citeme->add(cite_bpm);
|
if (lmp->citeme) lmp->citeme->add(cite_bpm);
|
||||||
@ -82,7 +87,7 @@ BondBPM::~BondBPM()
|
|||||||
if (id_fix_dummy) modify->delete_fix(id_fix_dummy);
|
if (id_fix_dummy) modify->delete_fix(id_fix_dummy);
|
||||||
if (id_fix_dummy2) modify->delete_fix(id_fix_dummy2);
|
if (id_fix_dummy2) modify->delete_fix(id_fix_dummy2);
|
||||||
if (id_fix_update) modify->delete_fix(id_fix_update);
|
if (id_fix_update) modify->delete_fix(id_fix_update);
|
||||||
if (id_fix_bond_history) modify->delete_fix(id_fix_bond_history);
|
if (fix_bond_history) modify->delete_fix(id_fix_bond_history);
|
||||||
if (id_fix_store_local) modify->delete_fix(id_fix_store_local);
|
if (id_fix_store_local) modify->delete_fix(id_fix_store_local);
|
||||||
if (id_fix_prop_atom) modify->delete_fix(id_fix_prop_atom);
|
if (id_fix_prop_atom) modify->delete_fix(id_fix_prop_atom);
|
||||||
|
|
||||||
@ -109,39 +114,46 @@ void BondBPM::init_style()
|
|||||||
fix_store_local->nvalues = nvalues;
|
fix_store_local->nvalues = nvalues;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overlay_flag) {
|
if (!ignore_special_flag) {
|
||||||
if (force->special_lj[1] != 1.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 ||
|
if (overlay_flag) {
|
||||||
force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0)
|
if (force->special_lj[1] != 1.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 ||
|
||||||
error->all(FLERR,
|
force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0)
|
||||||
"With overlay/pair yes, BPM bond styles require a value of 1.0 for all special_bonds weights");
|
error->all(FLERR,
|
||||||
if (id_fix_update) {
|
"With overlay/pair yes, BPM bond styles require a value of 1.0 for all special_bonds weights");
|
||||||
modify->delete_fix(id_fix_update);
|
if (id_fix_update) {
|
||||||
delete[] id_fix_update;
|
modify->delete_fix(id_fix_update);
|
||||||
id_fix_update = nullptr;
|
delete[] id_fix_update;
|
||||||
}
|
id_fix_update = nullptr;
|
||||||
} else {
|
}
|
||||||
// Require atoms know about all of their bonds and if they break
|
} else {
|
||||||
if (force->newton_bond && break_flag)
|
// Require atoms know about all of their bonds and if they break
|
||||||
error->all(FLERR, "With overlay/pair no, or break yes, BPM bond styles require Newton bond off");
|
if (force->newton_bond && break_flag)
|
||||||
|
error->all(FLERR, "With overlay/pair no, or break yes, BPM bond styles require Newton bond off");
|
||||||
|
|
||||||
// special lj must be 0 1 1 to censor pair forces between bonded particles
|
// special lj must be 0 1 1 to censor pair forces between bonded particles
|
||||||
if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0)
|
if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0)
|
||||||
error->all(FLERR,
|
error->all(FLERR,
|
||||||
"With overlay/pair no, BPM bond styles require special LJ weights = 0,1,1");
|
"With overlay/pair no, BPM bond styles require special LJ weights = 0,1,1");
|
||||||
// if bonds can break, special coulomb must be 1 1 1 to ensure all pairs are included in the
|
// if bonds can break, special coulomb must be 1 1 1 to ensure all pairs are included in the
|
||||||
// neighbor list and 1-3 and 1-4 special bond lists are skipped
|
// neighbor list and 1-3 and 1-4 special bond lists are skipped
|
||||||
if (break_flag && (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 ||
|
if (break_flag && (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 ||
|
||||||
force->special_coul[3] != 1.0))
|
force->special_coul[3] != 1.0))
|
||||||
error->all(FLERR,
|
error->all(FLERR,
|
||||||
"With overlay/pair no, and break yes, BPM bond styles requires special Coulomb weights = 1,1,1");
|
"With overlay/pair no, and break yes, BPM bond styles requires special Coulomb weights = 1,1,1");
|
||||||
|
|
||||||
if (id_fix_dummy && break_flag) {
|
if (id_fix_dummy && break_flag) {
|
||||||
id_fix_update = utils::strdup("BPM_UPDATE_SPECIAL_BONDS");
|
id_fix_update = utils::strdup("BPM_UPDATE_SPECIAL_BONDS");
|
||||||
fix_update_special_bonds = dynamic_cast<FixUpdateSpecialBonds *>(modify->replace_fix(
|
fix_update_special_bonds = dynamic_cast<FixUpdateSpecialBonds *>(modify->replace_fix(
|
||||||
id_fix_dummy, fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update), 1));
|
id_fix_dummy, fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update), 1));
|
||||||
delete[] id_fix_dummy;
|
delete[] id_fix_dummy;
|
||||||
id_fix_dummy = nullptr;
|
id_fix_dummy = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists
|
||||||
|
if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || force->special_coul[2] != 1.0 ||
|
||||||
|
force->special_coul[3] != 1.0)
|
||||||
|
error->all(FLERR, "Bond style bpm requires 1-3 and 1-4 special weights of 1.0");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (force->angle || force->dihedral || force->improper)
|
if (force->angle || force->dihedral || force->improper)
|
||||||
@ -149,10 +161,16 @@ void BondBPM::init_style()
|
|||||||
if (atom->molecular == 2)
|
if (atom->molecular == 2)
|
||||||
error->all(FLERR, "Bond style bpm cannot be used with atom style template");
|
error->all(FLERR, "Bond style bpm cannot be used with atom style template");
|
||||||
|
|
||||||
// special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists
|
// find all instances of bond history to delete/shift data
|
||||||
if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || force->special_coul[2] != 1.0 ||
|
// (bond hybrid may create multiple)
|
||||||
force->special_coul[3] != 1.0)
|
histories = modify->get_fix_by_style("BOND_HISTORY");
|
||||||
error->all(FLERR, "Bond style bpm requires 1-3 and 1-4 special weights of 1.0");
|
n_histories = histories.size();
|
||||||
|
|
||||||
|
// If a bond type isn't set, must be using bond style hybrid
|
||||||
|
hybrid_flag = 0;
|
||||||
|
for (int i = 1; i <= atom->nbondtypes; i++)
|
||||||
|
if (!setflag[i]) hybrid_flag = 1;
|
||||||
|
fix_bond_history->setflag = setflag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -269,6 +287,14 @@ void BondBPM::settings(int narg, char **arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set up necessary history fix
|
||||||
|
if (!fix_bond_history) {
|
||||||
|
fix_bond_history = dynamic_cast<FixBondHistory *>(modify->replace_fix(
|
||||||
|
id_fix_dummy2, fmt::format("{} all BOND_HISTORY {} {}", id_fix_bond_history, update_flag, nhistory), 1));
|
||||||
|
delete[] id_fix_dummy2;
|
||||||
|
id_fix_dummy2 = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -385,12 +411,15 @@ void BondBPM::process_broken(int i, int j)
|
|||||||
|
|
||||||
if (i < nlocal) {
|
if (i < nlocal) {
|
||||||
for (m = 0; m < num_bond[i]; m++) {
|
for (m = 0; m < num_bond[i]; m++) {
|
||||||
if (bond_atom[i][m] == tag[j]) {
|
if (bond_atom[i][m] == tag[j] && setflag[bond_type[i][m]]) {
|
||||||
n = num_bond[i];
|
n = num_bond[i];
|
||||||
bond_type[i][m] = bond_type[i][n - 1];
|
bond_type[i][m] = bond_type[i][n - 1];
|
||||||
bond_atom[i][m] = bond_atom[i][n - 1];
|
bond_atom[i][m] = bond_atom[i][n - 1];
|
||||||
fix_bond_history->shift_history(i, m, n - 1);
|
for (auto &ihistory: histories) {
|
||||||
fix_bond_history->delete_history(i, n - 1);
|
auto fix_bond_history2 = dynamic_cast<FixBondHistory *> (ihistory);
|
||||||
|
fix_bond_history2->shift_history(i, m, n - 1);
|
||||||
|
fix_bond_history2->delete_history(i, n - 1);
|
||||||
|
}
|
||||||
num_bond[i]--;
|
num_bond[i]--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -399,12 +428,15 @@ void BondBPM::process_broken(int i, int j)
|
|||||||
|
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
for (m = 0; m < num_bond[j]; m++) {
|
for (m = 0; m < num_bond[j]; m++) {
|
||||||
if (bond_atom[j][m] == tag[i]) {
|
if (bond_atom[j][m] == tag[i] && setflag[bond_type[j][m]]) {
|
||||||
n = num_bond[j];
|
n = num_bond[j];
|
||||||
bond_type[j][m] = bond_type[j][n - 1];
|
bond_type[j][m] = bond_type[j][n - 1];
|
||||||
bond_atom[j][m] = bond_atom[j][n - 1];
|
bond_atom[j][m] = bond_atom[j][n - 1];
|
||||||
fix_bond_history->shift_history(j, m, n - 1);
|
for (auto &ihistory: histories) {
|
||||||
fix_bond_history->delete_history(j, n - 1);
|
auto fix_bond_history2 = dynamic_cast<FixBondHistory *> (ihistory);
|
||||||
|
fix_bond_history2->shift_history(j, m, n - 1);
|
||||||
|
fix_bond_history2->delete_history(j, n - 1);
|
||||||
|
}
|
||||||
num_bond[j]--;
|
num_bond[j]--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,8 +16,12 @@
|
|||||||
|
|
||||||
#include "bond.h"
|
#include "bond.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace LAMMPS_NS {
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class Fix;
|
||||||
|
|
||||||
class BondBPM : public Bond {
|
class BondBPM : public Bond {
|
||||||
public:
|
public:
|
||||||
BondBPM(class LAMMPS *);
|
BondBPM(class LAMMPS *);
|
||||||
@ -34,7 +38,7 @@ class BondBPM : public Bond {
|
|||||||
protected:
|
protected:
|
||||||
double r0_max_estimate;
|
double r0_max_estimate;
|
||||||
double max_stretch;
|
double max_stretch;
|
||||||
int store_local_freq;
|
int store_local_freq, nhistory, update_flag, hybrid_flag;
|
||||||
|
|
||||||
std::vector<int> leftover_iarg;
|
std::vector<int> leftover_iarg;
|
||||||
|
|
||||||
@ -50,9 +54,12 @@ class BondBPM : public Bond {
|
|||||||
FnPtrPack *pack_choice; // ptrs to pack functions
|
FnPtrPack *pack_choice; // ptrs to pack functions
|
||||||
double *output_data;
|
double *output_data;
|
||||||
|
|
||||||
int prop_atom_flag, nvalues, overlay_flag, break_flag;
|
int prop_atom_flag, nvalues, overlay_flag, break_flag, ignore_special_flag;
|
||||||
int index_x_ref, index_y_ref, index_z_ref;
|
int index_x_ref, index_y_ref, index_z_ref;
|
||||||
|
|
||||||
|
int n_histories;
|
||||||
|
std::vector<Fix *> histories;
|
||||||
|
|
||||||
void pack_id1(int, int, int);
|
void pack_id1(int, int, int);
|
||||||
void pack_id2(int, int, int);
|
void pack_id2(int, int, int);
|
||||||
void pack_time(int, int, int);
|
void pack_time(int, int, int);
|
||||||
|
|||||||
@ -52,6 +52,9 @@ BondBPMRotational::BondBPMRotational(LAMMPS *_lmp) :
|
|||||||
smooth_flag = 1;
|
smooth_flag = 1;
|
||||||
normalize_flag = 0;
|
normalize_flag = 0;
|
||||||
|
|
||||||
|
nhistory = 4;
|
||||||
|
id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL");
|
||||||
|
|
||||||
single_extra = 7;
|
single_extra = 7;
|
||||||
svector = new double[7];
|
svector = new double[7];
|
||||||
}
|
}
|
||||||
@ -458,6 +461,9 @@ void BondBPMRotational::compute(int eflag, int vflag)
|
|||||||
store_data();
|
store_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hybrid_flag)
|
||||||
|
fix_bond_history->compress_history();
|
||||||
|
|
||||||
int i1, i2, itmp, n, type;
|
int i1, i2, itmp, n, type;
|
||||||
double r[3], r0[3], rhat[3];
|
double r[3], r0[3], rhat[3];
|
||||||
double rsq, r0_mag, r_mag, r_mag_inv;
|
double rsq, r0_mag, r_mag, r_mag_inv;
|
||||||
@ -563,6 +569,9 @@ void BondBPMRotational::compute(int eflag, int vflag)
|
|||||||
ev_tally_xyz(i1, i2, nlocal, newton_bond, 0.0, -force1on2[0] * smooth, -force1on2[1] * smooth,
|
ev_tally_xyz(i1, i2, nlocal, newton_bond, 0.0, -force1on2[0] * smooth, -force1on2[1] * smooth,
|
||||||
-force1on2[2] * smooth, r[0], r[1], r[2]);
|
-force1on2[2] * smooth, r[0], r[1], r[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hybrid_flag)
|
||||||
|
fix_bond_history->uncompress_history();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -652,14 +661,6 @@ void BondBPMRotational::init_style()
|
|||||||
|
|
||||||
if (domain->dimension == 2)
|
if (domain->dimension == 2)
|
||||||
error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use");
|
error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use");
|
||||||
|
|
||||||
if (!id_fix_bond_history) {
|
|
||||||
id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL");
|
|
||||||
fix_bond_history = dynamic_cast<FixBondHistory *>(modify->replace_fix(
|
|
||||||
id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history), 1));
|
|
||||||
delete[] id_fix_dummy2;
|
|
||||||
id_fix_dummy2 = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -39,6 +39,9 @@ BondBPMSpring::BondBPMSpring(LAMMPS *_lmp) :
|
|||||||
smooth_flag = 1;
|
smooth_flag = 1;
|
||||||
normalize_flag = 0;
|
normalize_flag = 0;
|
||||||
|
|
||||||
|
nhistory = 1;
|
||||||
|
id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING");
|
||||||
|
|
||||||
single_extra = 1;
|
single_extra = 1;
|
||||||
svector = new double[1];
|
svector = new double[1];
|
||||||
}
|
}
|
||||||
@ -137,6 +140,9 @@ void BondBPMSpring::compute(int eflag, int vflag)
|
|||||||
store_data();
|
store_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hybrid_flag)
|
||||||
|
fix_bond_history->compress_history();
|
||||||
|
|
||||||
int i1, i2, itmp, n, type;
|
int i1, i2, itmp, n, type;
|
||||||
double delx, dely, delz, delvx, delvy, delvz;
|
double delx, dely, delz, delvx, delvy, delvz;
|
||||||
double e, rsq, r, r0, rinv, smooth, fbond, dot;
|
double e, rsq, r, r0, rinv, smooth, fbond, dot;
|
||||||
@ -226,6 +232,9 @@ void BondBPMSpring::compute(int eflag, int vflag)
|
|||||||
|
|
||||||
if (evflag) ev_tally(i1, i2, nlocal, newton_bond, 0.0, fbond, delx, dely, delz);
|
if (evflag) ev_tally(i1, i2, nlocal, newton_bond, 0.0, fbond, delx, dely, delz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hybrid_flag)
|
||||||
|
fix_bond_history->uncompress_history();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -283,14 +292,6 @@ void BondBPMSpring::init_style()
|
|||||||
|
|
||||||
if (comm->ghost_velocity == 0)
|
if (comm->ghost_velocity == 0)
|
||||||
error->all(FLERR, "Bond bpm/spring requires ghost atoms store velocity");
|
error->all(FLERR, "Bond bpm/spring requires ghost atoms store velocity");
|
||||||
|
|
||||||
if (!id_fix_bond_history) {
|
|
||||||
id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING");
|
|
||||||
fix_bond_history = dynamic_cast<FixBondHistory *>(modify->replace_fix(
|
|
||||||
id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history), 1));
|
|
||||||
delete[] id_fix_dummy2;
|
|
||||||
id_fix_dummy2 = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -14,7 +14,9 @@
|
|||||||
#include "compute_nbond_atom.h"
|
#include "compute_nbond_atom.h"
|
||||||
|
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
|
#include "atom_vec.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
|
#include "error.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
|
||||||
@ -27,6 +29,21 @@ ComputeNBondAtom::ComputeNBondAtom(LAMMPS *_lmp, int narg, char **arg) :
|
|||||||
{
|
{
|
||||||
if (narg < 3) utils::missing_cmd_args(FLERR, "compute nbond/atom", error);
|
if (narg < 3) utils::missing_cmd_args(FLERR, "compute nbond/atom", error);
|
||||||
|
|
||||||
|
if (atom->avec->bonds_allow == 0)
|
||||||
|
error->all(FLERR,"Compute nbond/atom used in system without bonds");
|
||||||
|
|
||||||
|
btype = -1;
|
||||||
|
int iarg = 3;
|
||||||
|
while (iarg < narg) {
|
||||||
|
if (strcmp(arg[iarg], "bond/type") == 0) {
|
||||||
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute nbond/atom bond/type", error);
|
||||||
|
btype = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
|
iarg += 2;
|
||||||
|
} else {
|
||||||
|
error->all(FLERR, "Unknown compute nbond/atom command {}", arg[iarg]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
peratom_flag = 1;
|
peratom_flag = 1;
|
||||||
size_peratom_cols = 0;
|
size_peratom_cols = 0;
|
||||||
comm_reverse = 1;
|
comm_reverse = 1;
|
||||||
@ -77,6 +94,7 @@ void ComputeNBondAtom::compute_peratom()
|
|||||||
for (i = 0; i < nlocal; i++) {
|
for (i = 0; i < nlocal; i++) {
|
||||||
for (j = 0; j < num_bond[i]; j++) {
|
for (j = 0; j < num_bond[i]; j++) {
|
||||||
if (bond_type[i][j] <= 0) continue;
|
if (bond_type[i][j] <= 0) continue;
|
||||||
|
if (btype != -1 && bond_type[i][j] != btype) continue;
|
||||||
|
|
||||||
k = atom->map(bond_atom[i][j]);
|
k = atom->map(bond_atom[i][j]);
|
||||||
if (k < 0) continue;
|
if (k < 0) continue;
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class ComputeNBondAtom : public Compute {
|
|||||||
double memory_usage() override;
|
double memory_usage() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int nmax;
|
int nmax, btype;
|
||||||
double *nbond;
|
double *nbond;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -90,11 +90,13 @@ void FixUpdateSpecialBonds::pre_exchange()
|
|||||||
for (auto const &it : broken_pairs) {
|
for (auto const &it : broken_pairs) {
|
||||||
tagi = it.first;
|
tagi = it.first;
|
||||||
tagj = it.second;
|
tagj = it.second;
|
||||||
|
|
||||||
i = atom->map(tagi);
|
i = atom->map(tagi);
|
||||||
j = atom->map(tagj);
|
j = atom->map(tagj);
|
||||||
|
|
||||||
// remove i from special bond list for atom j and vice versa
|
// remove i from special bond list for atom j and vice versa
|
||||||
// ignore n2, n3 since 1-3, 1-4 special factors required to be 1.0
|
// ignore n2, n3 since 1-3, 1-4 special factors required to be 1.0
|
||||||
|
// assume ghosts don't need special information
|
||||||
if (i < nlocal) {
|
if (i < nlocal) {
|
||||||
slist = special[i];
|
slist = special[i];
|
||||||
n1 = nspecial[i][0];
|
n1 = nspecial[i][0];
|
||||||
@ -126,19 +128,24 @@ void FixUpdateSpecialBonds::pre_exchange()
|
|||||||
|
|
||||||
// add i to special bond list for atom j and vice versa
|
// add i to special bond list for atom j and vice versa
|
||||||
// ignore n2, n3 since 1-3, 1-4 special factors required to be 1.0
|
// ignore n2, n3 since 1-3, 1-4 special factors required to be 1.0
|
||||||
n1 = nspecial[i][0];
|
// assume ghosts don't need special information
|
||||||
if (n1 >= atom->maxspecial)
|
if (i < nlocal) {
|
||||||
error->one(FLERR, "Special list size exceeded in fix update/special/bond");
|
n1 = nspecial[i][0];
|
||||||
special[i][n1] = tagj;
|
if (n1 >= atom->maxspecial)
|
||||||
nspecial[i][0] += 1;
|
error->one(FLERR, "Special list size exceeded for atom {}", tagi);
|
||||||
nspecial[i][1] = nspecial[i][2] = nspecial[i][0];
|
special[i][n1] = tagj;
|
||||||
|
nspecial[i][0] += 1;
|
||||||
|
nspecial[i][1] = nspecial[i][2] = nspecial[i][0];
|
||||||
|
}
|
||||||
|
|
||||||
n1 = nspecial[j][0];
|
if (j < nlocal) {
|
||||||
if (n1 >= atom->maxspecial)
|
n1 = nspecial[j][0];
|
||||||
error->one(FLERR, "Special list size exceeded in fix update/special/bond");
|
if (n1 >= atom->maxspecial)
|
||||||
special[j][n1] = tagi;
|
error->one(FLERR, "Special list size exceeded for atom {}", tagj);
|
||||||
nspecial[j][0] += 1;
|
special[j][n1] = tagi;
|
||||||
nspecial[j][1] = nspecial[j][2] = nspecial[j][0];
|
nspecial[j][0] += 1;
|
||||||
|
nspecial[j][1] = nspecial[j][2] = nspecial[j][0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
broken_pairs.clear();
|
broken_pairs.clear();
|
||||||
@ -162,7 +169,7 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/)
|
|||||||
tagint *tag = atom->tag;
|
tagint *tag = atom->tag;
|
||||||
|
|
||||||
// In theory could communicate a list of broken bonds to neighboring processors here
|
// In theory could communicate a list of broken bonds to neighboring processors here
|
||||||
// to remove restriction that users use Newton bond off
|
// to remove restriction on Newton bond off
|
||||||
|
|
||||||
for (int ilist = 0; ilist < neighbor->nlist; ilist++) {
|
for (int ilist = 0; ilist < neighbor->nlist; ilist++) {
|
||||||
list = neighbor->lists[ilist];
|
list = neighbor->lists[ilist];
|
||||||
|
|||||||
@ -79,6 +79,9 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
potential_i(nullptr), potential_iele(nullptr)
|
potential_i(nullptr), potential_iele(nullptr)
|
||||||
{
|
{
|
||||||
if (lmp->citeme) lmp->citeme->add(cite_fix_electrode);
|
if (lmp->citeme) lmp->citeme->add(cite_fix_electrode);
|
||||||
|
if (atom->map_style == Atom::MAP_NONE)
|
||||||
|
error->all(FLERR, "Fix {} requires an atom map, see atom_modify", style);
|
||||||
|
|
||||||
// fix.h output flags
|
// fix.h output flags
|
||||||
scalar_flag = 1;
|
scalar_flag = 1;
|
||||||
vector_flag = 1;
|
vector_flag = 1;
|
||||||
@ -86,6 +89,9 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
extvector = 0;
|
extvector = 0;
|
||||||
extarray = 0;
|
extarray = 0;
|
||||||
|
|
||||||
|
virial_global_flag = 1; // use virials of this fix
|
||||||
|
thermo_virial = 1; // set vflags for v_tally
|
||||||
|
|
||||||
bool default_algo = true;
|
bool default_algo = true;
|
||||||
algo = Algo::MATRIX_INV;
|
algo = Algo::MATRIX_INV;
|
||||||
matrix_algo = true;
|
matrix_algo = true;
|
||||||
@ -123,7 +129,8 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
} else
|
} else
|
||||||
group_psi_const[0] = utils::numeric(FLERR, arg[3], false, lmp);
|
group_psi_const[0] = utils::numeric(FLERR, arg[3], false, lmp);
|
||||||
char *eta_str = arg[4];
|
char *eta_str = arg[4];
|
||||||
eta = utils::numeric(FLERR, eta_str, false, lmp);
|
bool etanull = (strcmp(eta_str, "NULL") == 0);
|
||||||
|
if (!etanull) eta = utils::numeric(FLERR, eta_str, false, lmp);
|
||||||
int iarg = 5;
|
int iarg = 5;
|
||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if ((strcmp(arg[iarg], "couple") == 0)) {
|
if ((strcmp(arg[iarg], "couple") == 0)) {
|
||||||
@ -214,7 +221,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
qtotal_var_style = VarStyle::CONST;
|
qtotal_var_style = VarStyle::CONST;
|
||||||
}
|
}
|
||||||
} else if ((strcmp(arg[iarg], "eta") == 0)) {
|
} else if ((strcmp(arg[iarg], "eta") == 0)) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Need two arguments after eta command");
|
if (iarg + 2 > narg) error->all(FLERR, "Need one argument after eta command");
|
||||||
etaflag = true;
|
etaflag = true;
|
||||||
int is_double, cols, ghost;
|
int is_double, cols, ghost;
|
||||||
eta_index = atom->find_custom_ghost(arg[++iarg] + 2, is_double, cols, ghost);
|
eta_index = atom->find_custom_ghost(arg[++iarg] + 2, is_double, cols, ghost);
|
||||||
@ -240,6 +247,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (qtotal_var_style != VarStyle::UNSET) {
|
if (qtotal_var_style != VarStyle::UNSET) {
|
||||||
if (symm) error->all(FLERR, "{} cannot use qtotal keyword with symm on", this->style);
|
if (symm) error->all(FLERR, "{} cannot use qtotal keyword with symm on", this->style);
|
||||||
}
|
}
|
||||||
|
if (etanull && !etaflag) error->all(FLERR, "If eta is NULL the eta keyword must be used");
|
||||||
|
|
||||||
// computatonal potential
|
// computatonal potential
|
||||||
group_psi = std::vector<double>(groups.size());
|
group_psi = std::vector<double>(groups.size());
|
||||||
@ -346,7 +354,7 @@ int FixElectrodeConp::modify_param(int narg, char **arg)
|
|||||||
MPI_Allreduce(MPI_IN_PLACE, &in_ele, 1, MPI_INT, MPI_SUM, world);
|
MPI_Allreduce(MPI_IN_PLACE, &in_ele, 1, MPI_INT, MPI_SUM, world);
|
||||||
if (in_ele == 0) error->all(FLERR, "No atoms of type in electrode");
|
if (in_ele == 0) error->all(FLERR, "No atoms of type in electrode");
|
||||||
MPI_Allreduce(MPI_IN_PLACE, ¬_in_ele, 1, MPI_INT, MPI_SUM, world);
|
MPI_Allreduce(MPI_IN_PLACE, ¬_in_ele, 1, MPI_INT, MPI_SUM, world);
|
||||||
if (not_in_ele)
|
if (not_in_ele && (comm->me == 0))
|
||||||
error->warning(FLERR,
|
error->warning(FLERR,
|
||||||
"Not all atoms of type in electrode; Thomas-Fermi parameters will be ignored "
|
"Not all atoms of type in electrode; Thomas-Fermi parameters will be ignored "
|
||||||
"for electrolyte");
|
"for electrolyte");
|
||||||
@ -427,12 +435,11 @@ void FixElectrodeConp::init()
|
|||||||
}
|
}
|
||||||
if (comm->me == 0)
|
if (comm->me == 0)
|
||||||
for (char *fix_id : integrate_ids)
|
for (char *fix_id : integrate_ids)
|
||||||
error->warning(
|
error->warning(FLERR,
|
||||||
FLERR,
|
"Electrode atoms are integrated by fix {}, but fix electrode is using a "
|
||||||
"Electrode atoms are integrated by fix {}, but fix electrode is using a matrix method. "
|
"matrix method. For mobile electrodes use the conjugate gradient algorithm "
|
||||||
"For "
|
"without matrix ('algo cg').",
|
||||||
"mobile electrodes use the conjugate gradient algorithm without matrix ('algo cg').",
|
fix_id);
|
||||||
fix_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for package intel
|
// check for package intel
|
||||||
@ -478,7 +485,7 @@ void FixElectrodeConp::post_constructor()
|
|||||||
input->variable->set(fmt::format("{} equal f_{}[{}]", var_vtop, fixname, 1 + top_group));
|
input->variable->set(fmt::format("{} equal f_{}[{}]", var_vtop, fixname, 1 + top_group));
|
||||||
input->variable->set(fmt::format("{} equal (v_{}-v_{})/lz", var_efield, var_vbot, var_vtop));
|
input->variable->set(fmt::format("{} equal (v_{}-v_{})/lz", var_efield, var_vbot, var_vtop));
|
||||||
// check for other efields and warn if found
|
// check for other efields and warn if found
|
||||||
if (modify->get_fix_by_style("^efield").size() > 0 && comm->me == 0)
|
if ((modify->get_fix_by_style("^efield").size() > 0) && (comm->me == 0))
|
||||||
error->warning(FLERR, "Other efield fixes found -- please make sure this is intended!");
|
error->warning(FLERR, "Other efield fixes found -- please make sure this is intended!");
|
||||||
// call fix command:
|
// call fix command:
|
||||||
// fix [varstem]_efield all efield 0.0 0.0 [var_vdiff]/lz
|
// fix [varstem]_efield all efield 0.0 0.0 [var_vdiff]/lz
|
||||||
@ -638,13 +645,14 @@ void FixElectrodeConp::setup_post_neighbor()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixElectrodeConp::setup_pre_reverse(int eflag, int /*vflag*/)
|
void FixElectrodeConp::setup_pre_reverse(int eflag, int vflag)
|
||||||
{
|
{
|
||||||
|
if (pair->did_tally_callback() && (comm->me == 0))
|
||||||
|
error->warning(FLERR, "Computation of virials in fix {} is incompatible with TALLY package", style);
|
||||||
// correct forces for initial timestep
|
// correct forces for initial timestep
|
||||||
gausscorr(eflag, true);
|
ev_init(eflag, vflag);
|
||||||
|
gausscorr(eflag, vflag, true);
|
||||||
self_energy(eflag);
|
self_energy(eflag);
|
||||||
// potential_energy(eflag); // not always part of the energy, depending on ensemble, therefore
|
|
||||||
// removed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -674,7 +682,7 @@ void FixElectrodeConp::invert()
|
|||||||
void FixElectrodeConp::symmetrize()
|
void FixElectrodeConp::symmetrize()
|
||||||
{
|
{
|
||||||
// S matrix to enforce charge neutrality constraint
|
// S matrix to enforce charge neutrality constraint
|
||||||
if (read_inv && comm->me == 0)
|
if (read_inv && (comm->me == 0))
|
||||||
error->warning(FLERR,
|
error->warning(FLERR,
|
||||||
"Symmetrizing matrix from file. Make sure the provided matrix has not been "
|
"Symmetrizing matrix from file. Make sure the provided matrix has not been "
|
||||||
"symmetrized yet.");
|
"symmetrized yet.");
|
||||||
@ -755,11 +763,11 @@ void FixElectrodeConp::setup_pre_exchange() // create_taglist
|
|||||||
// if memory_usage > 0.5 GiB, warn with expected usage
|
// if memory_usage > 0.5 GiB, warn with expected usage
|
||||||
double mem_needed = memory_usage();
|
double mem_needed = memory_usage();
|
||||||
mem_needed /= (1024 * 1024 * 1024); // convert to GiB
|
mem_needed /= (1024 * 1024 * 1024); // convert to GiB
|
||||||
if (mem_needed > 0.5 && comm->me == 0)
|
if ((mem_needed > 0.5) && (comm->me == 0))
|
||||||
error->warning(FLERR,
|
error->warning(FLERR,
|
||||||
"Please ensure there is sufficient memory for fix electrode "
|
"Please ensure there is sufficient memory for fix {} "
|
||||||
"(anticipated usage is at least {:.1f} GiB per proc)",
|
"(anticipated usage is at least {:.1f} GiB per proc)",
|
||||||
mem_needed);
|
style, mem_needed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -771,12 +779,11 @@ void FixElectrodeConp::pre_force(int)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixElectrodeConp::pre_reverse(int eflag, int /*vflag*/)
|
void FixElectrodeConp::pre_reverse(int eflag, int vflag)
|
||||||
{
|
{
|
||||||
gausscorr(eflag, true);
|
ev_init(eflag, vflag);
|
||||||
|
gausscorr(eflag, vflag, true);
|
||||||
self_energy(eflag);
|
self_energy(eflag);
|
||||||
//potential_energy(eflag); // not always part of the energy, depending on ensemble, therefore
|
|
||||||
// removed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -924,7 +931,7 @@ void FixElectrodeConp::update_charges()
|
|||||||
dot_old = dot_new;
|
dot_old = dot_new;
|
||||||
}
|
}
|
||||||
recompute_potential(std::move(b), q_local);
|
recompute_potential(std::move(b), q_local);
|
||||||
if (delta > cg_threshold && comm->me == 0) error->warning(FLERR, "CG threshold not reached");
|
if ((delta > cg_threshold) && (comm->me == 0)) error->warning(FLERR, "CG threshold not reached");
|
||||||
} else {
|
} else {
|
||||||
error->all(FLERR, "This algorithm is not implemented, yet");
|
error->all(FLERR, "This algorithm is not implemented, yet");
|
||||||
}
|
}
|
||||||
@ -1224,11 +1231,10 @@ double FixElectrodeConp::self_energy(int eflag)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
double FixElectrodeConp::gausscorr(int eflag, bool fflag)
|
double FixElectrodeConp::gausscorr(int eflag, int vflag, bool fflag)
|
||||||
{
|
{
|
||||||
// correction to short range interaction due to eta
|
// correction to short range interaction due to eta
|
||||||
|
|
||||||
int evflag = pair->evflag;
|
|
||||||
double const qqrd2e = force->qqrd2e;
|
double const qqrd2e = force->qqrd2e;
|
||||||
int const nlocal = atom->nlocal;
|
int const nlocal = atom->nlocal;
|
||||||
int *mask = atom->mask;
|
int *mask = atom->mask;
|
||||||
@ -1294,13 +1300,11 @@ double FixElectrodeConp::gausscorr(int eflag, bool fflag)
|
|||||||
f[j][2] -= delz * fpair;
|
f[j][2] -= delz * fpair;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (eflag) {
|
||||||
double ecoul = 0.;
|
double ecoul = -prefactor * erfc_etar;
|
||||||
if (eflag) ecoul = -prefactor * erfc_etar;
|
force->pair->ev_tally(i, j, nlocal, newton_pair, 0., ecoul, 0., 0., 0., 0.);
|
||||||
|
|
||||||
if (evflag) {
|
|
||||||
force->pair->ev_tally(i, j, nlocal, newton_pair, 0., ecoul, fpair, delx, dely, delz);
|
|
||||||
}
|
}
|
||||||
|
if (vflag) v_tally(i, j, nlocal, newton_pair, fpair, delx, dely, delz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1621,3 +1625,70 @@ void FixElectrodeConp::unpack_forward_comm(int n, int first, double *buf)
|
|||||||
int const last = first + n;
|
int const last = first + n;
|
||||||
for (int i = first, m = 0; i < last; i++) atom->q[i] = buf[m++];
|
for (int i = first, m = 0; i < last; i++) atom->q[i] = buf[m++];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Tally virial of pair interactions in pre_reverse. This cannot be done with pair->ev_tally()
|
||||||
|
because compute_fdotr is called before pre_reverse, i.e. Virials need to be tallied even if fdotr
|
||||||
|
is used.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixElectrodeConp::v_tally(int i, int j, int nlocal, int newton_pair, double fpair, double delx,
|
||||||
|
double dely, double delz)
|
||||||
|
{
|
||||||
|
double v[6];
|
||||||
|
if (vflag_either) {
|
||||||
|
v[0] = delx * delx * fpair;
|
||||||
|
v[1] = dely * dely * fpair;
|
||||||
|
v[2] = delz * delz * fpair;
|
||||||
|
v[3] = delx * dely * fpair;
|
||||||
|
v[4] = delx * delz * fpair;
|
||||||
|
v[5] = dely * delz * fpair;
|
||||||
|
|
||||||
|
if (vflag_global) {
|
||||||
|
if (newton_pair) {
|
||||||
|
virial[0] += v[0];
|
||||||
|
virial[1] += v[1];
|
||||||
|
virial[2] += v[2];
|
||||||
|
virial[3] += v[3];
|
||||||
|
virial[4] += v[4];
|
||||||
|
virial[5] += v[5];
|
||||||
|
} else {
|
||||||
|
if (i < nlocal) {
|
||||||
|
virial[0] += 0.5 * v[0];
|
||||||
|
virial[1] += 0.5 * v[1];
|
||||||
|
virial[2] += 0.5 * v[2];
|
||||||
|
virial[3] += 0.5 * v[3];
|
||||||
|
virial[4] += 0.5 * v[4];
|
||||||
|
virial[5] += 0.5 * v[5];
|
||||||
|
}
|
||||||
|
if (j < nlocal) {
|
||||||
|
virial[0] += 0.5 * v[0];
|
||||||
|
virial[1] += 0.5 * v[1];
|
||||||
|
virial[2] += 0.5 * v[2];
|
||||||
|
virial[3] += 0.5 * v[3];
|
||||||
|
virial[4] += 0.5 * v[4];
|
||||||
|
virial[5] += 0.5 * v[5];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vflag_atom) {
|
||||||
|
if (newton_pair || i < nlocal) {
|
||||||
|
vatom[i][0] += 0.5 * v[0];
|
||||||
|
vatom[i][1] += 0.5 * v[1];
|
||||||
|
vatom[i][2] += 0.5 * v[2];
|
||||||
|
vatom[i][3] += 0.5 * v[3];
|
||||||
|
vatom[i][4] += 0.5 * v[4];
|
||||||
|
vatom[i][5] += 0.5 * v[5];
|
||||||
|
}
|
||||||
|
if (newton_pair || j < nlocal) {
|
||||||
|
vatom[j][0] += 0.5 * v[0];
|
||||||
|
vatom[j][1] += 0.5 * v[1];
|
||||||
|
vatom[j][2] += 0.5 * v[2];
|
||||||
|
vatom[j][3] += 0.5 * v[3];
|
||||||
|
vatom[j][4] += 0.5 * v[4];
|
||||||
|
vatom[j][5] += 0.5 * v[5];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -119,10 +119,11 @@ class FixElectrodeConp : public Fix {
|
|||||||
void create_taglist();
|
void create_taglist();
|
||||||
void invert();
|
void invert();
|
||||||
void symmetrize();
|
void symmetrize();
|
||||||
double gausscorr(int, bool);
|
double gausscorr(int, int, bool);
|
||||||
void update_charges();
|
void update_charges();
|
||||||
double potential_energy();
|
double potential_energy();
|
||||||
double self_energy(int);
|
double self_energy(int);
|
||||||
|
void v_tally(int, int, int, int, double, double, double, double);
|
||||||
void write_to_file(FILE *, const std::vector<tagint> &, const std::vector<std::vector<double>> &);
|
void write_to_file(FILE *, const std::vector<tagint> &, const std::vector<std::vector<double>> &);
|
||||||
void read_from_file(const std::string &input_file, double **, const std::string &);
|
void read_from_file(const std::string &input_file, double **, const std::string &);
|
||||||
void compute_sd_vectors();
|
void compute_sd_vectors();
|
||||||
|
|||||||
161
src/GRANULAR/fix_add_heat.cpp
Normal file
161
src/GRANULAR/fix_add_heat.cpp
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Contributing author: Joel Clemmer (SNL)
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "fix_add_heat.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "input.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "update.h"
|
||||||
|
#include "variable.h"
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace FixConst;
|
||||||
|
|
||||||
|
enum { CONSTANT, EQUAL, ATOM };
|
||||||
|
enum { ADD, LINEAR, QUARTIC };
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixAddHeat::FixAddHeat(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
Fix(lmp, narg, arg), varstr(nullptr), vatom(nullptr)
|
||||||
|
{
|
||||||
|
if (narg < 5) utils::missing_cmd_args(FLERR, "fix add/heat", error);
|
||||||
|
dynamic_group_allow = 1;
|
||||||
|
overwrite_flag = 0;
|
||||||
|
|
||||||
|
if (strcmp(arg[3], "constant") == 0) {
|
||||||
|
style = ADD;
|
||||||
|
} else if (strcmp(arg[3], "linear") == 0) {
|
||||||
|
style = LINEAR;
|
||||||
|
} else if (strcmp(arg[3], "quartic") == 0) {
|
||||||
|
style = QUARTIC;
|
||||||
|
} else {
|
||||||
|
error->all(FLERR, "Invalid option {}", arg[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (utils::strmatch(arg[4], "^v_")) {
|
||||||
|
varstr = utils::strdup(arg[4] + 2);
|
||||||
|
} else {
|
||||||
|
value = utils::numeric(FLERR, arg[4], false, lmp);
|
||||||
|
vstyle = CONSTANT;
|
||||||
|
}
|
||||||
|
|
||||||
|
int iarg = 5;
|
||||||
|
if (style != ADD) {
|
||||||
|
if (narg != 6) utils::missing_cmd_args(FLERR, "fix add/heat", error);
|
||||||
|
prefactor = utils::numeric(FLERR, arg[5], false, lmp);
|
||||||
|
iarg = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional args
|
||||||
|
|
||||||
|
while (iarg < narg) {
|
||||||
|
if (strcmp(arg[iarg], "overwrite") == 0) {
|
||||||
|
if (iarg + 1 >= narg) utils::missing_cmd_args(FLERR, "fix add/heat", error);
|
||||||
|
overwrite_flag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
||||||
|
iarg += 2;
|
||||||
|
} else {
|
||||||
|
error->all(FLERR, "Illegal fix add/heat command, invalid argument {}", arg[iarg]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
maxatom = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixAddHeat::~FixAddHeat()
|
||||||
|
{
|
||||||
|
delete[] varstr;
|
||||||
|
memory->destroy(vatom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixAddHeat::setmask()
|
||||||
|
{
|
||||||
|
int mask = 0;
|
||||||
|
mask |= POST_FORCE;
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixAddHeat::init()
|
||||||
|
{
|
||||||
|
if (!atom->temperature_flag)
|
||||||
|
error->all(FLERR, "Fix add/heat requires atom style with temperature property");
|
||||||
|
if (!atom->heatflow_flag)
|
||||||
|
error->all(FLERR, "Fix add/heat requires atom style with heatflow property");
|
||||||
|
|
||||||
|
// check variable
|
||||||
|
|
||||||
|
if (varstr) {
|
||||||
|
var = input->variable->find(varstr);
|
||||||
|
if (var < 0) error->all(FLERR, "Variable {} for fix addforce does not exist", varstr);
|
||||||
|
if (input->variable->equalstyle(var))
|
||||||
|
vstyle = EQUAL;
|
||||||
|
else if (input->variable->atomstyle(var))
|
||||||
|
vstyle = ATOM;
|
||||||
|
else
|
||||||
|
error->all(FLERR, "Variable {} for fix addforce is invalid style", varstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixAddHeat::post_force(int /*vflag*/)
|
||||||
|
{
|
||||||
|
int *mask = atom->mask;
|
||||||
|
double *heatflow = atom->heatflow;
|
||||||
|
double *temperature = atom->temperature;
|
||||||
|
double dtinv = 1.0 / update->dt;
|
||||||
|
|
||||||
|
if (vstyle == ATOM) {
|
||||||
|
if (atom->nmax > maxatom) {
|
||||||
|
maxatom = atom->nmax;
|
||||||
|
memory->destroy(vatom);
|
||||||
|
memory->create(vatom, maxatom, "addheat:vatom");
|
||||||
|
}
|
||||||
|
|
||||||
|
input->variable->compute_atom(var, igroup, &vatom[0], 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (overwrite_flag)
|
||||||
|
for (int i = 0; i < atom->nlocal; i++)
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
heatflow[i] = 0.0;
|
||||||
|
|
||||||
|
double vtmp, dt;
|
||||||
|
if (vstyle == CONSTANT) vtmp = value;
|
||||||
|
if (vstyle == EQUAL) vtmp = input->variable->compute_equal(var);
|
||||||
|
for (int i = 0; i < atom->nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit) {
|
||||||
|
if (vstyle == ATOM) vtmp = vatom[i];
|
||||||
|
|
||||||
|
if (style == ADD) {
|
||||||
|
heatflow[i] += dtinv * vtmp;
|
||||||
|
} else if (style == LINEAR) {
|
||||||
|
heatflow[i] += dtinv * prefactor * (vtmp - temperature[i]);
|
||||||
|
} else if (style == QUARTIC) {
|
||||||
|
heatflow[i] += dtinv * prefactor * (pow(vtmp, 4.0) - pow(temperature[i], 4.0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
45
src/GRANULAR/fix_add_heat.h
Normal file
45
src/GRANULAR/fix_add_heat.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef FIX_CLASS
|
||||||
|
// clang-format off
|
||||||
|
FixStyle(add/heat,FixAddHeat);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_FIX_ADD_HEAT_H
|
||||||
|
#define LMP_FIX_ADD_HEAT_H
|
||||||
|
|
||||||
|
#include "fix.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class FixAddHeat : public Fix {
|
||||||
|
public:
|
||||||
|
FixAddHeat(class LAMMPS *, int, char **);
|
||||||
|
~FixAddHeat() override;
|
||||||
|
int setmask() override;
|
||||||
|
void init() override;
|
||||||
|
void post_force(int) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
double value, prefactor;
|
||||||
|
int var, vstyle, maxatom, style, overwrite_flag;
|
||||||
|
char *varstr;
|
||||||
|
double *vatom;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@ -124,6 +124,7 @@ PACKAGE = \
|
|||||||
reaction \
|
reaction \
|
||||||
reaxff \
|
reaxff \
|
||||||
replica \
|
replica \
|
||||||
|
rheo \
|
||||||
rigid \
|
rigid \
|
||||||
scafacos \
|
scafacos \
|
||||||
shock \
|
shock \
|
||||||
@ -233,6 +234,7 @@ PACKLIB = \
|
|||||||
plumed \
|
plumed \
|
||||||
qmmm \
|
qmmm \
|
||||||
ml-quip \
|
ml-quip \
|
||||||
|
rheo \
|
||||||
scafacos \
|
scafacos \
|
||||||
machdyn \
|
machdyn \
|
||||||
vtk \
|
vtk \
|
||||||
@ -254,6 +256,7 @@ PACKEXT = \
|
|||||||
netcdf \
|
netcdf \
|
||||||
plumed \
|
plumed \
|
||||||
qmmm \
|
qmmm \
|
||||||
|
rheo \
|
||||||
scafacos \
|
scafacos \
|
||||||
voronoi \
|
voronoi \
|
||||||
vtk \
|
vtk \
|
||||||
|
|||||||
@ -105,6 +105,13 @@ void FixPythonInvoke::end_of_step()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixPythonInvoke::setup(int vflag)
|
||||||
|
{
|
||||||
|
if (selected_callback == POST_FORCE) post_force(vflag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixPythonInvoke::post_force(int vflag)
|
void FixPythonInvoke::post_force(int vflag)
|
||||||
{
|
{
|
||||||
if (update->ntimestep % nevery != 0) return;
|
if (update->ntimestep % nevery != 0) return;
|
||||||
|
|||||||
@ -30,6 +30,7 @@ class FixPythonInvoke : public Fix {
|
|||||||
FixPythonInvoke(class LAMMPS *, int, char **);
|
FixPythonInvoke(class LAMMPS *, int, char **);
|
||||||
~FixPythonInvoke() override;
|
~FixPythonInvoke() override;
|
||||||
int setmask() override;
|
int setmask() override;
|
||||||
|
void setup(int) override;
|
||||||
void end_of_step() override;
|
void end_of_step() override;
|
||||||
void post_force(int) override;
|
void post_force(int) override;
|
||||||
|
|
||||||
|
|||||||
@ -44,6 +44,7 @@ FixReaxFFBonds::FixReaxFFBonds(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
ntypes = atom->ntypes;
|
ntypes = atom->ntypes;
|
||||||
nmax = atom->nmax;
|
nmax = atom->nmax;
|
||||||
compressed = 0;
|
compressed = 0;
|
||||||
|
first_flag = true;
|
||||||
|
|
||||||
nevery = utils::inumeric(FLERR,arg[3],false,lmp);
|
nevery = utils::inumeric(FLERR,arg[3],false,lmp);
|
||||||
|
|
||||||
@ -94,7 +95,10 @@ int FixReaxFFBonds::setmask()
|
|||||||
|
|
||||||
void FixReaxFFBonds::setup(int /*vflag*/)
|
void FixReaxFFBonds::setup(int /*vflag*/)
|
||||||
{
|
{
|
||||||
end_of_step();
|
// only print output during setup() at the very beginning
|
||||||
|
// to avoid duplicate outputs when using multiple run statements
|
||||||
|
if (first_flag) end_of_step();
|
||||||
|
first_flag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -40,6 +40,7 @@ class FixReaxFFBonds : public Fix {
|
|||||||
tagint **neighid;
|
tagint **neighid;
|
||||||
double **abo;
|
double **abo;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
bool first_flag;
|
||||||
|
|
||||||
void allocate();
|
void allocate();
|
||||||
void destroy();
|
void destroy();
|
||||||
@ -50,7 +51,6 @@ class FixReaxFFBonds : public Fix {
|
|||||||
int nint(const double &);
|
int nint(const double &);
|
||||||
double memory_usage() override;
|
double memory_usage() override;
|
||||||
|
|
||||||
bigint nvalid, nextvalid();
|
|
||||||
struct _reax_list *lists;
|
struct _reax_list *lists;
|
||||||
class PairReaxFF *reaxff;
|
class PairReaxFF *reaxff;
|
||||||
class NeighList *list;
|
class NeighList *list;
|
||||||
|
|||||||
70
src/RHEO/Install.sh
Normal file
70
src/RHEO/Install.sh
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# Install/unInstall package files in LAMMPS
|
||||||
|
# mode = 0/1/2 for uninstall/install/update
|
||||||
|
|
||||||
|
mode=$1
|
||||||
|
|
||||||
|
# enforce using portable C locale
|
||||||
|
LC_ALL=C
|
||||||
|
export LC_ALL
|
||||||
|
|
||||||
|
# arg1 = file, arg2 = file it depends on
|
||||||
|
|
||||||
|
action () {
|
||||||
|
if (test $mode = 0) then
|
||||||
|
rm -f ../$1
|
||||||
|
elif (! cmp -s $1 ../$1) then
|
||||||
|
if (test -z "$2" || test -e ../$2) then
|
||||||
|
cp $1 ..
|
||||||
|
if (test $mode = 2) then
|
||||||
|
echo " updating src/$1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif (test -n "$2") then
|
||||||
|
if (test ! -e ../$2) then
|
||||||
|
rm -f ../$1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# some styles in RHEO have base classes in BPM
|
||||||
|
|
||||||
|
if (test $1 = 1) then
|
||||||
|
if (test ! -e ../bond_bpm.cpp) then
|
||||||
|
echo "Must install BPM package with RHEO"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in *.cpp *.h; do
|
||||||
|
action ${file}
|
||||||
|
done
|
||||||
|
|
||||||
|
# edit 2 Makefile.package files to include/exclude package info
|
||||||
|
|
||||||
|
if (test $1 = 1) then
|
||||||
|
|
||||||
|
if (test -e ../Makefile.package) then
|
||||||
|
sed -i -e 's/[^ \t]*rheo[^ \t]* //' ../Makefile.package
|
||||||
|
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(rheo_SYSINC) |' ../Makefile.package
|
||||||
|
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(rheo_SYSLIB) |' ../Makefile.package
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (test -e ../Makefile.package.settings) then
|
||||||
|
sed -i -e '/^[ \t]*include.*rheo.*$/d' ../Makefile.package.settings
|
||||||
|
# multiline form needed for BSD sed on Macs
|
||||||
|
sed -i -e '4 i \
|
||||||
|
include ..\/..\/lib\/rheo\/Makefile.lammps
|
||||||
|
' ../Makefile.package.settings
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif (test $1 = 0) then
|
||||||
|
|
||||||
|
if (test -e ../Makefile.package) then
|
||||||
|
sed -i -e 's/[^ \t]*rheo[^ \t]* //' ../Makefile.package
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (test -e ../Makefile.package.settings) then
|
||||||
|
sed -i -e '/^[ \t]*include.*rheo.*$/d' ../Makefile.package.settings
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
10
src/RHEO/README
Normal file
10
src/RHEO/README
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
RHEO or Reproducing Hydrodynamics and Elastic Objects is a package to model
|
||||||
|
multiphase fluid systems. The authors include Joel Clemmer (Sandia), Thomas
|
||||||
|
O'Connor (Carnegie Mellon), and Eric Palermo (Carnegie Mellon).
|
||||||
|
|
||||||
|
Bond style rheo/shell, compute style rheo/property/atom, and fix style
|
||||||
|
rheo/temperature all depend on the BPM package.
|
||||||
|
|
||||||
|
This package requires the GNU scientific library (GSL). We recommend version
|
||||||
|
2.7 or later. To build this package, one must first separately install GSL in
|
||||||
|
a location that can be found by your environment.
|
||||||
174
src/RHEO/atom_vec_rheo.cpp
Normal file
174
src/RHEO/atom_vec_rheo.cpp
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
// clang-format off
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Contributing authors:
|
||||||
|
Joel Clemmer (SNL)
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "atom_vec_rheo.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
AtomVecRHEO::AtomVecRHEO(LAMMPS *lmp) : AtomVec(lmp)
|
||||||
|
{
|
||||||
|
molecular = Atom::ATOMIC;
|
||||||
|
mass_type = PER_TYPE;
|
||||||
|
forceclearflag = 1;
|
||||||
|
|
||||||
|
atom->rheo_status_flag = 1;
|
||||||
|
atom->pressure_flag = 1;
|
||||||
|
atom->rho_flag = 1;
|
||||||
|
atom->viscosity_flag = 1;
|
||||||
|
|
||||||
|
// strings with peratom variables to include in each AtomVec method
|
||||||
|
// strings cannot contain fields in corresponding AtomVec default strings
|
||||||
|
// order of fields in a string does not matter
|
||||||
|
// except: fields_data_atom & fields_data_vel must match data file
|
||||||
|
|
||||||
|
fields_grow = {"rheo_status", "rho", "drho", "pressure", "viscosity"};
|
||||||
|
fields_copy = {"rheo_status", "rho", "drho", "pressure", "viscosity"};
|
||||||
|
fields_comm = {"rheo_status", "rho"};
|
||||||
|
fields_comm_vel = {"rheo_status", "rho"};
|
||||||
|
fields_reverse = {"drho"};
|
||||||
|
fields_border = {"rheo_status", "rho"};
|
||||||
|
fields_border_vel = {"rheo_status", "rho"};
|
||||||
|
fields_exchange = {"rheo_status", "rho"};
|
||||||
|
fields_restart = {"rheo_status", "rho"};
|
||||||
|
fields_create = {"rheo_status", "rho", "drho", "pressure", "viscosity"};
|
||||||
|
fields_data_atom = {"id", "type", "rheo_status", "rho", "x"};
|
||||||
|
fields_data_vel = {"id", "v"};
|
||||||
|
|
||||||
|
setup_fields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set local copies of all grow ptrs used by this class, except defaults
|
||||||
|
needed in replicate when 2 atom classes exist and it calls pack_restart()
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEO::grow_pointers()
|
||||||
|
{
|
||||||
|
rheo_status = atom->rheo_status;
|
||||||
|
pressure = atom->pressure;
|
||||||
|
rho = atom->rho;
|
||||||
|
drho = atom->drho;
|
||||||
|
viscosity = atom->viscosity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
clear extra forces starting at atom N
|
||||||
|
nbytes = # of bytes to clear for a per-atom vector
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEO::force_clear(int n, size_t nbytes)
|
||||||
|
{
|
||||||
|
memset(&drho[n], 0, nbytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
initialize non-zero atom quantities
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEO::create_atom_post(int ilocal)
|
||||||
|
{
|
||||||
|
rho[ilocal] = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
modify what AtomVec::data_atom() just unpacked
|
||||||
|
or initialize other atom quantities
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEO::data_atom_post(int ilocal)
|
||||||
|
{
|
||||||
|
drho[ilocal] = 0.0;
|
||||||
|
pressure[ilocal] = 0.0;
|
||||||
|
viscosity[ilocal] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
assign an index to named atom property and return index
|
||||||
|
return -1 if name is unknown to this atom style
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int AtomVecRHEO::property_atom(const std::string &name)
|
||||||
|
{
|
||||||
|
if (name == "rheo_status") return 0;
|
||||||
|
if (name == "pressure") return 1;
|
||||||
|
if (name == "rho") return 2;
|
||||||
|
if (name == "drho") return 3;
|
||||||
|
if (name == "viscosity") return 4;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
pack per-atom data into buf for ComputePropertyAtom
|
||||||
|
index maps to data specific to this atom style
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEO::pack_property_atom(int index, double *buf, int nvalues, int groupbit)
|
||||||
|
{
|
||||||
|
int *mask = atom->mask;
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
if (index == 0) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = rheo_status[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 1) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = pressure[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 2) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = rho[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 3) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = drho[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 4) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = viscosity[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/RHEO/atom_vec_rheo.h
Normal file
46
src/RHEO/atom_vec_rheo.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef ATOM_CLASS
|
||||||
|
// clang-format off
|
||||||
|
AtomStyle(rheo,AtomVecRHEO);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_ATOM_VEC_RHEO_H
|
||||||
|
#define LMP_ATOM_VEC_RHEO_H
|
||||||
|
|
||||||
|
#include "atom_vec.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class AtomVecRHEO : virtual public AtomVec {
|
||||||
|
public:
|
||||||
|
AtomVecRHEO(class LAMMPS *);
|
||||||
|
|
||||||
|
void grow_pointers() override;
|
||||||
|
void force_clear(int, size_t) override;
|
||||||
|
void create_atom_post(int) override;
|
||||||
|
void data_atom_post(int) override;
|
||||||
|
int property_atom(const std::string &) override;
|
||||||
|
void pack_property_atom(int, double *, int, int) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int *rheo_status;
|
||||||
|
double *pressure, *rho, *drho, *viscosity;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
222
src/RHEO/atom_vec_rheo_thermal.cpp
Normal file
222
src/RHEO/atom_vec_rheo_thermal.cpp
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
// clang-format off
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Contributing authors:
|
||||||
|
Joel Clemmer (SNL)
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "atom_vec_rheo_thermal.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
AtomVecRHEOThermal::AtomVecRHEOThermal(LAMMPS *lmp) : AtomVec(lmp)
|
||||||
|
{
|
||||||
|
molecular = Atom::ATOMIC;
|
||||||
|
mass_type = PER_TYPE;
|
||||||
|
forceclearflag = 1;
|
||||||
|
|
||||||
|
atom->rheo_status_flag = 1;
|
||||||
|
atom->conductivity_flag = 1;
|
||||||
|
atom->temperature_flag = 1;
|
||||||
|
atom->esph_flag = 1;
|
||||||
|
atom->heatflow_flag = 1;
|
||||||
|
atom->pressure_flag = 1;
|
||||||
|
atom->rho_flag = 1;
|
||||||
|
atom->viscosity_flag = 1;
|
||||||
|
|
||||||
|
// strings with peratom variables to include in each AtomVec method
|
||||||
|
// strings cannot contain fields in corresponding AtomVec default strings
|
||||||
|
// order of fields in a string does not matter
|
||||||
|
// except: fields_data_atom & fields_data_vel must match data file
|
||||||
|
|
||||||
|
fields_grow = {"rheo_status", "rho", "drho", "temperature", "esph", "heatflow", "conductivity", "pressure", "viscosity"};
|
||||||
|
fields_copy = {"rheo_status", "rho", "drho", "temperature", "esph", "heatflow", "conductivity", "pressure", "viscosity"};
|
||||||
|
fields_comm = {"rheo_status", "rho", "esph"};
|
||||||
|
fields_comm_vel = {"rheo_status", "rho", "esph"};
|
||||||
|
fields_reverse = {"drho", "heatflow"};
|
||||||
|
fields_border = {"rheo_status", "rho", "esph"};
|
||||||
|
fields_border_vel = {"rheo_status", "rho", "esph"};
|
||||||
|
fields_exchange = {"rheo_status", "rho", "esph"};
|
||||||
|
fields_restart = {"rheo_status", "rho", "esph"};
|
||||||
|
fields_create = {"rheo_status", "rho", "drho", "temperature", "esph", "heatflow", "conductivity", "pressure", "viscosity"};
|
||||||
|
fields_data_atom = {"id", "type", "rheo_status", "rho", "esph", "x"};
|
||||||
|
fields_data_vel = {"id", "v"};
|
||||||
|
|
||||||
|
setup_fields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set local copies of all grow ptrs used by this class, except defaults
|
||||||
|
needed in replicate when 2 atom classes exist and it calls pack_restart()
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEOThermal::grow_pointers()
|
||||||
|
{
|
||||||
|
rheo_status = atom->rheo_status;
|
||||||
|
conductivity = atom->conductivity;
|
||||||
|
temperature = atom->temperature;
|
||||||
|
esph = atom->esph;
|
||||||
|
heatflow = atom->heatflow;
|
||||||
|
pressure = atom->pressure;
|
||||||
|
rho = atom->rho;
|
||||||
|
drho = atom->drho;
|
||||||
|
viscosity = atom->viscosity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
clear extra forces starting at atom N
|
||||||
|
nbytes = # of bytes to clear for a per-atom vector
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEOThermal::force_clear(int n, size_t nbytes)
|
||||||
|
{
|
||||||
|
memset(&drho[n], 0, nbytes);
|
||||||
|
memset(&heatflow[n], 0, nbytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
initialize non-zero atom quantities
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEOThermal::create_atom_post(int ilocal)
|
||||||
|
{
|
||||||
|
rho[ilocal] = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
modify what AtomVec::data_atom() just unpacked
|
||||||
|
or initialize other atom quantities
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEOThermal::data_atom_post(int ilocal)
|
||||||
|
{
|
||||||
|
drho[ilocal] = 0.0;
|
||||||
|
heatflow[ilocal] = 0.0;
|
||||||
|
temperature[ilocal] = 0.0;
|
||||||
|
pressure[ilocal] = 0.0;
|
||||||
|
viscosity[ilocal] = 0.0;
|
||||||
|
conductivity[ilocal] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
assign an index to named atom property and return index
|
||||||
|
return -1 if name is unknown to this atom style
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int AtomVecRHEOThermal::property_atom(const std::string &name)
|
||||||
|
{
|
||||||
|
if (name == "rheo_status") return 0;
|
||||||
|
if (name == "rho") return 1;
|
||||||
|
if (name == "drho") return 2;
|
||||||
|
if (name == "temperature") return 3;
|
||||||
|
if (name == "esph") return 4;
|
||||||
|
if (name == "heatflow") return 5;
|
||||||
|
if (name == "conductivity") return 6;
|
||||||
|
if (name == "pressure") return 7;
|
||||||
|
if (name == "viscosity") return 8;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
pack per-atom data into buf for ComputePropertyAtom
|
||||||
|
index maps to data specific to this atom style
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecRHEOThermal::pack_property_atom(int index, double *buf, int nvalues, int groupbit)
|
||||||
|
{
|
||||||
|
int *mask = atom->mask;
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
if (index == 0) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = rheo_status[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 1) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = rho[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 2) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = drho[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 3) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = temperature[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 4) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = esph[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 5) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = heatflow[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 6) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = conductivity[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 7) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = pressure[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
} else if (index == 8) {
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
buf[n] = viscosity[i];
|
||||||
|
else
|
||||||
|
buf[n] = 0.0;
|
||||||
|
n += nvalues;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user