Merge branch 'clean-master2' of github.com:julient31/lammps into gneb_spin
|
@ -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
|
||||
#
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
18
doc/Makefile
|
@ -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;\
|
||||
)
|
||||
|
||||
|
|
|
@ -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]:
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -42,6 +42,7 @@ Pair Styles :h1
|
|||
pair_gauss
|
||||
pair_gayberne
|
||||
pair_gran
|
||||
pair_granular
|
||||
pair_gromacs
|
||||
pair_gw
|
||||
pair_hbond_dreiding
|
||||
|
|
|
@ -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
|
||||
|
|
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 70 KiB |
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Before Width: | Height: | Size: 482 KiB After Width: | Height: | Size: 482 KiB |
After Width: | Height: | Size: 479 KiB |
Before Width: | Height: | Size: 479 KiB |
Before Width: | Height: | Size: 477 KiB |
Before Width: | Height: | Size: 479 KiB |
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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"))
|
||||
|
|
|
@ -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)),)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
-----------------
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.")
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
*/
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ SHFLAGS = -fPIC
|
|||
DEPFLAGS = -M
|
||||
|
||||
LINK = mpicxx
|
||||
LINKFLAGS = -g -O
|
||||
LINKFLAGS = -g -O3
|
||||
LIB =
|
||||
SIZE = size
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
|
|
@ -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 *);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|