Merge branch 'clean-master2' of github.com:julient31/lammps into gneb_spin

This commit is contained in:
julient31 2019-04-01 16:12:11 -06:00
commit 677974573a
140 changed files with 11805 additions and 6184 deletions

View File

@ -207,7 +207,7 @@ include_directories(${LAMMPS_SOURCE_DIR})
if(PKG_USER-ADIOS)
# The search for ADIOS2 must come before MPI because
# it includes its own MPI search with the latest FindMPI.cmake
# script that defines the MPI::MPI_C target
# script that defines the MPI::MPI_C target
enable_language(C)
find_package(ADIOS2 REQUIRED)
list(APPEND LAMMPS_LINK_LIBS adios2::adios2)
@ -381,19 +381,10 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
endif()
if(PKG_PYTHON)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
add_definitions(-DLMP_PYTHON)
include_directories(${PYTHON_INCLUDE_DIR})
list(APPEND LAMMPS_LINK_LIBS ${PYTHON_LIBRARY})
if(BUILD_LIB AND BUILD_SHARED_LIBS)
if(NOT PYTHON_INSTDIR)
execute_process(COMMAND ${PYTHON_EXECUTABLE}
-c "import distutils.sysconfig as cg; print(cg.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))"
OUTPUT_VARIABLE PYTHON_INSTDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../python/lammps.py DESTINATION ${PYTHON_INSTDIR})
endif()
endif()
find_package(JPEG QUIET)
@ -672,19 +663,19 @@ endif()
if(PKG_KIM)
find_package(CURL)
if(CURL_FOUND)
include_directories(${CURL_INCLUDE_DIRS})
include_directories(${CURL_INCLUDE_DIRS})
list(APPEND LAMMPS_LINK_LIBS ${CURL_LIBRARIES})
add_definitions(-DLMP_KIM_CURL)
endif()
option(DOWNLOAD_KIM "Download KIM-API v2 from OpenKIM instead of using an already installed one" OFF)
option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" OFF)
if(DOWNLOAD_KIM)
message(STATUS "KIM-API v2 download requested - we will build our own")
message(STATUS "KIM-API download requested - we will build our own")
enable_language(C)
enable_language(Fortran)
include(ExternalProject)
ExternalProject_Add(kim_build
URL https://s3.openkim.org/kim-api/kim-api-v2-2.0.1.txz
URL_MD5 289c57f0c3bc2a549662283cac1c4ef1
URL https://s3.openkim.org/kim-api/kim-api-2.0.2.txz
URL_MD5 537d9c0abd30f85b875ebb584f9143fa
BINARY_DIR build
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
@ -693,17 +684,17 @@ if(PKG_KIM)
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
)
ExternalProject_get_property(kim_build INSTALL_DIR)
set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2)
set(KIM-API-V2_LDFLAGS ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libkim-api-v2${CMAKE_SHARED_LIBRARY_SUFFIX})
set(KIM-API_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api)
set(KIM-API_LDFLAGS ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX})
list(APPEND LAMMPS_DEPS kim_build)
else()
find_package(KIM-API-V2)
if(NOT KIM-API-V2_FOUND)
message(FATAL_ERROR "KIM-API v2 not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it")
find_package(KIM-API)
if(NOT KIM-API_FOUND)
message(FATAL_ERROR "KIM-API not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it")
endif()
endif()
list(APPEND LAMMPS_LINK_LIBS "${KIM-API-V2_LDFLAGS}")
include_directories(${KIM-API-V2_INCLUDE_DIRS})
list(APPEND LAMMPS_LINK_LIBS "${KIM-API_LDFLAGS}")
include_directories(${KIM-API_INCLUDE_DIRS})
endif()
if(PKG_MESSAGE)
@ -1177,6 +1168,10 @@ if(PKG_GPU)
message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.")
endif()
option(CUDPP_OPT "Enable CUDPP_OPT" ON)
option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF)
if(CUDA_MPS_SUPPORT)
set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY")
endif()
set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)")
@ -1240,7 +1235,7 @@ if(PKG_GPU)
add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS})
target_link_libraries(gpu ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS})
target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT)
target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS})
if(CUDPP_OPT)
target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini)
target_compile_definitions(gpu PRIVATE -DUSE_CUDPP)
@ -1467,6 +1462,49 @@ install(
DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/profile.d
)
###############################################################################
# Install LAMMPS lib and python module into site-packages folder with
# "install-python" target. Behaves exactly like "make install-python" for
# conventional build. Only available, if a shared library is built.
# This is primarily for people that only want to use the Python wrapper.
###############################################################################
if(BUILD_LIB AND BUILD_SHARED_LIBS)
find_package(PythonInterp)
if (PYTHONINTERP_FOUND)
add_custom_target(
install-python
${PYTHON_EXECUTABLE} install.py -v ${LAMMPS_SOURCE_DIR}/version.h
-m ${CMAKE_CURRENT_SOURCE_DIR}/../python/lammps.py
-l ${CMAKE_BINARY_DIR}/liblammps${CMAKE_SHARED_LIBRARY_SUFFIX}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../python
COMMENT "Installing LAMMPS Python module")
else()
add_custom_target(
install-python
${CMAKE_COMMAND} -E echo "Must have Python installed to install the LAMMPS Python module")
endif()
else()
add_custom_target(
install-python
${CMAKE_COMMAND} -E echo "Must build LAMMPS as a shared library to use the Python module")
endif()
###############################################################################
# Add LAMMPS python module to "install" target. This is taylored for building
# LAMMPS for package managers and with different prefix settings.
# This requires either a shared library or that the PYTHON package is included.
###############################################################################
if((BUILD_LIB AND BUILD_SHARED_LIBS) OR (PKG_PYTHON))
find_package(PythonInterp)
if (PYTHONINTERP_FOUND)
execute_process(COMMAND ${PYTHON_EXECUTABLE}
-c "import distutils.sysconfig as cg; print(cg.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))"
OUTPUT_VARIABLE PYTHON_DEFAULT_INSTDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
set(PYTHON_INSTDIR ${PYTHON_DEFAULT_INSTDIR} CACHE PATH "Installation folder for LAMMPS Python module")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../python/lammps.py DESTINATION ${PYTHON_INSTDIR})
endif()
endif()
###############################################################################
# Testing
#

View File

@ -19,7 +19,7 @@
#
#
# Copyright (c) 2013--2018, Regents of the University of Minnesota.
# Copyright (c) 2013--2019, Regents of the University of Minnesota.
# All rights reserved.
#
# Contributors:
@ -28,23 +28,23 @@
# Ryan S. Elliott
#
# - Find KIM-API-V2
# - Find KIM-API
#
# sets standard pkg_check_modules variables plus:
#
# KIM-API-V2-CMAKE_C_COMPILER
# KIM-API-V2-CMAKE_CXX_COMPILER
# KIM-API-V2-CMAKE_Fortran_COMPILER
# KIM-API-CMAKE_C_COMPILER
# KIM-API-CMAKE_CXX_COMPILER
# KIM-API-CMAKE_Fortran_COMPILER
#
find_package(PkgConfig REQUIRED)
include(FindPackageHandleStandardArgs)
pkg_check_modules(KIM-API-V2 REQUIRED libkim-api-v2>=2.0)
pkg_check_modules(KIM-API REQUIRED libkim-api>=2.0)
pkg_get_variable(KIM-API-V2-CMAKE_C_COMPILER libkim-api-v2 CMAKE_C_COMPILER)
pkg_get_variable(KIM-API-V2-CMAKE_CXX_COMPILER libkim-api-v2 CMAKE_CXX_COMPILER)
pkg_get_variable(KIM-API-V2_CMAKE_Fortran_COMPILER libkim-api-v2 CMAKE_Fortran_COMPILER)
pkg_get_variable(KIM-API-V2-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER)
pkg_get_variable(KIM-API-V2-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER)
pkg_get_variable(KIM-API-V2_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER)
# handle the QUIETLY and REQUIRED arguments and set KIM-API-V2_FOUND to TRUE
# handle the QUIETLY and REQUIRED arguments and set KIM-API_FOUND to TRUE
# if all listed variables are TRUE
find_package_handle_standard_args(KIM-API-V2 REQUIRED_VARS KIM-API-V2_LIBRARIES)
find_package_handle_standard_args(KIM-API REQUIRED_VARS KIM-API_LIBRARIES)

View File

@ -5,15 +5,15 @@ set(temp_git_describe "(unknown)")
set(temp_git_info "false")
if(GIT_FOUND AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
set(temp_git_info "true")
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/../.git rev-parse HEAD
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/.. rev-parse HEAD
OUTPUT_VARIABLE temp_git_commit
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/../.git rev-parse --abbrev-ref HEAD
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/.. rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE temp_git_branch
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/../.git describe --dirty=-modified
execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/.. describe --dirty=-modified
OUTPUT_VARIABLE temp_git_describe
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)

View File

@ -1503,6 +1503,16 @@ target API.
</dl>
</td>
</tr>
<tr>
<td><code>CUDA_MPS_SUPPORT</code> (CUDA only)</td>
<td>Enable tweaks for running with Nvidia CUDA Multi-process services daemon</td>
<td>
<dl>
<dt><code>on</code></dt>
<dt><code>off</code> (default)</dt>
</dl>
</td>
</tr>
<tr>
<td><code>BIN2C</code> (CUDA only)</td>
<td>Path to bin2c executable, will automatically pick up the first one in your $PATH.</td>

View File

@ -116,6 +116,13 @@ mobi: epub
@echo "Conversion finished. The MOBI manual file is created."
pdf: $(OBJECTS) $(ANCHORCHECK)
@(\
cd src/Developer; \
pdflatex developer; \
pdflatex developer; \
mv developer.pdf ../../Developer.pdf; \
cd ../../; \
)
@(\
. $(VENV)/bin/activate ;\
cp -r src/* $(RSTDIR)/ ;\
@ -135,14 +142,7 @@ pdf: $(OBJECTS) $(ANCHORCHECK)
make && \
make && \
mv LAMMPS.pdf ../Manual.pdf && \
cd ../;
@(\
cd src/Developer; \
pdflatex developer; \
pdflatex developer; \
mv developer.pdf ../../Developer.pdf; \
cd ../../; \
)
cd ../;
@rm -rf latex/_sources
@rm -rf latex/PDF
@rm -rf latex/USER
@ -211,7 +211,7 @@ $(VENV):
@( \
$(VIRTUALENV) -p $(PYTHON) $(VENV); \
. $(VENV)/bin/activate; \
pip install Sphinx; \
pip install Sphinx==1.7.6; \
deactivate;\
)

View File

@ -82,17 +82,19 @@ which GPU hardware to build for.
[CMake build]:
-D GPU_API=value # value = opencl (default) or cuda
-D GPU_PREC=value # precision setting
# value = double or mixed (default) or single
-D OCL_TUNE=value # hardware choice for GPU_API=opencl
# generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA)
-D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda
# value = sm_XX, see below
# default is Cuda-compiler dependent, but typically sm_20
-D CUDPP_OPT=value # optimization setting for GPU_API=cuda
# enables CUDA Performance Primitives Optimizations
# yes (default) or no :pre
-D GPU_API=value # value = opencl (default) or cuda
-D GPU_PREC=value # precision setting
# value = double or mixed (default) or single
-D OCL_TUNE=value # hardware choice for GPU_API=opencl
# generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA)
-D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda
# value = sm_XX, see below
# default is Cuda-compiler dependent, but typically sm_20
-D CUDPP_OPT=value # optimization setting for GPU_API=cuda
# enables CUDA Performance Primitives Optimizations
# value = yes (default) or no
-D CUDA_MPS_SUPPORT=value # enables some tweaks required to run with active nvidia-cuda-mps daemon
# value = yes or no (default) :pre
GPU_ARCH settings for different GPU hardware is as follows:
@ -195,7 +197,7 @@ https://openkim.org/browse/models/by-model-drivers
If DOWNLOAD_KIM is set, the KIM library will be downloaded and built
inside the CMake build directory. If the KIM library is already on
your system (in a location CMake cannot find it), set the PKG_CONFIG_PATH
environment variable so that libkim-api-v2 can be found.
environment variable so that libkim-api can be found.
[Traditional make]:

View File

@ -224,7 +224,7 @@ OPT.
"wall/body/polyhedron"_fix_wall_body_polyhedron.html,
"wall/colloid"_fix_wall.html,
"wall/ees"_fix_wall_ees.html,
"wall/gran (o)"_fix_wall_gran.html,
"wall/gran"_fix_wall_gran.html,
"wall/gran/region"_fix_wall_gran_region.html,
"wall/harmonic"_fix_wall.html,
"wall/lj1043"_fix_wall.html,

View File

@ -57,6 +57,17 @@ library is then loaded by the Python interface. In this example we enable the
MOLECULE package and compile LAMMPS with C++ exceptions, PNG, JPEG and FFMPEG
output support enabled.
Step 1a: For the CMake based build system, the steps are:
mkdir $LAMMPS_DIR/build-shared
cd $LAMMPS_DIR/build-shared :pre
# MPI, PNG, Jpeg, FFMPEG are auto-detected
cmake ../cmake -DPKG_MOLECULE=yes -DLAMMPS_EXCEPTIONS=yes -DBUILD_LIB=yes -DBUILD_SHARED_LIBS=yes
make :pre
Step 1b: For the legacy, make based build system, the steps are:
cd $LAMMPS_DIR/src :pre
# add packages if necessary
@ -68,10 +79,9 @@ make mpi mode=shlib LMP_INC="-DLAMMPS_PNG -DLAMMPS_JPEG -DLAMMPS_FFMPEG -DLAMMPS
Step 2: Installing the LAMMPS Python package :h6
PyLammps is part of the lammps Python package. To install it simply install
that package into your current Python installation.
that package into your current Python installation with:
cd $LAMMPS_DIR/python
python install.py :pre
make install-python :pre
NOTE: Recompiling the shared library requires re-installing the Python package
@ -94,14 +104,21 @@ apt-get install python-virtualenv :pre
Creating a virtualenv with lammps installed :h6
# create virtualenv name 'testing' :pre
# create virtualenv named 'testing'
virtualenv $HOME/python/testing :pre
# activate 'testing' environment
source testing/bin/activate :pre
source $HOME/python/testing/bin/activate :pre
Now configure and compile the LAMMPS shared library as outlined above.
When using CMake and the shared library has already been build, you
need to re-run CMake to update the location of the python executable
to the location in the virtual environment with:
cmake . -DPYTHON_EXECUTABLE=$(which python) :pre
# install LAMMPS package in virtualenv
(testing) cd $LAMMPS_DIR/python
(testing) python install.py :pre
(testing) make install-python :pre
# install other useful packages
(testing) pip install matplotlib jupyter mpi4py :pre

View File

@ -1,7 +1,7 @@
<!-- HTML_ONLY -->
<HEAD>
<TITLE>LAMMPS Users Manual</TITLE>
<META NAME="docnumber" CONTENT="28 Feb 2019 version">
<META NAME="docnumber" CONTENT="29 Mar 2019 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD>
@ -21,7 +21,7 @@
:line
LAMMPS Documentation :c,h1
28 Feb 2019 version :c,h2
29 Mar 2019 version :c,h2
"What is a LAMMPS version?"_Manual_version.html

View File

@ -12,16 +12,23 @@ Installing LAMMPS in Python :h3
For Python to invoke LAMMPS, there are 2 files it needs to know about:
python/lammps.py
src/liblammps.so :ul
liblammps.so or liblammps.dylib :ul
Lammps.py is the Python wrapper on the LAMMPS library interface.
Liblammps.so is the shared LAMMPS library that Python loads, as
described above.
The python source code in lammps.py is the Python wrapper on the
LAMMPS library interface. The liblammps.so or liblammps.dylib file
is the shared LAMMPS library that Python loads dynamically.
You can insure Python can find these files in one of two ways:
You can achieve that Python can find these files in one of two ways:
set two environment variables
run the python/install.py script :ul
set two environment variables pointing to the location in the source tree
run "make install-python" or run the python/install.py script explicitly :ul
When calling "make install-python" LAMMPS will try to install the
python module and the shared library into the python site-packages folders;
either the system-wide ones, or the local users ones (in case of insufficient
permissions for the global install). Python will then find the module
and shared library file automatically. The exact location of these folders
depends on your python version and your operating system.
If you set the paths to these files as environment variables, you only
have to do it once. For the csh or tcsh shells, add something like
@ -30,42 +37,28 @@ this to your ~/.cshrc file, one line for each of the two files:
setenv PYTHONPATH $\{PYTHONPATH\}:/home/sjplimp/lammps/python
setenv LD_LIBRARY_PATH $\{LD_LIBRARY_PATH\}:/home/sjplimp/lammps/src :pre
If you use the python/install.py script, you need to invoke it every
time you rebuild LAMMPS (as a shared library) or make changes to the
python/lammps.py file.
On MacOSX you may also need to set DYLD_LIBRARY_PATH accordingly.
For Bourne/Korn shells accordingly into the corresponding files using
the "export" shell builtin.
You can invoke install.py from the python directory as
If you use "make install-python" or the python/install.py script, you need
to invoke it every time you rebuild LAMMPS (as a shared library) or
make changes to the python/lammps.py file, so that the site-packages
files are updated with the new version.
% python install.py \[libdir\] \[pydir\] :pre
If the default settings of "make install-python" are not what you want,
you can invoke install.py from the python directory manually as
The optional libdir is where to copy the LAMMPS shared library to; the
default is /usr/local/lib. The optional pydir is where to copy the
lammps.py file to; the default is the site-packages directory of the
version of Python that is running the install script.
% python install.py -m \<python module\> -l <shared library> -v <version.h file> \[-d \<pydir\>\] :pre
Note that libdir must be a location that is in your default
LD_LIBRARY_PATH, like /usr/local/lib or /usr/lib. And pydir must be a
location that Python looks in by default for imported modules, like
its site-packages dir. If you want to copy these files to
non-standard locations, such as within your own user space, you will
need to set your PYTHONPATH and LD_LIBRARY_PATH environment variables
accordingly, as above.
The -m flag points to the lammps.py python module file to be installed,
the -l flag points to the LAMMPS shared library file to be installed,
the -v flag points to the version.h file in the LAMMPS source
and the optional -d flag to a custom (legacy) installation folder :ul
If the install.py script does not allow you to copy files into system
directories, prefix the python command with "sudo". If you do this,
make sure that the Python that root runs is the same as the Python you
run. E.g. you may need to do something like
% sudo /usr/local/bin/python install.py \[libdir\] \[pydir\] :pre
You can also invoke install.py from the make command in the src
directory as
% make install-python :pre
In this mode you cannot append optional arguments. Again, you may
need to prefix this with "sudo". In this mode you cannot control
which Python is invoked by root.
If you use a legacy installation folder, you will need to set your
PYTHONPATH and LD_LIBRARY_PATH (and/or DYLD_LIBRARY_PATH) environment
variables accordingly, as described above.
Note that if you want Python to be able to load different versions of
the LAMMPS shared library (see "this section"_Python_shlib.html), you will

View File

@ -13,11 +13,11 @@ Overview of Python and LAMMPS :h3
LAMMPS can work together with Python in three ways. First, Python can
wrap LAMMPS through the its "library interface"_Howto_library.html, so
that a Python script can create one or more instances of LAMMPS and
launch one or more simulations. In Python lingo, this is "extending"
Python with LAMMPS.
launch one or more simulations. In Python lingo, this is called
"extending" Python with a LAMMPS module.
Second, a lower-level Python interface can be used indirectly through
provided PyLammps and IPyLammps wrapper classes, written in Python.
the provided PyLammps and IPyLammps wrapper classes, written in Python.
These wrappers try to simplify the usage of LAMMPS in Python by
providing an object-based interface to common LAMMPS functionality.
They also reduces the amount of code necessary to parameterize LAMMPS
@ -25,11 +25,12 @@ scripts through Python and make variables and computes directly
accessible.
Third, LAMMPS can use the Python interpreter, so that a LAMMPS
input script can invoke Python code directly, and pass information
back-and-forth between the input script and Python functions you
write. This Python code can also callback to LAMMPS to query or change
its attributes. In Python lingo, this is "embedding" Python in
LAMMPS. When used in this mode, Python can perform operations that
the simple LAMMPS input script syntax cannot.
input script or styles can invoke Python code directly, and pass
information back-and-forth between the input script and Python
functions you write. This Python code can also callback to LAMMPS
to query or change its attributes through the LAMMPS Python module
mentioned above. In Python lingo, this is "embedding" Python in
LAMMPS. When used in this mode, Python can perform script operations
that the simple LAMMPS input script syntax can not.

View File

@ -34,6 +34,10 @@ rebo, sw, tersoff :l
K-Space Styles: pppm, pppm/disp :l
:ule
IMPORTANT NOTE: None of the styles in the USER-INTEL package currently
support computing per-atom stress. If any compute or fix in your
input requires it, LAMMPS will abort with an error message.
[Speed-ups to expect:]
The speedups will depend on your simulation, the hardware, which

View File

@ -54,9 +54,10 @@ local quantities have the word "local" in their style,
e.g. {bond/local}. Styles with neither "atom" or "local" in their
style produce global quantities.
Note that a single compute produces either global or per-atom or local
quantities, but never more than one of these (with only a few
exceptions, as documented by individual compute commands).
Note that a single compute can produce either global or per-atom or
local quantities, but not both global and per-atom. It can produce
local quantities in tandem with global or per-atom quantities. The
compute doc page will explain.
Global, per-atom, and local quantities each come in three kinds: a
single scalar value, a vector of values, or a 2d array of values. The

View File

@ -83,8 +83,10 @@ not in the specified fix group. Local quantities are calculated by
each processor based on the atoms it owns, but there may be zero or
more per atoms.
Note that a single fix may produces either global or per-atom or local
quantities (or none at all), but never more than one of these.
Note that a single fix can produce either global or per-atom or local
quantities (or none at all), but not both global and per-atom. It can
produce local quantities in tandem with global or per-atom quantities.
The fix doc page will explain.
Global, per-atom, and local quantities each come in three kinds: a
single scalar value, a vector of values, or a 2d array of values. The

View File

@ -35,6 +35,7 @@ keyword = {mode} or {file} or {ave} or {start} or {beyond} or {overwrite} or {ti
{mode} arg = {scalar} or {vector}
scalar = all input values are scalars
vector = all input values are vectors
{kind} arg = {global} or {peratom} or {local}
{file} arg = filename
filename = name of file to output histogram(s) to
{ave} args = {one} or {running} or {window}
@ -92,7 +93,8 @@ either all global, all per-atom, or all local quantities. Inputs of
different kinds (e.g. global and per-atom) cannot be mixed. Atom
attributes are per-atom vector values. See the doc page for
individual "compute" and "fix" commands to see what kinds of
quantities they generate.
quantities they generate. See the optional {kind} keyword below for
how to force the fix ave/histo command to disambiguate if necessary.
Note that the output of this command is a single histogram for all
input values combined together, not one histogram per input value.
@ -231,6 +233,14 @@ keyword is set to {vector}, then all input values must be global or
per-atom or local vectors, or columns of global or per-atom or local
arrays.
The {kind} keyword only needs to be set if a compute or fix produces
more than one kind of output (global, per-atom, local). If this is
not the case, then LAMMPS will determine what kind of input is
provided and whether all the input arguments are consistent. If a
compute or fix produces more than one kind of output, the {kind}
keyword should be used to specify which output will be used. The
remaining input arguments must still be consistent.
The {beyond} keyword determines how input values that fall outside the
{lo} to {hi} bounds are treated. Values such that {lo} <= value <=
{hi} are assigned to one bin. Values on a bin boundary are assigned
@ -240,7 +250,7 @@ If {beyond} is set to {end} then values < {lo} are counted in the
first bin and values > {hi} are counted in the last bin. If {beyond}
is set to {extend} then two extra bins are created, so that there are
Nbins+2 total bins. Values < {lo} are counted in the first bin and
values > {hi} are counted in the last bin (Nbins+1). Values between
values > {hi} are counted in the last bin (Nbins+2). Values between
{lo} and {hi} (inclusive) are counted in bins 2 through Nbins+1. The
"coordinate" stored and printed for these two extra bins is {lo} and
{hi}.
@ -354,5 +364,6 @@ ave/chunk"_fix_ave_chunk.html, "fix ave/time"_fix_ave_time.html,
[Default:] none
The option defaults are mode = scalar, ave = one, start = 0, no file
output, beyond = ignore, and title 1,2,3 = strings as described above.
The option defaults are mode = scalar, kind = figured out from input
arguments, ave = one, start = 0, no file output, beyond = ignore, and
title 1,2,3 = strings as described above.

View File

@ -102,7 +102,7 @@ Bi = exp(beta * Vij(max)) :pre
where beta = 1/kTequil, and {Tequil} is the temperature of the system
and an argument to this fix. Note that Bi >= 1 at every step.
NOTE: To run GHD, the input script must also use the "fix
NOTE: To run a GHD simulation, the input script must also use the "fix
langevin"_fix_langevin.html command to thermostat the atoms at the
same {Tequil} as specified by this fix, so that the system is running
constant-temperature (NVT) dynamics. LAMMPS does not check that this
@ -166,9 +166,9 @@ correctly. There will just be fewer events because the hyper time
NOTE: If you have no physical intuition as to the smallest barrier
height in your system, a reasonable strategy to determine the largest
{Vmax} you can use for an LHD model, is to run a sequence of
{Vmax} you can use for a GHD model, is to run a sequence of
simulations with smaller and smaller {Vmax} values, until the event
rate does not change.
rate does not change (as a function of hyper time).
The {Tequil} argument is the temperature at which the system is
simulated; see the comment above about the "fix
@ -177,7 +177,8 @@ beta term in the exponential factor that determines how much boost is
achieved as a function of the bias potential.
In general, the lower the value of {Tequil} and the higher the value
of {Vmax}, the more boost will be achievable by the GHD algorithm.
of {Vmax}, the more time boost will be achievable by the GHD
algorithm.
:line
@ -190,41 +191,43 @@ The "fix_modify"_fix_modify.html {energy} option is supported by this
fix to add the energy of the bias potential to the the system's
potential energy as part of "thermodynamic output"_thermo_style.html.
This fix computes a global scalar and global vector of length 11, which
This fix computes a global scalar and global vector of length 12, which
can be accessed by various "output commands"_Howto_output.html. The
scalar is the magnitude of the bias potential (energy units) applied on
the current timestep. The vector stores the following quantities:
1 = boost factor on this step (unitless)
2 = max strain Eij of any bond on this step (unitless)
2 = max strain Eij of any bond on this step (absolute value, unitless)
3 = ID of first atom in the max-strain bond
4 = ID of second atom in the max-strain bond
5 = average # of bonds/atom on this step :ul
6 = fraction of timesteps with bias = 0.0 during this run
7 = max drift distance of any atom during this run (distance units)
8 = max bond length during this run (distance units) :ul
6 = fraction of timesteps where the biased bond has bias = 0.0 during this run
7 = fraction of timesteps where the biased bond has negative strain during this run
8 = max drift distance of any atom during this run (distance units)
9 = max bond length during this run (distance units) :ul
9 = cumulative hyper time since fix was defined (time units)
10 = cumulative count of event timesteps since fix was defined
11 = cumulative count of atoms in events since fix was defined :ul
10 = cumulative hyper time since fix was defined (time units)
11 = cumulative count of event timesteps since fix was defined
12 = cumulative count of atoms in events since fix was defined :ul
The first 5 quantities are for the current timestep. Quantities 6-8
are for the current hyper run. Quantities 9-11 are cumulative across
multiple runs (since the fix was defined in the input script).
The first 5 quantities are for the current timestep. Quantities 6-9
are for the current hyper run. They are reset each time a new hyper
run is performed. Quantities 19-12 are cumulative across multiple
runs (since the point in the input script the fix was defined).
For value 7, drift is the distance an atom moves between timesteps
when the bond list is reset, i.e. between events. Atoms involved in
an event will typically move the greatest distance since others are
typically oscillating around their lattice site.
For value 8, drift is the distance an atom moves between two quenched
states when the second quench determines an event has occurred. Atoms
involved in an event will typically move the greatest distance since
others typically remain near their original quenched position.
For value 10, events are checked for by the "hyper"_hyper.html command
For value 11, events are checked for by the "hyper"_hyper.html command
once every {Nevent} timesteps. This value is the count of those
timesteps on which one (or more) events was detected. It is NOT the
number of distinct events, since more than one event may occur in the
same {Nevent} time window.
For value 11, each time the "hyper"_hyper.html command checks for an
For value 12, each time the "hyper"_hyper.html command checks for an
event, it invokes a compute to flag zero or more atoms as
participating in one or more events. E.g. atoms that have displaced
more than some distance from the previous quench state. Value 11 is

View File

@ -22,10 +22,9 @@ Dcut = minimum distance between boosted bonds (distance units) :l
alpha = boostostat relaxation time (time units) :l
Btarget = desired time boost factor (unitless) :l
zero or more keyword/value pairs may be appended :l
keyword = {lost} or {check/bias} or {check/coeff}
{lostbond} value = error/warn/ignore
{check/bias} values = Nevery error/warn/ignore
{check/coeff} values = Nevery error/warn/ignore :pre
keyword = {check/ghost} or {check/bias} :l
{check/ghost} values = none
{check/bias} values = Nevery error/warn/ignore :pre
:ule
[Examples:]
@ -65,8 +64,8 @@ To understand this description, you should first read the description
of the GHD algorithm on the "fix hyper/global"_fix_hyper_global.html
doc page. This description of LHD builds on the GHD description.
The definition of bonds, Eij, and Emax are the same for GHD and LHD.
The formulas for Vij(max) and Fij(max) are also the same except for a
The definition of bonds and Eij are the same for GHD and LHD. The
formulas for Vij(max) and Fij(max) are also the same except for a
pre-factor Cij, explained below.
The bias energy Vij applied to a bond IJ with maximum strain is
@ -117,11 +116,11 @@ where Vkl(max) is the bias energy of the maxstrain bond KL within bond
IJ's neighborhood, beta = 1/kTequil, and {Tequil} is the temperature
of the system and an argument to this fix.
NOTE: To run LHD, the input script must also use the "fix
langevin"_fix_langevin.html command to thermostat the atoms at the
same {Tequil} as specified by this fix, so that the system is running
constant-temperature (NVT) dynamics. LAMMPS does not check that this
is done.
NOTE: To run an LHD simulation, the input script must also use the
"fix langevin"_fix_langevin.html command to thermostat the atoms at
the same {Tequil} as specified by this fix, so that the system is
running constant-temperature (NVT) dynamics. LAMMPS does not check
that this is done.
Note that if IJ = KL, then bond IJ is a biased bond on that timestep,
otherwise it is not. But regardless, the boost factor Bij can be
@ -216,20 +215,20 @@ each pair. E.g. something like 2x the cutoff of the interatomic
potential. In practice a {Dcut} value of ~10 Angstroms seems to work
well for many solid-state systems.
NOTE: You must also insure that ghost atom communication is performed
for a distance of at least {Dcut} + {cutevent} where {cutevent} = the
distance one or more atoms move (between quenched states) to be
considered an "event". It is an argument to the "compute
event/displace" command used to detect events. By default the ghost
communication distance is set by the pair_style cutoff, which will
typically be < {Dcut}. The "comm_modify cutoff"_comm_modify.html
command can be used to set the ghost cutoff explicitly, e.g.
NOTE: You should insure that ghost atom communication is performed for
a distance of at least {Dcut} + {cutevent} = the distance one or more
atoms move (between quenched states) to be considered an "event". It
is an argument to the "compute event/displace" command used to detect
events. By default the ghost communication distance is set by the
pair_style cutoff, which will typically be < {Dcut}. The "comm_modify
cutoff"_comm_modify.html command should be used to override the ghost
cutoff explicitly, e.g.
comm_modify cutoff 12.0 :pre
This fix does not know the {cutevent} parameter, but uses half the
bond length as an estimate to warn if the ghost cutoff is not long
enough.
Note that this fix does not know the {cutevent} parameter, but uses
half the {cutbond} parameter as an estimate to warn if the ghost
cutoff is not long enough.
As described above the {alpha} argument is a pre-factor in the
boostostat update equation for each bond's Cij prefactor. {Alpha} is
@ -269,7 +268,30 @@ NOTE: If you have no physical intuition as to the smallest barrier
height in your system, a reasonable strategy to determine the largest
{Btarget} you can use for an LHD model, is to run a sequence of
simulations with smaller and smaller {Btarget} values, until the event
rate does not change.
rate does not change (as a function of hyper time).
:line
Here is additional information on the optional keywords for this fix.
The {check/ghost} keyword turns on extra computation each timestep to
compute statistics about ghost atoms used to determine which bonds to
bias. The output of these stats are the vector values 14 and 15,
described below. If this keyword is not enabled, the output
of the stats will be zero.
The {check/bias} keyword turns on extra computation and communication
to check if any biased bonds are closer than {Dcut} to each other,
which should not be the case if LHD is operating correctly. Thus it
is a debugging check. The {Nevery} setting determines how often the
check is made. The {error}, {warn}, or {ignore} setting determines
what is done if the count of too-close bonds is not zero. Either the
code will exit, or issue a warning, or silently tally the count. The
count can be output as vector value 17, as described below. If this
keyword is not enabled, the output of that statistic will be 0.
Note that both of these computations are costly, hence they are only
enabled by these keywords.
:line
@ -282,95 +304,120 @@ The "fix_modify"_fix_modify.html {energy} option is supported by this
fix to add the energy of the bias potential to the the system's
potential energy as part of "thermodynamic output"_thermo_style.html.
This fix computes a global scalar and global vector of length 23,
which can be accessed by various "output
commands"_Howto_output.html. The scalar is the magnitude of
the bias potential (energy units) applied on the current timestep,
summed over all biased bonds. The vector stores the following
quantities:
This fix computes a global scalar and global vector of length 21,
which can be accessed by various "output commands"_Howto_output.html.
The scalar is the magnitude of the bias potential (energy units)
applied on the current timestep, summed over all biased bonds. The
vector stores the following quantities:
1 = # of biased bonds on this step
2 = max strain Eij of any bond on this step (unitless)
3 = average bias potential for all biased bonds on this step (energy units)
2 = max strain Eij of any bond on this step (absolute value, unitless)
3 = average bias coeff for all bonds on this step (unitless)
4 = average # of bonds/atom on this step
5 = average neighbor bonds/bond on this step within {Dcut} :ul
6 = fraction of steps and bonds with no bias during this run
7 = max drift distance of any atom during this run (distance units)
8 = max bond length during this run (distance units)
9 = average # of biased bonds/step during this run
10 = average bias potential for all biased bonds during this run (energy units)
11 = max bias potential for any biased bond during this run (energy units)
12 = min bias potential for any biased bond during this run (energy units)
13 = max distance from my sub-box of any ghost atom with maxstrain < qfactor during this run (distance units)
14 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units)
15 = count of ghost neighbor atoms not found on reneighbor steps during this run
16 = count of lost bond partners during this run
17 = average bias coeff for lost bond partners during this run
18 = count of bias overlaps found during this run
19 = count of non-matching bias coefficients found during this run :ul
6 = max bond length during this run (distance units)
7 = average # of biased bonds/step during this run
8 = fraction of biased bonds with no bias during this run
9 = fraction of biased bonds with negative strain during this run
10 = average bias coeff for all bonds during this run (unitless)
11 = min bias coeff for any bond during this run (unitless)
12 = max bias coeff for any bond during this run (unitless)
20 = cumulative hyper time since fix created (time units)
21 = cumulative count of event timesteps since fix created
22 = cumulative count of atoms in events since fix created
23 = cumulative # of new bonds since fix created :ul
13 = max drift distance of any bond atom during this run (distance units)
14 = max distance from proc subbox of any ghost atom with maxstrain < qfactor during this run (distance units)
15 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units)
16 = count of ghost atoms that could not be found on reneighbor steps during this run
17 = count of bias overlaps (< Dcut) found during this run
18 = cumulative hyper time since fix created (time units)
19 = cumulative count of event timesteps since fix created
20 = cumulative count of atoms in events since fix created
21 = cumulative # of new bonds formed since fix created :ul
The first quantities (1-5) are for the current timestep. Quantities
6-19 are for the current hyper run. They are reset each time a new
hyper run is performed. Quantities 20-23 are cumulative across
multiple runs (since the fix was defined in the input script).
6-17 are for the current hyper run. They are reset each time a new
hyper run is performed. Quantities 18-21 are cumulative across
multiple runs (since the point in the input script the fix was
defined).
For value 6, the numerator is a count of all biased bonds on every
For value 8, the numerator is a count of all biased bonds on each
timestep whose bias energy = 0.0 due to Eij >= {qfactor}. The
denominator is the count of all biased bonds on all timesteps.
For value 7, drift is the distance an atom moves between timesteps
when the bond list is reset, i.e. between events. Atoms involved in
an event will typically move the greatest distance since others are
typically oscillating around their lattice site.
For value 9, the numerator is a count of all biased bonds on each
timestep with negative strain. The denominator is the count of all
biased bonds on all timesteps.
For values 13 and 14, the maxstrain of a ghost atom is the maxstrain
of any bond it is part of, and it is checked for ghost atoms within
the bond neighbor cutoff.
Values 13-17 are mostly useful for debugging and diagnostic purposes.
Values 15-19 are mostly useful for debugging and diagnostic purposes.
For value 13, drift is the distance an atom moves between two quenched
states when the second quench determines an event has occurred. Atoms
involved in an event will typically move the greatest distance since
others typically remain near their original quenched position.
For values 15-17, it is possible that a ghost atom owned by another
processor will move far enough (e.g. as part of an event-in-progress)
that it will no longer be within the communication cutoff distance for
acquiring ghost atoms. Likewise it may be a ghost atom bond partner
that cannot be found because it has moved too far. These values count
those occurrences. Because they typically involve atoms that are part
of events, they do not usually indicate bad dynamics. Value 16 is the
average bias coefficient for bonds where a partner atom was lost.
For values 14-16, neighbor atoms in the full neighbor list with cutoff
{Dcut} may be ghost atoms outside a processor's sub-box. Before the
next event occurs they may move further than {Dcut} away from the
sub-box boundary. Value 14 is the furthest (from the sub-box) any
ghost atom in the neighbor list with maxstrain < {qfactor} was
accessed during the run. Value 15 is the same except that the ghost
atom's maxstrain may be >= {qfactor}, which may mean it is about to
participate in an event. Value 16 is a count of how many ghost atoms
could not be found on reneighbor steps, presumably because they moved
too far away due to their participation in an event (which will likely
be detected at the next quench).
For value 18, no two bonds should be biased if they are within a
Typical values for 14 and 15 should be slightly larger than {Dcut},
which accounts for ghost atoms initially at a {Dcut} distance moving
thermally before the next event takes place.
Note that for values 14 and 15 to be computed, the optional keyword
{check/ghost} must be specified. Otherwise these values will be zero.
This is because computing them incurs overhead, so the values are only
computed if requested.
Value 16 should be zero or small. As explained above a small count
likely means some ghost atoms were participating in their own events
and moved a longer distance. If the value is large, it likely means
the communication cutoff for ghosts is too close to {Dcut} leading to
many not-found ghost atoms before the next event. This may lead to a
reduced number of bonds being selected for biasing, since the code
assumes those atoms are part of highly strained bonds. As explained
above, the "comm_modify cutoff"_comm_modify.html command can be used
to set a longer cutoff.
For value 17, no two bonds should be biased if they are within a
{Dcut} distance of each other. This value should be zero, indicating
that no pair of bonds "overlap", meaning they are closer than {Dcut}
from each other.
that no pair of biased bonds are closer than {Dcut} from each other.
For value 19, the same bias coefficient is stored by both atoms in an
IJ bond. This value should be zero, indicating that for all bonds,
each atom in the bond stores the a bias coefficient with the same
value.
Note that for values 17 to be computed, the optional keyword
{check/bias} must be specified and it determines how often this check
is performed. This is because performing the check incurs overhead,
so if only computed as often as requested.
Value 20 is simply the specified {boost} factor times the number of
timestep times the timestep size.
The result at the end of the run is the cumulative total from every
timestep the check was made. Note that the value is a count of atoms
in bonds which found other atoms in bonds too close, so it is almost
always an over-count of the number of too-close bonds.
For value 21, events are checked for by the "hyper"_hyper.html command
Value 18 is simply the specified {boost} factor times the number of
timesteps times the timestep size.
For value 19, events are checked for by the "hyper"_hyper.html command
once every {Nevent} timesteps. This value is the count of those
timesteps on which one (or more) events was detected. It is NOT the
number of distinct events, since more than one event may occur in the
same {Nevent} time window.
For value 22, each time the "hyper"_hyper.html command checks for an
For value 20, each time the "hyper"_hyper.html command checks for an
event, it invokes a compute to flag zero or more atoms as
participating in one or more events. E.g. atoms that have displaced
more than some distance from the previous quench state. Value 22 is
more than some distance from the previous quench state. Value 20 is
the cumulative count of the number of atoms participating in any of
the events that were found.
Value 23 tallies the number of new bonds created by the bond reset
Value 21 tallies the number of new bonds created by the bond reset
operation. Bonds between a specific I,J pair of atoms may persist for
the entire hyperdynamics simulation if neither I or J are involved in
an event.
@ -378,6 +425,16 @@ an event.
The scalar and vector values calculated by this fix are all
"intensive".
This fix also computes a local vector of length the number of bonds
currently in the system. The value for each bond is its Cij prefactor
(bias coefficient). These values can be can be accessed by various
"output commands"_Howto_output.html. A particularly useful one is the
"fix ave/histo"_fix_ave_histo.html command which can be used to
histogram the Cij values to see if they are distributed reasonably
close to 1.0, which indicates a good choice of {Vmax}.
The local values calculated by this fix are unitless.
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
@ -392,7 +449,9 @@ doc page for more info.
"hyper"_hyper.html, "fix hyper/global"_fix_hyper_global.html
[Default:] None
[Default:]
The check/ghost and check/bias keywords are not enabled by default.
:line

View File

@ -7,22 +7,24 @@
:line
fix wall/gran command :h3
fix wall/gran/omp command :h3
[Syntax:]
fix ID group-ID wall/gran fstyle Kn Kt gamma_n gamma_t xmu dampflag wallstyle args keyword values ... :pre
fix ID group-ID wall/gran fstyle fstyle_params wallstyle args keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
wall/gran = style name of this fix command :l
fstyle = style of force interactions between particles and wall :l
possible choices: hooke, hooke/history, hertz/history :pre
Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below) :l
Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below) :l
gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below) :l
gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below) :l
xmu = static yield criterion (unitless value between 0.0 and 1.0e4) :l
dampflag = 0 or 1 if tangential damping force is excluded or included :l
possible choices: hooke, hooke/history, hertz/history, granular :pre
fstyle_params = parameters associated with force interaction style :l
For {hooke}, {hooke/history}, and {hertz/history}, {fstyle_params} are:
Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below)
Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below)
gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below)
gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below)
xmu = static yield criterion (unitless value between 0.0 and 1.0e4)
dampflag = 0 or 1 if tangential damping force is excluded or included :pre
For {granular}, {fstyle_params} are set using the same syntax as for the {pair_coeff} command of "pair_style granular"_pair_granular.html :pre
wallstyle = {xplane} or {yplane} or {zplane} or {zcylinder} :l
args = list of arguments for a particular style :l
{xplane} or {yplane} or {zplane} args = lo hi
@ -44,7 +46,10 @@ keyword = {wiggle} or {shear} :l
fix 1 all wall/gran hooke 200000.0 NULL 50.0 NULL 0.5 0 xplane -10.0 10.0
fix 1 all wall/gran hooke/history 200000.0 NULL 50.0 NULL 0.5 0 zplane 0.0 NULL
fix 2 all wall/gran hooke 100000.0 20000.0 50.0 30.0 0.5 1 zcylinder 15.0 wiggle z 3.0 2.0 :pre
fix 2 all wall/gran hooke 100000.0 20000.0 50.0 30.0 0.5 1 zcylinder 15.0 wiggle z 3.0 2.0
fix 3 all wall/gran granular hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 zplane 0.0 NULL
fix 4 all wall/gran granular jkr 1000.0 50.0 0.3 5.0 tangential mindlin 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall zcylinder 15.0 wiggle z 3.0 2.0
fix 5 all wall/gran granular dmt 1000.0 50.0 0.3 10.0 tangential mindlin 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall zplane 0.0 NULL :pre
[Description:]
@ -54,31 +59,40 @@ close enough to touch it.
The nature of the wall/particle interactions are determined by the
{fstyle} setting. It can be any of the styles defined by the
"pair_style granular"_pair_gran.html commands. Currently this is
{hooke}, {hooke/history}, or {hertz/history}. The equation for the
force between the wall and particles touching it is the same as the
corresponding equation on the "pair_style granular"_pair_gran.html doc
page, in the limit of one of the two particles going to infinite
radius and mass (flat wall). Specifically, delta = radius - r =
overlap of particle with wall, m_eff = mass of particle, and the
effective radius of contact = RiRj/Ri+Rj is just the radius of the
particle.
"pair_style gran/*"_pair_gran.html or the more general "pair_style
granular"_pair_granular.html" commands. Currently the options are
{hooke}, {hooke/history}, or {hertz/history} for the former, and
{granular} with all the possible options of the associated
{pair_coeff} command for the latter. The equation for the force
between the wall and particles touching it is the same as the
corresponding equation on the "pair_style gran/*"_pair_gran.html and
"pair_style_granular"_pair_granular.html doc pages, in the limit of
one of the two particles going to infinite radius and mass (flat
wall). Specifically, delta = radius - r = overlap of particle with
wall, m_eff = mass of particle, and the effective radius of contact =
RiRj/Ri+Rj is set to the radius of the particle.
The parameters {Kn}, {Kt}, {gamma_n}, {gamma_t}, {xmu} and {dampflag}
have the same meaning and units as those specified with the
"pair_style granular"_pair_gran.html commands. This means a NULL can
be used for either {Kt} or {gamma_t} as described on that page. If a
"pair_style gran/*"_pair_gran.html commands. This means a NULL can be
used for either {Kt} or {gamma_t} as described on that page. If a
NULL is used for {Kt}, then a default value is used where {Kt} = 2/7
{Kn}. If a NULL is used for {gamma_t}, then a default value is used
where {gamma_t} = 1/2 {gamma_n}.
All the model choices for cohesion, tangential friction, rolling
friction and twisting friction supported by the "pair_style
granular"_pair_granular.html through its {pair_coeff} command are also
supported for walls. These are discussed in greater detail on the doc
page for "pair_style granular"_pair_granular.html.
Note that you can choose a different force styles and/or different
values for the 6 wall/particle coefficients than for particle/particle
values for the wall/particle coefficients than for particle/particle
interactions. E.g. if you wish to model the wall as a different
material.
NOTE: As discussed on the doc page for "pair_style
granular"_pair_gran.html, versions of LAMMPS before 9Jan09 used a
gran/*"_pair_gran.html, versions of LAMMPS before 9Jan09 used a
different equation for Hertzian interactions. This means Hertizian
wall/particle interactions have also changed. They now include a
sqrt(radius) term which was not present before. Also the previous
@ -108,14 +122,14 @@ Optionally, the wall can be moving, if the {wiggle} or {shear}
keywords are appended. Both keywords cannot be used together.
For the {wiggle} keyword, the wall oscillates sinusoidally, similar to
the oscillations of particles which can be specified by the
"fix move"_fix_move.html command. This is useful in packing
simulations of granular particles. The arguments to the {wiggle}
keyword specify a dimension for the motion, as well as it's
{amplitude} and {period}. Note that if the dimension is in the plane
of the wall, this is effectively a shearing motion. If the dimension
is perpendicular to the wall, it is more of a shaking motion. A
{zcylinder} wall can only be wiggled in the z dimension.
the oscillations of particles which can be specified by the "fix
move"_fix_move.html command. This is useful in packing simulations of
granular particles. The arguments to the {wiggle} keyword specify a
dimension for the motion, as well as it's {amplitude} and {period}.
Note that if the dimension is in the plane of the wall, this is
effectively a shearing motion. If the dimension is perpendicular to
the wall, it is more of a shaking motion. A {zcylinder} wall can only
be wiggled in the z dimension.
Each timestep, the position of a wiggled wall in the appropriate {dim}
is set according to this equation:
@ -137,28 +151,6 @@ the clockwise direction for {vshear} > 0 or counter-clockwise for
{vshear} < 0. In this case, {vshear} is the tangential velocity of
the wall at whatever {radius} has been defined.
:line
Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are
functionally the same as the corresponding style without the suffix.
They have been optimized to run faster, depending on your available
hardware, as discussed on the "Speed packages"_Speed_packages.html doc
page. The accelerated styles take the same arguments and should
produce the same results, except for round-off and precision issues.
These accelerated styles are part of the GPU, USER-INTEL, KOKKOS,
USER-OMP and OPT packages, respectively. They are only enabled if
LAMMPS was built with those packages. See the "Build
package"_Build_package.html doc page for more info.
You can specify the accelerated styles explicitly in your input script
by including their suffix, or you can use the "-suffix command-line
switch"_Run_options.html when you invoke LAMMPS, or you can use the
"suffix"_suffix.html command in your input script.
See the "Speed packages"_Speed_packages.html doc page for more
instructions on how to use the accelerated styles effectively.
[Restart, fix_modify, output, run start/stop, minimize info:]
This fix writes the shear friction state of atoms interacting with the
@ -188,6 +180,7 @@ Any dimension (xyz) that has a granular wall must be non-periodic.
"fix move"_fix_move.html,
"fix wall/gran/region"_fix_wall_gran_region.html,
"pair_style granular"_pair_gran.html
"pair_style gran/*"_pair_gran.html
"pair_style granular"_pair_granular.html
[Default:] none

View File

@ -10,24 +10,30 @@ fix wall/gran/region command :h3
[Syntax:]
fix ID group-ID wall/gran/region fstyle Kn Kt gamma_n gamma_t xmu dampflag wallstyle regionID :pre
fix ID group-ID wall/gran/region fstyle fstyle_params wallstyle regionID :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
wall/region = style name of this fix command :l
fstyle = style of force interactions between particles and wall :l
possible choices: hooke, hooke/history, hertz/history :pre
Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below) :l
Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below) :l
gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below) :l
gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below) :l
xmu = static yield criterion (unitless value between 0.0 and 1.0e4) :l
dampflag = 0 or 1 if tangential damping force is excluded or included :l
possible choices: hooke, hooke/history, hertz/history, granular :pre
fstyle_params = parameters associated with force interaction style :l
For {hooke}, {hooke/history}, and {hertz/history}, {fstyle_params} are:
Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below)
Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below)
gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below)
gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below)
xmu = static yield criterion (unitless value between 0.0 and 1.0e4)
dampflag = 0 or 1 if tangential damping force is excluded or included :pre
For {granular}, {fstyle_params} are set using the same syntax as for the {pair_coeff} command of "pair_style granular"_pair_granular.html :pre
wallstyle = region (see "fix wall/gran"_fix_wall_gran.html for options for other kinds of walls) :l
region-ID = region whose boundary will act as wall :l,ule
[Examples:]
fix wall all wall/gran/region hooke/history 1000.0 200.0 200.0 100.0 0.5 1 region myCone :pre
fix wall all wall/gran/region hooke/history 1000.0 200.0 200.0 100.0 0.5 1 region myCone
fix 3 all wall/gran/region granular hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 region myBox
fix 4 all wall/gran/region granular jkr 1000.0 50.0 tangential linear_history 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall region myCone
fix 5 all wall/gran/region granular dmt 1000.0 50.0 0.3 10.0 tangential linear_history 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall region myCone :pre
[Description:]
@ -42,8 +48,8 @@ Here are snapshots of example models using this command.
Corresponding input scripts can be found in examples/granregion.
Click on the images to see a bigger picture. Movies of these
simulations are "here on the Movies
page"_http://lammps.sandia.gov/movies.html#granregion of the
LAMMPS web site.
page"_http://lammps.sandia.gov/movies.html#granregion of the LAMMPS
web site.
:image(JPG/gran_funnel_small.jpg,JPG/gran_funnel.png)
:image(JPG/gran_mixer_small.jpg,JPG/gran_mixer.png)
@ -123,12 +129,16 @@ to make the two faces differ by epsilon in their position.
The nature of the wall/particle interactions are determined by the
{fstyle} setting. It can be any of the styles defined by the
"pair_style granular"_pair_gran.html commands. Currently this is
{hooke}, {hooke/history}, or {hertz/history}. The equation for the
force between the wall and particles touching it is the same as the
corresponding equation on the "pair_style granular"_pair_gran.html doc
page, but the effective radius is calculated using the radius of the
particle and the radius of curvature of the wall at the contact point.
"pair_style gran/*"_pair_gran.html or the more general "pair_style
granular"_pair_granular.html" commands. Currently the options are
{hooke}, {hooke/history}, or {hertz/history} for the former, and
{granular} with all the possible options of the associated
{pair_coeff} command for the latter. The equation for the force
between the wall and particles touching it is the same as the
corresponding equation on the "pair_style gran/*"_pair_gran.html and
"pair_style_granular"_pair_granular.html doc pages, but the effective
radius is calculated using the radius of the particle and the radius
of curvature of the wall at the contact point.
Specifically, delta = radius - r = overlap of particle with wall,
m_eff = mass of particle, and RiRj/Ri+Rj is the effective radius, with
@ -141,12 +151,18 @@ particle.
The parameters {Kn}, {Kt}, {gamma_n}, {gamma_t}, {xmu} and {dampflag}
have the same meaning and units as those specified with the
"pair_style granular"_pair_gran.html commands. This means a NULL can
be used for either {Kt} or {gamma_t} as described on that page. If a
"pair_style gran/*"_pair_gran.html commands. This means a NULL can be
used for either {Kt} or {gamma_t} as described on that page. If a
NULL is used for {Kt}, then a default value is used where {Kt} = 2/7
{Kn}. If a NULL is used for {gamma_t}, then a default value is used
where {gamma_t} = 1/2 {gamma_n}.
All the model choices for cohesion, tangential friction, rolling
friction and twisting friction supported by the "pair_style
granular"_pair_granular.html through its {pair_coeff} command are also
supported for walls. These are discussed in greater detail on the doc
page for "pair_style granular"_pair_granular.html.
Note that you can choose a different force styles and/or different
values for the 6 wall/particle coefficients than for particle/particle
interactions. E.g. if you wish to model the wall as a different
@ -154,9 +170,9 @@ material.
[Restart, fix_modify, output, run start/stop, minimize info:]
Similar to "fix wall/gran"_fix_wall_gran.html command, this fix
writes the shear friction state of atoms interacting with the wall to
"binary restart files"_restart.html, so that a simulation can continue
Similar to "fix wall/gran"_fix_wall_gran.html command, this fix writes
the shear friction state of atoms interacting with the wall to "binary
restart files"_restart.html, so that a simulation can continue
correctly if granular potentials with shear "history" effects are
being used. This fix also includes info about a moving region in the
restart file. See the "read_restart"_read_restart.html command for
@ -170,14 +186,14 @@ So you must re-define your region and if it is a moving region, define
its motion attributes in a way that is consistent with the simulation
that wrote the restart file. In particular, if you want to change the
region motion attributes (e.g. its velocity), then you should ensure
the position/orientation of the region at the initial restart
timestep is the same as it was on the timestep the restart file was
written. If this is not possible, you may need to ignore info in the
restart file by defining a new fix wall/gran/region command in your
restart script, e.g. with a different fix ID. Or if you want to keep
the shear history info but discard the region motion information, you
can use the same fix ID for fix wall/gran/region, but assign it a
region with a different region ID.
the position/orientation of the region at the initial restart timestep
is the same as it was on the timestep the restart file was written.
If this is not possible, you may need to ignore info in the restart
file by defining a new fix wall/gran/region command in your restart
script, e.g. with a different fix ID. Or if you want to keep the
shear history info but discard the region motion information, you can
use the same fix ID for fix wall/gran/region, but assign it a region
with a different region ID.
None of the "fix_modify"_fix_modify.html options are relevant to this
fix. No global or per-atom quantities are stored by this fix for

View File

@ -580,6 +580,7 @@ pair_extep.html
pair_gauss.html
pair_gayberne.html
pair_gran.html
pair_granular.html
pair_gromacs.html
pair_gw.html
pair_ilp_graphene_hbn.html

765
doc/src/pair_granular.txt Normal file
View File

@ -0,0 +1,765 @@
<script type="text/javascript"
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } });
</script>
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Commands_all.html)
:line
pair_style granular command :h3
[Syntax:]
pair_style granular cutoff :pre
cutoff = global cutoff (optional). See discussion below. :l
[Examples:]
pair_style granular
pair_coeff * * hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 :pre
pair_style granular
pair_coeff * * hertz 1000.0 50.0 tangential mindlin NULL 1.0 0.4 :pre
pair_style granular
pair_coeff * * hertz/material 1e8 0.3 tangential mindlin_rescale NULL 1.0 0.4 damping tsuji :pre
pair_style granular
pair_coeff 1 1 jkr 1000.0 50.0 tangential mindlin 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 2 2 hertz 200.0 20.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall :pre
pair_style granular
pair_coeff 1 1 hertz 1000.0 50.0 tangential mindlin 800.0 0.5 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 2 2 dmt 1000.0 50.0 0.3 10.0 tangential mindlin 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall
pair_coeff 1 2 dmt 1000.0 50.0 0.3 10.0 tangential mindlin 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall :pre
[Description:]
The {granular} styles support a variety of options for the normal,
tangential, rolling and twisting forces resulting from contact between
two granular particles. This expands on the options offered by the
"pair gran/*"_pair_gran.html pair styles. The total computed forces
and torques are the sum of various models selected for the normal,
tangential, rolling and twisting modes of motion.
All model choices and parameters are entered in the
"pair_coeff"_pair_coeff.html command, as described below. Unlike
e.g. "pair gran/hooke"_pair_gran.html, coefficient values are not
global, but can be set to different values for different combinations
of particle types, as determined by the "pair_coeff"_pair_coeff.html
command. If the contact model choice is the same for two particle
types, the mixing for the cross-coefficients can be carried out
automatically. This is shown in the second example, where model
choices are the same for type 1 - type 1 as for type 2 - type2
interactions, but coefficients are different. In this case, the
coefficients for type 2 - type interactions can be determined from
mixing rules discussed below. For additional flexibility,
coefficients as well as model forms can vary between particle types,
as shown in the third example: type 1- type 1 interactions are based
on a Hertzian normal contact model and 2-2 interactions are based on a
DMT cohesive model (see below). In that example, 1-1 and 2-2
interactions have different model forms, in which case mixing of
coefficients cannot be determined, so 1-2 interactions must be
explicitly defined via the {pair_coeff 1 2} command, otherwise an
error would result.
:line
The first required keyword for the {pair_coeff} command is the normal
contact model. Currently supported options for normal contact models
and their required arguments are:
{hooke} : \(k_n\), \(\eta_\{n0\}\) (or \(e\))
{hertz} : \(k_n\), \(\eta_\{n0\}\) (or \(e\))
{hertz/material} : E, \(\eta_\{n0\}\) (or \(e\)), \(\nu\)
{dmt} : E, \(\eta_\{n0\}\) (or \(e\)), \(\nu\), \(\gamma\)
{jkr} : E, \(\eta_\{n0\}\) (or \(e\)), \(\nu\), \(\gamma\) :ol
Here, \(k_n\) is spring stiffness (with units that depend on model
choice, see below); \(\eta_\{n0\}\) is a damping prefactor (or, in its
place a coefficient of restitution \(e\), depending on the choice of
damping mode, see below); E is Young's modulus in units of
{force}/{length}^2, i.e. {pressure}; \(\nu\) is Poisson's ratio and
\(\gamma\) is a surface energy density, in units of
{energy}/{length}^2.
For the {hooke} model, the normal, elastic component of force acting
on particle {i} due to contact with particle {j} is given by:
\begin\{equation\}
\mathbf\{F\}_\{ne, Hooke\} = k_N \delta_\{ij\} \mathbf\{n\}
\end\{equation\}
Where \(\delta = R_i + R_j - \|\mathbf\{r\}_\{ij\}\|\) is the particle
overlap, \(R_i, R_j\) are the particle radii, \(\mathbf\{r\}_\{ij\} =
\mathbf\{r\}_i - \mathbf\{r\}_j\) is the vector separating the two
particle centers (note the i-j ordering so that \(F_\{ne\}\) is
positive for repulsion), and \(\mathbf\{n\} =
\frac\{\mathbf\{r\}_\{ij\}\}\{\|\mathbf\{r\}_\{ij\}\|\}\). Therefore,
for {hooke}, the units of the spring constant \(k_n\) are
{force}/{distance}, or equivalently {mass}/{time^2}.
For the {hertz} model, the normal component of force is given by:
\begin\{equation\}
\mathbf\{F\}_\{ne, Hertz\} = k_N R_\{eff\}^\{1/2\}\delta_\{ij\}^\{3/2\} \mathbf\{n\}
\end\{equation\}
Here, \(R_\{eff\} = \frac\{R_i R_j\}\{R_i + R_j\}\) is the effective
radius, denoted for simplicity as {R} from here on. For {hertz}, the
units of the spring constant \(k_n\) are {force}/{length}^2, or
equivalently {pressure}.
For the {hertz/material} model, the force is given by:
\begin\{equation\}
\mathbf\{F\}_\{ne, Hertz/material\} = \frac\{4\}\{3\} E_\{eff\} R_\{eff\}^\{1/2\}\delta_\{ij\}^\{3/2\} \mathbf\{n\}
\end\{equation\}
Here, \(E_\{eff\} = E = \left(\frac\{1-\nu_i^2\}\{E_i\} +
\frac\{1-\nu_j^2\}\{E_j\}\right)^\{-1\}\) is the effective Young's
modulus, with \(\nu_i, \nu_j \) the Poisson ratios of the particles of
types {i} and {j}. Note that if the elastic modulus and the shear
modulus of the two particles are the same, the {hertz/material} model
is equivalent to the {hertz} model with \(k_N = 4/3 E_\{eff\}\)
The {dmt} model corresponds to the
"(Derjaguin-Muller-Toporov)"_#DMT1975 cohesive model, where the force
is simply Hertz with an additional attractive cohesion term:
\begin\{equation\}
\mathbf\{F\}_\{ne, dmt\} = \left(\frac\{4\}\{3\} E R^\{1/2\}\delta_\{ij\}^\{3/2\} - 4\pi\gamma R\right)\mathbf\{n\}
\end\{equation\}
The {jkr} model is the "(Johnson-Kendall-Roberts)"_#JKR1971 model,
where the force is computed as:
\begin\{equation\}
\label\{eq:force_jkr\}
\mathbf\{F\}_\{ne, jkr\} = \left(\frac\{4Ea^3\}\{3R\} - 2\pi a^2\sqrt\{\frac\{4\gamma E\}\{\pi a\}\}\right)\mathbf\{n\}
\end\{equation\}
Here, {a} is the radius of the contact zone, related to the overlap
\(\delta\) according to:
\begin\{equation\}
\delta = a^2/R - 2\sqrt\{\pi \gamma a/E\}
\end\{equation\}
LAMMPS internally inverts the equation above to solve for {a} in terms
of \(\delta\), then solves for the force in the previous
equation. Additionally, note that the JKR model allows for a tensile
force beyond contact (i.e. for \(\delta < 0\)), up to a maximum of
\(3\pi\gamma R\) (also known as the 'pull-off' force). Note that this
is a hysteretic effect, where particles that are not contacting
initially will not experience force until they come into contact
\(\delta \geq 0\); as they move apart and (\(\delta < 0\)), they
experience a tensile force up to \(3\pi\gamma R\), at which point they
lose contact.
:line
In addition, the normal force is augmented by a damping term of the
following general form:
\begin\{equation\}
\mathbf\{F\}_\{n,damp\} = -\eta_n \mathbf\{v\}_\{n,rel\}
\end\{equation\}
Here, \(\mathbf\{v\}_\{n,rel\} = (\mathbf\{v\}_j - \mathbf\{v\}_i)
\cdot \mathbf\{n\}\) is the component of relative velocity along
\(\mathbf\{n\}\).
The optional {damping} keyword to the {pair_coeff} command followed by
a keyword determines the model form of the damping factor \(\eta_n\),
and the interpretation of the \(\eta_\{n0\}\) or \(e\) coefficients
specified as part of the normal contact model settings. The {damping}
keyword and corresponding model form selection may be appended
anywhere in the {pair coeff} command. Note that the choice of damping
model affects both the normal and tangential damping (and depending on
other settings, potentially also the twisting damping). The options
for the damping model currently supported are:
{velocity}
{viscoelastic}
{tsuji} :ol
If the {damping} keyword is not specified, the {viscoelastic} model is
used by default.
For {damping velocity}, the normal damping is simply equal to the
user-specified damping coefficient in the {normal} model:
\begin\{equation\}
\eta_n = \eta_\{n0\}\
\end\{equation\}
Here, \(\gamma_n\) is the damping coefficient specified for the normal
contact model, in units of {mass}/{time},
The {damping viscoelastic} model is based on the viscoelastic
treatment of "(Brilliantov et al)"_#Brill1996, where the normal
damping is given by:
\begin\{equation\}
\eta_n = \eta_\{n0\}\ a m_\{eff\}
\end\{equation\}
Here, \(m_\{eff\} = m_i m_j/(m_i + m_j)\) is the effective mass, {a}
is the contact radius, given by \(a =\sqrt\{R\delta\}\) for all models
except {jkr}, for which it is given implicitly according to \(delta =
a^2/R - 2\sqrt\{\pi \gamma a/E\}\). In this case, \eta_\{n0\}\ is in
units of 1/({time}*{distance}).
The {tsuji} model is based on the work of "(Tsuji et
al)"_#Tsuji1992. Here, the damping coefficient specified as part of
the normal model is interpreted as a restitution coefficient
\(e\). The damping constant \(\eta_n\) is given by:
\begin\{equation\}
\eta_n = \alpha (m_\{eff\}k_n)^\{1/2\}
\end\{equation\}
For normal contact models based on material parameters, \(k_n =
4/3Ea\). The parameter \(\alpha\) is related to the restitution
coefficient {e} according to:
\begin\{equation\}
\alpha = 1.2728-4.2783e+11.087e^2-22.348e^3+27.467e^4-18.022e^5+4.8218e^6
\end\{equation\}
The dimensionless coefficient of restitution \(e\) specified as part
of the normal contact model parameters should be between 0 and 1, but
no error check is performed on this.
The total normal force is computed as the sum of the elastic and
damping components:
\begin\{equation\}
\mathbf\{F\}_n = \mathbf\{F\}_\{ne\} + \mathbf\{F\}_\{n,damp\}
\end\{equation\}
:line
The {pair_coeff} command also requires specification of the tangential
contact model. The required keyword {tangential} is expected, followed
by the model choice and associated parameters. Currently supported
tangential model choices and their expected parameters are as follows:
{linear_nohistory} : \(x_\{\gamma,t\}\), \(\mu_s\)
{linear_history} : \(k_t\), \(x_\{\gamma,t\}\), \(\mu_s\)
{mindlin} : \(k_t\) or NULL, \(x_\{\gamma,t\}\), \(\mu_s\)
{mindlin_rescale} : \(k_t\) or NULL, \(x_\{\gamma,t\}\), \(\mu_s\) :ol
Here, \(x_\{\gamma,t\}\) is a dimensionless multiplier for the normal
damping \(\eta_n\) that determines the magnitude of the tangential
damping, \(\mu_t\) is the tangential (or sliding) friction
coefficient, and \(k_t\) is the tangential stiffness coefficient.
For {tangential linear_nohistory}, a simple velocity-dependent Coulomb
friction criterion is used, which mimics the behavior of the {pair
gran/hooke} style. The tangential force (\mathbf\{F\}_t\) is given by:
\begin\{equation\}
\mathbf\{F\}_t = -min(\mu_t F_\{n0\}, \|\mathbf\{F\}_\mathrm\{t,damp\}\|) \mathbf\{t\}
\end\{equation\}
The tangential damping force \(\mathbf\{F\}_\mathrm\{t,damp\}\) is given by:
\begin\{equation\}
\mathbf\{F\}_\mathrm\{t,damp\} = -\eta_t \mathbf\{v\}_\{t,rel\}
\end\{equation\}
The tangential damping prefactor \(\eta_t\) is calculated by scaling
the normal damping \(\eta_n\) (see above):
\begin\{equation\}
\eta_t = -x_\{\gamma,t\} \eta_n
\end\{equation\}
The normal damping prefactor \(\eta_n\) is determined by the choice of
the {damping} keyword, as discussed above. Thus, the {damping}
keyword also affects the tangential damping. The parameter
\(x_\{\gamma,t\}\) is a scaling coefficient. Several works in the
literature use \(x_\{\gamma,t\} = 1\) ("Marshall"_#Marshall2009,
"Tsuji et al"_#Tsuji1992, "Silbert et al"_#Silbert2001). The relative
tangential velocity at the point of contact is given by
\(\mathbf\{v\}_\{t, rel\} = \mathbf\{v\}_\{t\} - (R_i\Omega_i +
R_j\Omega_j) \times \mathbf\{n\}\), where \(\mathbf\{v\}_\{t\} =
\mathbf\{v\}_r - \mathbf\{v\}_r\cdot\mathbf\{n\}\), \(\mathbf\{v\}_r =
\mathbf\{v\}_j - \mathbf\{v\}_i\). The direction of the applied force
is \(\mathbf\{t\} =
\mathbf\{v_\{t,rel\}\}/\|\mathbf\{v_\{t,rel\}\}\|\).
The normal force value \(F_\{n0\}\) used to compute the critical force
depends on the form of the contact model. For non-cohesive models
({hertz}, {hertz/material}, {hooke}), it is given by the magnitude of
the normal force:
\begin\{equation\}
F_\{n0\} = \|\mathbf\{F\}_n\|
\end\{equation\}
For cohesive models such as {jkr} and {dmt}, the critical force is
adjusted so that the critical tangential force approaches \(\mu_t
F_\{pulloff\}\), see "Marshall"_#Marshall2009, equation 43, and
"Thornton"_#Thornton1991. For both models, \(F_\{n0\}\) takes the
form:
\begin\{equation\}
F_\{n0\} = \|\mathbf\{F\}_ne + 2 F_\{pulloff\}\|
\end\{equation\}
Where \(F_\{pulloff\} = 3\pi \gamma R \) for {jkr}, and
\(F_\{pulloff\} = 4\pi \gamma R \) for {dmt}.
The remaining tangential options all use accumulated tangential
displacement (i.e. contact history). This is discussed below in the
context of the {linear_history} option, but the same treatment of the
accumulated displacement applies to the other options as well.
For {tangential linear_history}, the tangential force is given by:
\begin\{equation\}
\mathbf\{F\}_t = -min(\mu_t F_\{n0\}, \|-k_t\mathbf\{\xi\} + \mathbf\{F\}_\mathrm\{t,damp\}\|) \mathbf\{t\}
\end\{equation\}
Here, \(\mathbf\{\xi\}\) is the tangential displacement accumulated
during the entire duration of the contact:
\begin\{equation\}
\mathbf\{\xi\} = \int_\{t0\}^t \mathbf\{v\}_\{t,rel\}(\tau) \mathrm\{d\}\tau
\end\{equation\}
This accumulated tangential displacement must be adjusted to account
for changes in the frame of reference of the contacting pair of
particles during contact. This occurs due to the overall motion of the
contacting particles in a rigid-body-like fashion during the duration
of the contact. There are two modes of motion that are relevant: the
'tumbling' rotation of the contacting pair, which changes the
orientation of the plane in which tangential displacement occurs; and
'spinning' rotation of the contacting pair about the vector connecting
their centers of mass (\(\mathbf\{n\}\)). Corrections due to the
former mode of motion are made by rotating the accumulated
displacement into the plane that is tangential to the contact vector
at each step, or equivalently removing any component of the tangential
displacement that lies along \(\mathbf\{n\}\), and rescaling to
preserve the magnitude. This follows the discussion in
"Luding"_#Luding2008, see equation 17 and relevant discussion in that
work:
\begin\{equation\}
\mathbf\{\xi\} = \left(\mathbf\{\xi'\} - (\mathbf\{n\} \cdot \mathbf\{\xi'\})\mathbf\{n\}\right) \frac\{\|\mathbf\{\xi'\}\|\}\{\|\mathbf\{\xi'\}\| - \mathbf\{n\}\cdot\mathbf\{\xi'\}\}
\label\{eq:rotate_displacements\}
\end\{equation\}
Here, \(\mathbf\{\xi'\}\) is the accumulated displacement prior to the
current time step and \(\mathbf\{\xi\}\) is the corrected
displacement. Corrections to the displacement due to the second mode
of motion described above (rotations about \(\mathbf\{n\}\)) are not
currently implemented, but are expected to be minor for most
simulations.
Furthermore, when the tangential force exceeds the critical force, the
tangential displacement is re-scaled to match the value for the
critical force (see "Luding"_#Luding2008, equation 20 and related
discussion):
\begin\{equation\}
\mathbf\{\xi\} = -\frac\{1\}\{k_t\}\left(\mu_t F_\{n0\}\mathbf\{t\} + \mathbf\{F\}_\{t,damp\}\right)
\end\{equation\}
The tangential force is added to the total normal force (elastic plus
damping) to produce the total force on the particle. The tangential
force also acts at the contact point (defined as the center of the
overlap region) to induce a torque on each particle according to:
\begin\{equation\}
\mathbf\{\tau\}_i = -(R_i - 0.5 \delta) \mathbf\{n\} \times \mathbf\{F\}_t
\end\{equation\}
\begin\{equation\}
\mathbf\{\tau\}_j = -(R_j - 0.5 \delta) \mathbf\{n\} \times \mathbf\{F\}_t
\end\{equation\}
For {tangential mindlin}, the "Mindlin"_#Mindlin1949 no-slip solution is used, which differs from the {linear_history}
option by an additional factor of {a}, the radius of the contact region. The tangential force is given by:
\begin\{equation\}
\mathbf\{F\}_t = -min(\mu_t F_\{n0\}, \|-k_t a \mathbf\{\xi\} + \mathbf\{F\}_\mathrm\{t,damp\}\|) \mathbf\{t\}
\end\{equation\}
Here, {a} is the radius of the contact region, given by \(a = \delta
R\) for all normal contact models, except for {jkr}, where it is given
implicitly by \(\delta = a^2/R - 2\sqrt\{\pi \gamma a/E\}\), see
discussion above. To match the Mindlin solution, one should set \(k_t
= 8G\), where \(G\) is the shear modulus, related to Young's modulus
\(E\) by \(G = E/(2(1+\nu))\), where \(\nu\) is Poisson's ratio. This
can also be achieved by specifying {NULL} for \(k_t\), in which case a
normal contact model that specifies material parameters \(E\) and
\(\nu\) is required (e.g. {hertz/material}, {dmt} or {jkr}). In this
case, mixing of the shear modulus for different particle types {i} and
{j} is done according to:
\begin\{equation\}
1/G = 2(2-\nu_i)(1+\nu_i)/E_i + 2(2-\nu_j)(1+\nu_j)/E_j
\end\{equation\}
The {mindlin_rescale} option uses the same form as {mindlin}, but the
magnitude of the tangential displacement is re-scaled as the contact
unloads, i.e. if \(a < a_\{t_\{n-1\}\}\):
\begin\{equation\}
\mathbf\{\xi\} = \mathbf\{\xi_\{t_\{n-1\}\}\} \frac\{a\}\{a_\{t_\{n-1\}\}\}
\end\{equation\}
Here, \(t_\{n-1\}\) indicates the value at the previous time
step. This rescaling accounts for the fact that a decrease in the
contact area upon unloading leads to the contact being unable to
support the previous tangential loading, and spurious energy is
created without the rescaling above ("Walton"_#WaltonPC ). See also
discussion in "Thornton et al, 2013"_#Thornton2013 , particularly
equation 18(b) of that work and associated discussion.
:line
The optional {rolling} keyword enables rolling friction, which resists
pure rolling motion of particles. The options currently supported are:
{none}
{sds} : \(k_\{roll\}\), \(\gamma_\{roll\}\), \(\mu_\{roll\}\) :ol
If the {rolling} keyword is not specified, the model defaults to {none}.
For {rolling sds}, rolling friction is computed via a
spring-dashpot-slider, using a 'pseudo-force' formulation, as detailed
by "Luding"_#Luding2008. Unlike the formulation in
"Marshall"_#Marshall2009, this allows for the required adjustment of
rolling displacement due to changes in the frame of reference of the
contacting pair. The rolling pseudo-force is computed analogously to
the tangential force:
\begin\{equation\}
\mathbf\{F\}_\{roll,0\} = k_\{roll\} \mathbf\{\xi\}_\{roll\} - \gamma_\{roll\} \mathbf\{v\}_\{roll\}
\end\{equation\}
Here, \(\mathbf\{v\}_\{roll\} = -R(\mathbf\{\Omega\}_i -
\mathbf\{\Omega\}_j) \times \mathbf\{n\}\) is the relative rolling
velocity, as given in "Wang et al"_#Wang2015 and
"Luding"_#Luding2008. This differs from the expressions given by "Kuhn
and Bagi"_#Kuhn2004 and used in "Marshall"_#Marshall2009; see "Wang et
al"_#Wang2015 for details. The rolling displacement is given by:
\begin\{equation\}
\mathbf\{\xi\}_\{roll\} = \int_\{t_0\}^t \mathbf\{v\}_\{roll\} (\tau) \mathrm\{d\} \tau
\end\{equation\}
A Coulomb friction criterion truncates the rolling pseudo-force if it
exceeds a critical value:
\begin\{equation\}
\mathbf\{F\}_\{roll\} = min(\mu_\{roll\} F_\{n,0\}, \|\mathbf\{F\}_\{roll,0\}\|)\mathbf\{k\}
\end\{equation\}
Here, \(\mathbf\{k\} =
\mathbf\{v\}_\{roll\}/\|\mathbf\{v\}_\{roll\}\|\) is the direction of
the pseudo-force. As with tangential displacement, the rolling
displacement is rescaled when the critical force is exceeded, so that
the spring length corresponds the critical force. Additionally, the
displacement is adjusted to account for rotations of the frame of
reference of the two contacting particles in a manner analogous to the
tangential displacement.
The rolling pseudo-force does not contribute to the total force on
either particle (hence 'pseudo'), but acts only to induce an equal and
opposite torque on each particle, according to:
\begin\{equation\}
\tau_\{roll,i\} = R_\{eff\} \mathbf\{n\} \times \mathbf\{F\}_\{roll\}
\end\{equation\}
\begin\{equation\}
\tau_\{roll,j\} = -\tau_\{roll,i\}
\end\{equation\}
:line
The optional {twisting} keyword enables twisting friction, which
resists rotation of two contacting particles about the vector
\(\mathbf\{n\}\) that connects their centers. The options currently
supported are:
{none}
{sds} : \(k_\{twist\}\), \(\gamma_\{twist\}\), \(\mu_\{twist\}\)
{marshall} :ol
If the {twisting} keyword is not specified, the model defaults to {none}.
For both {twisting sds} and {twisting marshall}, a history-dependent
spring-dashpot-slider is used to compute the twisting torque. Because
twisting displacement is a scalar, there is no need to adjust for
changes in the frame of reference due to rotations of the particle
pair. The formulation in "Marshall"_#Marshall2009 therefore provides
the most straightforward treatment:
\begin\{equation\}
\tau_\{twist,0\} = -k_\{twist\}\xi_\{twist\} - \gamma_\{twist\}\Omega_\{twist\}
\end\{equation\}
Here \(\xi_\{twist\} = \int_\{t_0\}^t \Omega_\{twist\} (\tau)
\mathrm\{d\}\tau\) is the twisting angular displacement, and
\(\Omega_\{twist\} = (\mathbf\{\Omega\}_i - \mathbf\{\Omega\}_j) \cdot
\mathbf\{n\}\) is the relative twisting angular velocity. The torque
is then truncated according to:
\begin\{equation\}
\tau_\{twist\} = min(\mu_\{twist\} F_\{n,0\}, \tau_\{twist,0\})
\end\{equation\}
Similar to the sliding and rolling displacement, the angular
displacement is rescaled so that it corresponds to the critical value
if the twisting torque exceeds this critical value:
\begin\{equation\}
\xi_\{twist\} = \frac\{1\}\{k_\{twist\}\} (\mu_\{twist\} F_\{n,0\}sgn(\Omega_\{twist\}) - \gamma_\{twist\}\Omega_\{twist\})
\end\{equation\}
For {twisting sds}, the coefficients \(k_\{twist\}, \gamma_\{twist\}\)
and \(\mu_\{twist\}\) are simply the user input parameters that follow
the {twisting sds} keywords in the {pair_coeff} command.
For {twisting_marshall}, the coefficients are expressed in terms of
sliding friction coefficients, as discussed in
"Marshall"_#Marshall2009 (see equations 32 and 33 of that work):
\begin\{equation\}
k_\{twist\} = 0.5k_ta^2
\end\{equation\}
\begin\{equation\}
\eta_\{twist\} = 0.5\eta_ta^2
\end\{equation\}
\begin\{equation\}
\mu_\{twist\} = \frac\{2\}\{3\}a\mu_t
\end\{equation\}
Finally, the twisting torque on each particle is given by:
\begin\{equation\}
\mathbf\{\tau\}_\{twist,i\} = \tau_\{twist\}\mathbf\{n\}
\end\{equation\}
\begin\{equation\}
\mathbf\{\tau\}_\{twist,j\} = -\mathbf\{\tau\}_\{twist,i\}
\end\{equation\}
:line
LAMMPS automatically sets pairwise cutoff values for {pair_style
granular} based on particle radii (and in the case of {jkr} pull-off
distances). In the vast majority of situations, this is adequate.
However, a cutoff value can optionally be appended to the {pair_style
granular} command to specify a global cutoff (i.e. a cutoff for all
atom types). Additionally, the optional {cutoff} keyword can be passed
to the {pair_coeff} command, followed by a cutoff value. This will
set a pairwise cutoff for the atom types in the {pair_coeff} command.
These options may be useful in some rare cases where the automatic
cutoff determination is not sufficient, e.g. if particle diameters
are being modified via the {fix adapt} command. In that case, the
global cutoff specified as part of the {pair_style granular} command
is applied to all atom types, unless it is overridden for a given atom
type combination by the {cutoff} value specified in the {pair coeff}
command. If {cutoff} is only specified in the {pair coeff} command
and no global cutoff is appended to the {pair_style granular} command,
then LAMMPS will use that cutoff for the specified atom type
combination, and automatically set pairwise cutoffs for the remaining
atom types.
:line
Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are
functionally the same as the corresponding style without the suffix.
They have been optimized to run faster, depending on your available
hardware, as discussed on the "Speed packages"_Speed_packages.html doc
page. The accelerated styles take the same arguments and should
produce the same results, except for round-off and precision issues.
These accelerated styles are part of the GPU, USER-INTEL, KOKKOS,
USER-OMP and OPT packages, respectively. They are only enabled if
LAMMPS was built with those packages. See the "Build
package"_Build_package.html doc page for more info.
You can specify the accelerated styles explicitly in your input script
by including their suffix, or you can use the "-suffix command-line
switch"_Run_options.html when you invoke LAMMPS, or you can use the
"suffix"_suffix.html command in your input script.
See the "Speed packages"_Speed_packages.html doc page for more
instructions on how to use the accelerated styles effectively.
:line
[Mixing, shift, table, tail correction, restart, rRESPA info]:
The "pair_modify"_pair_modify.html mix, shift, table, and tail options
are not relevant for granular pair styles.
Mixing of coefficients is carried out using geometric averaging for
most quantities, e.g. if friction coefficient for type 1-type 1
interactions is set to \(\mu_1\), and friction coefficient for type
2-type 2 interactions is set to \(\mu_2\), the friction coefficient
for type1-type2 interactions is computed as \(\sqrt\{\mu_1\mu_2\}\)
(unless explicitly specified to a different value by a {pair_coeff 1 2
...} command. The exception to this is elastic modulus, only
applicable to {hertz/material}, {dmt} and {jkr} normal contact
models. In that case, the effective elastic modulus is computed as:
\begin\{equation\}
E_\{eff,ij\} = \left(\frac\{1-\nu_i^2\}\{E_i\} + \frac\{1-\nu_j^2\}\{E_j\}\right)^\{-1\}
\end\{equation\}
If the {i-j} coefficients \(E_\{ij\}\) and \(\nu_\{ij\}\) are
explicitly specified, the effective modulus is computed as:
\begin\{equation\}
E_\{eff,ij\} = \left(\frac\{1-\nu_\{ij\}^2\}\{E_\{ij\}\} + \frac\{1-\nu_\{ij\}^2\}\{E_\{ij\}\}\right)^\{-1\}
\end\{equation\}
or
\begin\{equation\}
E_\{eff,ij\} = \frac\{E_\{ij\}\}\{2(1-\nu_\{ij\})\}
\end\{equation\}
These pair styles write their information to "binary restart
files"_restart.html, so a pair_style command does not need to be
specified in an input script that reads a restart file.
These pair styles can only be used via the {pair} keyword of the
"run_style respa"_run_style.html command. They do not support the
{inner}, {middle}, {outer} keywords.
The single() function of these pair styles returns 0.0 for the energy
of a pairwise interaction, since energy is not conserved in these
dissipative potentials. It also returns only the normal component of
the pairwise interaction force. However, the single() function also
calculates 10 extra pairwise quantities. The first 3 are the
components of the tangential force between particles I and J, acting
on particle I. The 4th is the magnitude of this tangential force.
The next 3 (5-7) are the components of the rolling torque acting on
particle I. The next entry (8) is the magnitude of the rolling torque.
The next entry (9) is the magnitude of the twisting torque acting
about the vector connecting the two particle centers.
The last 3 (10-12) are the components of the vector connecting
the centers of the two particles (x_I - x_J).
These extra quantities can be accessed by the "compute
pair/local"_compute_pair_local.html command, as {p1}, {p2}, ...,
{p12}.
:line
[Restrictions:]
All the granular pair styles are part of the GRANULAR package. It is
only enabled if LAMMPS was built with that package. See the "Build
package"_Build_package.html doc page for more info.
These pair styles require that atoms store torque and angular velocity
(omega) as defined by the "atom_style"_atom_style.html. They also
require a per-particle radius is stored. The {sphere} atom style does
all of this.
This pair style requires you to use the "comm_modify vel
yes"_comm_modify.html command so that velocities are stored by ghost
atoms.
These pair styles will not restart exactly when using the
"read_restart"_read_restart.html command, though they should provide
statistically similar results. This is because the forces they
compute depend on atom velocities. See the
"read_restart"_read_restart.html command for more details.
[Related commands:]
"pair_coeff"_pair_coeff.html
"pair gran/*"_pair_gran.html
[Default:]
For the {pair_coeff} settings: {damping viscoelastic}, {rolling none},
{twisting none}.
[References:]
:link(Brill1996)
[(Brilliantov et al, 1996)] Brilliantov, N. V., Spahn, F., Hertzsch,
J. M., & Poschel, T. (1996). Model for collisions in granular
gases. Physical review E, 53(5), 5382.
:link(Tsuji1992)
[(Tsuji et al, 1992)] Tsuji, Y., Tanaka, T., & Ishida,
T. (1992). Lagrangian numerical simulation of plug flow of
cohesionless particles in a horizontal pipe. Powder technology, 71(3),
239-250.
:link(JKR1971)
[(Johnson et al, 1971)] Johnson, K. L., Kendall, K., & Roberts,
A. D. (1971). Surface energy and the contact of elastic
solids. Proc. R. Soc. Lond. A, 324(1558), 301-313.
:link(DMT1975)
[Derjaguin et al, 1975)] Derjaguin, B. V., Muller, V. M., & Toporov,
Y. P. (1975). Effect of contact deformations on the adhesion of
particles. Journal of Colloid and interface science, 53(2), 314-326.
:link(Luding2008)
[(Luding, 2008)] Luding, S. (2008). Cohesive, frictional powders:
contact models for tension. Granular matter, 10(4), 235.
:link(Marshall2009)
[(Marshall, 2009)] Marshall, J. S. (2009). Discrete-element modeling
of particulate aerosol flows. Journal of Computational Physics,
228(5), 1541-1561.
:link(Silbert2001)
[(Silbert, 2001)] Silbert, L. E., Ertas, D., Grest, G. S., Halsey,
T. C., Levine, D., & Plimpton, S. J. (2001). Granular flow down an
inclined plane: Bagnold scaling and rheology. Physical Review E,
64(5), 051302.
:link(Kuhn2004)
[(Kuhn and Bagi, 2005)] Kuhn, M. R., & Bagi, K. (2004). Contact
rolling and deformation in granular media. International journal of
solids and structures, 41(21), 5793-5820.
:link(Wang2015)
[(Wang et al, 2015)] Wang, Y., Alonso-Marroquin, F., & Guo,
W. W. (2015). Rolling and sliding in 3-D discrete element
models. Particuology, 23, 49-55.
:link(Thornton1991)
[(Thornton, 1991)] Thornton, C. (1991). Interparticle sliding in the
presence of adhesion. J. Phys. D: Appl. Phys. 24 1942
:link(Mindlin1949)
[(Mindlin, 1949)] Mindlin, R. D. (1949). Compliance of elastic bodies
in contact. J. Appl. Mech., ASME 16, 259-268.
:link(Thornton2013)
[(Thornton et al, 2013)] Thornton, C., Cummins, S. J., & Cleary,
P. W. (2013). An investigation of the comparative behaviour of
alternative contact force models during inelastic collisions. Powder
Technology, 233, 30-46.
:link(WaltonPC)
[(Otis R. Walton)] Walton, O.R., Personal Communication

View File

@ -42,6 +42,7 @@ Pair Styles :h1
pair_gauss
pair_gayberne
pair_gran
pair_granular
pair_gromacs
pair_gw
pair_hbond_dreiding

View File

@ -156,6 +156,8 @@ ba
Babadi
backcolor
Baczewski
Bagi
Bagnold
Bal
balancer
Balankura
@ -250,6 +252,7 @@ Boresch
Botero
Botu
Bouguet
Bourne
boxcolor
bp
bpls
@ -346,6 +349,7 @@ Cij
cis
civ
clearstore
Cleary
Clebsch
clemson
Clermont
@ -372,6 +376,7 @@ Coeff
CoefficientN
coeffs
Coeffs
cohesionless
Coker
Colberg
coleman
@ -449,6 +454,7 @@ cuda
Cuda
CUDA
CuH
Cummins
Curk
customIDs
cutbond
@ -492,6 +498,7 @@ darkturquoise
darkviolet
Das
Dasgupta
dashpot
dat
datafile
datums
@ -529,6 +536,7 @@ Dequidt
der
derekt
Derjagin
Derjaguin
Derlet
Deserno
Destree
@ -627,6 +635,7 @@ dVx
dW
dx
dy
dylib
dyn
dyne
dynes
@ -1079,6 +1088,7 @@ Hyoungki
hyperdynamics
hyperradius
hyperspherical
hysteretic
Ibanez
ibar
ibm
@ -1138,6 +1148,7 @@ interconvert
interial
interlayer
intermolecular
Interparticle
interstitials
Intr
intra
@ -1156,6 +1167,7 @@ IPython
Isele
isenthalpic
ish
Ishida
iso
isodemic
isoenergetic
@ -1265,6 +1277,7 @@ kcl
Kd
KDevelop
ke
kepler
KE
Keblinski
keflag
@ -1298,6 +1311,7 @@ Kondor
konglt
Koning
Kooser
Korn
Koskinen
Koster
Kosztin
@ -1450,6 +1464,7 @@ logfile
logfreq
logicals
Lomdahl
Lond
lookups
Lookups
LoopVar
@ -1465,6 +1480,7 @@ lsfftw
ltbbmalloc
lubricateU
lucy
Luding
Lussetti
Lustig
lwsock
@ -1503,6 +1519,7 @@ manybody
MANYBODY
Maras
Marrink
Marroquin
Marsaglia
Marseille
Martyna
@ -1514,6 +1531,7 @@ masstotal
Masuhiro
Matchett
Materias
mathbf
matlab
matplotlib
Mattox
@ -1602,6 +1620,7 @@ Mie
Mikami
Militzer
Minary
Mindlin
mincap
mingw
minima
@ -1672,6 +1691,7 @@ mpiexec
mpiio
mpirun
mplayer
mps
Mryglod
mscg
MSCG
@ -1955,6 +1975,7 @@ oneway
onn
ons
OO
opencl
openKIM
OpenMP
openmp
@ -2287,6 +2308,7 @@ rg
Rg
Rhaphson
rheological
rheology
rhodo
Rhodo
rhodopsin
@ -2603,6 +2625,7 @@ Tait
taitwater
Tajkhorshid
Tamaskovics
Tanaka
tanh
Tartakovsky
taskset
@ -2690,6 +2713,7 @@ tokyo
tol
toolchain
topologies
Toporov
Torder
torsions
Tosi
@ -2734,6 +2758,7 @@ Tsrd
Tstart
tstat
Tstop
Tsuji
Tsuzuki
tt
Tt

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

View File

@ -12,6 +12,8 @@ variable cutevent index 1.1
variable steps index 100000
variable nevent index 1000
variable zoom index 1.8
variable seed index 826626413
variable tol index 1.0e-15
units metal
atom_style atomic
@ -45,7 +47,7 @@ neighbor 0.5 bin
neigh_modify every 1 delay 5 check yes
fix 1 mobile nve
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 858872873 zero yes
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes
timestep 0.005
@ -92,4 +94,4 @@ dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green
# run
hyper ${steps} ${nevent} HG event min 1.0e-6 1.0e-6 100 100 dump 1
hyper ${steps} ${nevent} HG event min ${tol} ${tol} 1000 1000 dump 1

View File

@ -107,6 +107,12 @@ dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 &
zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green
# test of histogramming and dump output of bias coeffs
#fix histo all ave/histo 10 100 1000 0.9 1.1 100 f_HL &
# mode vector kind local file tmp.histo
#dump 2 all local 1000 tmp.local f_HL
# run
hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1

View File

Before

Width:  |  Height:  |  Size: 482 KiB

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,993 +0,0 @@
LAMMPS (10 Oct 2018)
# 3d EAM surface for local HD
# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92
# hop event on (100) surface is same distance
# exchange event is 2 atoms moving same distance
variable Tequil index 400.0
variable Vmax index 0.4
variable qfactor index 0.3
variable cutbond index 3.2
variable Dcut index 10.0
variable cutevent index 1.1
variable alpha index 200.0
variable boost index 4000.0
variable ghostcut index 12.0
variable steps index 1500
variable nevent index 100
variable nx index 8
variable ny index 8
variable zoom index 1.8
variable seed index 826626413
variable tol index 1.0e-15
variable add index 37K
units metal
atom_style atomic
atom_modify map array
boundary p p p
comm_modify cutoff ${ghostcut}
comm_modify cutoff 12.0
lattice fcc 3.92
Lattice spacing in x,y,z = 3.92 3.92 3.92
region box block 0 6 0 6 0 4
create_box 2 box
Created orthogonal box = (0 0 0) to (23.52 23.52 15.68)
2 by 4 by 2 MPI processor grid
create_atoms 1 box
Created 576 atoms
Time spent = 0.00108504 secs
mass * 1.0
change_box all z final -0.1 5.0 boundary p p f
orthogonal box = (0 0 -0.392) to (23.52 23.52 19.6)
# replicate in xy
replicate ${nx} ${ny} 1
replicate 8 ${ny} 1
replicate 8 8 1
orthogonal box = (0 0 -0.392) to (188.16 188.16 19.6)
4 by 4 by 1 MPI processor grid
36864 atoms
Time spent = 0.0028758 secs
# add adatoms
include adatoms.list.${add}
include adatoms.list.37K
create_atoms 1 single 27.5 9.5 4
Created 1 atoms
Time spent = 0.000183105 secs
create_atoms 1 single 16 9 4
Created 1 atoms
Time spent = 0.000178099 secs
create_atoms 1 single 10 12 4
Created 1 atoms
Time spent = 0.000179768 secs
create_atoms 1 single 31 44 4
Created 1 atoms
Time spent = 0.000184059 secs
create_atoms 1 single 13 17 4
Created 1 atoms
Time spent = 0.000173807 secs
create_atoms 1 single 8.5 28.5 4
Created 1 atoms
Time spent = 0.000167847 secs
create_atoms 1 single 23 26 4
Created 1 atoms
Time spent = 0.000179052 secs
create_atoms 1 single 38 27 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 37.5 4.5 4
Created 1 atoms
Time spent = 0.000166178 secs
create_atoms 1 single 41.5 47.5 4
Created 1 atoms
Time spent = 0.000172138 secs
create_atoms 1 single 20.5 37.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 5 8 4
Created 1 atoms
Time spent = 0.00018096 secs
create_atoms 1 single 2.5 16.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 38.5 45.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 9 0 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 39 32 4
Created 1 atoms
Time spent = 0.000170946 secs
create_atoms 1 single 45.5 11.5 4
Created 1 atoms
Time spent = 0.00018096 secs
create_atoms 1 single 40 0 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 44.5 2.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 4.5 44.5 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 24.5 13.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 47.5 23.5 4
Created 1 atoms
Time spent = 0.00018096 secs
create_atoms 1 single 1 20 4
Created 1 atoms
Time spent = 0.000166893 secs
create_atoms 1 single 38.5 31.5 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 12.5 12.5 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 2 27 4
Created 1 atoms
Time spent = 0.000188828 secs
create_atoms 1 single 21 5 4
Created 1 atoms
Time spent = 0.000174999 secs
create_atoms 1 single 47 12 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 32.5 46.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 9.5 40.5 4
Created 1 atoms
Time spent = 0.000166893 secs
create_atoms 1 single 8.5 2.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 41.5 22.5 4
Created 1 atoms
Time spent = 0.000174046 secs
create_atoms 1 single 29 11 4
Created 1 atoms
Time spent = 0.000166893 secs
create_atoms 1 single 3.5 3.5 4
Created 1 atoms
Time spent = 0.000165224 secs
create_atoms 1 single 5 21 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 46.5 31.5 4
Created 1 atoms
Time spent = 0.000166178 secs
create_atoms 1 single 35 46 4
Created 1 atoms
Time spent = 0.000183105 secs
create_atoms 1 single 40.5 41.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 10 22 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 43.5 14.5 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 42 42 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 4 26 4
Created 1 atoms
Time spent = 0.000174999 secs
create_atoms 1 single 19 34 4
Created 1 atoms
Time spent = 0.000163078 secs
create_atoms 1 single 33 9 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 0.5 45.5 4
Created 1 atoms
Time spent = 0.000163078 secs
create_atoms 1 single 30.5 32.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 25.5 5.5 4
Created 1 atoms
Time spent = 0.000178099 secs
create_atoms 1 single 47.5 39.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 15 13 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 21 21 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 14 28 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 9 34 4
Created 1 atoms
Time spent = 0.000174999 secs
create_atoms 1 single 7 38 4
Created 1 atoms
Time spent = 0.000175953 secs
create_atoms 1 single 11 35 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 20.5 45.5 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 30.5 31.5 4
Created 1 atoms
Time spent = 0.000159979 secs
create_atoms 1 single 32.5 2.5 4
Created 1 atoms
Time spent = 0.000166178 secs
create_atoms 1 single 21.5 3.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 23 12 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 4.5 33.5 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 46 43 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 42.5 45.5 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 4.5 10.5 4
Created 1 atoms
Time spent = 0.000158072 secs
create_atoms 1 single 33.5 15.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 24 5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 13 16 4
Created 1 atoms
Time spent = 0.000158072 secs
create_atoms 1 single 16.5 23.5 4
Created 1 atoms
Time spent = 0.000156164 secs
create_atoms 1 single 45.5 28.5 4
Created 1 atoms
Time spent = 0.000247002 secs
create_atoms 1 single 44.5 5.5 4
Created 1 atoms
Time spent = 0.000156164 secs
create_atoms 1 single 27.5 46.5 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 44.5 12.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 12 41 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 6 4 4
Created 1 atoms
Time spent = 0.0001688 secs
create_atoms 1 single 31.5 10.5 4
Created 1 atoms
Time spent = 0.00015521 secs
create_atoms 1 single 1 44 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 31 4 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 21 33 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 3 33 4
Created 1 atoms
Time spent = 0.000164032 secs
create_atoms 1 single 15 10 4
Created 1 atoms
Time spent = 0.0001719 secs
create_atoms 1 single 28.5 22.5 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 43 1 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 3.5 0.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 41 37 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 18.5 43.5 4
Created 1 atoms
Time spent = 0.000213146 secs
create_atoms 1 single 17 27 4
Created 1 atoms
Time spent = 0.000159979 secs
create_atoms 1 single 3 5 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 18.5 23.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 31.5 14.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 41 31 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 22 3 4
Created 1 atoms
Time spent = 0.00015521 secs
create_atoms 1 single 14.5 40.5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 9 38 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 36 42 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 33 22 4
Created 1 atoms
Time spent = 0.000163078 secs
create_atoms 1 single 15.5 47.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 3 0 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 25.5 27.5 4
Created 1 atoms
Time spent = 0.000176907 secs
create_atoms 1 single 2.5 28.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 29.5 28.5 4
Created 1 atoms
Time spent = 0.000162125 secs
create_atoms 1 single 44.5 18.5 4
Created 1 atoms
Time spent = 0.000152826 secs
create_atoms 1 single 26 40 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 41 27 4
Created 1 atoms
Time spent = 0.000158072 secs
create_atoms 1 single 39.5 5.5 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 3 38 4
Created 1 atoms
Time spent = 0.000152826 secs
create_atoms 1 single 35 29 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 11 19 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 18 1 4
Created 1 atoms
Time spent = 0.000146866 secs
create_atoms 1 single 39.5 40.5 4
Created 1 atoms
Time spent = 0.000146866 secs
create_atoms 1 single 46 17 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 1.5 23.5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 28.5 23.5 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 10 28 4
Created 1 atoms
Time spent = 0.000159979 secs
create_atoms 1 single 19 47 4
Created 1 atoms
Time spent = 0.000148058 secs
create_atoms 1 single 10.5 16.5 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 38 45 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 42.5 41.5 4
Created 1 atoms
Time spent = 0.000161886 secs
create_atoms 1 single 47.5 42.5 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 38 7 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 10 44 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 29.5 27.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 45 30 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 3 9 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 8.5 35.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 24 44 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 47 4 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 7.5 8.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 32.5 41.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 0.5 34.5 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 11 8 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 2 40 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 25 24 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 47.5 6.5 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 39.5 28.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 17 21 4
Created 1 atoms
Time spent = 0.000164032 secs
create_atoms 1 single 32 43 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 16.5 29.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 34 34 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 11.5 3.5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 39 22 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 24.5 36.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 33 31 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 35.5 35.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 14.5 34.5 4
Created 1 atoms
Time spent = 0.000146866 secs
create_atoms 1 single 34 28 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 37 41 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 33 46 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 27.5 28.5 4
Created 1 atoms
Time spent = 0.000145197 secs
create_atoms 1 single 40.5 22.5 4
Created 1 atoms
Time spent = 0.000150919 secs
create_atoms 1 single 27.5 1.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 12 2 4
Created 1 atoms
Time spent = 0.000151873 secs
create_atoms 1 single 36 43 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 28.5 9.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 20.5 25.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 3 3 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 38 33 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 3 20 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 35 11 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 5 25 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 36.5 6.5 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 19.5 24.5 4
Created 1 atoms
Time spent = 0.000236988 secs
create_atoms 1 single 27 41 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 39.5 11.5 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 21.5 2.5 4
Created 1 atoms
Time spent = 0.000136852 secs
create_atoms 1 single 46.5 15.5 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 13 24 4
Created 1 atoms
Time spent = 0.000137091 secs
create_atoms 1 single 11 37 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 11.5 31.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 47 0 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 25.5 17.5 4
Created 1 atoms
Time spent = 0.00014019 secs
create_atoms 1 single 32 11 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 8 17 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 27.5 12.5 4
Created 1 atoms
Time spent = 0.000137806 secs
create_atoms 1 single 25 7 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 25.5 37.5 4
Created 1 atoms
Time spent = 0.000139952 secs
create_atoms 1 single 12 15 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 1 7 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 18.5 47.5 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 5 38 4
Created 1 atoms
Time spent = 0.000136852 secs
create_atoms 1 single 42 19 4
Created 1 atoms
Time spent = 0.000149012 secs
create_atoms 1 single 30.5 7.5 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 42.5 7.5 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 26.5 18.5 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 18.5 1.5 4
Created 1 atoms
Time spent = 0.000137091 secs
create_atoms 1 single 41.5 10.5 4
Created 1 atoms
Time spent = 0.000140905 secs
# define frozen substrate and mobile atoms
region base block INF INF INF INF 0 1.8
set region base type 2
18432 settings made for type
group base type 2
18432 atoms in group base
group mobile type 1
18616 atoms in group mobile
# pair style
pair_style eam/alloy
pair_coeff * * ptvoterlammps.eam Pt Pt
neighbor 0.5 bin
neigh_modify every 1 delay 5 check yes
fix 1 mobile nve
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes
fix 2 mobile langevin 400.0 ${Tequil} 1.0 ${seed} zero yes
fix 2 mobile langevin 400.0 400.0 1.0 ${seed} zero yes
fix 2 mobile langevin 400.0 400.0 1.0 826626413 zero yes
timestep 0.005
compute tmobile mobile temp
thermo 100
thermo_modify temp tmobile
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488)
# thermal equilibration
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.07583
ghost atom cutoff = 12
binsize = 3.03792, bins = 62 62 7
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.359 | 3.359 | 3.36 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0 -206220.22 0 -206220.22 -52155.664
100 188.18127 -206044.43 0 -205591.63 -25068.83
200 274.34464 -205860.78 0 -205200.66 -40191.797
300 325.66286 -205750.01 0 -204966.4 -31510.222
400 352.48242 -205675.42 0 -204827.28 -35058.064
500 370.88571 -205619.66 0 -204727.25 -32735.022
600 388.62129 -205592.87 0 -204657.78 -33904.556
700 389.54874 -205579.73 0 -204642.4 -32769.852
800 395.56074 -205576.82 0 -204625.03 -33755.948
900 398.03458 -205564.48 0 -204606.74 -32777.103
1000 401.24089 -205562.85 0 -204597.4 -33785.341
Loop time of 4.3687 on 16 procs for 1000 steps with 37048 atoms
Performance: 98.885 ns/day, 0.243 hours/ns, 228.901 timesteps/s
98.4% CPU use with 16 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 3.2988 | 3.3828 | 3.4667 | 2.3 | 77.43
Neigh | 0.20856 | 0.23127 | 0.24382 | 1.9 | 5.29
Comm | 0.33313 | 0.45075 | 0.55485 | 9.2 | 10.32
Output | 0.00042987 | 0.00044042 | 0.00049591 | 0.0 | 0.01
Modify | 0.18811 | 0.28363 | 0.36798 | 9.7 | 6.49
Other | | 0.01983 | | | 0.45
Nlocal: 2315.5 ave 2332 max 2297 min
Histogram: 2 0 0 3 4 0 2 1 2 2
Nghost: 3186.31 ave 3205 max 3170 min
Histogram: 2 1 3 0 2 3 2 1 0 2
Neighs: 55590.9 ave 56174 max 55103 min
Histogram: 2 2 1 1 4 1 3 0 0 2
Total # of neighbors = 889454
Ave neighs/atom = 24.0082
Neighbor list builds = 105
Dangerous builds = 0
reset_timestep 0
# pin base so will not move during quenches
fix freeze base setforce 0.0 0.0 0.0
# event detection
compute event all event/displace ${cutevent}
compute event all event/displace 1.1
# hyper/local
fix HL mobile hyper/local ${cutbond} ${qfactor} ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 ${qfactor} ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 200.0 ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 200.0 4000.0
# thermo output
thermo_style custom step temp pe f_HL f_HL[*]
WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:705)
thermo_modify lost ignore
thermo_modify temp tmobile
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488)
thermo ${nevent}
thermo 100
# dump
region substrate block INF INF INF INF 1.8 3.8
region adatoms block INF INF INF INF 3.8 INF
variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms)
dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 zoom 1.8 adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green
# run
hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1
hyper 1500 ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1
hyper 1500 100 HL event min ${tol} ${tol} 1000 1000 dump 1
hyper 1500 100 HL event min 1.0e-15 ${tol} 1000 1000 dump 1
hyper 1500 100 HL event min 1.0e-15 1.0e-15 1000 1000 dump 1
WARNING: Resetting reneighboring criteria during hyper (../hyper.cpp:133)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.07583
ghost atom cutoff = 12
binsize = 3.03792, bins = 62 62 7
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) fix hyper/local, occasional
attributes: full, newton on, cut 10
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 7.566 | 7.567 | 7.567 Mbytes
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
0 401.24089 -205562.85 0 0 0 1 0 0 0 0 0 0 0 0 4e+19 0 0 0 0 0 0 0 0 0 0 0
77 401.24089 -206534.96 0 0 0 1 0 0 0 0 0 0 0 0 4e+19 0 0 0 0 0 0 0 1540 0 0 0
Loop time of 0.540347 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
0 401.24089 -205562.85 23.271302 74 0.18753621 1 6.0138739 703.62325 0 0.55802338 3.5350432 0 0 0 4e+19 10.115141 10.115141 0 0 0 0 0 0 0 0 0
100 399.15639 -205546.21 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0
Loop time of 0.579085 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
100 399.15639 -205546.21 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0
184 399.15639 -206534.96 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 49.934783 0.21714886 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 3680 0 0 0
Loop time of 0.556056 on 16 procs for 84 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
100 399.15639 -205546.21 22.903938 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0
200 403.01717 -205543.17 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0
Loop time of 0.581214 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
200 403.01717 -205543.17 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0
275 403.01717 -206534.96 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 66.145455 0.29040418 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 5500 0 0 0
Loop time of 0.481812 on 16 procs for 75 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
200 403.01717 -205543.17 21.115577 91 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0
300 399.01963 -205541.46 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0
Loop time of 0.5757 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
300 399.01963 -205541.46 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0
377 399.01963 -206534.96 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 73.225464 0.31760598 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 7540 0 0 0
Loop time of 0.514907 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
300 399.01963 -205541.46 19.137003 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0
400 398.15351 -205544.87 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0
Loop time of 0.577371 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
400 398.15351 -205544.87 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0
471 398.15351 -206534.96 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 78.163482 0.33881076 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 9420 0 0 0
Loop time of 0.465473 on 16 procs for 71 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
400 398.15351 -205544.87 20.470689 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0
500 400.29399 -205544.98 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0907861 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0
Loop time of 0.579188 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
500 400.29399 -205544.98 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0907861 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0
577 400.29399 -206534.96 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0910651 4.0779385 79.710572 0.3455768 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 11540 0 0 0
Loop time of 0.502193 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
500 400.29399 -205544.98 17.051107 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0910651 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0
600 400.96099 -205544.56 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0
Loop time of 0.694955 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
600 400.96099 -205544.56 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0
680 400.96099 -206534.96 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 81.188235 0.35174818 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 13600 0 0 0
Loop time of 0.529041 on 16 procs for 80 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
600 400.96099 -205544.56 20.904088 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0
700 397.78618 -205534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 1.1853748 4.1995704 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 0 0 0
Loop time of 0.590093 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
700 397.78618 -205534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 1.2139704 4.1995704 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 0 0 0
790 397.78618 -206534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 2.2107138 4.1995704 81.625316 0.35310868 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 15800 0 0 0
Loop time of 0.594281 on 16 procs for 90 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
700 397.78618 -205534.96 20.236364 94 0.51088027 0.39757442 6.0138739 703.62325 0.061146951 2.2107138 4.205089 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 1 2 6
800 399.66919 -205547.44 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.2107138 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 1 2 6
Loop time of 0.583824 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
800 399.66919 -205547.44 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.2107138 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 1 2 6
872 399.66919 -206535.54 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.3177682 4.3041291 84.739679 0.36548679 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 17440 1 2 6
Loop time of 0.46886 on 16 procs for 72 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
800 399.66919 -205547.44 21.2852 94 0.44964213 0.39739855 6.0138739 703.62325 0.06556778 2.3177682 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 2 4 13
900 401.5853 -205544.22 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13
Loop time of 0.585137 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
900 401.5853 -205544.22 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13
975 401.5853 -206535.54 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 84.939487 0.36762438 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 19500 2 4 13
Loop time of 0.502012 on 16 procs for 75 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
900 401.5853 -205544.22 19.307938 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13
1000 395.06218 -205526.35 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13
Loop time of 0.588597 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1000 395.06218 -205526.35 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13
1083 395.06218 -206535.54 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 85.421053 0.36763584 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 21660 2 4 13
Loop time of 0.543222 on 16 procs for 83 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1000 395.06218 -205526.35 17.514191 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13
1100 400.04484 -205545.92 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 2 4 13
Loop time of 0.590075 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1100 400.04484 -205545.92 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 2 4 13
1177 400.04484 -206535.53 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 86.464741 0.37201529 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 23540 2 4 13
Loop time of 0.500839 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1100 400.04484 -205545.92 19.518413 89 0.429675 0.39705701 6.0137119 703.6043 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 3 6 19
1200 400.7462 -205543.2 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19
Loop time of 0.583971 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1200 400.7462 -205543.2 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19
1277 400.7462 -206535.53 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 86.806578 0.37396584 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 25540 3 6 19
Loop time of 0.509118 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1200 400.7462 -205543.2 21.169281 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19
1300 398.53702 -205539.33 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19
Loop time of 0.587306 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1300 398.53702 -205539.33 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19
1375 398.53702 -206535.53 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 87.455273 0.37616341 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 27500 3 6 19
Loop time of 0.483781 on 16 procs for 75 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1300 398.53702 -205539.33 21.35787 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19
1400 402.80537 -205549.3 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19
Loop time of 0.586411 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1400 402.80537 -205549.3 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19
1471 402.80537 -206535.53 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 88.193746 0.37856948 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 29420 3 6 19
Loop time of 0.473799 on 16 procs for 71 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1400 402.80537 -205549.3 19.481632 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19
1500 402.0803 -205537.7 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 92.857333 0.39767858 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 30000 3 6 19
Loop time of 0.587342 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1500 402.0803 -205537.7 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 92.857333 0.39767858 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 30000 3 6 19
1574 402.0803 -206535.53 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 88.491741 0.37898213 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 31480 3 6 19
Loop time of 0.493982 on 16 procs for 74 steps with 37048 atoms
Final hyper stats ...
Cummulative quantities for fix hyper:
hyper time = 30000
event timesteps = 3
# of atoms in events = 6
Quantities for this hyper run:
event timesteps = 3
# of atoms in events = 6
max length of any bond = 4.4266
max drift distance of any atom = 2.31777
fraction of steps & bonds with zero bias = 0.0704091
Current quantities:
ave bonds/atom = 6.01371
Cummulative quantities specific tofix hyper/local:
# of new bonds formed = 19
max bonds/atom = 13
Quantities for this hyper run specific to fix hyper/local:
ave boosted bonds/step = 92.8573
ave boost coeff of all bonds = 0.397679
max boost coeff of any bond = 0.414894
min boost coeff of any bond = 0.383728
max dist from my box of any non-maxstrain bond ghost atom = 10.333
max dist from my box of any bond ghost atom = 10.3858
count of ghost bond neighbors not found on reneighbor steps = 0
lost bond partners = 0
ave bias coeff for lost bond partners = 0
bias overlaps = 0
non-matching bias coeffs = 0
CPU time for bond builds = 0.044807
Current quantities specific to fix hyper/local:
neighbor bonds/bond = 703.604
ave boost coeff for all bonds = 0.396356
Loop time of 17.9972 on 16 procs for 1500 steps with 37048 atoms
Performance: 36.006 ns/day, 0.667 hours/ns, 83.346 timesteps/s
120.7% CPU use with 16 MPI tasks x no OpenMP threads
Hyper stats:
Dynamics time (%) = 8.87027 (49.2869)
Quench time (%) = 8.15972 (45.3388)
Other time (%) = 1.2212 (6.78552)
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 11.6 | 11.848 | 12.043 | 3.9 | 65.83
Neigh | 0.50025 | 0.52638 | 0.55163 | 2.1 | 2.92
Comm | 0.34528 | 0.49905 | 0.66742 | 13.3 | 2.77
Output | 0.0021305 | 0.0021461 | 0.0022686 | 0.1 | 0.01
Modify | 3.7498 | 3.9009 | 3.9786 | 2.8 | 21.67
Other | | 1.221 | | | 6.79
Nlocal: 2315.5 ave 2361 max 2267 min
Histogram: 1 1 0 4 2 1 3 3 0 1
Nghost: 3187.88 ave 3236 max 3141 min
Histogram: 1 0 3 2 2 1 4 1 1 1
Neighs: 53950.6 ave 54989 max 53049 min
Histogram: 2 0 3 2 1 2 4 1 0 1
FullNghs: 542951 ave 554654 max 533224 min
Histogram: 1 2 3 1 2 2 2 2 0 1
Total # of neighbors = 8687214
Ave neighs/atom = 234.485
Neighbor list builds = 165
Dangerous builds = 0
Total wall time: 0:00:22

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@
22 0 1 25.100 0.000 0.000
23 0 1 26.295 0.000 0.000
24 110 2 27.490 0.000 0.000
25 128 2 28.685 0.000 0.000
25 128 2 28.685 35.85686 0.000
26 0 1 29.881 0.000 0.000
27 0 1 31.076 0.000 0.000
28 0 1 32.271 0.000 0.000
@ -175,7 +175,7 @@
148 0 1 32.271 4.781 0.000
149 0 1 33.466 4.781 0.000
150 0 1 34.662 4.781 0.000
151 53 2 0.000 5.976 0.000
151 53 2 35.85686 5.976 0.000
152 0 1 1.195 5.976 0.000
153 0 1 2.390 5.976 0.000
154 0 1 3.586 5.976 0.000
@ -655,7 +655,7 @@
628 0 1 32.271 23.905 0.000
629 0 1 33.466 23.905 0.000
630 0 1 34.662 23.905 0.000
631 148 2 0.000 25.100 0.000
631 148 2 35.85686 25.100 0.000
632 0 1 1.195 25.100 0.000
633 0 1 2.390 25.100 0.000
634 0 1 3.586 25.100 0.000
@ -976,7 +976,7 @@
949 25 3 0.677 33.143 0.000
950 25 4 1.353 32.819 0.000
951 26 3 35.071 18.557 0.000
952 26 4 35.480 19.186 0.000
952 26 4 35.48000 19.186 0.000
953 27 3 29.131 15.504 0.000
954 27 4 28.382 15.470 0.000
955 28 3 23.456 33.395 0.000
@ -1096,7 +1096,7 @@
1069 85 3 33.021 33.461 0.000
1070 85 4 33.771 33.455 0.000
1071 86 3 0.552 18.315 0.000
1072 86 4 35.766 18.701 0.000
1072 86 4 -0.09086 18.701 0.000
1073 87 3 28.026 32.796 0.000
1074 87 4 28.562 33.321 0.000
1075 88 3 24.351 29.925 0.000
@ -1112,7 +1112,7 @@
1085 93 3 26.170 16.278 0.000
1086 93 4 26.046 17.017 0.000
1087 94 3 10.380 0.547 0.000
1088 94 4 10.003 35.755 0.000
1088 94 4 10.003 -0.10186 0.000
1089 95 3 0.419 29.308 0.000
1090 95 4 0.837 29.930 0.000
1091 96 3 13.712 28.191 0.000

View File

@ -0,0 +1,86 @@
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
special_bonds fene
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
group solvent molecule 0
group solute subtract all solvent
unfix 1
unfix 2
unfix 4
fix 1 solvent nve
fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0
fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211
fix 4 all enforce2d
run 20000
unfix 5
unfix 4
fix 5 solute rigid/small molecule langevin 0.45 0.45 0.5 112211
fix 4 all enforce2d
run 20000

View File

@ -1,255 +0,0 @@
LAMMPS (27 Nov 2018)
using 1 OpenMP thread(s) per MPI task
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1)
1 by 1 by 1 MPI processor grid
reading atoms ...
1200 atoms
scanning bonds ...
1 = max bonds/atom
reading bonds ...
300 bonds
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special_bonds fene
2 = max # of 1-2 neighbors
2 = max # of special neighbors
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42246
ghost atom cutoff = 1.42246
binsize = 0.71123, bins = 51 51 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518
50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852
100 0.45 0.73046745 0.054836584 1.234929 2.3196516
150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416
200 0.45 0.78481891 0.076931503 1.3113754 3.0412388
250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024
300 0.45 0.76820218 0.066727591 1.2845548 3.7861054
350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621
400 0.45 0.68527759 0.090724527 1.2256271 4.4725214
450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211
500 0.45 0.64883009 0.078376672 1.1768318 4.7919294
550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705
600 0.45 0.58193041 0.088386617 1.119942 5.131481
650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294
700 0.45 0.50856787 0.088471208 1.0466641 5.2550165
750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763
800 0.45 0.49926696 0.085958476 1.0348504 5.4665914
850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932
900 0.45 0.47785593 0.10150857 1.0289895 5.7765975
950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245
1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568
Loop time of 0.167265 on 1 procs for 1000 steps with 1200 atoms
Performance: 2582728.958 tau/day, 5978.539 timesteps/s
99.1% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.096171 | 0.096171 | 0.096171 | 0.0 | 57.50
Bond | 0.006212 | 0.006212 | 0.006212 | 0.0 | 3.71
Neigh | 0.024826 | 0.024826 | 0.024826 | 0.0 | 14.84
Comm | 0.0047672 | 0.0047672 | 0.0047672 | 0.0 | 2.85
Output | 0.00029063 | 0.00029063 | 0.00029063 | 0.0 | 0.17
Modify | 0.028771 | 0.028771 | 0.028771 | 0.0 | 17.20
Other | | 0.006227 | | | 3.72
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 195 ave 195 max 195 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 3136 ave 3136 max 3136 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 3136
Ave neighs/atom = 2.61333
Ave special neighs/atom = 0.5
Neighbor list builds = 92
Dangerous builds = 0
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
run 60000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.024 | 4.024 | 4.024 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686
1000 0.45 -1.9727655 0.058608715 -1.4645318 1.9982298
2000 0.46465361 -1.9897467 0.067008449 -1.4584719 1.5873463
3000 0.46175071 -2.0129279 0.057865385 -1.4936966 1.41269
4000 0.44386154 -2.0280304 0.067167835 -1.5173709 1.4022093
5000 0.46127582 -2.0556041 0.068318674 -1.526394 1.1416711
6000 0.45354052 -2.0463246 0.05461954 -1.5385425 1.1650258
7000 0.44082313 -2.040263 0.060218047 -1.5395891 1.3258681
8000 0.44353466 -2.0423792 0.061769402 -1.5374447 1.2696989
9000 0.46192977 -2.0761348 0.064999109 -1.5495908 0.9205826
10000 0.45278646 -2.0589872 0.059623919 -1.5469542 1.075581
11000 0.45583355 -2.0661957 0.058197558 -1.5525445 1.127643
12000 0.45881198 -2.0921508 0.066937896 -1.5667833 0.98383574
13000 0.45339481 -2.079088 0.06292782 -1.5631432 1.0188637
14000 0.43601312 -2.0624084 0.057999616 -1.568759 1.1452177
15000 0.45941503 -2.0746606 0.062523373 -1.553105 0.86928343
16000 0.45 -2.0743162 0.05517924 -1.569512 0.86849848
17000 0.45603004 -2.0657683 0.058711872 -1.5514064 0.95544551
18000 0.45320383 -2.1009711 0.060716634 -1.5874283 0.8343521
19000 0.44072983 -2.0846408 0.062893297 -1.581385 0.90776246
20000 0.44452441 -2.0921415 0.060341571 -1.587646 0.98180005
21000 0.45964557 -2.0837047 0.054459432 -1.5699827 1.0213779
22000 0.46351849 -2.1053613 0.058392027 -1.5838371 0.81579487
23000 0.45576065 -2.1001888 0.057646538 -1.5871614 0.76090085
24000 0.44671746 -2.0848717 0.058192801 -1.5803337 0.77003809
25000 0.44371239 -2.0870872 0.054804981 -1.5889396 0.92295746
26000 0.45381188 -2.097021 0.057195346 -1.586392 0.7743058
27000 0.46158533 -2.1071056 0.061289644 -1.5846153 0.78981802
28000 0.46534671 -2.1056151 0.054934755 -1.5857214 0.80778664
29000 0.4505804 -2.0949318 0.065503451 -1.5792234 0.78274755
30000 0.45730883 -2.1029161 0.063461968 -1.5825264 0.82507857
31000 0.4620071 -2.1124989 0.059980378 -1.5908964 0.78583986
32000 0.46934619 -2.1107818 0.056442616 -1.5853842 0.70535653
33000 0.45800203 -2.1062502 0.054317859 -1.594312 0.726293
34000 0.44634295 -2.110401 0.057764968 -1.606665 0.85401059
35000 0.4431929 -2.1274759 0.062048133 -1.6226042 0.64243758
36000 0.46049645 -2.1300979 0.068463634 -1.6015216 0.57252544
37000 0.45366344 -2.0977407 0.053788554 -1.5906668 0.78046879
38000 0.44155077 -2.1166674 0.056888683 -1.6185959 0.53429042
39000 0.45631012 -2.096949 0.04860872 -1.5924104 0.86494908
40000 0.44684402 -2.1229137 0.067190397 -1.6092516 0.65110818
41000 0.4479377 -2.1105264 0.059375259 -1.6035867 0.79092862
42000 0.46143191 -2.1174539 0.057418393 -1.5989882 0.69762908
43000 0.4356786 -2.085826 0.056534028 -1.5939764 0.89541946
44000 0.45806826 -2.126423 0.060905733 -1.6078307 0.66389027
45000 0.44343688 -2.1116384 0.065870114 -1.602701 0.83947585
46000 0.43844672 -2.1096265 0.064158652 -1.6073865 0.77278902
47000 0.45794928 -2.1142786 0.058919562 -1.5977914 0.62611933
48000 0.45412335 -2.1106058 0.059153304 -1.5977076 0.66190677
49000 0.45927883 -2.1197656 0.068354598 -1.5925149 0.56008845
50000 0.44117285 -2.1020783 0.064763249 -1.5965099 0.85935147
51000 0.45325398 -2.1125154 0.062295387 -1.5973438 0.80951782
52000 0.43896579 -2.1039004 0.057475908 -1.6078245 0.84753768
53000 0.45180671 -2.1092446 0.063528598 -1.5942857 0.67065038
54000 0.4554341 -2.1185135 0.059603337 -1.6038556 0.76399618
55000 0.43861159 -2.0986406 0.057733879 -1.6026606 0.77334084
56000 0.45522991 -2.1207166 0.063287543 -1.6025785 0.78669598
57000 0.46125513 -2.1150202 0.06026261 -1.5938868 0.78148646
58000 0.45236938 -2.1088894 0.062678374 -1.5942186 0.75643518
59000 0.43927269 -2.1274165 0.055355076 -1.6331548 0.63495311
60000 0.45331102 -2.1336193 0.051244399 -1.6294416 0.56706921
Loop time of 13.9361 on 1 procs for 60000 steps with 1200 atoms
Performance: 1859917.639 tau/day, 4305.365 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 9.2211 | 9.2211 | 9.2211 | 0.0 | 66.17
Bond | 0.33763 | 0.33763 | 0.33763 | 0.0 | 2.42
Neigh | 2.3772 | 2.3772 | 2.3772 | 0.0 | 17.06
Comm | 0.37693 | 0.37693 | 0.37693 | 0.0 | 2.70
Output | 0.0011795 | 0.0011795 | 0.0011795 | 0.0 | 0.01
Modify | 1.2727 | 1.2727 | 1.2727 | 0.0 | 9.13
Other | | 0.3493 | | | 2.51
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 405 ave 405 max 405 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 9565 ave 9565 max 9565 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 9565
Ave neighs/atom = 7.97083
Ave special neighs/atom = 0.5
Neighbor list builds = 4876
Dangerous builds = 0
Total wall time: 0:00:14

View File

@ -1,255 +0,0 @@
LAMMPS (27 Nov 2018)
using 1 OpenMP thread(s) per MPI task
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1)
2 by 2 by 1 MPI processor grid
reading atoms ...
1200 atoms
scanning bonds ...
1 = max bonds/atom
reading bonds ...
300 bonds
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special_bonds fene
2 = max # of 1-2 neighbors
2 = max # of special neighbors
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42246
ghost atom cutoff = 1.42246
binsize = 0.71123, bins = 51 51 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518
50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852
100 0.45 0.73046745 0.054836584 1.234929 2.3196516
150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416
200 0.45 0.78481891 0.076931503 1.3113754 3.0412388
250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024
300 0.45 0.76820218 0.066727591 1.2845548 3.7861054
350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621
400 0.45 0.68527759 0.090724527 1.2256271 4.4725214
450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211
500 0.45 0.64883009 0.078376672 1.1768318 4.7919294
550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705
600 0.45 0.58193041 0.088386617 1.119942 5.131481
650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294
700 0.45 0.50856787 0.088471208 1.0466641 5.2550165
750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763
800 0.45 0.49926696 0.085958476 1.0348504 5.4665914
850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932
900 0.45 0.47785593 0.10150857 1.0289895 5.7765975
950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245
1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568
Loop time of 0.0641922 on 4 procs for 1000 steps with 1200 atoms
Performance: 6729792.131 tau/day, 15578.223 timesteps/s
90.9% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.020663 | 0.021445 | 0.022477 | 0.5 | 33.41
Bond | 0.0014422 | 0.0015128 | 0.001569 | 0.1 | 2.36
Neigh | 0.0067129 | 0.0067645 | 0.0068202 | 0.1 | 10.54
Comm | 0.018454 | 0.019275 | 0.020386 | 0.5 | 30.03
Output | 0.00038171 | 0.00040019 | 0.00044632 | 0.0 | 0.62
Modify | 0.010561 | 0.010904 | 0.011309 | 0.3 | 16.99
Other | | 0.003891 | | | 6.06
Nlocal: 300 ave 305 max 292 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Nghost: 100.25 ave 108 max 93 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 784 ave 815 max 739 min
Histogram: 1 0 0 0 0 0 1 1 0 1
Total # of neighbors = 3136
Ave neighs/atom = 2.61333
Ave special neighs/atom = 0.5
Neighbor list builds = 92
Dangerous builds = 0
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
run 60000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.001 | 4.032 | 4.124 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686
1000 0.45 -1.9727661 0.05860859 -1.4645325 1.9982402
2000 0.45146247 -1.9766043 0.059408886 -1.4661092 1.7398826
3000 0.43338517 -2.0028125 0.059884381 -1.5099041 1.4716488
4000 0.46674519 -2.0200954 0.066548679 -1.4871905 1.2506693
5000 0.45 -2.0207125 0.055926205 -1.5151613 1.3047457
6000 0.45447759 -2.0585234 0.068004883 -1.5364197 1.1859762
7000 0.43183018 -2.0170545 0.060800296 -1.5247839 1.3074223
8000 0.46657547 -2.053224 0.063224367 -1.523813 1.1785643
9000 0.45 -2.0691221 0.054959029 -1.564538 1.1833657
10000 0.4428252 -2.0473987 0.054306905 -1.5506356 1.181794
11000 0.45407036 -2.0746151 0.065849667 -1.5550734 1.1008545
12000 0.46061944 -2.0580809 0.063129643 -1.5347156 1.0206491
13000 0.45159068 -2.0640832 0.060059758 -1.5528091 1.0813494
14000 0.44141594 -2.0467255 0.062785088 -1.5428923 1.1465772
15000 0.454361 -2.0908595 0.057471037 -1.5794061 0.84297781
16000 0.44061091 -2.0521452 0.064644196 -1.5472573 1.1478647
17000 0.45118383 -2.081348 0.058660999 -1.5718791 1.0101404
18000 0.44664866 -2.0845745 0.060435731 -1.5778623 0.96142277
19000 0.45515339 -2.0914006 0.062174016 -1.5744525 0.87623323
20000 0.45624408 -2.0837697 0.059263054 -1.5686428 0.92810644
21000 0.46791657 -2.1062007 0.067355929 -1.5713181 0.88318793
22000 0.43907391 -2.1005271 0.065885144 -1.5959339 0.77211644
23000 0.43967354 -2.0723459 0.057613471 -1.5754253 1.0371548
24000 0.45716384 -2.0987126 0.055157377 -1.5867723 0.89670061
25000 0.45828285 -2.1041616 0.057736138 -1.5885245 0.79952286
26000 0.45 -2.0743463 0.072455519 -1.5522658 0.88260204
27000 0.46581599 -2.0804974 0.058113258 -1.5569564 0.93053891
28000 0.46904194 -2.0920124 0.059748792 -1.5636125 0.79359618
29000 0.46093196 -2.118556 0.063942334 -1.5940659 0.67707604
30000 0.45733724 -2.1197827 0.066939064 -1.5958875 0.66886075
31000 0.44580762 -2.0977175 0.056969121 -1.5953123 0.81042562
32000 0.44403029 -2.1032264 0.063465127 -1.596101 0.71796412
33000 0.45834072 -2.0934132 0.066035391 -1.569419 0.77873998
34000 0.44981563 -2.0910902 0.07138738 -1.5702621 0.75679805
35000 0.45383392 -2.0926654 0.067553478 -1.5716562 0.9064517
36000 0.44447198 -2.1107114 0.062718917 -1.6038909 0.8538349
37000 0.45838527 -2.1166464 0.062442606 -1.5962005 0.7300635
38000 0.45014075 -2.1096258 0.059293718 -1.6005665 0.73988246
39000 0.44377026 -2.080309 0.063545781 -1.5733628 0.99775641
40000 0.44577324 -2.1134607 0.065271179 -1.6027878 0.64113168
41000 0.45 -2.0937983 0.060881377 -1.5832919 0.78849829
42000 0.46866695 -2.1142283 0.056417605 -1.5895343 0.73788436
43000 0.43211727 -2.0819893 0.061463358 -1.5887688 0.95853724
44000 0.44138397 -2.0921314 0.059643895 -1.5914713 0.89486208
45000 0.45 -2.117209 0.054804331 -1.6127797 0.78564885
46000 0.44285245 -2.1090975 0.057629006 -1.6089851 0.64549424
47000 0.45537009 -2.1164296 0.068582324 -1.5928567 0.73629413
48000 0.45046732 -2.1006362 0.057249591 -1.5932947 0.74317593
49000 0.45425966 -2.1191703 0.064247719 -1.6010414 0.70962368
50000 0.45506149 -2.1184671 0.064911797 -1.5988731 0.69958156
51000 0.46047417 -2.1019719 0.058468259 -1.5834132 0.87219271
52000 0.43808317 -2.092294 0.057280941 -1.597295 0.84156893
53000 0.45012337 -2.1175234 0.064002667 -1.6037725 0.64562439
54000 0.43854679 -2.1236444 0.061316257 -1.6241468 0.72478117
55000 0.46382438 -2.1016563 0.060724666 -1.5774938 0.83311209
56000 0.44951533 -2.0946157 0.055075217 -1.5903998 0.90066109
57000 0.45937401 -2.0983442 0.061558996 -1.577794 0.58606161
58000 0.446669 -2.1146838 0.062385166 -1.6060019 0.73443388
59000 0.43847747 -2.1197461 0.060460257 -1.6211738 0.7230937
60000 0.45294215 -2.1258513 0.061895006 -1.6113915 0.70722168
Loop time of 4.56226 on 4 procs for 60000 steps with 1200 atoms
Performance: 5681397.232 tau/day, 13151.382 timesteps/s
97.1% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.2114 | 2.2527 | 2.3592 | 4.1 | 49.38
Bond | 0.083713 | 0.09234 | 0.10244 | 2.3 | 2.02
Neigh | 0.72491 | 0.7277 | 0.72957 | 0.2 | 15.95
Comm | 0.79464 | 0.90036 | 0.94957 | 6.5 | 19.74
Output | 0.0014119 | 0.0024976 | 0.0057502 | 3.8 | 0.05
Modify | 0.33757 | 0.35202 | 0.36946 | 2.1 | 7.72
Other | | 0.2346 | | | 5.14
Nlocal: 300 ave 306 max 289 min
Histogram: 1 0 0 0 0 0 0 1 1 1
Nghost: 227.25 ave 250 max 216 min
Histogram: 2 0 1 0 0 0 0 0 0 1
Neighs: 2373.25 ave 2489 max 2283 min
Histogram: 1 1 0 0 0 1 0 0 0 1
Total # of neighbors = 9493
Ave neighs/atom = 7.91083
Ave special neighs/atom = 0.5
Neighbor list builds = 4888
Dangerous builds = 0
Total wall time: 0:00:04

View File

@ -0,0 +1,259 @@
LAMMPS (28 Feb 2019)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88)
using 1 OpenMP thread(s) per MPI task
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1)
1 by 1 by 1 MPI processor grid
reading atoms ...
1200 atoms
scanning bonds ...
1 = max bonds/atom
reading bonds ...
300 bonds
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.000394821 secs
read_data CPU = 0.00212336 secs
special_bonds fene
2 = max # of 1-2 neighbors
2 = max # of special neighbors
special bonds CPU = 0.00018549 secs
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42246
ghost atom cutoff = 1.42246
binsize = 0.71123, bins = 51 51 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518
50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852
100 0.45 0.73046745 0.054836584 1.234929 2.3196516
150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416
200 0.45 0.78481891 0.076931503 1.3113754 3.0412388
250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024
300 0.45 0.76820218 0.066727591 1.2845548 3.7861054
350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621
400 0.45 0.68527759 0.090724527 1.2256271 4.4725214
450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211
500 0.45 0.64883009 0.078376672 1.1768318 4.7919294
550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705
600 0.45 0.58193041 0.088386617 1.119942 5.131481
650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294
700 0.45 0.50856787 0.088471208 1.0466641 5.2550165
750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763
800 0.45 0.49926696 0.085958476 1.0348504 5.4665914
850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932
900 0.45 0.47785593 0.10150857 1.0289895 5.7765975
950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245
1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568
Loop time of 0.113919 on 1 procs for 1000 steps with 1200 atoms
Performance: 3792167.464 tau/day, 8778.165 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.076825 | 0.076825 | 0.076825 | 0.0 | 67.44
Bond | 0.0041864 | 0.0041864 | 0.0041864 | 0.0 | 3.67
Neigh | 0.017061 | 0.017061 | 0.017061 | 0.0 | 14.98
Comm | 0.0019042 | 0.0019042 | 0.0019042 | 0.0 | 1.67
Output | 0.00017285 | 0.00017285 | 0.00017285 | 0.0 | 0.15
Modify | 0.011218 | 0.011218 | 0.011218 | 0.0 | 9.85
Other | | 0.002551 | | | 2.24
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 195 ave 195 max 195 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 3136 ave 3136 max 3136 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 3136
Ave neighs/atom = 2.61333
Ave special neighs/atom = 0.5
Neighbor list builds = 92
Dangerous builds = 0
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
run 60000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.024 | 4.024 | 4.024 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686
1000 0.45 -1.9727644 0.05860769 -1.4645317 1.9982326
2000 0.46143408 -1.9889684 0.058103225 -1.4698156 1.7806269
3000 0.44459291 -1.9997961 0.068724164 -1.4868496 1.4369618
4000 0.46939549 -2.0330437 0.073499424 -1.4905399 1.3780016
5000 0.44411088 -2.0339936 0.05862049 -1.5316323 1.2544164
6000 0.44034597 -2.0265475 0.066481992 -1.5200864 1.2362891
7000 0.45097378 -2.0331083 0.058467565 -1.5240428 1.2762333
8000 0.45797632 -2.0330255 0.060048036 -1.5153828 1.3862396
9000 0.45297811 -2.0383417 0.067056519 -1.5186845 1.2762554
10000 0.45 -2.0628269 0.065650067 -1.5475518 1.0566213
11000 0.44466757 -2.0593977 0.06190999 -1.5531907 1.1452469
12000 0.46743534 -2.0684295 0.061056278 -1.5403274 1.0824225
13000 0.45601091 -2.0689708 0.054868536 -1.5584713 0.96703283
14000 0.44111882 -2.0553174 0.058249816 -1.5563164 1.0986427
15000 0.43894405 -2.0866829 0.064117804 -1.5839869 0.90031836
16000 0.43856814 -2.0879319 0.056024166 -1.593705 0.96387323
17000 0.45977841 -2.103188 0.058097306 -1.5856955 0.83352919
18000 0.43423341 -2.0813151 0.066623991 -1.5808196 0.98157638
19000 0.44245939 -2.0851261 0.057637655 -1.5853978 0.84228341
20000 0.43144678 -2.0895403 0.06536727 -1.5930858 0.88177768
21000 0.45014968 -2.106686 0.059137572 -1.5977739 0.89408935
22000 0.4575126 -2.1024115 0.063013023 -1.5822672 0.84886734
23000 0.45 -2.10897 0.06724784 -1.5920971 0.66205013
24000 0.43055602 -2.0894725 0.061566464 -1.5977089 0.81764789
25000 0.4366384 -2.0926743 0.059609321 -1.5967905 0.85549875
26000 0.4521714 -2.0963996 0.062031863 -1.5825731 0.80137118
27000 0.45734834 -2.1060987 0.061712636 -1.5874188 0.82899415
28000 0.44803467 -2.0859226 0.061871856 -1.5763894 0.97007526
29000 0.45 -2.1106243 0.063825481 -1.5971738 0.63798376
30000 0.44932806 -2.1006036 0.053053934 -1.598596 0.63907113
31000 0.44713779 -2.1096164 0.066470416 -1.5963808 0.66832708
32000 0.4373357 -2.0941237 0.058871613 -1.5982808 0.78176106
33000 0.44030485 -2.105644 0.058804306 -1.6069017 0.66286458
34000 0.43781175 -2.1233209 0.064611206 -1.6212628 0.56342584
35000 0.45670132 -2.1059408 0.053049584 -1.5965705 0.73992396
36000 0.45555427 -2.1149877 0.057627709 -1.6021854 0.85854939
37000 0.44134236 -2.1106202 0.064444306 -1.6052013 0.74674603
38000 0.44812623 -2.1003681 0.057266258 -1.5953491 0.78239359
39000 0.44167062 -2.11141 0.055354 -1.6147534 0.7066385
40000 0.46103176 -2.1166687 0.062155412 -1.5938657 0.73620955
41000 0.44537102 -2.0993898 0.05631213 -1.5980778 0.87348756
42000 0.44752506 -2.1115212 0.057506521 -1.6068625 0.72999561
43000 0.4483886 -2.1184719 0.066943915 -1.6035131 0.78112063
44000 0.45944897 -2.0916657 0.055242781 -1.5773568 0.98660473
45000 0.46238513 -2.1163075 0.0530031 -1.6013046 0.74416054
46000 0.45979064 -2.1165545 0.060657581 -1.5964895 0.63516974
47000 0.45936546 -2.1140678 0.049931919 -1.6051532 0.76425182
48000 0.45424613 -2.1122681 0.061885599 -1.5965149 0.71981142
49000 0.44449524 -2.1147361 0.06626748 -1.6043438 0.78720467
50000 0.4641185 -2.1114668 0.055104874 -1.5926302 0.70195865
51000 0.44220655 -2.1075773 0.0589109 -1.6068283 0.73806859
52000 0.43097906 -2.1189493 0.061502241 -1.6268271 0.69622593
53000 0.45 -2.137688 0.053631829 -1.6344311 0.48269158
54000 0.43777118 -2.1089246 0.047098534 -1.6244197 0.70423814
55000 0.46061985 -2.1129502 0.062520353 -1.5901938 0.72492307
56000 0.4524841 -2.1195648 0.06580089 -1.6016569 0.52709892
57000 0.44914574 -2.1041993 0.061040876 -1.594387 0.7979988
58000 0.46446286 -2.1181238 0.055741995 -1.598306 0.51009146
59000 0.4632674 -2.1169321 0.050672678 -1.6033781 0.83110911
60000 0.46340478 -2.122846 0.058485209 -1.6013422 0.69966471
Loop time of 8.01683 on 1 procs for 60000 steps with 1200 atoms
Performance: 3233199.903 tau/day, 7484.259 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 5.4027 | 5.4027 | 5.4027 | 0.0 | 67.39
Bond | 0.23585 | 0.23585 | 0.23585 | 0.0 | 2.94
Neigh | 1.5188 | 1.5188 | 1.5188 | 0.0 | 18.95
Comm | 0.14452 | 0.14452 | 0.14452 | 0.0 | 1.80
Output | 0.00060487 | 0.00060487 | 0.00060487 | 0.0 | 0.01
Modify | 0.56352 | 0.56352 | 0.56352 | 0.0 | 7.03
Other | | 0.1508 | | | 1.88
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 395 ave 395 max 395 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 9652 ave 9652 max 9652 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 9652
Ave neighs/atom = 8.04333
Ave special neighs/atom = 0.5
Neighbor list builds = 4886
Dangerous builds = 0
Total wall time: 0:00:08

View File

@ -0,0 +1,259 @@
LAMMPS (28 Feb 2019)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88)
using 1 OpenMP thread(s) per MPI task
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1)
2 by 2 by 1 MPI processor grid
reading atoms ...
1200 atoms
scanning bonds ...
1 = max bonds/atom
reading bonds ...
300 bonds
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.000130415 secs
read_data CPU = 0.00132132 secs
special_bonds fene
2 = max # of 1-2 neighbors
2 = max # of special neighbors
special bonds CPU = 4.76837e-05 secs
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42246
ghost atom cutoff = 1.42246
binsize = 0.71123, bins = 51 51 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518
50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852
100 0.45 0.73046745 0.054836584 1.234929 2.3196516
150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416
200 0.45 0.78481891 0.076931503 1.3113754 3.0412388
250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024
300 0.45 0.76820218 0.066727591 1.2845548 3.7861054
350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621
400 0.45 0.68527759 0.090724527 1.2256271 4.4725214
450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211
500 0.45 0.64883009 0.078376672 1.1768318 4.7919294
550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705
600 0.45 0.58193041 0.088386617 1.119942 5.131481
650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294
700 0.45 0.50856787 0.088471208 1.0466641 5.2550165
750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763
800 0.45 0.49926696 0.085958476 1.0348504 5.4665914
850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932
900 0.45 0.47785593 0.10150857 1.0289895 5.7765975
950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245
1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568
Loop time of 0.0377742 on 4 procs for 1000 steps with 1200 atoms
Performance: 11436375.633 tau/day, 26473.092 timesteps/s
96.6% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.016871 | 0.017299 | 0.018185 | 0.4 | 45.80
Bond | 0.0010128 | 0.0010633 | 0.001116 | 0.1 | 2.81
Neigh | 0.004832 | 0.0048565 | 0.0048807 | 0.0 | 12.86
Comm | 0.0066509 | 0.0077528 | 0.0084352 | 0.8 | 20.52
Output | 0.00022054 | 0.00028259 | 0.00046587 | 0.0 | 0.75
Modify | 0.0035386 | 0.0036086 | 0.0036943 | 0.1 | 9.55
Other | | 0.002912 | | | 7.71
Nlocal: 300 ave 305 max 292 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Nghost: 100.25 ave 108 max 93 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 784 ave 815 max 739 min
Histogram: 1 0 0 0 0 0 1 1 0 1
Total # of neighbors = 3136
Ave neighs/atom = 2.61333
Ave special neighs/atom = 0.5
Neighbor list builds = 92
Dangerous builds = 0
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
run 60000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.001 | 4.032 | 4.124 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686
1000 0.45 -1.9727652 0.058608073 -1.4645321 1.9982444
2000 0.44428815 -1.9902282 0.064240544 -1.4820698 1.7051263
3000 0.46641766 -1.9856844 0.065017468 -1.4546379 1.6939772
4000 0.45734058 -2.0242583 0.070494626 -1.4968042 1.3474276
5000 0.44904747 -2.0086954 0.058801142 -1.501221 1.4632351
6000 0.44961405 -2.0334509 0.05721299 -1.5269985 1.3093586
7000 0.45474928 -2.0453645 0.064725006 -1.5262692 1.1581035
8000 0.44274767 -2.0375379 0.062216035 -1.5329431 1.312914
9000 0.46176571 -2.0473031 0.065581966 -1.5203402 1.2013868
10000 0.45046977 -2.0540466 0.065402724 -1.5385495 0.95819581
11000 0.45016671 -2.0610028 0.056993955 -1.5542172 1.0433435
12000 0.43823039 -2.073155 0.065171939 -1.5701178 1.1400059
13000 0.44482161 -2.0678338 0.063901045 -1.5594819 0.97993813
14000 0.45 -2.0892562 0.061753632 -1.5778776 0.89841778
15000 0.44328626 -2.0859346 0.059956258 -1.5830615 0.90664821
16000 0.45666508 -2.0859262 0.059582346 -1.5700593 0.9702235
17000 0.44832038 -2.0762124 0.059153394 -1.5691122 0.93020504
18000 0.4555831 -2.0844959 0.057986324 -1.5713062 0.87398232
19000 0.45257867 -2.0671736 0.062190389 -1.5527816 0.89208496
20000 0.44010419 -2.1020944 0.062053708 -1.6003033 0.84140973
21000 0.45239369 -2.0820308 0.060981799 -1.5690323 0.98502522
22000 0.44607468 -2.0820602 0.051731316 -1.5846259 0.86120529
23000 0.45088473 -2.0865286 0.05727778 -1.5787418 1.1479844
24000 0.45526919 -2.1086678 0.057378327 -1.5963997 0.86944138
25000 0.46536624 -2.1055425 0.05665328 -1.5839108 0.72895438
26000 0.46716668 -2.1035267 0.057498747 -1.5792505 0.85105386
27000 0.44374699 -2.0932213 0.060937242 -1.5889069 0.93200759
28000 0.45944001 -2.0968869 0.053052954 -1.5847768 0.78909249
29000 0.4543632 -2.10493 0.061511018 -1.5894345 0.85862527
30000 0.44987776 -2.0942536 0.062431086 -1.5823197 0.7349894
31000 0.43829016 -2.0951259 0.060245682 -1.5969553 0.86702973
32000 0.45416601 -2.0991679 0.055978905 -1.5894015 0.75777153
33000 0.4605079 -2.1118364 0.058205688 -1.5935066 0.86041104
34000 0.43638213 -2.0925345 0.067533519 -1.5889825 0.85100425
35000 0.46912252 -2.1082718 0.051646432 -1.5878938 0.73613751
36000 0.45 -2.0966442 0.052507159 -1.5945121 0.88722487
37000 0.44970507 -2.1029685 0.065454263 -1.588184 0.76033821
38000 0.44910233 -2.097751 0.05767009 -1.5913528 0.95830923
39000 0.4322161 -2.1060426 0.062453704 -1.611733 0.74681695
40000 0.46143858 -2.1328575 0.057333011 -1.6144704 0.58326322
41000 0.43180549 -2.1070656 0.064150563 -1.6114694 0.82842684
42000 0.46738909 -2.1067947 0.058017036 -1.5817781 0.73292362
43000 0.43699124 -2.1171964 0.062817262 -1.6177521 0.73354741
44000 0.45262916 -2.1281307 0.055228619 -1.6206502 0.64167946
45000 0.43905419 -2.088789 0.055597999 -1.5945027 0.8002542
46000 0.44485569 -2.1035061 0.067828181 -1.5911929 0.71861494
47000 0.44496824 -2.0968296 0.0632326 -1.5889996 0.75202899
48000 0.46567244 -2.1235948 0.061032118 -1.5972783 0.64094556
49000 0.43202506 -2.0986097 0.053464022 -1.6134806 0.83857984
50000 0.45454698 -2.1263344 0.058119708 -1.6140465 0.67030037
51000 0.43702766 -2.1292347 0.074047424 -1.6185238 0.52896462
52000 0.46367081 -2.1177288 0.06726625 -1.5871781 0.74343227
53000 0.45 -2.1341074 0.062769314 -1.6217131 0.51130365
54000 0.44862492 -2.1272108 0.057723381 -1.6212364 0.54735429
55000 0.44926027 -2.1350444 0.066186625 -1.6199719 0.66821299
56000 0.4544227 -2.1325537 0.065298628 -1.6132111 0.63597556
57000 0.45697003 -2.1323238 0.053312855 -1.6224218 0.55572633
58000 0.45698902 -2.1043208 0.055835989 -1.5918766 0.63502658
59000 0.4425306 -2.1120353 0.056617261 -1.6132563 0.65681272
60000 0.44319296 -2.1171981 0.058330294 -1.6160442 0.63602511
Loop time of 2.63918 on 4 procs for 60000 steps with 1200 atoms
Performance: 9821248.084 tau/day, 22734.371 timesteps/s
97.3% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.1742 | 1.278 | 1.3471 | 5.9 | 48.43
Bond | 0.046621 | 0.06565 | 0.081322 | 5.1 | 2.49
Neigh | 0.46642 | 0.46917 | 0.47105 | 0.3 | 17.78
Comm | 0.47295 | 0.55928 | 0.67758 | 10.5 | 21.19
Output | 0.00073624 | 0.00173 | 0.0047016 | 4.1 | 0.07
Modify | 0.14511 | 0.15226 | 0.15887 | 1.5 | 5.77
Other | | 0.1131 | | | 4.28
Nlocal: 300 ave 309 max 281 min
Histogram: 1 0 0 0 0 0 0 1 0 2
Nghost: 232.75 ave 234 max 231 min
Histogram: 1 0 0 1 0 0 0 0 0 2
Neighs: 2450.25 ave 2576 max 2179 min
Histogram: 1 0 0 0 0 0 0 0 1 2
Total # of neighbors = 9801
Ave neighs/atom = 8.1675
Ave special neighs/atom = 0.5
Neighbor list builds = 4887
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -0,0 +1,290 @@
LAMMPS (28 Feb 2019)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88)
using 1 OpenMP thread(s) per MPI task
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1)
1 by 1 by 1 MPI processor grid
reading atoms ...
1200 atoms
scanning bonds ...
1 = max bonds/atom
reading bonds ...
300 bonds
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.000271559 secs
read_data CPU = 0.00115585 secs
special_bonds fene
2 = max # of 1-2 neighbors
2 = max # of special neighbors
special bonds CPU = 8.39233e-05 secs
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42246
ghost atom cutoff = 1.42246
binsize = 0.71123, bins = 51 51 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518
50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852
100 0.45 0.73046745 0.054836584 1.234929 2.3196516
150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416
200 0.45 0.78481891 0.076931503 1.3113754 3.0412388
250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024
300 0.45 0.76820218 0.066727591 1.2845548 3.7861054
350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621
400 0.45 0.68527759 0.090724527 1.2256271 4.4725214
450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211
500 0.45 0.64883009 0.078376672 1.1768318 4.7919294
550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705
600 0.45 0.58193041 0.088386617 1.119942 5.131481
650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294
700 0.45 0.50856787 0.088471208 1.0466641 5.2550165
750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763
800 0.45 0.49926696 0.085958476 1.0348504 5.4665914
850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932
900 0.45 0.47785593 0.10150857 1.0289895 5.7765975
950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245
1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568
Loop time of 0.107201 on 1 procs for 1000 steps with 1200 atoms
Performance: 4029800.456 tau/day, 9328.242 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.072035 | 0.072035 | 0.072035 | 0.0 | 67.20
Bond | 0.0039918 | 0.0039918 | 0.0039918 | 0.0 | 3.72
Neigh | 0.016078 | 0.016078 | 0.016078 | 0.0 | 15.00
Comm | 0.0018375 | 0.0018375 | 0.0018375 | 0.0 | 1.71
Output | 0.00016379 | 0.00016379 | 0.00016379 | 0.0 | 0.15
Modify | 0.010665 | 0.010665 | 0.010665 | 0.0 | 9.95
Other | | 0.002429 | | | 2.27
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 195 ave 195 max 195 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 3136 ave 3136 max 3136 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 3136
Ave neighs/atom = 2.61333
Ave special neighs/atom = 0.5
Neighbor list builds = 92
Dangerous builds = 0
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
group solvent molecule 0
750 atoms in group solvent
group solute subtract all solvent
450 atoms in group solute
unfix 1
unfix 2
unfix 4
fix 1 solvent nve
fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0
fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211
150 rigid bodies with 450 atoms
fix 4 all enforce2d
run 20000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.274 | 5.274 | 5.274 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.44603578 -1.7056163 0.08808163 -1.2555023 3.4039736
1000 0.46008168 -1.9040837 0.08808163 -1.4425691 0.93225457
2000 0.44520658 -1.9317253 0.08808163 -1.4822843 3.8192896
3000 0.43988556 -1.945898 0.08808163 -1.5007759 3.0371634
4000 0.4646519 -1.9753553 0.08808163 -1.5101312 -1.8041178
5000 0.4362993 -1.9763715 0.08808163 -1.5341603 1.5037284
6000 0.47007384 -1.9833154 0.08808163 -1.5136905 2.1227653
7000 0.44854623 -1.9914288 0.08808163 -1.5392772 3.9458099
8000 0.43841372 -1.9779603 0.08808163 -1.5340328 -4.5429769
9000 0.4518303 -1.9834387 0.08808163 -1.5286215 4.4230447
10000 0.43562904 -2.001471 0.08808163 -1.5598038 1.8919582
11000 0.44014575 -1.9820611 0.08808163 -1.5367278 -2.1189418
12000 0.44466956 -2.0134014 0.08808163 -1.5643963 -2.5218497
13000 0.45274369 -2.021443 0.08808163 -1.5658844 2.4795173
14000 0.44742645 -2.011108 0.08808163 -1.5598653 -0.74697767
15000 0.4674843 -2.024737 0.08808163 -1.5572139 -1.9539999
16000 0.45610154 -2.0401029 0.08808163 -1.5818189 -0.53082066
17000 0.44679292 -2.0365577 0.08808163 -1.5858291 -6.5040295
18000 0.44279107 -2.0500326 0.08808163 -1.6025522 -0.051597102
19000 0.45603993 -2.0306289 0.08808163 -1.5723948 1.0986608
20000 0.44519606 -2.0412229 0.08808163 -1.5917904 -1.0406746
Loop time of 3.68102 on 1 procs for 20000 steps with 1200 atoms
Performance: 2347175.802 tau/day, 5433.277 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.7349 | 1.7349 | 1.7349 | 0.0 | 47.13
Bond | 0.079483 | 0.079483 | 0.079483 | 0.0 | 2.16
Neigh | 0.49063 | 0.49063 | 0.49063 | 0.0 | 13.33
Comm | 0.049093 | 0.049093 | 0.049093 | 0.0 | 1.33
Output | 0.00022578 | 0.00022578 | 0.00022578 | 0.0 | 0.01
Modify | 1.273 | 1.273 | 1.273 | 0.0 | 34.58
Other | | 0.05369 | | | 1.46
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 395 ave 395 max 395 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 8915 ave 8915 max 8915 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 8915
Ave neighs/atom = 7.42917
Ave special neighs/atom = 0.5
Neighbor list builds = 1580
Dangerous builds = 0
unfix 5
unfix 4
fix 5 solute rigid/small molecule langevin 0.45 0.45 0.5 112211
create bodies CPU = 0.00012517 secs
150 rigid bodies with 450 atoms
1.04536 = max distance from body owner to body atom
fix 4 all enforce2d
run 20000
Per MPI rank memory allocation (min/avg/max) = 8.633 | 8.633 | 8.633 Mbytes
Step Temp E_pair E_mol TotEng Press
20000 0.44519606 -2.0412229 0.08808163 -1.5917904 1.3058893
21000 0.4353376 -2.0483342 0.08808163 -1.6069035 0.53023317
22000 0.44034324 -2.0416876 0.08808163 -1.5961941 4.0327077
23000 0.4685403 -2.05295 0.08808163 -1.5845698 3.6792349
24000 0.44872075 -2.0320623 0.08808163 -1.579769 -2.0476923
25000 0.46829594 -2.0671408 0.08808163 -1.5989589 2.180811
26000 0.45257544 -2.0418792 0.08808163 -1.5864572 3.3924018
27000 0.44269664 -2.0409905 0.08808163 -1.5935868 -0.17012673
28000 0.46961216 -2.0552479 0.08808163 -1.5859978 -7.2870888
29000 0.46683129 -2.0438334 0.08808163 -1.5768404 3.0583141
30000 0.44262228 -2.036737 0.08808163 -1.5893937 0.087520915
31000 0.43517227 -2.0479672 0.08808163 -1.6066708 -0.3426009
32000 0.44543779 -2.0538031 0.08808163 -1.6041744 -0.2093148
33000 0.44629079 -2.0409901 0.08808163 -1.5906691 3.310113
34000 0.43058831 -2.0713827 0.08808163 -1.6338069 0.14128843
35000 0.44546512 -2.0427068 0.08808163 -1.593056 -3.1386697
36000 0.42971129 -2.0527435 0.08808163 -1.6158795 -2.7334963
37000 0.44707969 -2.0461803 0.08808163 -1.595219 -3.8777678
38000 0.43150818 -2.0435276 0.08808163 -1.6052052 0.2905487
39000 0.44463343 -2.0522113 0.08808163 -1.6032355 3.543123
40000 0.44582593 -2.052213 0.08808163 -1.6022693 1.1486536
Loop time of 3.69012 on 1 procs for 20000 steps with 1200 atoms
Performance: 2341388.948 tau/day, 5419.882 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.756 | 1.756 | 1.756 | 0.0 | 47.59
Bond | 0.079221 | 0.079221 | 0.079221 | 0.0 | 2.15
Neigh | 0.49085 | 0.49085 | 0.49085 | 0.0 | 13.30
Comm | 0.048317 | 0.048317 | 0.048317 | 0.0 | 1.31
Output | 0.0002315 | 0.0002315 | 0.0002315 | 0.0 | 0.01
Modify | 1.2616 | 1.2616 | 1.2616 | 0.0 | 34.19
Other | | 0.05386 | | | 1.46
Nlocal: 1200 ave 1200 max 1200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 393 ave 393 max 393 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 9091 ave 9091 max 9091 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 9091
Ave neighs/atom = 7.57583
Ave special neighs/atom = 0.5
Neighbor list builds = 1582
Dangerous builds = 0
Total wall time: 0:00:07

View File

@ -0,0 +1,290 @@
LAMMPS (28 Feb 2019)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88)
using 1 OpenMP thread(s) per MPI task
# 2d micelle simulation
dimension 2
neighbor 0.3 bin
neigh_modify delay 5
atom_style bond
# Soft potential push-off
read_data data.micelle
orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1)
2 by 2 by 1 MPI processor grid
reading atoms ...
1200 atoms
scanning bonds ...
1 = max bonds/atom
reading bonds ...
300 bonds
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.000175714 secs
read_data CPU = 0.00145626 secs
special_bonds fene
2 = max # of 1-2 neighbors
2 = max # of special neighbors
special bonds CPU = 7.22408e-05 secs
pair_style soft 1.12246
pair_coeff * * 0.0 1.12246
bond_style harmonic
bond_coeff 1 50.0 0.75
velocity all create 0.45 2349852
variable prefactor equal ramp(1.0,20.0)
fix 1 all nve
fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0
fix 3 all adapt 1 pair soft a * * v_prefactor
fix 4 all enforce2d
thermo 50
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42246
ghost atom cutoff = 1.42246
binsize = 0.71123, bins = 51 51 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518
50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852
100 0.45 0.73046745 0.054836584 1.234929 2.3196516
150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416
200 0.45 0.78481891 0.076931503 1.3113754 3.0412388
250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024
300 0.45 0.76820218 0.066727591 1.2845548 3.7861054
350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621
400 0.45 0.68527759 0.090724527 1.2256271 4.4725214
450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211
500 0.45 0.64883009 0.078376672 1.1768318 4.7919294
550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705
600 0.45 0.58193041 0.088386617 1.119942 5.131481
650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294
700 0.45 0.50856787 0.088471208 1.0466641 5.2550165
750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763
800 0.45 0.49926696 0.085958476 1.0348504 5.4665914
850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932
900 0.45 0.47785593 0.10150857 1.0289895 5.7765975
950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245
1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568
Loop time of 0.0389124 on 4 procs for 1000 steps with 1200 atoms
Performance: 11101855.138 tau/day, 25698.739 timesteps/s
95.7% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.016776 | 0.017405 | 0.018435 | 0.5 | 44.73
Bond | 0.0010033 | 0.0011995 | 0.0015519 | 0.6 | 3.08
Neigh | 0.0044944 | 0.0045093 | 0.0045218 | 0.0 | 11.59
Comm | 0.0080328 | 0.0093863 | 0.010242 | 0.9 | 24.12
Output | 0.00021577 | 0.00027579 | 0.00045323 | 0.0 | 0.71
Modify | 0.0034575 | 0.0036355 | 0.0040002 | 0.4 | 9.34
Other | | 0.002501 | | | 6.43
Nlocal: 300 ave 305 max 292 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Nghost: 100.25 ave 108 max 93 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 784 ave 815 max 739 min
Histogram: 1 0 0 0 0 0 1 1 0 1
Total # of neighbors = 3136
Ave neighs/atom = 2.61333
Ave special neighs/atom = 0.5
Neighbor list builds = 92
Dangerous builds = 0
unfix 3
# Main run
pair_style lj/cut 2.5
# solvent/head - full-size and long-range
pair_coeff 1 1 1.0 1.0 2.5
pair_coeff 2 2 1.0 1.0 2.5
pair_coeff 1 2 1.0 1.0 2.5
# tail/tail - size-averaged and long-range
pair_coeff 3 3 1.0 0.75 2.5
pair_coeff 4 4 1.0 0.50 2.5
pair_coeff 3 4 1.0 0.67 2.5
# solvent/tail - full-size and repulsive
pair_coeff 1 3 1.0 1.0 1.12246
pair_coeff 1 4 1.0 1.0 1.12246
# head/tail - size-averaged and repulsive
pair_coeff 2 3 1.0 0.88 1.12246
pair_coeff 2 4 1.0 0.75 1.12246
thermo 1000
#dump 1 all atom 2000 dump.micelle
#dump 2 all image 2000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
#dump 3 all movie 2000 movie.mpg type type zoom 1.6
#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75
reset_timestep 0
group solvent molecule 0
750 atoms in group solvent
group solute subtract all solvent
450 atoms in group solute
unfix 1
unfix 2
unfix 4
fix 1 solvent nve
fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0
fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211
150 rigid bodies with 450 atoms
fix 4 all enforce2d
run 20000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/2d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.251 | 5.282 | 5.374 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0.44603578 -1.7056163 0.08808163 -1.2555023 3.4039736
1000 0.46008163 -1.9040835 0.08808163 -1.4425689 0.93225869
2000 0.44943348 -1.9355135 0.08808163 -1.4826417 3.8399671
3000 0.4448437 -1.9480307 0.08808163 -1.4988842 2.5506553
4000 0.46013872 -1.9783821 0.08808163 -1.5168212 -1.8963215
5000 0.45520233 -1.9659462 0.08808163 -1.5083921 1.9238897
6000 0.44942049 -1.9663403 0.08808163 -1.513479 3.0633512
7000 0.45975758 -1.988462 0.08808163 -1.5272105 4.8267309
8000 0.45125238 -1.9913522 0.08808163 -1.5370041 -4.6644852
9000 0.45863606 -1.9792375 0.08808163 -1.5188962 4.3655071
10000 0.46264541 -1.9864611 0.08808163 -1.5228656 2.2176464
11000 0.45048361 -1.9907235 0.08808163 -1.5369994 -0.055360699
12000 0.44536719 -2.012875 0.08808163 -1.5633037 -0.2583823
13000 0.44212663 -2.0060111 0.08808163 -1.55907 3.3616171
14000 0.44984353 -2.0335408 0.08808163 -1.5803361 -0.21585645
15000 0.44896672 -2.0385265 0.08808163 -1.5860335 -4.6186206
16000 0.46694997 -2.032795 0.08808163 -1.5657056 0.53443281
17000 0.43208201 -2.0272255 0.08808163 -1.5884373 -6.5239975
18000 0.43281873 -2.0331268 0.08808163 -1.5937406 -0.048319943
19000 0.44704527 -2.0286742 0.08808163 -1.5777408 1.6356417
20000 0.44279735 -2.0443561 0.08808163 -1.5968706 -3.8337952
Loop time of 1.71924 on 4 procs for 20000 steps with 1200 atoms
Performance: 5025468.853 tau/day, 11633.030 timesteps/s
98.2% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.39864 | 0.40873 | 0.42192 | 1.6 | 23.77
Bond | 0.02118 | 0.021816 | 0.022785 | 0.4 | 1.27
Neigh | 0.13931 | 0.14031 | 0.14117 | 0.2 | 8.16
Comm | 0.13974 | 0.15328 | 0.16884 | 3.3 | 8.92
Output | 0.00026131 | 0.00044435 | 0.00099206 | 0.0 | 0.03
Modify | 0.93275 | 0.94138 | 0.95072 | 0.7 | 54.76
Other | | 0.05327 | | | 3.10
Nlocal: 300 ave 303 max 298 min
Histogram: 1 0 1 0 1 0 0 0 0 1
Nghost: 218.5 ave 226 max 215 min
Histogram: 2 1 0 0 0 0 0 0 0 1
Neighs: 2258.75 ave 2283 max 2216 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Total # of neighbors = 9035
Ave neighs/atom = 7.52917
Ave special neighs/atom = 0.5
Neighbor list builds = 1580
Dangerous builds = 0
unfix 5
unfix 4
fix 5 solute rigid/small molecule langevin 0.45 0.45 0.5 112211
create bodies CPU = 5.43594e-05 secs
150 rigid bodies with 450 atoms
0.916597 = max distance from body owner to body atom
fix 4 all enforce2d
run 20000
Per MPI rank memory allocation (min/avg/max) = 8.568 | 8.6 | 8.691 Mbytes
Step Temp E_pair E_mol TotEng Press
20000 0.44279735 -2.0443561 0.08808163 -1.5968706 -1.033643
21000 0.4529129 -2.049461 0.08808163 -1.5937651 0.93160285
22000 0.45039188 -2.0530092 0.08808163 -1.5993595 -0.10608965
23000 0.45261583 -2.0336042 0.08808163 -1.5781494 -2.5769871
24000 0.4608331 -2.0404645 0.08808163 -1.57834 3.1931675
25000 0.43479001 -2.0617104 0.08808163 -1.6207242 2.8190122
26000 0.47009651 -2.0754873 0.08808163 -1.605844 -0.9158501
27000 0.45002704 -2.0782104 0.08808163 -1.6248568 0.98629661
28000 0.45126136 -2.0592619 0.08808163 -1.6049065 0.03305448
29000 0.44355328 -2.0572858 0.08808163 -1.6091868 -6.0797989
30000 0.45053899 -2.0530953 0.08808163 -1.5993261 0.38382951
31000 0.46931923 -2.0718827 0.08808163 -1.6028703 2.2346891
32000 0.45348857 -2.0744024 0.08808163 -1.6182393 4.5028966
33000 0.44767742 -2.0597127 0.08808163 -1.6082662 -2.8021641
34000 0.45287544 -2.0857303 0.08808163 -1.6300648 -5.384091
35000 0.44743898 -2.0927246 0.08808163 -1.6414717 1.4800508
36000 0.45627028 -2.0720546 0.08808163 -1.6136336 -2.9961696
37000 0.4641334 -2.0701098 0.08808163 -1.6053065 8.4186854
38000 0.45922901 -2.0962331 0.08808163 -1.6354106 0.38361763
39000 0.4692834 -2.0573815 0.08808163 -1.5883982 -2.2177345
40000 0.46206931 -2.057851 0.08808163 -1.5947231 -1.0405727
Loop time of 1.25476 on 4 procs for 20000 steps with 1200 atoms
Performance: 6885775.862 tau/day, 15939.296 timesteps/s
98.1% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.40627 | 0.43037 | 0.45515 | 2.6 | 34.30
Bond | 0.020504 | 0.021573 | 0.022739 | 0.5 | 1.72
Neigh | 0.14337 | 0.14438 | 0.1453 | 0.2 | 11.51
Comm | 0.13776 | 0.16647 | 0.19351 | 5.0 | 13.27
Output | 0.00025082 | 0.00052994 | 0.0013635 | 0.0 | 0.04
Modify | 0.45467 | 0.45822 | 0.46259 | 0.5 | 36.52
Other | | 0.03321 | | | 2.65
Nlocal: 300 ave 304 max 293 min
Histogram: 1 0 0 0 0 1 0 0 0 2
Nghost: 215.25 ave 217 max 213 min
Histogram: 1 0 0 0 0 1 0 1 0 1
Neighs: 2340 ave 2378 max 2290 min
Histogram: 1 0 0 1 0 0 0 0 0 2
Total # of neighbors = 9360
Ave neighs/atom = 7.8
Ave special neighs/atom = 0.5
Neighbor list builds = 1579
Dangerous builds = 0
Total wall time: 0:00:03

View File

@ -18,7 +18,7 @@ parser = ArgumentParser(prog='Install.py',
# settings
thisdir = fullpath('.')
version = "kim-api-v2-2.0.1"
version = "kim-api-2.0.2"
# help message
@ -154,7 +154,7 @@ if buildflag:
# add all OpenKIM models, if desired
if everythingflag:
print("Adding all OpenKIM models, this will take a while ...")
cmd = '%s/bin/kim-api-v2-collections-management install system OpenKIM' % (kimdir)
cmd = '%s/bin/kim-api-collections-management install system OpenKIM' % (kimdir)
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))
@ -171,7 +171,7 @@ if addflag:
sys.exit("\nkim-api is not installed")
# download single model
cmd = '%s/bin/kim-api-v2-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname)
cmd = '%s/bin/kim-api-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname)
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))

View File

@ -23,11 +23,11 @@ kim_PREFIX := $(if $(shell printf -- "$${PKG_CONFIG_PATH}"),$(kim_PREFIX):$(she
# there is no usable libcurl installation
ifeq ($(shell curl-config --version 2> /dev/null),)
kim_SYSINC := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --cflags libkim-api-v2 2> /dev/null)
kim_SYSLIB := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --libs libkim-api-v2 2> /dev/null)
kim_SYSINC := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --cflags libkim-api 2> /dev/null)
kim_SYSLIB := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --libs libkim-api 2> /dev/null)
else
kim_SYSINC := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --cflags libkim-api-v2 2> /dev/null) $(shell curl-config --cflags) -DLMP_KIM_CURL
kim_SYSLIB := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --libs libkim-api-v2 2> /dev/null) $(shell curl-config --libs)
kim_SYSINC := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --cflags libkim-api 2> /dev/null) $(shell curl-config --cflags) -DLMP_KIM_CURL
kim_SYSLIB := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --libs libkim-api 2> /dev/null) $(shell curl-config --libs)
endif
ifeq ($(strip $(kim_SYSINC)),)

View File

@ -17,7 +17,7 @@ As of KIM API version 2, the KIM package also provides a LAMMPS command
to perform queries through the OpenKIM web API. This feature requires
that the CURL library (libcurl) development package and its configuration
query tool, curl-config, are installed. The provided Makefile.lammps
is set up to automatically detect this.
is set up to automatically detect this.
-----------------
@ -26,17 +26,17 @@ Instructions:
1. Configure lammps for use with the kim-api library installed in this directory
# replace X.Y.Z as appropriate here and below
$ printf "${PWD}/installed-kim-api-vX-X.Y.Z" > ./kim-prefix.txt
$ printf "${PWD}/installed-kim-api-X-X.Y.Z" > ./kim-prefix.txt
2. Download and unpack the kim-api
$ wget http://s3.openkim.org/kim-api/kim-api-vX-X.Y.Z.txz
$ tar zxvf kim-api-vX-X.Y.Z.txz
$ wget http://s3.openkim.org/kim-api/kim-api-X.Y.Z.txz
$ tar zxvf kim-api-X.Y.Z.txz
# configure the kim-api
$ cd kim-api-vX-X.Y.Z
$ cd kim-api-X.Y.Z
$ mkdir build && cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=${PWD}/../../installed-kim-api-vX-X.Y.Z
$ cmake .. -DCMAKE_INSTALL_PREFIX=${PWD}/../../installed-kim-api-X.Y.Z
3. Build and install the kim-api and model
@ -46,14 +46,14 @@ $ make install
4. Remove source and build files
$ cd ../../
$ rm -rf kim-api-vX-X.Y.Z
$ rm -rf kim-api-vX-X.Y.Z.txz
$ rm -rf kim-api-X.Y.Z
$ rm -rf kim-api-X.Y.Z.txz
5. To add items do the following (replace the kim item name with your
desired value)
$ source ${PWD}/kim-api-vX-X.Y.Z/bin/kim-api-vX-activate
$ kim-api-vX-collections-management install system Pair_Johnson_Fe__MO_857282754307_002
$ source ${PWD}/kim-api-X.Y.Z/bin/kim-api-activate
$ kim-api-collections-management install system Pair_Johnson_Fe__MO_857282754307_002
-----------------

View File

@ -9,12 +9,12 @@ doc/Section_python.html and in doc/Section_start.html#start_5.
Basically you need to follow these steps in the src directory:
% make g++ mode=shlib # build for whatever machine target you wish
% make install-python # may need to do this via sudo
% make install-python # install into site-packages folder
You can replace the last step by a one-time setting of environment
variables in your shell script. Or you can run the python/install.py
script directly to give you more control over where the two relevant
files are installed. See doc/Section_python.html for details.
files are installed. See doc/Python_install.html for details.
You should then be able to launch Python and instantiate an instance
of LAMMPS:

View File

@ -1,56 +1,96 @@
#!/usr/bin/env python
# copy LAMMPS src/liblammps.so and lammps.py to system dirs
from __future__ import print_function
instructions = """
Syntax: python install.py [-h] [pydir]
pydir = target dir for lammps.py and liblammps.so
default = Python site-packages dir
"""
Installer script to install the LAMMPS python module and the corresponding
shared library into either the system-wide site-packages tree, or - failing
that - into the corresponding user tree. Called from the 'install-python'
build target in the conventional and CMake based build systems
"""
# copy LAMMPS shared library and lammps.py to system dirs
from __future__ import print_function
import sys,os,shutil
from argparse import ArgumentParser
if (len(sys.argv) > 1 and sys.argv[1] == "-h") or len(sys.argv) > 2:
print(instructions)
sys.exit()
parser = ArgumentParser(prog='install.py',
description='LAMMPS python module installer script')
if len(sys.argv) == 2: pydir = sys.argv[1]
else: pydir = ""
parser.add_argument("-m", "--module", required=True,
help="path to the source of the LAMMPS Python module")
parser.add_argument("-l", "--lib", required=True,
help="path to the compiled LAMMPS shared library")
parser.add_argument("-v", "--version", required=True,
help="path to the LAMMPS version.h header file")
# copy lammps.py to pydir if it exists
# if pydir not specified, install in site-packages via distutils setup()
parser.add_argument("-d","--dir",
help="Legacy custom installation folder selection for module and library")
if pydir:
if not os.path.isdir(pydir):
print( "ERROR: pydir %s does not exist" % pydir)
sys.exit()
str = "cp ../python/lammps.py %s" % pydir
print(str)
args = parser.parse_args()
# validate arguments and make paths absolute
if args.module:
if not os.path.exists(args.module):
print( "ERROR: LAMMPS module file %s does not exist" % args.module)
parser.print_help()
sys.exit(1)
else:
args.module = os.path.abspath(args.module)
if args.lib:
if not os.path.exists(args.lib):
print( "ERROR: LAMMPS shared library %s does not exist" % args.lib)
parser.print_help()
sys.exit(1)
else:
args.lib = os.path.abspath(args.lib)
if args.version:
if not os.path.exists(args.version):
print( "ERROR: LAMMPS version header file %s does not exist" % args.version)
parser.print_help()
sys.exit(1)
else:
args.version = os.path.abspath(args.version)
if args.dir:
if not os.path.isdir(args.dir):
print( "ERROR: Installation folder %s does not exist" % args.dir)
parser.print_help()
sys.exit(1)
else:
args.dir = os.path.abspath(args.dir)
# if a custom directory is given, we copy the files directly
# without any special processing or additional steps to that folder
if args.dir:
print("Copying LAMMPS Python module to custom folder %s" % args.dir)
try:
shutil.copyfile("../python/lammps.py", os.path.join(pydir,'lammps.py') )
shutil.copyfile(args.module, os.path.join(args.dir,'lammps.py'))
except shutil.Error:
pass # source and destination are identical
pass # fail silently
str = "cp ../src/liblammps.so %s" % pydir
print(str)
print("Copying LAMMPS shared library to custom folder %s" % args.dir)
try:
shutil.copyfile("../src/liblammps.so", os.path.join(pydir,"liblammps.so") )
shutil.copyfile(args.lib, os.path.join(args.dir,os.path.basename(args.lib)))
except shutil.Error:
pass # source and destination are identical
sys.exit()
print("installing lammps.py in Python site-packages dir")
pass # fail silently
os.chdir('../python') # in case invoked via make in src dir
sys.exit()
# extract version string from header
fp = open('../src/version.h','r')
fp = open(args.version,'r')
txt=fp.read().split('"')[1].split()
verstr=txt[0]+txt[1]+txt[2]
fp.close()
print("Installing LAMMPS Python module version %s into site-packages folder" % verstr)
# we need to switch to the folder of the python module
os.chdir(os.path.dirname(args.module))
from distutils.core import setup
from distutils.sysconfig import get_python_lib
import site
@ -62,28 +102,26 @@ try:
version = verstr,
author = "Steve Plimpton",
author_email = "sjplimp@sandia.gov",
url = "http://lammps.sandia.gov",
description = "LAMMPS molecular dynamics library",
url = "https://lammps.sandia.gov",
description = "LAMMPS Molecular Dynamics Python module",
license = "GPL",
py_modules = ["lammps"],
data_files = [(get_python_lib(), ["../src/liblammps.so"])])
data_files = [(get_python_lib(), [args.lib])])
except:
tryuser=True
print ("Installation into global site-packages dir failed.\nTrying user site dir %s now." % site.USER_SITE)
print ("Installation into global site-packages folder failed.\nTrying user folder %s now." % site.USER_SITE)
if tryuser:
try:
sys.argv = ["setup.py","install","--user"] # as if had run "python setup.py install --user"
setup(name = "lammps",
version = verstr,
author = "Steve Plimpton",
author_email = "sjplimp@sandia.gov",
url = "http://lammps.sandia.gov",
description = "LAMMPS molecular dynamics library",
py_modules = ["lammps"],
data_files = [(site.USER_SITE, ["../src/liblammps.so"])])
except:
print("Installation into user site package dir failed.\nGo to ../python and install manually.")
version = verstr,
author = "Steve Plimpton",
author_email = "sjplimp@sandia.gov",
url = "https://lammps.sandia.gov",
description = "LAMMPS Molecular Dynamics Python module",
license = "GPL",
py_modules = ["lammps"],
data_files = [(site.USER_SITE, [args.lib])])
except:
print("Installation into user site package folder failed.")

File diff suppressed because it is too large Load Diff

View File

@ -46,42 +46,70 @@ class FixWallGran : public Fix {
virtual int maxsize_restart();
void reset_dt();
void hooke(double, double, double, double, double *,
double *, double *, double *, double *, double, double);
void hooke(double, double, double, double, double *, double *,
double *, double *, double *, double, double, double*);
void hooke_history(double, double, double, double, double *,
double *, double *, double *, double *, double, double,
double *);
void hertz_history(double, double, double, double, double *, double,
double *, double *, double *, double *, double, double,
double *);
void bonded_history(double, double, double, double, double *, double,
double *, double *, double *, double *, double, double,
double *);
double *, double *, double *, double *, double,
double, double *, double *);
void hertz_history(double, double, double, double, double *,
double, double *, double *, double *, double *,
double, double, double *, double *);
void granular(double, double, double, double, double *, double,
double *, double *, double *, double *, double,
double, double *, double *);
double pulloff_distance(double);
protected:
int wallstyle,wiggle,wshear,axis;
int pairstyle,nlevels_respa;
bigint time_origin;
double kn,kt,gamman,gammat,xmu;
double E,G,SurfEnergy;
// for granular model choices
int normal_model, damping_model;
int tangential_model, roll_model, twist_model;
// history flags
int normal_history, tangential_history, roll_history, twist_history;
// indices of history entries
int normal_history_index;
int tangential_history_index;
int roll_history_index;
int twist_history_index;
// material coefficients
double Emod, poiss, Gmod;
// contact model coefficients
double normal_coeffs[4];
double tangential_coeffs[3];
double roll_coeffs[3];
double twist_coeffs[3];
double lo,hi,cylradius;
double amplitude,period,omega,vshear;
double dt;
char *idregion;
int history; // if particle/wall interaction stores history
int shearupdate; // flag for whether shear history is updated
int sheardim; // # of shear history values per contact
int use_history; // if particle/wall interaction stores history
int history_update; // flag for whether shear history is updated
int size_history; // # of shear history values per contact
// shear history for single contact per particle
double **shearone;
double **history_one;
// rigid body masses for use in granular interactions
class Fix *fix_rigid; // ptr to rigid body fix, NULL if none
double *mass_rigid; // rigid mass for owned+ghost atoms
int nmax; // allocated size of mass_rigid
// store particle interactions
int store;
};
}

View File

@ -39,15 +39,17 @@ using namespace MathConst;
// same as FixWallGran
enum{HOOKE,HOOKE_HISTORY,HERTZ_HISTORY,BONDED_HISTORY};
enum{HOOKE,HOOKE_HISTORY,HERTZ_HISTORY,GRANULAR};
enum {NORMAL_HOOKE, NORMAL_HERTZ, HERTZ_MATERIAL, DMT, JKR};
#define BIG 1.0e20
/* ---------------------------------------------------------------------- */
FixWallGranRegion::FixWallGranRegion(LAMMPS *lmp, int narg, char **arg) :
FixWallGran(lmp, narg, arg), region(NULL), region_style(NULL), ncontact(NULL),
walls(NULL), shearmany(NULL), c2r(NULL)
FixWallGran(lmp, narg, arg), region(NULL), region_style(NULL),
ncontact(NULL),
walls(NULL), history_many(NULL), c2r(NULL)
{
restart_global = 1;
motion_resetflag = 0;
@ -66,17 +68,17 @@ FixWallGranRegion::FixWallGranRegion(LAMMPS *lmp, int narg, char **arg) :
// re-allocate atom-based arrays with nshear
// do not register with Atom class, since parent class did that
memory->destroy(shearone);
shearone = NULL;
memory->destroy(history_one);
history_one = NULL;
ncontact = NULL;
walls = NULL;
shearmany = NULL;
history_many = NULL;
grow_arrays(atom->nmax);
// initialize shear history as if particle is not touching region
if (history) {
if (use_history) {
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
ncontact[i] = 0;
@ -92,7 +94,7 @@ FixWallGranRegion::~FixWallGranRegion()
memory->destroy(ncontact);
memory->destroy(walls);
memory->destroy(shearmany);
memory->destroy(history_many);
}
/* ---------------------------------------------------------------------- */
@ -138,8 +140,8 @@ void FixWallGranRegion::post_force(int /*vflag*/)
// do not update shear history during setup
shearupdate = 1;
if (update->setupflag) shearupdate = 0;
history_update = 1;
if (update->setupflag) history_update = 0;
// if just reneighbored:
// update rigid body masses for owned atoms if using FixRigid
@ -188,7 +190,13 @@ void FixWallGranRegion::post_force(int /*vflag*/)
if (mask[i] & groupbit) {
if (!region->match(x[i][0],x[i][1],x[i][2])) continue;
nc = region->surface(x[i][0],x[i][1],x[i][2],radius[i]);
if (pairstyle == GRANULAR && normal_model == JKR){
nc = region->surface(x[i][0],x[i][1],x[i][2],
radius[i]+pulloff_distance(radius[i]));
}
else{
nc = region->surface(x[i][0],x[i][1],x[i][2],radius[i]);
}
if (nc > tmax)
error->one(FLERR,"Too many wall/gran/region contacts for one particle");
@ -198,7 +206,7 @@ void FixWallGranRegion::post_force(int /*vflag*/)
// also set c2r[] = indices into region->contact[] for each of N contacts
// process zero or one contact here, otherwise invoke update_contacts()
if (history) {
if (use_history) {
if (nc == 0) {
ncontact[i] = 0;
continue;
@ -209,15 +217,14 @@ void FixWallGranRegion::post_force(int /*vflag*/)
if (ncontact[i] == 0) {
ncontact[i] = 1;
walls[i][0] = iwall;
for (m = 0; m < sheardim; m++)
shearmany[i][0][m] = 0.0;
for (m = 0; m < size_history; m++)
history_many[i][0][m] = 0.0;
} else if (ncontact[i] > 1 || iwall != walls[i][0])
update_contacts(i,nc);
} else update_contacts(i,nc);
}
// process current contacts
for (int ic = 0; ic < nc; ic++) {
// rsq = squared contact distance
@ -225,36 +232,57 @@ void FixWallGranRegion::post_force(int /*vflag*/)
rsq = region->contact[ic].r*region->contact[ic].r;
if (pairstyle == GRANULAR && normal_model == JKR){
if (history_many[i][c2r[ic]][0] == 0.0 && rsq > radius[i]*radius[i]){
for (m = 0; m < size_history; m++)
history_many[i][0][m] = 0.0;
continue;
}
}
dx = region->contact[ic].delx;
dy = region->contact[ic].dely;
dz = region->contact[ic].delz;
if (regiondynamic) region->velocity_contact(vwall, x[i], ic);
// meff = effective mass of sphere
// if I is part of rigid body, use body mass
meff = rmass[i];
if (fix_rigid && mass_rigid[i] > 0.0) meff = mass_rigid[i];
// store contact info
if (peratom_flag){
array_atom[i][0] = (double)atom->tag[i];
array_atom[i][4] = x[i][0] - dx;
array_atom[i][5] = x[i][1] - dy;
array_atom[i][6] = x[i][2] - dz;
array_atom[i][7] = radius[i];
}
// invoke sphere/wall interaction
double *contact;
if (peratom_flag)
contact = array_atom[i];
else
contact = NULL;
if (pairstyle == HOOKE)
hooke(rsq,dx,dy,dz,vwall,v[i],f[i],
omega[i],torque[i],radius[i],meff);
omega[i],torque[i],radius[i],meff, contact);
else if (pairstyle == HOOKE_HISTORY)
hooke_history(rsq,dx,dy,dz,vwall,v[i],f[i],
omega[i],torque[i],radius[i],meff,
shearmany[i][c2r[ic]]);
omega[i],torque[i],radius[i],meff,
history_many[i][c2r[ic]], contact);
else if (pairstyle == HERTZ_HISTORY)
hertz_history(rsq,dx,dy,dz,vwall,region->contact[ic].radius,
v[i],f[i],omega[i],torque[i],
radius[i],meff,shearmany[i][c2r[ic]]);
else if (pairstyle == BONDED_HISTORY)
bonded_history(rsq,dx,dy,dz,vwall,region->contact[ic].radius,
v[i],f[i],omega[i],torque[i],
radius[i],meff,shearmany[i][c2r[ic]]);
v[i],f[i],omega[i],torque[i],
radius[i],meff,history_many[i][c2r[ic]], contact);
else if (pairstyle == GRANULAR)
granular(rsq,dx,dy,dz,vwall,region->contact[ic].radius,
v[i],f[i],omega[i],torque[i],
radius[i],meff,history_many[i][c2r[ic]],contact);
}
}
}
@ -282,8 +310,8 @@ void FixWallGranRegion::update_contacts(int i, int nc)
if (region->contact[m].iwall == walls[i][iold]) break;
if (m >= nc) {
ilast = ncontact[i]-1;
for (j = 0; j < sheardim; j++)
shearmany[i][iold][j] = shearmany[i][ilast][j];
for (j = 0; j < size_history; j++)
history_many[i][iold][j] = history_many[i][ilast][j];
walls[i][iold] = walls[i][ilast];
ncontact[i]--;
} else iold++;
@ -305,8 +333,8 @@ void FixWallGranRegion::update_contacts(int i, int nc)
iadd = ncontact[i];
c2r[iadd] = inew;
for (j = 0; j < sheardim; j++)
shearmany[i][iadd][j] = 0.0;
for (j = 0; j < size_history; j++)
history_many[i][iadd][j] = 0.0;
walls[i][iadd] = iwall;
ncontact[i]++;
}
@ -321,10 +349,10 @@ double FixWallGranRegion::memory_usage()
{
int nmax = atom->nmax;
double bytes = 0.0;
if (history) { // shear history
if (use_history) { // shear history
bytes += nmax * sizeof(int); // ncontact
bytes += nmax*tmax * sizeof(int); // walls
bytes += nmax*tmax*sheardim * sizeof(double); // shearmany
bytes += nmax*tmax*size_history * sizeof(double); // history_many
}
if (fix_rigid) bytes += nmax * sizeof(int); // mass_rigid
return bytes;
@ -336,11 +364,14 @@ double FixWallGranRegion::memory_usage()
void FixWallGranRegion::grow_arrays(int nmax)
{
if (history) {
if (use_history) {
memory->grow(ncontact,nmax,"fix_wall_gran:ncontact");
memory->grow(walls,nmax,tmax,"fix_wall_gran:walls");
memory->grow(shearmany,nmax,tmax,sheardim,"fix_wall_gran:shearmany");
memory->grow(history_many,nmax,tmax,size_history,
"fix_wall_gran:history_many");
}
if (peratom_flag)
memory->grow(array_atom,nmax,size_peratom_cols,"fix_wall_gran:array_atom");
}
/* ----------------------------------------------------------------------
@ -351,16 +382,20 @@ void FixWallGranRegion::copy_arrays(int i, int j, int /*delflag*/)
{
int m,n,iwall;
if (!history) return;
n = ncontact[i];
for (iwall = 0; iwall < n; iwall++) {
walls[j][iwall] = walls[i][iwall];
for (m = 0; m < sheardim; m++)
shearmany[j][iwall][m] = shearmany[i][iwall][m];
if (use_history){
n = ncontact[i];
for (iwall = 0; iwall < n; iwall++) {
walls[j][iwall] = walls[i][iwall];
for (m = 0; m < size_history; m++)
history_many[j][iwall][m] = history_many[i][iwall][m];
}
ncontact[j] = ncontact[i];
}
if (peratom_flag){
for (int m = 0; m < size_peratom_cols; m++)
array_atom[j][m] = array_atom[i][m];
}
ncontact[j] = ncontact[i];
}
/* ----------------------------------------------------------------------
@ -369,8 +404,12 @@ void FixWallGranRegion::copy_arrays(int i, int j, int /*delflag*/)
void FixWallGranRegion::set_arrays(int i)
{
if (!history) return;
ncontact[i] = 0;
if (use_history)
ncontact[i] = 0;
if (peratom_flag){
for (int m = 0; m < size_peratom_cols; m++)
array_atom[i][m] = 0;
}
}
/* ----------------------------------------------------------------------
@ -381,16 +420,19 @@ int FixWallGranRegion::pack_exchange(int i, double *buf)
{
int m;
if (!history) return 0;
int n = 0;
int count = ncontact[i];
buf[n++] = ubuf(count).d;
for (int iwall = 0; iwall < count; iwall++) {
buf[n++] = ubuf(walls[i][iwall]).d;
for (m = 0; m < sheardim; m++)
buf[n++] = shearmany[i][iwall][m];
if (use_history){
int count = ncontact[i];
buf[n++] = ubuf(count).d;
for (int iwall = 0; iwall < count; iwall++) {
buf[n++] = ubuf(walls[i][iwall]).d;
for (m = 0; m < size_history; m++)
buf[n++] = history_many[i][iwall][m];
}
}
if (peratom_flag){
for (int m = 0; m < size_peratom_cols; m++)
buf[n++] = array_atom[i][m];
}
return n;
@ -404,15 +446,19 @@ int FixWallGranRegion::unpack_exchange(int nlocal, double *buf)
{
int m;
if (!history) return 0;
int n = 0;
int count = ncontact[nlocal] = (int) ubuf(buf[n++]).i;
for (int iwall = 0; iwall < count; iwall++) {
walls[nlocal][iwall] = (int) ubuf(buf[n++]).i;
for (m = 0; m < sheardim; m++)
shearmany[nlocal][iwall][m] = buf[n++];
if (use_history){
int count = ncontact[nlocal] = (int) ubuf(buf[n++]).i;
for (int iwall = 0; iwall < count; iwall++) {
walls[nlocal][iwall] = (int) ubuf(buf[n++]).i;
for (m = 0; m < size_history; m++)
history_many[nlocal][iwall][m] = buf[n++];
}
}
if (peratom_flag){
for (int m = 0; m < size_peratom_cols; m++)
array_atom[nlocal][m] = buf[n++];
}
return n;
@ -426,7 +472,7 @@ int FixWallGranRegion::pack_restart(int i, double *buf)
{
int m;
if (!history) return 0;
if (!use_history) return 0;
int n = 1;
int count = ncontact[i];
@ -434,8 +480,8 @@ int FixWallGranRegion::pack_restart(int i, double *buf)
buf[n++] = ubuf(count).d;
for (int iwall = 0; iwall < count; iwall++) {
buf[n++] = ubuf(walls[i][iwall]).d;
for (m = 0; m < sheardim; m++)
buf[n++] = shearmany[i][iwall][m];
for (m = 0; m < size_history; m++)
buf[n++] = history_many[i][iwall][m];
}
buf[0] = n;
return n;
@ -449,7 +495,7 @@ void FixWallGranRegion::unpack_restart(int nlocal, int nth)
{
int k;
if (!history) return;
if (!use_history) return;
double **extra = atom->extra;
@ -462,8 +508,8 @@ void FixWallGranRegion::unpack_restart(int nlocal, int nth)
int count = ncontact[nlocal] = (int) ubuf(extra[nlocal][m++]).i;
for (int iwall = 0; iwall < count; iwall++) {
walls[nlocal][iwall] = (int) ubuf(extra[nlocal][m++]).i;
for (k = 0; k < sheardim; k++)
shearmany[nlocal][iwall][k] = extra[nlocal][m++];
for (k = 0; k < size_history; k++)
history_many[nlocal][iwall][k] = extra[nlocal][m++];
}
}
@ -473,8 +519,8 @@ void FixWallGranRegion::unpack_restart(int nlocal, int nth)
int FixWallGranRegion::maxsize_restart()
{
if (!history) return 0;
return 2 + tmax*(sheardim+1);
if (!use_history) return 0;
return 2 + tmax*(size_history+1);
}
/* ----------------------------------------------------------------------
@ -483,8 +529,8 @@ int FixWallGranRegion::maxsize_restart()
int FixWallGranRegion::size_restart(int nlocal)
{
if (!history) return 0;
return 2 + ncontact[nlocal]*(sheardim+1);
if (!use_history) return 0;
return 2 + ncontact[nlocal]*(size_history+1);
}
/* ----------------------------------------------------------------------

View File

@ -54,7 +54,7 @@ class FixWallGranRegion : public FixWallGran {
int tmax; // max # of region walls one particle can touch
int *ncontact; // # of shear contacts per particle
int **walls; // which wall each contact is with
double ***shearmany; // shear history per particle per contact
double ***history_many; // history per particle per contact
int *c2r; // contact to region mapping
// c2r[i] = index of Ith contact in
// region-contact[] list of contacts

View File

@ -44,6 +44,7 @@ PairGranHookeHistory::PairGranHookeHistory(LAMMPS *lmp) : Pair(lmp)
single_enable = 1;
no_virial_fdotr_compute = 1;
history = 1;
size_history = 3;
fix_history = NULL;
single_extra = 10;
@ -57,6 +58,10 @@ PairGranHookeHistory::PairGranHookeHistory(LAMMPS *lmp) : Pair(lmp)
// set comm size needed by this Pair if used with fix rigid
comm_forward = 1;
// keep default behavior of history[i][j] = -history[j][i]
nondefault_history_transfer = 0;
}
/* ---------------------------------------------------------------------- */
@ -413,7 +418,7 @@ void PairGranHookeHistory::init_style()
if (history && fix_history == NULL) {
char dnumstr[16];
sprintf(dnumstr,"%d",3);
sprintf(dnumstr,"%d",size_history);
char **fixarg = new char*[4];
fixarg[0] = (char *) "NEIGH_HISTORY";
fixarg[1] = (char *) "all";

View File

@ -54,6 +54,8 @@ class PairGranHookeHistory : public Pair {
double *onerad_dynamic,*onerad_frozen;
double *maxrad_dynamic,*maxrad_frozen;
int size_history;
class FixNeighHistory *fix_history;
// storage of rigid body masses for use in granular interactions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,114 @@
/* ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
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 PAIR_CLASS
PairStyle(granular,PairGranular)
#else
#ifndef LMP_PAIR_GRANULAR_H
#define LMP_PAIR_GRANULAR_H
#include "pair.h"
namespace LAMMPS_NS {
class PairGranular : public Pair {
public:
PairGranular(class LAMMPS *);
~PairGranular();
void compute(int, int);
void settings(int, char **);
void coeff(int, char **);
void init_style();
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);
void reset_dt();
double single(int, int, int, int, double, double, double, double &);
int pack_forward_comm(int, int *, double *, int, int *);
void unpack_forward_comm(int, int, double *);
double memory_usage();
protected:
double dt;
int freeze_group_bit;
int use_history;
int neighprev;
double *onerad_dynamic,*onerad_frozen;
double *maxrad_dynamic,*maxrad_frozen;
double **cut;
class FixNeighHistory *fix_history;
// storage of rigid body masses for use in granular interactions
class Fix *fix_rigid; // ptr to rigid body fix, NULL if none
double *mass_rigid; // rigid mass for owned+ghost atoms
int nmax; // allocated size of mass_rigid
void allocate();
void transfer_history(double*, double*);
private:
int size_history;
int *history_transfer_factors;
// model choices
int **normal_model, **damping_model;
int **tangential_model, **roll_model, **twist_model;
// history flags
int normal_history, tangential_history, roll_history, twist_history;
// indices of history entries
int normal_history_index;
int tangential_history_index;
int roll_history_index;
int twist_history_index;
// per-type material coefficients
double **Emod, **poiss, **Gmod;
// per-type coefficients, set in pair coeff command
double ***normal_coeffs;
double ***tangential_coeffs;
double ***roll_coeffs;
double ***twist_coeffs;
// optional user-specified global cutoff, per-type user-specified cutoffs
double **cutoff_type;
double cutoff_global;
double mix_stiffnessE(double, double, double, double);
double mix_stiffnessG(double, double, double, double);
double mix_geom(double, double);
double pulloff_distance(double, double, int, int);
};
}
#endif
#endif
/* ERROR/WARNING messages:
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
*/

View File

@ -64,8 +64,10 @@
#include "input.h"
#include "variable.h"
#if defined(LMP_KIM_CURL)
#include <sys/types.h>
#include <curl/curl.h>
#endif
using namespace LAMMPS_NS;

View File

@ -12,7 +12,7 @@ SHFLAGS = -fPIC
DEPFLAGS = -M
LINK = mpicxx
LINKFLAGS = -g -O
LINKFLAGS = -g -O3
LIB =
SIZE = size

View File

@ -275,7 +275,8 @@ mpi-stubs:
sinclude ../lib/python/Makefile.lammps
install-python:
@$(PYTHON) ../python/install.py
@$(PYTHON) ../python/install.py -v ../src/version.h \
-m ../python/lammps.py -l ../src/liblammps.so
# Create a tarball of src dir and packages

View File

@ -25,6 +25,9 @@ style_ntopo.h
# other auto-generated files
lmpinstalledpkgs.h
lmpgitversion.h
# removed on 15 March 2019
fix_wall_gran_omp.h
fix_wall_gran_omp.cpp
# renamed on 7 January 2019
pair_lebedeva.cpp
pair_lebedeva.h

View File

@ -32,12 +32,12 @@
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTA 16384
#define DELTABOND 16384
#define VECLEN 5
// NOTE: count/output # of timesteps on which bias is non-zero
// NOTE: should there be a virial contribution from boosted bond?
// NOTE: allow newton off? see Note in pre_reverse()
// possible enhancements
// should there be a virial contribution from boosted bond?
// allow newton off?
/* ---------------------------------------------------------------------- */
@ -52,7 +52,7 @@ FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) :
hyperflag = 1;
scalar_flag = 1;
vector_flag = 1;
size_vector = 11;
size_vector = 12;
global_freq = 1;
extscalar = 0;
extvector = 0;
@ -76,6 +76,7 @@ FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) :
maxold = 0;
xold = NULL;
tagold = NULL;
old2now = NULL;
me = comm->me;
firstflag = 1;
@ -94,6 +95,7 @@ FixHyperGlobal::~FixHyperGlobal()
memory->sfree(blist);
memory->destroy(xold);
memory->destroy(tagold);
memory->destroy(old2now);
}
/* ---------------------------------------------------------------------- */
@ -102,7 +104,6 @@ int FixHyperGlobal::setmask()
{
int mask = 0;
mask |= PRE_NEIGHBOR;
mask |= PRE_FORCE;
mask |= PRE_REVERSE;
mask |= THERMO_ENERGY;
return mask;
@ -115,6 +116,7 @@ void FixHyperGlobal::init_hyper()
maxdriftsq = 0.0;
maxbondlen = 0.0;
nobias = 0;
negstrain = 0;
}
/* ---------------------------------------------------------------------- */
@ -124,6 +126,10 @@ void FixHyperGlobal::init()
if (force->newton_pair == 0)
error->all(FLERR,"Hyper global requires newton pair on");
if (atom->molecular && me == 0)
error->warning(FLERR,"Hyper global for molecular systems "
"requires care in defining hyperdynamic bonds");
dt = update->dt;
// need an occasional half neighbor list
@ -152,14 +158,16 @@ void FixHyperGlobal::setup_pre_neighbor()
void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag)
{
// no increment in nobias or hyper time when pre-run forces are calculated
// no increment in these quantities when pre-run forces are calculated
int nobias_hold = nobias;
int negstrain_hold = negstrain;
double t_hyper_hold = t_hyper;
pre_reverse(eflag,vflag);
nobias = nobias_hold;
negstrain = negstrain_hold;
t_hyper = t_hyper_hold;
}
@ -167,35 +175,52 @@ void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag)
void FixHyperGlobal::pre_neighbor()
{
int m,iold,jold,ilocal,jlocal;
double distsq;
int i,m,iold,jold,ilocal,jlocal;
// double distsq;
// reset local IDs for owned bond atoms, since atoms have migrated
// uses xold and tagold from when bonds were created
// reset local indices for owned bond atoms, since atoms have migrated
// must be done after ghost atoms are setup via comm->borders()
// first time this is done for a particular I or J atom:
// use tagold and xold from when bonds were created
// atom->map() finds atom ID if it exists, owned index if possible
// closest current I or J atoms to old I may now be ghost atoms
// closest_image() returns the ghost atom index in that case
// also compute max drift of any atom in a bond
// drift = displacement from quenched coord while event has not yet occured
// NOTE: drift calc is now done in bond_build(), between 2 quenched states
for (i = 0; i < nall_old; i++) old2now[i] = -1;
double **x = atom->x;
int flag = 0;
for (m = 0; m < nblocal; m++) {
iold = blist[m].iold;
jold = blist[m].jold;
ilocal = atom->map(tagold[iold]);
jlocal = atom->map(tagold[jold]);
ilocal = domain->closest_image(xold[iold],ilocal);
jlocal = domain->closest_image(xold[iold],jlocal);
ilocal = old2now[iold];
jlocal = old2now[jold];
if (ilocal < 0) {
ilocal = atom->map(tagold[iold]);
ilocal = domain->closest_image(xold[iold],ilocal);
if (ilocal < 0)
error->one(FLERR,"Fix hyper/global bond atom not found");
old2now[iold] = ilocal;
//distsq = MathExtra::distsq3(x[ilocal],xold[iold]);
//maxdriftsq = MAX(distsq,maxdriftsq);
}
if (jlocal < 0) {
jlocal = atom->map(tagold[jold]);
jlocal = domain->closest_image(xold[iold],jlocal); // closest to iold
if (jlocal < 0)
error->one(FLERR,"Fix hyper/global bond atom not found");
old2now[jold] = jlocal;
//distsq = MathExtra::distsq3(x[jlocal],xold[jold]);
//maxdriftsq = MAX(distsq,maxdriftsq);
}
blist[m].i = ilocal;
blist[m].j = jlocal;
if (ilocal < 0 || jlocal < 0) flag++;
else {
distsq = MathExtra::distsq3(x[ilocal],xold[iold]);
maxdriftsq = MAX(distsq,maxdriftsq);
}
}
if (flag) error->one(FLERR,"Fix hyper/global bond atom not found");
}
/* ---------------------------------------------------------------------- */
@ -204,15 +229,16 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
{
int i,j,m,imax,jmax;
double delx,dely,delz;
double r,r0,estrain,rmax,r0max,emax,dt_boost;
double vbias,fbias,fbiasr;
double r,r0,estrain,rmax,r0max,dt_boost;
double ebias,vbias,fbias,fbiasr;
// compute current strain of each owned bond
// emax = maximum strain of any bond I own
// emax = maximum abs value of strain of any bond I own
// imax,jmax = local indices of my 2 atoms in that bond
// rmax,r0max = current and relaxed lengths of that bond
double **x = atom->x;
emax = 0.0;
double emax = 0.0;
for (m = 0; m < nblocal; m++) {
i = blist[m].i;
@ -255,9 +281,15 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
return;
}
// I own the bond with max strain
// compute Vbias and apply force to atoms imax,jmax
// NOTE: logic would need to be different for newton off
// I own the bond with max absolute value of strain
// compute bias force on atoms imax,jmax if strain < q, else zero
// Ebias = current strain = (r-r0) / r0
// Vbias = bias potential = Vmax (1 - Ebias^2/q^2)
// Fbias = bias force as function of strain
// = -dVbias/dEbias = 2 Vmax Ebias / q^2
// Fix = x component of force on atom I
// = Fbias dEbias/dr dr/dxi, dEbias/dr = 1/r0, dr/dxi = delx/r
// dt_boost = time boost factor = exp(Vbias/kT)
double **f = atom->f;
@ -265,15 +297,16 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
dt_boost = 1.0;
if (emax < qfactor) {
vbias = vmax * (1.0 - emax*emax*invqfactorsq);
fbias = 2.0 * vmax * emax / (qfactor*qfactor * r0max);
ebias = (rmax-r0max) / r0max;
vbias = vmax * (1.0 - ebias*ebias*invqfactorsq);
fbias = 2.0 * vmax * ebias * invqfactorsq;
dt_boost = exp(beta*vbias);
delx = x[imax][0] - x[jmax][0];
dely = x[imax][1] - x[jmax][1];
delz = x[imax][2] - x[jmax][2];
fbiasr = fbias / rmax;
fbiasr = fbias / r0max / rmax;
f[imax][0] += delx*fbiasr;
f[imax][1] += dely*fbiasr;
f[imax][2] += delz*fbiasr;
@ -281,6 +314,9 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
f[jmax][0] -= delx*fbiasr;
f[jmax][1] -= dely*fbiasr;
f[jmax][2] -= delz*fbiasr;
if (ebias < 0.0) negstrain++;
} else nobias++;
// output quantities
@ -299,8 +335,8 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
void FixHyperGlobal::build_bond_list(int natom)
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int i,j,m,ii,jj,iold,jold,ilocal,jlocal,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq,distsq;
int *ilist,*jlist,*numneigh,**firstneigh;
if (natom) {
@ -308,6 +344,27 @@ void FixHyperGlobal::build_bond_list(int natom)
nevent_atom += natom;
}
// compute max distance any bond atom has moved between 2 quenched states
// xold[iold] = last quenched coord for iold
// x[ilocal] = current quenched coord for same atom
double **x = atom->x;
int nlocal = atom->nlocal;
int nall = nlocal + atom->nghost;
for (m = 0; m < nblocal; m++) {
iold = blist[m].iold;
ilocal = atom->map(tagold[iold]);
ilocal = domain->closest_image(xold[iold],ilocal);
distsq = MathExtra::distsq3(x[ilocal],xold[iold]);
maxdriftsq = MAX(distsq,maxdriftsq);
jold = blist[m].jold;
jlocal = atom->map(tagold[jold]);
jlocal = domain->closest_image(xold[iold],jlocal);
distsq = MathExtra::distsq3(x[jlocal],xold[jold]);
maxdriftsq = MAX(distsq,maxdriftsq);
}
// trigger neighbor list build
neighbor->build_one(list);
@ -315,7 +372,6 @@ void FixHyperGlobal::build_bond_list(int natom)
// identify bonds assigned to each owned atom
// do not create a bond between two non-group atoms
double **x = atom->x;
int *mask = atom->mask;
inum = list->inum;
@ -358,26 +414,26 @@ void FixHyperGlobal::build_bond_list(int natom)
}
}
// store IDs and coords for owned+ghost atoms at time of bond creation
// realloc xold and tagold as needed
// store per-atom quantities for owned+ghost atoms at time of bond creation
// nall_old = value of nall at time bonds are built
if (atom->nmax > maxold) {
tagint *tag = atom->tag;
if (nall > maxold) {
memory->destroy(xold);
memory->destroy(tagold);
memory->destroy(old2now);
maxold = atom->nmax;
memory->create(xold,maxold,3,"hyper/global:xold");
memory->create(tagold,maxold,"hyper/global:tagold");
memory->create(old2now,maxold,"hyper/global:old2now");
}
tagint *tag = atom->tag;
int nall = atom->nlocal + atom->nghost;
memcpy(&xold[0][0],&x[0][0],3*nall*sizeof(double));
for (i = 0; i < nall; i++) tagold[i] = tag[i];
for (i = 0; i < nall; i++) {
xold[i][0] = x[i][0];
xold[i][1] = x[i][1];
xold[i][2] = x[i][2];
tagold[i] = tag[i];
}
nlocal_old = nlocal;
nall_old = nall;
}
/* ----------------------------------------------------------------------
@ -386,14 +442,11 @@ void FixHyperGlobal::build_bond_list(int natom)
void FixHyperGlobal::grow_bond()
{
// NOTE: could add int arg to do initial large alloc:
// maxbond = maxbond/DELTA * DELTA; maxbond += DELTA;
maxbond += DELTA;
if (maxbond < 0 || maxbond > MAXSMALLINT)
error->one(FLERR,"Fix hyper/local per-processor bond count is too big");
if (maxbond + DELTABOND > MAXSMALLINT)
error->one(FLERR,"Fix hyper/global bond count is too big");
maxbond += DELTABOND;
blist = (OneBond *)
memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/local:blist");
memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/global:blist");
}
/* ---------------------------------------------------------------------- */
@ -416,21 +469,22 @@ double FixHyperGlobal::compute_vector(int i)
bcastflag = 0;
}
// 11 vector outputs returned for i = 0-10
// 12 vector outputs returned for i = 0-11
// i = 0 = boost factor on this step
// i = 1 = max strain of any bond on this step
// i = 1 = max strain of any bond on this step (positive or negative)
// i = 2 = ID of atom I in max-strain bond on this step
// i = 3 = ID of atom J in max-strain bond on this step
// i = 4 = ave bonds/atom on this step
// i = 5 = fraction of steps with no bias during this run
// i = 6 = max drift of any atom during this run
// i = 7 = max bond length during this run
// i = 5 = fraction of steps where bond has no bias during this run
// i = 6 = fraction of steps where bond has negative strain during this run
// i = 7 = max drift distance of any atom during this run
// i = 8 = max bond length during this run
// i = 8 = cummulative hyper time since fix created
// i = 9 = cummulative # of event timesteps since fix created
// i = 10 = cummulative # of atoms in events since fix created
// i = 9 = cummulative hyper time since fix created
// i = 10 = cummulative # of event timesteps since fix created
// i = 11 = cummulative # of atoms in events since fix created
if (i == 0) return outvec[1];
if (i == 1) return outvec[2];
@ -438,8 +492,9 @@ double FixHyperGlobal::compute_vector(int i)
if (i == 3) return outvec[4];
if (i == 4) {
int allbonds; // NOTE: bigint?
MPI_Allreduce(&nblocal,&allbonds,1,MPI_INT,MPI_SUM,world);
bigint mybonds = nblocal;
bigint allbonds;
MPI_Allreduce(&mybonds,&allbonds,1,MPI_LMP_BIGINT,MPI_SUM,world);
return 2.0*allbonds/atom->natoms;
}
@ -451,20 +506,27 @@ double FixHyperGlobal::compute_vector(int i)
}
if (i == 6) {
if (update->ntimestep == update->firststep) return 0.0;
int allnegstrain;
MPI_Allreduce(&negstrain,&allnegstrain,1,MPI_INT,MPI_SUM,world);
return 1.0*allnegstrain / (update->ntimestep - update->firststep);
}
if (i == 7) {
double alldriftsq;
MPI_Allreduce(&maxdriftsq,&alldriftsq,1,MPI_DOUBLE,MPI_MAX,world);
return sqrt(alldriftsq);
}
if (i == 7) {
if (i == 8) {
double allbondlen;
MPI_Allreduce(&maxbondlen,&allbondlen,1,MPI_DOUBLE,MPI_MAX,world);
return allbondlen;
}
if (i == 8) return t_hyper;
if (i == 9) return (double) nevent;
if (i == 10) return (double) nevent_atom;
if (i == 9) return t_hyper;
if (i == 10) return (double) nevent;
if (i == 11) return (double) nevent_atom;
return 0.0;
}
@ -476,13 +538,14 @@ double FixHyperGlobal::compute_vector(int i)
double FixHyperGlobal::query(int i)
{
if (i == 1) return compute_vector(8); // cummulative hyper time
if (i == 2) return compute_vector(9); // nevent
if (i == 3) return compute_vector(10); // nevent_atom
if (i == 1) return compute_vector(9); // cummulative hyper time
if (i == 2) return compute_vector(10); // nevent
if (i == 3) return compute_vector(11); // nevent_atom
if (i == 4) return compute_vector(4); // ave bonds/atom
if (i == 5) return compute_vector(6); // maxdrift
if (i == 6) return compute_vector(7); // maxbondlen
if (i == 5) return compute_vector(7); // maxdrift
if (i == 6) return compute_vector(8); // maxbondlen
if (i == 7) return compute_vector(5); // fraction with zero bias
if (i == 8) return compute_vector(6); // fraction with negative strain
error->all(FLERR,"Invalid query to fix hyper/global");

View File

@ -56,6 +56,7 @@ class FixHyperGlobal : public FixHyper {
double maxbondlen; // max length of any bond
double maxdriftsq; // max distance any atom drifts from original pos
int nobias; // # of steps when bias = 0, b/c bond too long
int negstrain; // # of steps when biased bond has negative strain
class NeighList *list;
@ -70,16 +71,19 @@ class FixHyperGlobal : public FixHyper {
double r0; // relaxed bond length
};
struct OneBond *blist; // list of owned bonds
int nblocal; // # of owned bonds
OneBond *blist; // list of owned bonds
int nblocal; // # of owned bonds
// coords and IDs of owned+ghost atoms when bonds were formed
// persists on a proc from one event until the next
int nlocal_old; // nlocal for old atoms
int nall_old; // nlocal+nghost for old atoms
int maxold; // allocated size of old atoms
double **xold; // coords of atoms when bonds were formed
tagint *tagold; // IDs of atoms when bonds were formed
tagint *tagold; // IDs of atoms when bonds were forme
int *old2now; // o2n[i] = current local index of old atom I
// MPI data struct for finding bond with max strain via Allreduce

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,7 @@ FixStyle(hyper/local,FixHyperLocal)
#define LMP_FIX_HYPER_LOCAL_H
#include "fix_hyper.h"
#include "my_page.h"
namespace LAMMPS_NS {
@ -43,13 +44,9 @@ class FixHyperLocal : public FixHyper {
int pack_forward_comm(int, int *, double *, int, int *);
void unpack_forward_comm(int, int, double *);
int pack_reverse_comm(int, int, double *);
int pack_reverse_comm_size(int, int);
void unpack_reverse_comm(int, int *, double *);
void grow_arrays(int);
void copy_arrays(int, int, int);
int pack_exchange(int, double *);
int unpack_exchange(int, double *);
double memory_usage();
// extra methods visible to callers
@ -59,97 +56,133 @@ class FixHyperLocal : public FixHyper {
private:
int me;
// inputs and derived quantities
double cutbond,qfactor,vmax,tequil,dcut;
double alpha_user; // timescale to apply boostostat (time units)
double alpha; // unitless dt/alpha_user
double boosttarget; // target value of boost
int histoflag;
int lostbond,lostbond_partner;
double lostbond_coeff;
int checkbias,checkbias_every,checkbias_flag,checkbias_count;
int checkcoeff,checkcoeff_every,checkcoeff_flag,checkcoeff_count;
double boost_target; // target value of boost
int checkghost,checkbias; // flags for optional stats
double cutbondsq,dcutsq;
double beta,invqfactorsq;
// flags
int setupflag; // 1 during setup, 0 during run
int firstflag; // set for first time bond_build takes place
int nostrainyet; // 1 until maxstrain is first computed
int nboost_running,nobias_running;
int nbondbuild;
double time_bondbuild;
bigint starttime;
double sumboostcoeff; // sum of aveboost at every timestep
int allbonds; // sum of bond count on this step
double allboost; // sum of boostcoeff on all bonds on this step
int nnewbond; // running tally of number of new bonds created
int maxbondperatom; // max # of bonds any atom ever has
int nostrainyet; // 1 until maxstrain is first compute
bigint starttime; // timestep when this fix was invoked
int commflag; // flag for communication mode
// stats
int nbondbuild; // # of rebuilds of bond list
double time_bondbuild; // CPU time for bond builds
bigint allbonds; // current total # of bonds
int nnewbond; // running tally of # of new bonds created
int maxbondperatom; // max # of bonds any atom ever has
int nevent; // # of events that trigger bond rebuild
int nevent_atom; // # of atoms that experienced an event
double cutbondsq,dcutsq;
double beta,invqfactorsq;
double mybias;
int nbias_running; // running count of biased bonds
int nobias_running; // ditto for bonds with bias = 0, b/c too long
int negstrain_running; // ditto for bonds with negative strain
double mybias; // sum of bias potentials for biased bonds
double maxbondlen; // cummulative max length of any bond
double maxdriftsq; // max distance any atom drifts from original pos
double maxboostcoeff; // cummulative max boost coeff for any bond
double minboostcoeff; // cummulative min boost coeff for any bond
double maxdriftsq; // max distance any bond atom drifts from quenched x
double sumbiascoeff; // sum of all bond bias coeffs at each timestep
double avebiascoeff; // cummulative sumbiascoeff/allbonds across steps
double minbiascoeff; // cummulative min bias coeff for any bond
double maxbiascoeff; // cummulative max bias coeff for any bond
double rmaxever,rmaxeverbig;
int ghost_toofar;
int ghost_toofar; // # of ghost atoms not found in Dcut neigh list
int checkbias_every,checkbias_flag,checkbias_count;
// 2 neighbor lists
class NeighList *listfull; // full neigh list up to Dcut distance
class NeighList *listhalf; // half neigh list up to pair distance
// both created only when bonds are rebuilt
// list of my owned bonds and bias coeffs
// persists on a proc from one event until the next
struct OneBond { // single IJ bond, atom I is owner
int i,j; // current local indices of 2 bond atoms
int iold,jold; // local indices when bonds were formed
double r0; // relaxed bond length
};
OneBond *blist; // list of owned bonds
double *biascoeff; // biasing coefficient Cij for each bond
int nblocal; // # of owned bonds
int maxbond; // allocated size of blist
// old data from last timestep bonds were formed
// persists on a proc from one event until the next
// first set of vectors are maxlocal in length
// second set of vectors are maxall in length
int nlocal_old; // nlocal for old atoms
int nall_old; // nlocal+nghost for old atoms
int maxlocal; // allocated size of old local atom vecs
int maxall; // allocated size of old all atom vecs
int *numbond; // # of bonds owned by old owned atoms
int *maxhalf; // bond index for maxstrain bond of old atoms
int *eligible; // 0/1 flag for bias on one of old atom's bonds
double *maxhalfstrain; // strain value for maxstrain bond of old atoms
int *old2now; // o2n[i] = current local index of old atom I
// may be -1 if ghost atom has drifted
tagint *tagold; // IDs of atoms when bonds were formed
// 0 if a ghost atom is not in Dcut neigh list
double **xold; // coords of atoms when bonds were formed
// vectors used to find maxstrain bonds within a local domain
int maxatom; // size of these vectors, nlocal + nghost
double *maxstrain; // max-strain of any bond atom I is part of
// for owned and ghost atoms
double *maxstrain_domain; // max-strain of any neighbor atom J of atom I
// for owned and ghost atoms
tagint *biasflag; // atoms in biased bonds marked with bond partner
// for owned and ghost atoms
// list of biased bonds this proc owns
int maxbias; // allocated size of bias list
int nbias; // # of biased bonds I own
int *bias; // index of biased bonds in my bond list
// data structs for persisting bias coeffs when bond list is reformed
struct OneCoeff {
double biascoeff;
tagint tag;
};
MyPage<OneCoeff> *cpage; // pages of OneCoeff datums for clist
OneCoeff **clist; // ptrs to vectors of bias coeffs for each atom
int *numcoeff; // # of bias coeffs per atom (one per bond)
int maxcoeff; // allocate sized of clist and numcoeff
// extra timers
//double timefirst,timesecond,timethird,timefourth;
//double timefifth,timesixth,timeseventh,timetotal;
// data structs for per-atom and per-bond info
// all of these are for current owned and ghost atoms
// except list and old2now are for atom indices at time of last bond build
// private methods
class NeighList *list; // full neigh list up to Dcut distance
// created only when bonds are rebuilt
int *old2now; // o2n[i] = current local index of old atom i
// stored for old owned and ghost atoms
// I = old index when bonds were last created
// old indices are stored in old neighbor list
double **xold; // coords of owned+ghost atoms when bonds created
tagint *tagold; // global IDs of owned+ghost atoms when b created
int maxold; // allocated size of old2now
int maxbond; // allocated size of bonds
int old_nall; // nlocal+nghost when old2now was last setup
struct OneBond { // single IJ bond, atom I is owner
double r0; // original relaxed bond length
double boostcoeff; // boost coefficient
tagint jtag; // global index of J atom in bond IJ
int j; // local index of J atom in bond IJ
};
struct OneBond **bonds; // 2d array of bonds for owned atoms
int *numbond; // number of bonds for each owned atom
double *maxstrain; // max-strain of any bond atom I is part of
// for owned and ghost atoms
double *maxstrain_region; // max-strain of any neighbor atom J of atom I
// for owned and ghost atoms
int *maxstrain_bondindex; // index of max-strain bond of each atom I
// just for owned atoms
tagint *biasflag; // atoms in biased bonds marked with bond partner
// for owned and ghost atoms
// list of boosted bonds that this proc will bias
int maxboost; // allocated size of boost list
int nboost; // # of boosted bonds I own
int *boost; // index of atom I in each boosted bond
// histogramming of bond boost cooeficients
int histo_every,histo_count,histo_print,histo_steps;
double histo_delta,invhisto_delta,histo_lo;
bigint *histo,*allhisto;
void grow_bond();
};
}

View File

@ -40,9 +40,7 @@ enum{NOHYPER,GLOBAL,LOCAL};
/* ---------------------------------------------------------------------- */
Hyper::Hyper(LAMMPS *lmp) :
Pointers(lmp), dumplist(NULL)
{}
Hyper::Hyper(LAMMPS *lmp) : Pointers(lmp), dumplist(NULL) {}
/* ----------------------------------------------------------------------
perform hyperdynamics simulation
@ -183,9 +181,6 @@ void Hyper::command(int narg, char **arg)
if (hyperenable) fix_hyper->init_hyper();
timer->barrier_start();
time_start = timer->get_wall(Timer::TOTAL);
// perform initial minimization and bond list creation
int nevent = 0;
@ -200,6 +195,14 @@ void Hyper::command(int narg, char **arg)
if (hyperenable) fix_hyper->build_bond_list(0);
fix_event->restore_state_quench();
// reset stats and timers to skip HD setup
nbuild = ndanger = 0;
time_dynamics = time_quench = 0.0;
timer->barrier_start();
time_start = timer->get_wall(Timer::TOTAL);
// main loop: dynamics, store state, quench, check event, restore state
int ecount;
@ -260,11 +263,12 @@ void Hyper::command(int narg, char **arg)
double maxdrift = 0.0;
double maxbondlen = 0.0;
double fraczero = 1.0;
double fracneg = 1.0;
double nnewbond,avenboost,aveboostcoeff,maxboostcoeff,minboostcoeff;
double maxbondperatom,neighbondperbond,aveboostnow;
double nnewbond,avenbias,avebiascoeff,minbiascoeff,maxbiascoeff;
double maxbondperatom,neighbondperbond,avebiasnow;
double tbondbuild,rmaxever,rmaxeverbig,allghost_toofar;
double lostbond,lostbondcoeff,biasoverlap,nonmatchbiascoeff;
double lostbond,lostbondcoeff,biasoverlap;
if (hyperenable) {
t_hyper = fix_hyper->query(1);
@ -274,115 +278,70 @@ void Hyper::command(int narg, char **arg)
maxdrift = fix_hyper->query(5);
maxbondlen = fix_hyper->query(6);
fraczero = fix_hyper->query(7);
fracneg = fix_hyper->query(8);
if (hyperstyle == LOCAL) {
nnewbond = fix_hyper->query(8);
maxbondperatom = fix_hyper->query(9);
avenboost = fix_hyper->query(10);
aveboostcoeff = fix_hyper->query(11);
maxboostcoeff = fix_hyper->query(12);
minboostcoeff = fix_hyper->query(13);
neighbondperbond = fix_hyper->query(14);
aveboostnow = fix_hyper->query(15);
tbondbuild = fix_hyper->query(16);
rmaxever = fix_hyper->query(17);
rmaxeverbig = fix_hyper->query(18);
allghost_toofar = fix_hyper->query(19);
lostbond = fix_hyper->query(20);
lostbondcoeff = fix_hyper->query(21);
biasoverlap = fix_hyper->query(22);
nonmatchbiascoeff = fix_hyper->query(23);
nnewbond = fix_hyper->query(9);
maxbondperatom = fix_hyper->query(10);
avenbias = fix_hyper->query(11);
avebiascoeff = fix_hyper->query(12);
minbiascoeff = fix_hyper->query(13);
maxbiascoeff = fix_hyper->query(14);
neighbondperbond = fix_hyper->query(15);
avebiasnow = fix_hyper->query(16);
tbondbuild = fix_hyper->query(17);
rmaxever = fix_hyper->query(18);
rmaxeverbig = fix_hyper->query(19);
allghost_toofar = fix_hyper->query(20);
biasoverlap = fix_hyper->query(21);
}
}
if (me == 0) {
if (screen) {
fprintf(screen,"Cummulative quantities for fix hyper:\n");
fprintf(screen," hyper time = %g\n",t_hyper);
fprintf(screen," time boost factor = %g\n",t_hyper/(nsteps*update->dt));
fprintf(screen," event timesteps = %d\n",nevent_running);
fprintf(screen," # of atoms in events = %d\n",nevent_atoms_running);
fprintf(screen,"Quantities for this hyper run:\n");
fprintf(screen," event timesteps = %d\n",nevent);
fprintf(screen," # of atoms in events = %d\n",nevent_atoms);
fprintf(screen," max length of any bond = %g\n",maxbondlen);
fprintf(screen," max drift distance of any atom = %g\n",maxdrift);
fprintf(screen," fraction of steps & bonds with zero bias = %g\n",
fraczero);
fprintf(screen,"Current quantities:\n");
fprintf(screen," ave bonds/atom = %g\n",avebonds);
FILE *out;
for (int iout = 0; iout < 2; iout++) {
if (iout == 0) out = screen;
if (iout == 1) out = logfile;
if (!out) continue;
fprintf(out,"Cummulative quantities for fix hyper:\n");
fprintf(out," hyper time = %g\n",t_hyper);
fprintf(out," time boost factor = %g\n",t_hyper/(nsteps*update->dt));
fprintf(out," event timesteps = %d\n",nevent_running);
fprintf(out," # of atoms in events = %d\n",nevent_atoms_running);
fprintf(out,"Quantities for this hyper run:\n");
fprintf(out," event timesteps = %d\n",nevent);
fprintf(out," # of atoms in events = %d\n",nevent_atoms);
fprintf(out," max length of any bond = %g\n",maxbondlen);
fprintf(out," max drift distance of any atom = %g\n",maxdrift);
fprintf(out," fraction of biased bonds with zero bias = %g\n",fraczero);
fprintf(out," fraction of biased bonds with negative strain = %g\n",
fracneg);
fprintf(out,"Current quantities:\n");
fprintf(out," ave bonds/atom = %g\n",avebonds);
if (hyperstyle == LOCAL) {
fprintf(screen,"Cummulative quantities specific to fix hyper/local:\n");
fprintf(screen," # of new bonds formed = %g\n",nnewbond);
fprintf(screen," max bonds/atom = %g\n",maxbondperatom);
fprintf(screen,"Quantities for this hyper run specific to "
fprintf(out,"Cummulative quantities specific to fix hyper/local:\n");
fprintf(out," # of new bonds formed = %g\n",nnewbond);
fprintf(out," max bonds/atom = %g\n",maxbondperatom);
fprintf(out,"Quantities for this hyper run specific to "
"fix hyper/local:\n");
fprintf(screen," ave boosted bonds/step = %g\n",avenboost);
fprintf(screen," ave boost coeff of all bonds = %g\n",aveboostcoeff);
fprintf(screen," max boost coeff of any bond = %g\n",maxboostcoeff);
fprintf(screen," min boost coeff of any bond = %g\n",minboostcoeff);
fprintf(screen," max dist from my box of any "
fprintf(out," ave biased bonds/step = %g\n",avenbias);
fprintf(out," ave bias coeff of all bonds = %g\n",avebiascoeff);
fprintf(out," min bias coeff of any bond = %g\n",minbiascoeff);
fprintf(out," max bias coeff of any bond = %g\n",maxbiascoeff);
fprintf(out," max dist from my subbox of any "
"non-maxstrain bond ghost atom = %g\n",rmaxever);
fprintf(screen," max dist from my box of any bond ghost atom = %g\n",
fprintf(out," max dist from my box of any bond ghost atom = %g\n",
rmaxeverbig);
fprintf(screen," count of bond ghost neighbors "
fprintf(out," count of bond ghost neighbors "
"not found on reneighbor steps = %g\n",allghost_toofar);
fprintf(screen," lost bond partners = %g\n",lostbond);
fprintf(screen," ave bias coeff for lost bond partners = %g\n",
lostbondcoeff);
fprintf(screen," bias overlaps = %g\n",biasoverlap);
fprintf(screen," non-matching bias coeffs = %g\n",nonmatchbiascoeff);
fprintf(screen," CPU time for bond builds = %g\n",tbondbuild);
fprintf(screen,"Current quantities specific to fix hyper/local:\n");
fprintf(screen," neighbor bonds/bond = %g\n",neighbondperbond);
fprintf(screen," ave boost coeff for all bonds = %g\n",aveboostnow);
fprintf(out," bias overlaps = %g\n",biasoverlap);
fprintf(out," CPU time for bond builds = %g\n",tbondbuild);
fprintf(out,"Current quantities specific to fix hyper/local:\n");
fprintf(out," neighbor bonds/bond = %g\n",neighbondperbond);
fprintf(out," ave boost coeff for all bonds = %g\n",avebiasnow);
}
fprintf(screen,"\n");
}
if (logfile) {
fprintf(logfile,"Cummulative quantities for fix hyper:\n");
fprintf(logfile," hyper time = %g\n",t_hyper);
fprintf(logfile," event timesteps = %d\n",nevent_running);
fprintf(logfile," # of atoms in events = %d\n",nevent_atoms_running);
fprintf(logfile,"Quantities for this hyper run:\n");
fprintf(logfile," event timesteps = %d\n",nevent);
fprintf(logfile," # of atoms in events = %d\n",nevent_atoms);
fprintf(logfile," max length of any bond = %g\n",maxbondlen);
fprintf(logfile," max drift distance of any atom = %g\n",maxdrift);
fprintf(logfile," fraction of steps & bonds with zero bias = %g\n",
fraczero);
fprintf(logfile,"Current quantities:\n");
fprintf(logfile," ave bonds/atom = %g\n",avebonds);
if (hyperstyle == LOCAL) {
fprintf(logfile,"Cummulative quantities specific tofix hyper/local:\n");
fprintf(logfile," # of new bonds formed = %g\n",nnewbond);
fprintf(logfile," max bonds/atom = %g\n",maxbondperatom);
fprintf(logfile,"Quantities for this hyper run specific to "
"fix hyper/local:\n");
fprintf(logfile," ave boosted bonds/step = %g\n",avenboost);
fprintf(logfile," ave boost coeff of all bonds = %g\n",aveboostcoeff);
fprintf(logfile," max boost coeff of any bond = %g\n",maxboostcoeff);
fprintf(logfile," min boost coeff of any bond = %g\n",minboostcoeff);
fprintf(logfile," max dist from my box of any "
"non-maxstrain bond ghost atom = %g\n",rmaxever);
fprintf(logfile," max dist from my box of any bond ghost atom = %g\n",
rmaxeverbig);
fprintf(logfile," count of ghost bond neighbors "
"not found on reneighbor steps = %g\n",allghost_toofar);
fprintf(logfile," lost bond partners = %g\n",lostbond);
fprintf(logfile," ave bias coeff for lost bond partners = %g\n",
lostbondcoeff);
fprintf(logfile," bias overlaps = %g\n",biasoverlap);
fprintf(logfile," non-matching bias coeffs = %g\n",nonmatchbiascoeff);
fprintf(logfile," CPU time for bond builds = %g\n",tbondbuild);
fprintf(logfile,"Current quantities specific to fix hyper/local:\n");
fprintf(logfile," neighbor bonds/bond = %g\n",neighbondperbond);
fprintf(logfile," ave boost coeff for all bonds = %g\n",aveboostnow);
}
fprintf(logfile,"\n");
fprintf(out,"\n");
}
}

View File

@ -28,12 +28,14 @@
#include "modify.h"
#include "group.h"
#include "comm.h"
#include "neighbor.h"
#include "force.h"
#include "input.h"
#include "output.h"
#include "variable.h"
#include "random_mars.h"
#include "math_const.h"
#include "hashlittle.h"
#include "memory.h"
#include "error.h"
@ -43,6 +45,8 @@ using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
#define RVOUS 1 // 0 for irregular, 1 for all2all
#define MAXLINE 1024
#define CHUNK 1024
#define ATTRIBUTE_PERBODY 20
@ -70,8 +74,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
xcmimage(NULL), displace(NULL), eflags(NULL), orient(NULL), dorient(NULL),
avec_ellipsoid(NULL), avec_line(NULL), avec_tri(NULL), counts(NULL),
itensor(NULL), mass_body(NULL), langextra(NULL), random(NULL),
id_dilate(NULL), onemols(NULL), hash(NULL), bbox(NULL), ctr(NULL),
idclose(NULL), rsqclose(NULL)
id_dilate(NULL), onemols(NULL)
{
int i;
@ -107,18 +110,18 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
// parse args for rigid body specification
int *mask = atom->mask;
tagint *bodyid = NULL;
tagint *bodyID = NULL;
int nlocal = atom->nlocal;
if (narg < 4) error->all(FLERR,"Illegal fix rigid/small command");
if (strcmp(arg[3],"molecule") == 0) {
if (atom->molecule_flag == 0)
error->all(FLERR,"Fix rigid/small requires atom attribute molecule");
bodyid = atom->molecule;
bodyID = atom->molecule;
} else if (strcmp(arg[3],"custom") == 0) {
if (narg < 5) error->all(FLERR,"Illegal fix rigid/small command");
bodyid = new tagint[nlocal];
bodyID = new tagint[nlocal];
customflag = 1;
// determine whether atom-style variable or atom property is used.
@ -126,9 +129,11 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
int is_double=0;
int custom_index = atom->find_custom(arg[4]+2,is_double);
if (custom_index == -1)
error->all(FLERR,"Fix rigid/small custom requires previously defined property/atom");
error->all(FLERR,"Fix rigid/small custom requires "
"previously defined property/atom");
else if (is_double)
error->all(FLERR,"Fix rigid/small custom requires integer-valued property/atom");
error->all(FLERR,"Fix rigid/small custom requires "
"integer-valued property/atom");
int minval = INT_MAX;
int *value = atom->ivector[custom_index];
@ -139,15 +144,17 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
bodyid[i] = (tagint)(value[i] - minval + 1);
else bodyid[i] = 0;
bodyID[i] = (tagint)(value[i] - minval + 1);
else bodyID[i] = 0;
} else if (strstr(arg[4],"v_") == arg[4]) {
int ivariable = input->variable->find(arg[4]+2);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix rigid/small custom does not exist");
error->all(FLERR,"Variable name for fix rigid/small custom "
"does not exist");
if (input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Fix rigid/small custom variable is no atom-style variable");
error->all(FLERR,"Fix rigid/small custom variable is not "
"atom-style variable");
double *value = new double[nlocal];
input->variable->compute_atom(ivariable,0,value,1,0);
int minval = INT_MAX;
@ -158,8 +165,8 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
bodyid[i] = (tagint)((tagint)value[i] - minval + 1);
else bodyid[0] = 0;
bodyID[i] = (tagint)((tagint)value[i] - minval + 1);
else bodyID[0] = 0;
delete[] value;
} else error->all(FLERR,"Unsupported fix rigid custom property");
} else error->all(FLERR,"Illegal fix rigid/small command");
@ -167,10 +174,11 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
if (atom->map_style == 0)
error->all(FLERR,"Fix rigid/small requires an atom map, see atom_modify");
// maxmol = largest bodyid #
// maxmol = largest bodyID #
maxmol = -1;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) maxmol = MAX(maxmol,bodyid[i]);
if (mask[i] & groupbit) maxmol = MAX(maxmol,bodyID[i]);
tagint itmp;
MPI_Allreduce(&maxmol,&itmp,1,MPI_LMP_TAGINT,MPI_MAX,world);
@ -400,8 +408,19 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :
// sets bodytag for owned atoms
// body attributes are computed later by setup_bodies()
create_bodies(bodyid);
if (customflag) delete [] bodyid;
double time1 = MPI_Wtime();
create_bodies(bodyID);
if (customflag) delete [] bodyID;
double time2 = MPI_Wtime();
if (comm->me == 0) {
if (screen)
fprintf(screen," create bodies CPU = %g secs\n",time2-time1);
if (logfile)
fprintf(logfile," create bodies CPU = %g secs\n",time2-time1);
}
// set nlocal_body and allocate bodies I own
@ -569,7 +588,8 @@ void FixRigidSmall::init()
if (rflag && (modify->fmask[i] & POST_FORCE) &&
!modify->fix[i]->rigid_flag) {
char str[128];
snprintf(str,128,"Fix %s alters forces after fix rigid",modify->fix[i]->id);
snprintf(str,128,"Fix %s alters forces after fix rigid",
modify->fix[i]->id);
error->warning(FLERR,str);
}
}
@ -633,6 +653,16 @@ void FixRigidSmall::setup(int vflag)
{
int i,n,ibody;
// error if maxextent > comm->cutghost
// NOTE: could just warn if an override flag set
// NOTE: this could fail for comm multi mode if user sets a wrong cutoff
// for atom types in rigid bodies - need a more careful test
// must check here, not in init, b/c neigh/comm values set after fix init
double cutghost = MAX(neighbor->cutneighmax,comm->cutghostuser);
if (maxextent > cutghost)
error->all(FLERR,"Rigid body extent > ghost cutoff - use comm_modify cutoff");
//check(1);
// sum fcm, torque across all rigid bodies
@ -1514,175 +1544,72 @@ void FixRigidSmall::set_v()
set bodytag for all owned atoms
------------------------------------------------------------------------- */
void FixRigidSmall::create_bodies(tagint *bodyid)
void FixRigidSmall::create_bodies(tagint *bodyID)
{
int i,m,n;
double unwrap[3];
int i,m;
// error check on image flags of atoms in rigid bodies
// allocate buffer for input to rendezvous comm
// ncount = # of my atoms in bodies
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int *periodicity = domain->periodicity;
int xbox,ybox,zbox;
int flag = 0;
for (i = 0; i < nlocal; i++) {
if (!(mask[i] & groupbit)) continue;
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
if ((xbox && !periodicity[0]) || (ybox && !periodicity[1]) ||
(zbox && !periodicity[2])) flag = 1;
}
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall) error->all(FLERR,"Fix rigid/small atom has non-zero image flag "
"in a non-periodic dimension");
// allocate buffer for passing messages around ring of procs
// percount = max number of values to put in buffer for each of ncount
int ncount = 0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) ncount++;
int percount = 5;
double *buf;
memory->create(buf,ncount*percount,"rigid/small:buf");
int *proclist;
memory->create(proclist,ncount,"rigid/small:proclist");
InRvous *inbuf = (InRvous *)
memory->smalloc(ncount*sizeof(InRvous),"rigid/small:inbuf");
// create map hash for storing unique body IDs of my atoms
// key = body ID
// value = index into per-body data structure
// n = # of entries in hash
hash = new std::map<tagint,int>();
hash->clear();
// setup hash
// key = body ID
// value = index into N-length data structure
// n = count of unique bodies my atoms are part of
n = 0;
for (i = 0; i < nlocal; i++) {
if (!(mask[i] & groupbit)) continue;
if (hash->find(bodyid[i]) == hash->end()) (*hash)[bodyid[i]] = n++;
}
// bbox = bounding box of each rigid body my atoms are part of
memory->create(bbox,n,6,"rigid/small:bbox");
for (i = 0; i < n; i++) {
bbox[i][0] = bbox[i][2] = bbox[i][4] = BIG;
bbox[i][1] = bbox[i][3] = bbox[i][5] = -BIG;
}
// pack my atoms into buffer as body ID, unwrapped coords
// setup buf to pass to rendezvous comm
// one BodyMsg datum for each constituent atom
// datum = me, local index of atom, atomID, bodyID, unwrapped coords
// owning proc for each datum = random hash of bodyID
double **x = atom->x;
m = 0;
for (i = 0; i < nlocal; i++) {
if (!(mask[i] & groupbit)) continue;
domain->unmap(x[i],image[i],unwrap);
buf[m++] = bodyid[i];
buf[m++] = unwrap[0];
buf[m++] = unwrap[1];
buf[m++] = unwrap[2];
}
// pass buffer around ring of procs
// func = update bbox with atom coords from every proc
// when done, have full bbox for every rigid body my atoms are part of
comm->ring(m,sizeof(double),buf,1,ring_bbox,NULL,(void *)this);
// check if any bbox is size 0.0, meaning rigid body is a single particle
flag = 0;
for (i = 0; i < n; i++)
if (bbox[i][0] == bbox[i][1] && bbox[i][2] == bbox[i][3] &&
bbox[i][4] == bbox[i][5]) flag = 1;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"One or more rigid bodies are a single particle");
// ctr = center pt of each rigid body my atoms are part of
memory->create(ctr,n,6,"rigid/small:bbox");
for (i = 0; i < n; i++) {
ctr[i][0] = 0.5 * (bbox[i][0] + bbox[i][1]);
ctr[i][1] = 0.5 * (bbox[i][2] + bbox[i][3]);
ctr[i][2] = 0.5 * (bbox[i][4] + bbox[i][5]);
}
// idclose = ID of atom in body closest to center pt (smaller ID if tied)
// rsqclose = distance squared from idclose to center pt
memory->create(idclose,n,"rigid/small:idclose");
memory->create(rsqclose,n,"rigid/small:rsqclose");
for (i = 0; i < n; i++) rsqclose[i] = BIG;
// pack my atoms into buffer as body ID, atom ID, unwrapped coords
tagint *tag = atom->tag;
imageint *image = atom->image;
m = 0;
for (i = 0; i < nlocal; i++) {
if (!(mask[i] & groupbit)) continue;
domain->unmap(x[i],image[i],unwrap);
buf[m++] = bodyid[i];
buf[m++] = ubuf(tag[i]).d;
buf[m++] = unwrap[0];
buf[m++] = unwrap[1];
buf[m++] = unwrap[2];
proclist[m] = hashlittle(&bodyID[i],sizeof(tagint),0) % nprocs;
inbuf[m].me = me;
inbuf[m].ilocal = i;
inbuf[m].atomID = tag[i];
inbuf[m].bodyID = bodyID[i];
domain->unmap(x[i],image[i],inbuf[m].x);
m++;
}
// pass buffer around ring of procs
// func = update idclose,rsqclose with atom IDs from every proc
// when done, have idclose for every rigid body my atoms are part of
// perform rendezvous operation
// each proc owns random subset of bodies
// receives all atoms in those bodies
// func = compute bbox of each body, find atom closest to geometric center
comm->ring(m,sizeof(double),buf,2,ring_nearest,NULL,(void *)this);
char *buf;
int nreturn = comm->rendezvous(RVOUS,ncount,(char *) inbuf,sizeof(InRvous),
0,proclist,
rendezvous_body,0,buf,sizeof(OutRvous),
(void *) this);
OutRvous *outbuf = (OutRvous *) buf;
// set bodytag of all owned atoms, based on idclose
// find max value of rsqclose across all procs
memory->destroy(proclist);
memory->sfree(inbuf);
double rsqmax = 0.0;
for (i = 0; i < nlocal; i++) {
bodytag[i] = 0;
if (!(mask[i] & groupbit)) continue;
m = hash->find(bodyid[i])->second;
bodytag[i] = idclose[m];
rsqmax = MAX(rsqmax,rsqclose[m]);
}
// set bodytag of all owned atoms based on outbuf info for constituent atoms
// pack my atoms into buffer as bodytag of owning atom, unwrapped coords
for (i = 0; i < nlocal; i++)
if (!(mask[i] & groupbit)) bodytag[i] = 0;
m = 0;
for (i = 0; i < nlocal; i++) {
if (!(mask[i] & groupbit)) continue;
domain->unmap(x[i],image[i],unwrap);
buf[m++] = ubuf(bodytag[i]).d;
buf[m++] = unwrap[0];
buf[m++] = unwrap[1];
buf[m++] = unwrap[2];
}
for (m = 0; m < nreturn; m++)
bodytag[outbuf[m].ilocal] = outbuf[m].atomID;
// pass buffer around ring of procs
// func = update rsqfar for atoms belonging to bodies I own
// when done, have rsqfar for all atoms in bodies I own
memory->sfree(outbuf);
rsqfar = 0.0;
comm->ring(m,sizeof(double),buf,3,ring_farthest,NULL,(void *)this);
// find maxextent of rsqfar across all procs
// maxextent = max of rsqfar across all procs
// if defined, include molecule->maxextent
MPI_Allreduce(&rsqfar,&maxextent,1,MPI_DOUBLE,MPI_MAX,world);
@ -1691,125 +1618,156 @@ void FixRigidSmall::create_bodies(tagint *bodyid)
for (int i = 0; i < nmol; i++)
maxextent = MAX(maxextent,onemols[i]->maxextent);
}
}
/* ----------------------------------------------------------------------
process rigid bodies assigned to me
buf = list of N BodyMsg datums
------------------------------------------------------------------------- */
int FixRigidSmall::rendezvous_body(int n, char *inbuf,
int &rflag, int *&proclist, char *&outbuf,
void *ptr)
{
int i,m;
double delx,dely,delz,rsq;
int *iclose;
tagint *idclose;
double *x,*xown,*rsqclose;
double **bbox,**ctr;
FixRigidSmall *frsptr = (FixRigidSmall *) ptr;
Memory *memory = frsptr->memory;
Error *error = frsptr->error;
MPI_Comm world = frsptr->world;
// setup hash
// use STL map instead of atom->map
// b/c know nothing about body ID values specified by user
// ncount = number of bodies assigned to me
// key = body ID
// value = index into Ncount-length data structure
InRvous *in = (InRvous *) inbuf;
std::map<tagint,int> hash;
tagint id;
int ncount = 0;
for (i = 0; i < n; i++) {
id = in[i].bodyID;
if (hash.find(id) == hash.end()) hash[id] = ncount++;
}
// bbox = bounding box of each rigid body
memory->create(bbox,ncount,6,"rigid/small:bbox");
for (m = 0; m < ncount; m++) {
bbox[m][0] = bbox[m][2] = bbox[m][4] = BIG;
bbox[m][1] = bbox[m][3] = bbox[m][5] = -BIG;
}
for (i = 0; i < n; i++) {
m = hash.find(in[i].bodyID)->second;
x = in[i].x;
bbox[m][0] = MIN(bbox[m][0],x[0]);
bbox[m][1] = MAX(bbox[m][1],x[0]);
bbox[m][2] = MIN(bbox[m][2],x[1]);
bbox[m][3] = MAX(bbox[m][3],x[1]);
bbox[m][4] = MIN(bbox[m][4],x[2]);
bbox[m][5] = MAX(bbox[m][5],x[2]);
}
// check if any bbox is size 0.0, meaning rigid body is a single particle
int flag = 0;
for (m = 0; m < ncount; m++)
if (bbox[m][0] == bbox[m][1] && bbox[m][2] == bbox[m][3] &&
bbox[m][4] == bbox[m][5]) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world); // sync here?
if (flagall)
error->all(FLERR,"One or more rigid bodies are a single particle");
// ctr = geometric center pt of each rigid body
memory->create(ctr,ncount,3,"rigid/small:bbox");
for (m = 0; m < ncount; m++) {
ctr[m][0] = 0.5 * (bbox[m][0] + bbox[m][1]);
ctr[m][1] = 0.5 * (bbox[m][2] + bbox[m][3]);
ctr[m][2] = 0.5 * (bbox[m][4] + bbox[m][5]);
}
// idclose = atomID closest to center point of each body
memory->create(idclose,ncount,"rigid/small:idclose");
memory->create(iclose,ncount,"rigid/small:iclose");
memory->create(rsqclose,ncount,"rigid/small:rsqclose");
for (m = 0; m < ncount; m++) rsqclose[m] = BIG;
for (i = 0; i < n; i++) {
m = hash.find(in[i].bodyID)->second;
x = in[i].x;
delx = x[0] - ctr[m][0];
dely = x[1] - ctr[m][1];
delz = x[2] - ctr[m][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq <= rsqclose[m]) {
if (rsq == rsqclose[m] && in[i].atomID > idclose[m]) continue;
iclose[m] = i;
idclose[m] = in[i].atomID;
rsqclose[m] = rsq;
}
}
// compute rsqfar for all bodies I own
// set rsqfar back in caller
double rsqfar = 0.0;
for (int i = 0; i < n; i++) {
m = hash.find(in[i].bodyID)->second;
xown = in[iclose[m]].x;
x = in[i].x;
delx = x[0] - xown[0];
dely = x[1] - xown[1];
delz = x[2] - xown[2];
rsq = delx*delx + dely*dely + delz*delz;
rsqfar = MAX(rsqfar,rsq);
}
frsptr->rsqfar = rsqfar;
// pass list of OutRvous datums back to comm->rendezvous
int nout = n;
memory->create(proclist,nout,"rigid/small:proclist");
OutRvous *out = (OutRvous *)
memory->smalloc(nout*sizeof(OutRvous),"rigid/small:out");
for (int i = 0; i < nout; i++) {
proclist[i] = in[i].me;
out[i].ilocal = in[i].ilocal;
m = hash.find(in[i].bodyID)->second;
out[i].atomID = idclose[m];
}
outbuf = (char *) out;
// clean up
// Comm::rendezvous will delete proclist and out (outbuf)
delete hash;
memory->destroy(buf);
memory->destroy(bbox);
memory->destroy(ctr);
memory->destroy(idclose);
memory->destroy(iclose);
memory->destroy(rsqclose);
}
/* ----------------------------------------------------------------------
process rigid body atoms from another proc
update bounding box for rigid bodies my atoms are part of
------------------------------------------------------------------------- */
// flag = 2: new outbuf
void FixRigidSmall::ring_bbox(int n, char *cbuf, void *ptr)
{
FixRigidSmall *frsptr = (FixRigidSmall *) ptr;
std::map<tagint,int> *hash = frsptr->hash;
double **bbox = frsptr->bbox;
double *buf = (double *) cbuf;
int ndatums = n/4;
int j,imol;
double *x;
int m = 0;
for (int i = 0; i < ndatums; i++, m += 4) {
imol = static_cast<int> (buf[m]);
if (hash->find(imol) != hash->end()) {
j = hash->find(imol)->second;
x = &buf[m+1];
bbox[j][0] = MIN(bbox[j][0],x[0]);
bbox[j][1] = MAX(bbox[j][1],x[0]);
bbox[j][2] = MIN(bbox[j][2],x[1]);
bbox[j][3] = MAX(bbox[j][3],x[1]);
bbox[j][4] = MIN(bbox[j][4],x[2]);
bbox[j][5] = MAX(bbox[j][5],x[2]);
}
}
}
/* ----------------------------------------------------------------------
process rigid body atoms from another proc
update nearest atom to body center for rigid bodies my atoms are part of
------------------------------------------------------------------------- */
void FixRigidSmall::ring_nearest(int n, char *cbuf, void *ptr)
{
FixRigidSmall *frsptr = (FixRigidSmall *) ptr;
std::map<tagint,int> *hash = frsptr->hash;
double **ctr = frsptr->ctr;
tagint *idclose = frsptr->idclose;
double *rsqclose = frsptr->rsqclose;
double *buf = (double *) cbuf;
int ndatums = n/5;
int j,imol;
tagint tag;
double delx,dely,delz,rsq;
double *x;
int m = 0;
for (int i = 0; i < ndatums; i++, m += 5) {
imol = static_cast<int> (buf[m]);
if (hash->find(imol) != hash->end()) {
j = hash->find(imol)->second;
tag = (tagint) ubuf(buf[m+1]).i;
x = &buf[m+2];
delx = x[0] - ctr[j][0];
dely = x[1] - ctr[j][1];
delz = x[2] - ctr[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq <= rsqclose[j]) {
if (rsq == rsqclose[j] && tag > idclose[j]) continue;
idclose[j] = tag;
rsqclose[j] = rsq;
}
}
}
}
/* ----------------------------------------------------------------------
process rigid body atoms from another proc
update rsqfar = distance from owning atom to other atom
------------------------------------------------------------------------- */
void FixRigidSmall::ring_farthest(int n, char *cbuf, void *ptr)
{
FixRigidSmall *frsptr = (FixRigidSmall *) ptr;
double **x = frsptr->atom->x;
imageint *image = frsptr->atom->image;
int nlocal = frsptr->atom->nlocal;
double *buf = (double *) cbuf;
int ndatums = n/4;
int iowner;
tagint tag;
double delx,dely,delz,rsq;
double *xx;
double unwrap[3];
int m = 0;
for (int i = 0; i < ndatums; i++, m += 4) {
tag = (tagint) ubuf(buf[m]).i;
iowner = frsptr->atom->map(tag);
if (iowner < 0 || iowner >= nlocal) continue;
frsptr->domain->unmap(x[iowner],image[iowner],unwrap);
xx = &buf[m+1];
delx = xx[0] - unwrap[0];
dely = xx[1] - unwrap[1];
delz = xx[2] - unwrap[2];
rsq = delx*delx + dely*dely + delz*delz;
frsptr->rsqfar = MAX(frsptr->rsqfar,rsq);
}
rflag = 2;
return nout;
}
/* ----------------------------------------------------------------------
@ -2472,9 +2430,9 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody)
int nlocal = atom->nlocal;
hash = new std::map<tagint,int>();
std::map<tagint,int> hash;
for (i = 0; i < nlocal; i++)
if (bodyown[i] >= 0) (*hash)[atom->molecule[i]] = bodyown[i];
if (bodyown[i] >= 0) hash[atom->molecule[i]] = bodyown[i];
// open file and read header
@ -2533,11 +2491,11 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody)
id = ATOTAGINT(values[0]);
if (id <= 0 || id > maxmol)
error->all(FLERR,"Invalid rigid body ID in fix rigid/small file");
if (hash->find(id) == hash->end()) {
if (hash.find(id) == hash.end()) {
buf = next + 1;
continue;
}
m = (*hash)[id];
m = hash[id];
inbody[m] = 1;
if (which == 0) {
@ -2576,7 +2534,6 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody)
delete [] buffer;
delete [] values;
delete hash;
}
/* ----------------------------------------------------------------------

View File

@ -22,9 +22,6 @@ FixStyle(rigid/small,FixRigidSmall)
#include "fix.h"
// replace this later
#include <map>
namespace LAMMPS_NS {
class FixRigidSmall : public Fix {
@ -180,13 +177,21 @@ class FixRigidSmall : public Fix {
// class data used by ring communication callbacks
std::map<tagint,int> *hash;
double **bbox;
double **ctr;
tagint *idclose;
double *rsqclose;
double rsqfar;
struct InRvous {
int me,ilocal;
tagint atomID,bodyID;
double x[3];
};
struct OutRvous {
int ilocal;
tagint atomID;
};
// local methods
void image_shift();
void set_xv();
void set_v();
@ -199,11 +204,9 @@ class FixRigidSmall : public Fix {
void grow_body();
void reset_atom2body();
// callback functions for ring communication
// callback function for rendezvous communication
static void ring_bbox(int, char *, void *);
static void ring_nearest(int, char *, void *);
static void ring_farthest(int, char *, void *);
static int rendezvous_body(int, char *, int &, int *&, char *&, void *);
// debug

View File

@ -39,6 +39,8 @@ using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
#define RVOUS 1 // 0 for irregular, 1 for all2all
#define BIG 1.0e20
#define MASSDELTA 0.1
@ -219,8 +221,19 @@ FixShake::FixShake(LAMMPS *lmp, int narg, char **arg) :
// identify all SHAKE clusters
double time1 = MPI_Wtime();
find_clusters();
double time2 = MPI_Wtime();
if (comm->me == 0) {
if (screen)
fprintf(screen," find clusters CPU = %g secs\n",time2-time1);
if (logfile)
fprintf(logfile," find clusters CPU = %g secs\n",time2-time1);
}
// initialize list of SHAKE clusters to constrain
maxlist = 0;
@ -681,10 +694,9 @@ int FixShake::dof(int igroup)
void FixShake::find_clusters()
{
int i,j,m,n,imol,iatom;
int flag,flag_all,nbuf,size;
int flag,flag_all;
tagint tagprev;
double massone;
tagint *buf;
if (me == 0 && screen) {
if (!rattle) fprintf(screen,"Finding SHAKE clusters ...\n");
@ -707,13 +719,6 @@ void FixShake::find_clusters()
int nlocal = atom->nlocal;
int angles_allow = atom->avec->angles_allow;
// setup ring of procs
int next = me + 1;
int prev = me -1;
if (next == nprocs) next = 0;
if (prev < 0) prev = nprocs - 1;
// -----------------------------------------------------
// allocate arrays for self (1d) and bond partners (2d)
// max = max # of bond partners for owned atoms = 2nd dim of partner arrays
@ -755,6 +760,10 @@ void FixShake::find_clusters()
memory->create(partner_shake,nlocal,max,"shake:partner_shake");
memory->create(partner_nshake,nlocal,max,"shake:partner_nshake");
// setup atomIDs and procowner vectors in rendezvous decomposition
atom_owners();
// -----------------------------------------------------
// set npartner and partner_tag from special arrays
// -----------------------------------------------------
@ -778,86 +787,13 @@ void FixShake::find_clusters()
}
// -----------------------------------------------------
// set partner_mask, partner_type, partner_massflag, partner_bondtype
// for bonded partners
// requires communication for off-proc partners
// set partner_mask, partner_type, partner_massflag,
// partner_bondtype for all my bonded partners
// requires rendezvous communication for off-proc partners
// -----------------------------------------------------
// fill in mask, type, massflag, bondtype if own bond partner
// info to store in buf for each off-proc bond = nper = 6
// 2 atoms IDs in bond, space for mask, type, massflag, bondtype
// nbufmax = largest buffer needed to hold info from any proc
int nper = 6;
nbuf = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
partner_mask[i][j] = 0;
partner_type[i][j] = 0;
partner_massflag[i][j] = 0;
partner_bondtype[i][j] = 0;
m = atom->map(partner_tag[i][j]);
if (m >= 0 && m < nlocal) {
partner_mask[i][j] = mask[m];
partner_type[i][j] = type[m];
if (nmass) {
if (rmass) massone = rmass[m];
else massone = mass[type[m]];
partner_massflag[i][j] = masscheck(massone);
}
n = bondtype_findset(i,tag[i],partner_tag[i][j],0);
if (n) partner_bondtype[i][j] = n;
else {
n = bondtype_findset(m,tag[i],partner_tag[i][j],0);
if (n) partner_bondtype[i][j] = n;
}
} else nbuf += nper;
}
}
memory->create(buf,nbuf,"shake:buf");
// fill buffer with info
size = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
m = atom->map(partner_tag[i][j]);
if (m < 0 || m >= nlocal) {
buf[size] = tag[i];
buf[size+1] = partner_tag[i][j];
buf[size+2] = 0;
buf[size+3] = 0;
buf[size+4] = 0;
n = bondtype_findset(i,tag[i],partner_tag[i][j],0);
if (n) buf[size+5] = n;
else buf[size+5] = 0;
size += nper;
}
}
}
// cycle buffer around ring of procs back to self
comm->ring(size,sizeof(tagint),buf,1,ring_bonds,buf,(void *)this);
// store partner info returned to me
m = 0;
while (m < size) {
i = atom->map(buf[m]);
for (j = 0; j < npartner[i]; j++)
if (buf[m+1] == partner_tag[i][j]) break;
partner_mask[i][j] = buf[m+2];
partner_type[i][j] = buf[m+3];
partner_massflag[i][j] = buf[m+4];
partner_bondtype[i][j] = buf[m+5];
m += nper;
}
memory->destroy(buf);
partner_info(npartner,partner_tag,partner_mask,partner_type,
partner_massflag,partner_bondtype);
// error check for unfilled partner info
// if partner_type not set, is an error
@ -868,12 +804,13 @@ void FixShake::find_clusters()
// else it's an error
flag = 0;
int flag2 = 0;
for (i = 0; i < nlocal; i++)
for (j = 0; j < npartner[i]; j++) {
if (partner_type[i][j] == 0) flag = 1;
if (partner_type[i][j] == 0) flag++;
if (!(mask[i] & groupbit)) continue;
if (!(partner_mask[i][j] & groupbit)) continue;
if (partner_bondtype[i][j] == 0) flag = 1;
if (partner_bondtype[i][j] == 0) flag2++;
}
MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world);
@ -931,55 +868,10 @@ void FixShake::find_clusters()
// -----------------------------------------------------
// set partner_nshake for bonded partners
// requires communication for off-proc partners
// requires rendezvous communication for off-proc partners
// -----------------------------------------------------
// fill in partner_nshake if own bond partner
// info to store in buf for each off-proc bond =
// 2 atoms IDs in bond, space for nshake value
// nbufmax = largest buffer needed to hold info from any proc
nbuf = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
m = atom->map(partner_tag[i][j]);
if (m >= 0 && m < nlocal) partner_nshake[i][j] = nshake[m];
else nbuf += 3;
}
}
memory->create(buf,nbuf,"shake:buf");
// fill buffer with info
size = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
m = atom->map(partner_tag[i][j]);
if (m < 0 || m >= nlocal) {
buf[size] = tag[i];
buf[size+1] = partner_tag[i][j];
size += 3;
}
}
}
// cycle buffer around ring of procs back to self
comm->ring(size,sizeof(tagint),buf,2,ring_nshake,buf,(void *)this);
// store partner info returned to me
m = 0;
while (m < size) {
i = atom->map(buf[m]);
for (j = 0; j < npartner[i]; j++)
if (buf[m+1] == partner_tag[i][j]) break;
partner_nshake[i][j] = buf[m+2];
m += 3;
}
memory->destroy(buf);
nshake_info(npartner,partner_tag,partner_nshake);
// -----------------------------------------------------
// error checks
@ -988,7 +880,7 @@ void FixShake::find_clusters()
// -----------------------------------------------------
flag = 0;
for (i = 0; i < nlocal; i++) if (nshake[i] > 3) flag = 1;
for (i = 0; i < nlocal; i++) if (nshake[i] > 3) flag++;
MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world);
if (flag_all) error->all(FLERR,"Shake cluster of more than 4 atoms");
@ -996,7 +888,7 @@ void FixShake::find_clusters()
for (i = 0; i < nlocal; i++) {
if (nshake[i] <= 1) continue;
for (j = 0; j < npartner[i]; j++)
if (partner_shake[i][j] && partner_nshake[i][j] > 1) flag = 1;
if (partner_shake[i][j] && partner_nshake[i][j] > 1) flag++;
}
MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world);
if (flag_all) error->all(FLERR,"Shake clusters are connected");
@ -1064,68 +956,18 @@ void FixShake::find_clusters()
// -----------------------------------------------------
// set shake_flag,shake_atom,shake_type for non-central atoms
// requires communication for off-proc atoms
// requires rendezvous communication for off-proc atoms
// -----------------------------------------------------
// fill in shake arrays for each bond partner I own
// info to store in buf for each off-proc bond =
// all values from shake_flag, shake_atom, shake_type
// nbufmax = largest buffer needed to hold info from any proc
nbuf = 0;
for (i = 0; i < nlocal; i++) {
if (shake_flag[i] == 0) continue;
for (j = 0; j < npartner[i]; j++) {
if (partner_shake[i][j] == 0) continue;
m = atom->map(partner_tag[i][j]);
if (m >= 0 && m < nlocal) {
shake_flag[m] = shake_flag[i];
shake_atom[m][0] = shake_atom[i][0];
shake_atom[m][1] = shake_atom[i][1];
shake_atom[m][2] = shake_atom[i][2];
shake_atom[m][3] = shake_atom[i][3];
shake_type[m][0] = shake_type[i][0];
shake_type[m][1] = shake_type[i][1];
shake_type[m][2] = shake_type[i][2];
} else nbuf += 9;
}
}
memory->create(buf,nbuf,"shake:buf");
// fill buffer with info
size = 0;
for (i = 0; i < nlocal; i++) {
if (shake_flag[i] == 0) continue;
for (j = 0; j < npartner[i]; j++) {
if (partner_shake[i][j] == 0) continue;
m = atom->map(partner_tag[i][j]);
if (m < 0 || m >= nlocal) {
buf[size] = partner_tag[i][j];
buf[size+1] = shake_flag[i];
buf[size+2] = shake_atom[i][0];
buf[size+3] = shake_atom[i][1];
buf[size+4] = shake_atom[i][2];
buf[size+5] = shake_atom[i][3];
buf[size+6] = shake_type[i][0];
buf[size+7] = shake_type[i][1];
buf[size+8] = shake_type[i][2];
size += 9;
}
}
}
// cycle buffer around ring of procs back to self
comm->ring(size,sizeof(tagint),buf,3,ring_shake,NULL,(void *)this);
memory->destroy(buf);
shake_info(npartner,partner_tag,partner_shake);
// -----------------------------------------------------
// free local memory
// -----------------------------------------------------
memory->destroy(atomIDs);
memory->destroy(procowner);
memory->destroy(npartner);
memory->destroy(nshake);
memory->destroy(partner_tag);
@ -1199,98 +1041,548 @@ void FixShake::find_clusters()
}
/* ----------------------------------------------------------------------
when receive buffer, scan bond partner IDs for atoms I own
if I own partner:
fill in mask and type and massflag
search for bond with 1st atom and fill in bondtype
setup atomIDs and procowner
------------------------------------------------------------------------- */
void FixShake::ring_bonds(int ndatum, char *cbuf, void *ptr)
void FixShake::atom_owners()
{
FixShake *fsptr = (FixShake *)ptr;
Atom *atom = fsptr->atom;
tagint *tag = atom->tag;
int nlocal = atom->nlocal;
int *proclist;
memory->create(proclist,nlocal,"shake:proclist");
IDRvous *idbuf = (IDRvous *)
memory->smalloc((bigint) nlocal*sizeof(IDRvous),"shake:idbuf");
// setup input buf to rendezvous comm
// input datums = pairs of bonded atoms
// owning proc for each datum = random hash of atomID
// one datum for each owned atom: datum = owning proc, atomID
for (int i = 0; i < nlocal; i++) {
proclist[i] = tag[i] % nprocs;
idbuf[i].me = me;
idbuf[i].atomID = tag[i];
}
// perform rendezvous operation
// each proc assigned every 1/Pth atom
char *buf;
comm->rendezvous(RVOUS,nlocal,(char *) idbuf,sizeof(IDRvous),
0,proclist,
rendezvous_ids,0,buf,0,(void *) this);
memory->destroy(proclist);
memory->sfree(idbuf);
}
/* ----------------------------------------------------------------------
setup partner_mask, partner_type, partner_massflag, partner_bondtype
------------------------------------------------------------------------- */
void FixShake::partner_info(int *npartner, tagint **partner_tag,
int **partner_mask, int **partner_type,
int **partner_massflag, int **partner_bondtype)
{
int i,j,m,n;
int nlocal = atom->nlocal;
// nsend = # of my datums to send
// one datum for every off-processor partner
int nsend = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
m = atom->map(partner_tag[i][j]);
if (m < 0 || m >= nlocal) nsend++;
}
}
int *proclist;
memory->create(proclist,nsend,"special:proclist");
PartnerInfo *inbuf = (PartnerInfo *)
memory->smalloc((bigint) nsend*sizeof(PartnerInfo),"special:inbuf");
// set values in 4 partner arrays for all partner atoms I own
// also setup input buf to rendezvous comm
// input datums = pair of bonded atoms where I do not own partner
// owning proc for each datum = partner_tag % nprocs
// datum: atomID = partner_tag (off-proc), partnerID = tag (on-proc)
// 4 values for my owned atom
double *rmass = atom->rmass;
double *mass = atom->mass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
int nmass = fsptr->nmass;
int *mask = atom->mask;
tagint *tag = atom->tag;
tagint *buf = (tagint *) cbuf;
int m,n;
double massone;
for (int i = 0; i < ndatum; i += 6) {
m = atom->map(buf[i+1]);
if (m >= 0 && m < nlocal) {
buf[i+2] = mask[m];
buf[i+3] = type[m];
if (nmass) {
if (rmass) massone = rmass[m];
else massone = mass[type[m]];
buf[i+4] = fsptr->masscheck(massone);
}
if (buf[i+5] == 0) {
n = fsptr->bondtype_findset(m,buf[i],buf[i+1],0);
if (n) buf[i+5] = n;
nsend = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
partner_mask[i][j] = 0;
partner_type[i][j] = 0;
partner_massflag[i][j] = 0;
partner_bondtype[i][j] = 0;
m = atom->map(partner_tag[i][j]);
if (m >= 0 && m < nlocal) {
partner_mask[i][j] = mask[m];
partner_type[i][j] = type[m];
if (nmass) {
if (rmass) massone = rmass[m];
else massone = mass[type[m]];
partner_massflag[i][j] = masscheck(massone);
}
n = bondtype_findset(i,tag[i],partner_tag[i][j],0);
if (n) partner_bondtype[i][j] = n;
else {
n = bondtype_findset(m,tag[i],partner_tag[i][j],0);
if (n) partner_bondtype[i][j] = n;
}
} else {
proclist[nsend] = partner_tag[i][j] % nprocs;
inbuf[nsend].atomID = partner_tag[i][j];
inbuf[nsend].partnerID = tag[i];
inbuf[nsend].mask = mask[i];
inbuf[nsend].type = type[i];
if (nmass) {
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
inbuf[nsend].massflag = masscheck(massone);
} else inbuf[nsend].massflag = 0;
// my atom may own bond, in which case set partner_bondtype
// else receiver of this datum will own the bond and return the value
n = bondtype_findset(i,tag[i],partner_tag[i][j],0);
if (n) {
partner_bondtype[i][j] = n;
inbuf[nsend].bondtype = n;
} else inbuf[nsend].bondtype = 0;
nsend++;
}
}
}
}
/* ----------------------------------------------------------------------
when receive buffer, scan bond partner IDs for atoms I own
if I own partner, fill in nshake value
------------------------------------------------------------------------- */
// perform rendezvous operation
// each proc owns random subset of atoms
// receives all data needed to populate un-owned partner 4 values
void FixShake::ring_nshake(int ndatum, char *cbuf, void *ptr)
{
FixShake *fsptr = (FixShake *)ptr;
Atom *atom = fsptr->atom;
int nlocal = atom->nlocal;
char *buf;
int nreturn = comm->rendezvous(RVOUS,nsend,(char *) inbuf,sizeof(PartnerInfo),
0,proclist,
rendezvous_partners_info,
0,buf,sizeof(PartnerInfo),
(void *) this);
PartnerInfo *outbuf = (PartnerInfo *) buf;
int *nshake = fsptr->nshake;
memory->destroy(proclist);
memory->sfree(inbuf);
tagint *buf = (tagint *) cbuf;
int m;
// set partner 4 values for un-onwed partners based on output info
// outbuf.atomID = my owned atom, outbuf.partnerID = partner the info is for
for (int i = 0; i < ndatum; i += 3) {
m = atom->map(buf[i+1]);
if (m >= 0 && m < nlocal) buf[i+2] = nshake[m];
for (m = 0; m < nreturn; m++) {
i = atom->map(outbuf[m].atomID);
for (j = 0; j < npartner[i]; j++)
if (partner_tag[i][j] == outbuf[m].partnerID) break;
partner_mask[i][j] = outbuf[m].mask;
partner_type[i][j] = outbuf[m].type;
partner_massflag[i][j] = outbuf[m].massflag;
// only set partner_bondtype if my atom did not set it
// when setting up rendezvous
// if this proc set it, then sender of this datum set outbuf.bondtype = 0
if (partner_bondtype[i][j] == 0)
partner_bondtype[i][j] = outbuf[m].bondtype;
}
memory->sfree(outbuf);
}
/* ----------------------------------------------------------------------
when receive buffer, scan bond partner IDs for atoms I own
if I own partner, fill in nshake value
setup partner_nshake
------------------------------------------------------------------------- */
void FixShake::ring_shake(int ndatum, char *cbuf, void *ptr)
void FixShake::nshake_info(int *npartner, tagint **partner_tag,
int **partner_nshake)
{
FixShake *fsptr = (FixShake *)ptr;
Atom *atom = fsptr->atom;
int i,j,m;
int nlocal = atom->nlocal;
int *shake_flag = fsptr->shake_flag;
tagint **shake_atom = fsptr->shake_atom;
int **shake_type = fsptr->shake_type;
// nsend = # of my datums to send
// one datum for every off-processor partner
tagint *buf = (tagint *) cbuf;
int m;
for (int i = 0; i < ndatum; i += 9) {
m = atom->map(buf[i]);
if (m >= 0 && m < nlocal) {
shake_flag[m] = buf[i+1];
shake_atom[m][0] = buf[i+2];
shake_atom[m][1] = buf[i+3];
shake_atom[m][2] = buf[i+4];
shake_atom[m][3] = buf[i+5];
shake_type[m][0] = buf[i+6];
shake_type[m][1] = buf[i+7];
shake_type[m][2] = buf[i+8];
int nsend = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
m = atom->map(partner_tag[i][j]);
if (m < 0 || m >= nlocal) nsend++;
}
}
int *proclist;
memory->create(proclist,nsend,"special:proclist");
NShakeInfo *inbuf = (NShakeInfo *)
memory->smalloc((bigint) nsend*sizeof(NShakeInfo),"special:inbuf");
// set partner_nshake for all partner atoms I own
// also setup input buf to rendezvous comm
// input datums = pair of bonded atoms where I do not own partner
// owning proc for each datum = partner_tag % nprocs
// datum: atomID = partner_tag (off-proc), partnerID = tag (on-proc)
// nshake value for my owned atom
tagint *tag = atom->tag;
nsend = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
partner_nshake[i][j] = 0;
m = atom->map(partner_tag[i][j]);
if (m >= 0 && m < nlocal) {
partner_nshake[i][j] = nshake[m];
} else {
proclist[nsend] = partner_tag[i][j] % nprocs;
inbuf[nsend].atomID = partner_tag[i][j];
inbuf[nsend].partnerID = tag[i];
inbuf[nsend].nshake = nshake[i];
nsend++;
}
}
}
// perform rendezvous operation
// each proc owns random subset of atoms
// receives all data needed to populate un-owned partner nshake
char *buf;
int nreturn = comm->rendezvous(RVOUS,nsend,(char *) inbuf,sizeof(NShakeInfo),
0,proclist,
rendezvous_nshake,0,buf,sizeof(NShakeInfo),
(void *) this);
NShakeInfo *outbuf = (NShakeInfo *) buf;
memory->destroy(proclist);
memory->sfree(inbuf);
// set partner nshake for un-onwed partners based on output info
// outbuf.atomID = my owned atom, outbuf.partnerID = partner the info is for
for (m = 0; m < nreturn; m++) {
i = atom->map(outbuf[m].atomID);
for (j = 0; j < npartner[i]; j++)
if (partner_tag[i][j] == outbuf[m].partnerID) break;
partner_nshake[i][j] = outbuf[m].nshake;
}
memory->sfree(outbuf);
}
/* ----------------------------------------------------------------------
setup shake_flag, shake_atom, shake_type
------------------------------------------------------------------------- */
void FixShake::shake_info(int *npartner, tagint **partner_tag,
int **partner_shake)
{
int i,j,m;
int nlocal = atom->nlocal;
// nsend = # of my datums to send
// one datum for every off-processor partner
int nsend = 0;
for (i = 0; i < nlocal; i++) {
for (j = 0; j < npartner[i]; j++) {
m = atom->map(partner_tag[i][j]);
if (m < 0 || m >= nlocal) nsend++;
}
}
int *proclist;
memory->create(proclist,nsend,"special:proclist");
ShakeInfo *inbuf = (ShakeInfo *)
memory->smalloc((bigint) nsend*sizeof(ShakeInfo),"special:inbuf");
// set 3 shake arrays for all partner atoms I own
// also setup input buf to rendezvous comm
// input datums = partner atom where I do not own partner
// owning proc for each datum = partner_tag % nprocs
// datum: atomID = partner_tag (off-proc)
// values in 3 shake arrays
nsend = 0;
for (i = 0; i < nlocal; i++) {
if (shake_flag[i] == 0) continue;
for (j = 0; j < npartner[i]; j++) {
if (partner_shake[i][j] == 0) continue;
m = atom->map(partner_tag[i][j]);
if (m >= 0 && m < nlocal) {
shake_flag[m] = shake_flag[i];
shake_atom[m][0] = shake_atom[i][0];
shake_atom[m][1] = shake_atom[i][1];
shake_atom[m][2] = shake_atom[i][2];
shake_atom[m][3] = shake_atom[i][3];
shake_type[m][0] = shake_type[i][0];
shake_type[m][1] = shake_type[i][1];
shake_type[m][2] = shake_type[i][2];
} else {
proclist[nsend] = partner_tag[i][j] % nprocs;
inbuf[nsend].atomID = partner_tag[i][j];
inbuf[nsend].shake_flag = shake_flag[i];
inbuf[nsend].shake_atom[0] = shake_atom[i][0];
inbuf[nsend].shake_atom[1] = shake_atom[i][1];
inbuf[nsend].shake_atom[2] = shake_atom[i][2];
inbuf[nsend].shake_atom[3] = shake_atom[i][3];
inbuf[nsend].shake_type[0] = shake_type[i][0];
inbuf[nsend].shake_type[1] = shake_type[i][1];
inbuf[nsend].shake_type[2] = shake_type[i][2];
nsend++;
}
}
}
// perform rendezvous operation
// each proc owns random subset of atoms
// receives all data needed to populate un-owned shake info
char *buf;
int nreturn = comm->rendezvous(RVOUS,nsend,(char *) inbuf,sizeof(ShakeInfo),
0,proclist,
rendezvous_shake,0,buf,sizeof(ShakeInfo),
(void *) this);
ShakeInfo *outbuf = (ShakeInfo *) buf;
memory->destroy(proclist);
memory->sfree(inbuf);
// set shake info for un-onwed partners based on output info
for (m = 0; m < nreturn; m++) {
i = atom->map(outbuf[m].atomID);
shake_flag[i] = outbuf[m].shake_flag;
shake_atom[i][0] = outbuf[m].shake_atom[0];
shake_atom[i][1] = outbuf[m].shake_atom[1];
shake_atom[i][2] = outbuf[m].shake_atom[2];
shake_atom[i][3] = outbuf[m].shake_atom[3];
shake_type[i][0] = outbuf[m].shake_type[0];
shake_type[i][1] = outbuf[m].shake_type[1];
shake_type[i][2] = outbuf[m].shake_type[2];
}
memory->sfree(outbuf);
}
/* ----------------------------------------------------------------------
process data for atoms assigned to me in rendezvous decomposition
inbuf = list of N IDRvous datums
no outbuf
------------------------------------------------------------------------- */
int FixShake::rendezvous_ids(int n, char *inbuf,
int &flag, int *&proclist, char *&outbuf,
void *ptr)
{
FixShake *fsptr = (FixShake *) ptr;
Memory *memory = fsptr->memory;
tagint *atomIDs;
int *procowner;
memory->create(atomIDs,n,"special:atomIDs");
memory->create(procowner,n,"special:procowner");
IDRvous *in = (IDRvous *) inbuf;
for (int i = 0; i < n; i++) {
atomIDs[i] = in[i].atomID;
procowner[i] = in[i].me;
}
// store rendezvous data in FixShake class
fsptr->nrvous = n;
fsptr->atomIDs = atomIDs;
fsptr->procowner = procowner;
// flag = 0: no second comm needed in rendezvous
flag = 0;
return 0;
}
/* ----------------------------------------------------------------------
process data for atoms assigned to me in rendezvous decomposition
inbuf = list of N PairRvous datums
outbuf = same list of N PairRvous datums, routed to different procs
------------------------------------------------------------------------- */
int FixShake::rendezvous_partners_info(int n, char *inbuf,
int &flag, int *&proclist, char *&outbuf,
void *ptr)
{
int i,m;
FixShake *fsptr = (FixShake *) ptr;
Atom *atom = fsptr->atom;
Memory *memory = fsptr->memory;
// clear atom map so it can be here as a hash table
// faster than an STL map for large atom counts
atom->map_clear();
// hash atom IDs stored in rendezvous decomposition
int nrvous = fsptr->nrvous;
tagint *atomIDs = fsptr->atomIDs;
for (i = 0; i < nrvous; i++)
atom->map_one(atomIDs[i],i);
// proclist = owner of atomID in caller decomposition
// outbuf = info about owned atomID = 4 values
PartnerInfo *in = (PartnerInfo *) inbuf;
int *procowner = fsptr->procowner;
memory->create(proclist,n,"shake:proclist");
for (i = 0; i < n; i++) {
m = atom->map(in[i].atomID);
proclist[i] = procowner[m];
}
outbuf = inbuf;
// re-create atom map
atom->map_init(0);
atom->nghost = 0;
atom->map_set();
// flag = 1: outbuf = inbuf
flag = 1;
return n;
}
/* ----------------------------------------------------------------------
process data for atoms assigned to me in rendezvous decomposition
inbuf = list of N NShakeInfo datums
outbuf = same list of N NShakeInfo datums, routed to different procs
------------------------------------------------------------------------- */
int FixShake::rendezvous_nshake(int n, char *inbuf,
int &flag, int *&proclist, char *&outbuf,
void *ptr)
{
int i,m;
FixShake *fsptr = (FixShake *) ptr;
Atom *atom = fsptr->atom;
Memory *memory = fsptr->memory;
// clear atom map so it can be here as a hash table
// faster than an STL map for large atom counts
atom->map_clear();
// hash atom IDs stored in rendezvous decomposition
int nrvous = fsptr->nrvous;
tagint *atomIDs = fsptr->atomIDs;
for (i = 0; i < nrvous; i++)
atom->map_one(atomIDs[i],i);
// proclist = owner of atomID in caller decomposition
// outbuf = info about owned atomID
NShakeInfo *in = (NShakeInfo *) inbuf;
int *procowner = fsptr->procowner;
memory->create(proclist,n,"shake:proclist");
for (i = 0; i < n; i++) {
m = atom->map(in[i].atomID);
proclist[i] = procowner[m];
}
outbuf = inbuf;
// re-create atom map
atom->map_init(0);
atom->nghost = 0;
atom->map_set();
// flag = 1: outbuf = inbuf
flag = 1;
return n;
}
/* ----------------------------------------------------------------------
process data for atoms assigned to me in rendezvous decomposition
inbuf = list of N PairRvous datums
outbuf = same list of N PairRvous datums, routed to different procs
------------------------------------------------------------------------- */
int FixShake::rendezvous_shake(int n, char *inbuf,
int &flag, int *&proclist, char *&outbuf,
void *ptr)
{
int i,m;
FixShake *fsptr = (FixShake *) ptr;
Atom *atom = fsptr->atom;
Memory *memory = fsptr->memory;
// clear atom map so it can be here as a hash table
// faster than an STL map for large atom counts
atom->map_clear();
// hash atom IDs stored in rendezvous decomposition
int nrvous = fsptr->nrvous;
tagint *atomIDs = fsptr->atomIDs;
for (i = 0; i < nrvous; i++)
atom->map_one(atomIDs[i],i);
// proclist = owner of atomID in caller decomposition
// outbuf = info about owned atomID
ShakeInfo *in = (ShakeInfo *) inbuf;
int *procowner = fsptr->procowner;
memory->create(proclist,n,"shake:proclist");
for (i = 0; i < n; i++) {
m = atom->map(in[i].atomID);
proclist[i] = procowner[m];
}
outbuf = inbuf;
// re-create atom map
atom->map_init(0);
atom->nghost = 0;
atom->map_set();
// flag = 1: outbuf = inbuf;
flag = 1;
return n;
}
/* ----------------------------------------------------------------------

View File

@ -120,6 +120,11 @@ class FixShake : public Fix {
int nmol;
void find_clusters();
void atom_owners();
void partner_info(int *, tagint **, int **, int **, int **, int **);
void nshake_info(int *, tagint **, int **);
void shake_info(int *, tagint **, int **);
int masscheck(double);
void unconstrained_update();
void unconstrained_update_respa(int);
@ -131,12 +136,40 @@ class FixShake : public Fix {
int bondtype_findset(int, tagint, tagint, int);
int angletype_findset(int, tagint, tagint, int);
// static variable for ring communication callback to access class data
// callback functions for ring communication
// data used by rendezvous callback methods
static void ring_bonds(int, char *, void *);
static void ring_nshake(int, char *, void *);
static void ring_shake(int, char *, void *);
int nrvous;
tagint *atomIDs;
int *procowner;
struct IDRvous {
int me;
tagint atomID;
};
struct PartnerInfo {
tagint atomID,partnerID;
int mask,type,massflag,bondtype;
};
struct NShakeInfo {
tagint atomID,partnerID;
int nshake;
};
struct ShakeInfo {
tagint atomID;
tagint shake_atom[4];
int shake_flag;
int shake_type[3];
};
// callback functions for rendezvous communication
static int rendezvous_ids(int, char *, int &, int *&, char *&, void *);
static int rendezvous_partners_info(int, char *, int &, int *&, char *&, void *);
static int rendezvous_nshake(int, char *, int &, int *&, char *&, void *);
static int rendezvous_shake(int, char *, int &, int *&, char *&, void *);
};
}

View File

@ -2,13 +2,13 @@
--------------------------------
LAMMPS Intel(R) Package
--------------------------------
W. Michael Brown (Intel) michael.w.brown at intel.com
Markus Hohnerbach (RWTH Aachen University)
William McDoniel (RWTH Aachen University)
Rodrigo Canales (RWTH Aachen University)
Stan Moore (Sandia)
Ahmed E. Ismail (RWTH Aachen University)
Ahmed E. Ismail (RWTH Aachen University)
Paolo Bientinesi (RWTH Aachen University)
Anupama Kurpad (Intel)
Biswajit Mishra (Shell)
@ -20,23 +20,29 @@ This package provides LAMMPS styles that:
1. include support for single and mixed precision in addition to double.
2. include modifications to support vectorization for key routines
3. include modifications for data layouts to improve cache efficiency
3. include modifications to support offload to Intel(R) Xeon Phi(TM)
3. include modifications to support offload to Intel(R) Xeon Phi(TM)
coprocessors
-----------------------------------------------------------------------------
As of 2019/03/28 none of the styles provided in this package support
tallying per-atom stresses. Any attempt to compute/access it will
cause an error termination.
-----------------------------------------------------------------------------
For Intel server processors codenamed "Skylake", the following flags should
be added or changed in the Makefile depending on the version:
2017 update 2 - No changes needed
2017 updates 3 or 4 - Use -xCOMMON-AVX512 and not -xHost or -xCORE-AVX512
2018 inital release - Use -xCOMMON-AVX512 and not -xHost or -xCORE-AVX512
2018u1 or newer - Use -xHost or -xCORE-AVX512 and -qopt-zmm-usage=high
2018u1 or newer - Use -xHost or -xCORE-AVX512 and -qopt-zmm-usage=high
-----------------------------------------------------------------------------
When using the suffix command with "intel", intel styles will be used if they
exist. If the suffix command is used with "hybrid intel omp" and the USER-OMP
exist. If the suffix command is used with "hybrid intel omp" and the USER-OMP
is installed, USER-OMP styles will be used whenever USER-INTEL styles are not
available. This allow for running most styles in LAMMPS with threading.
@ -55,21 +61,21 @@ need to be changed.
Unless Intel Math Kernel Library (MKL) is unavailable, -DLMP_USE_MKL_RNG
should be added to the compile flags. This will enable using the MKL Mersenne
Twister random number generator (RNG) for Dissipative Particle Dynamics
(DPD). This RNG can allow significantly faster performance and it also has a
Twister random number generator (RNG) for Dissipative Particle Dynamics
(DPD). This RNG can allow significantly faster performance and it also has a
significantly longer period than the standard RNG for DPD.
-----------------------------------------------------------------------------
In order to use offload to Intel(R) Xeon Phi(TM) coprocessors, the flag
-DLMP_INTEL_OFFLOAD should be set in the Makefile. Offload requires the use of
In order to use offload to Intel(R) Xeon Phi(TM) coprocessors, the flag
-DLMP_INTEL_OFFLOAD should be set in the Makefile. Offload requires the use of
Intel compilers.
-----------------------------------------------------------------------------
For portability reasons, vectorization directives are currently only enabled
For portability reasons, vectorization directives are currently only enabled
for Intel compilers. Using other compilers may result in significantly
lower performance. This behavior can be changed by defining
lower performance. This behavior can be changed by defining
LMP_SIMD_COMPILER for the preprocessor (see intel_preprocess.h).
-----------------------------------------------------------------------------
@ -81,9 +87,9 @@ compile with -DINTEL_OFFLOAD_NOAFFINITY.
-----------------------------------------------------------------------------
Vector intrinsics are temporarily being used for the Stillinger-Weber
Vector intrinsics are temporarily being used for the Stillinger-Weber
potential to allow for advanced features in the AVX512 instruction set to
be exploited on early hardware. We hope to see compiler improvements for
AVX512 that will eliminate this requirement, so it is not recommended to
develop code based on the intrinsics implementation. Please e-mail the
develop code based on the intrinsics implementation. Please e-mail the
authors for more details.

View File

@ -79,6 +79,8 @@ void AngleCharmmIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -79,6 +79,8 @@ void AngleHarmonicIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -75,6 +75,8 @@ void BondFENEIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -75,6 +75,8 @@ void BondHarmonicIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -85,6 +85,8 @@ void DihedralCharmmIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
// insure pair->ev_tally() will use 1-4 virial contribution

View File

@ -74,6 +74,8 @@ void DihedralFourierIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -74,6 +74,8 @@ void DihedralHarmonicIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -78,6 +78,8 @@ void DihedralOPLSIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -84,6 +84,8 @@ void ImproperCvffIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -85,6 +85,8 @@ void ImproperHarmonicIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
if (evflag) {
if (vflag && !eflag) {

View File

@ -293,6 +293,9 @@ void PairAIREBOIntel::compute(
int eflag, int vflag, IntelBuffers<flt_t,acc_t> * buffers
) {
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
pvector[0] = pvector[1] = pvector[2] = 0.0;
const int inum = list->inum;

View File

@ -74,6 +74,8 @@ void PairBuckCoulCutIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -74,6 +74,8 @@ void PairBuckCoulLongIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -67,6 +67,8 @@ void PairBuckIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -83,6 +83,8 @@ void PairDPDIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag, vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -79,6 +79,8 @@ void PairEAMIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag, vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -73,6 +73,8 @@ void PairGayBerneIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag, vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nall = atom->nlocal + atom->nghost;

View File

@ -67,6 +67,8 @@ void PairLJCharmmCoulCharmmIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -71,6 +71,8 @@ void PairLJCharmmCoulLongIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -72,6 +72,8 @@ void PairLJCutCoulLongIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag,vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -63,6 +63,8 @@ void PairLJCutIntel::compute(int eflag, int vflag,
const ForceConst<flt_t> &fc)
{
ev_init(eflag, vflag);
if (vflag_atom)
error->all(FLERR,"USER-INTEL package does not support per-atom stress");
const int inum = list->inum;
const int nthreads = comm->nthreads;

View File

@ -28,7 +28,7 @@ PairREBOIntel::PairREBOIntel(LAMMPS *lmp) : PairAIREBOIntel(lmp) {}
global settings
------------------------------------------------------------------------- */
void PairREBOIntel::settings(int narg, char **/*arg*/)
void PairREBOIntel::settings(int narg, char ** /* arg */)
{
if (narg != 0) error->all(FLERR,"Illegal pair_style command");

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