Merge branch 'develop' into pace-mliap

# Conflicts:
#	src/ML-IAP/compute_mliap.cpp
This commit is contained in:
Axel Kohlmeyer
2024-03-12 09:05:46 -04:00
1220 changed files with 27042 additions and 13666 deletions

5
.github/CODEOWNERS vendored
View File

@ -37,7 +37,7 @@ src/MESONT/* @iafoss
src/ML-HDNNP/* @singraber src/ML-HDNNP/* @singraber
src/ML-IAP/* @athomps src/ML-IAP/* @athomps
src/ML-PACE/* @yury-lysogorskiy src/ML-PACE/* @yury-lysogorskiy
src/ML-POD/* @exapde @rohskopf src/ML-POD/* @exapde
src/MOFFF/* @hheenen src/MOFFF/* @hheenen
src/MOLFILE/* @akohlmey src/MOLFILE/* @akohlmey
src/NETCDF/* @pastewka src/NETCDF/* @pastewka
@ -65,9 +65,12 @@ src/MANYBODY/pair_nb3b_screened.* @flodesani
src/REPLICA/*_grem.* @dstelter92 src/REPLICA/*_grem.* @dstelter92
src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel
src/EXTRA-COMPUTE/compute_born_matrix.* @Bibobu @athomps src/EXTRA-COMPUTE/compute_born_matrix.* @Bibobu @athomps
src/EXTRA-FIX/fix_deform_pressure.* @jtclemm
src/MISC/*_tracker.* @jtclemm src/MISC/*_tracker.* @jtclemm
src/MC/fix_gcmc.* @athomps src/MC/fix_gcmc.* @athomps
src/MC/fix_sgcmc.* @athomps src/MC/fix_sgcmc.* @athomps
src/REAXFF/compute_reaxff_atom.* @rbberger
src/KOKKOS/compute_reaxff_atom_kokkos.* @rbberger
src/REPLICA/fix_pimd_langevin.* @Yi-FanLi src/REPLICA/fix_pimd_langevin.* @Yi-FanLi
# core LAMMPS classes # core LAMMPS classes

View File

@ -25,7 +25,7 @@ jobs:
- name: Cache Coverity - name: Cache Coverity
id: cache-coverity id: cache-coverity
uses: actions/cache@v3 uses: actions/cache@v4
with: with:
path: ./download/ path: ./download/
key: ${{ runner.os }}-download-${{ hashFiles('**/coverity_tool.*') }} key: ${{ runner.os }}-download-${{ hashFiles('**/coverity_tool.*') }}

View File

@ -32,7 +32,7 @@ jobs:
run: mkdir build run: mkdir build
- name: Set up ccache - name: Set up ccache
uses: actions/cache@v3 uses: actions/cache@v4
with: with:
path: ${{ env.CCACHE_DIR }} path: ${{ env.CCACHE_DIR }}
key: macos-ccache-${{ github.sha }} key: macos-ccache-${{ github.sha }}

View File

@ -120,6 +120,19 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "
set(CMAKE_TUNE_DEFAULT "-Minform=severe") set(CMAKE_TUNE_DEFAULT "-Minform=severe")
endif() endif()
# this hack is required to compile fmt lib with CrayClang version 15.0.2
# CrayClang is only directly recognized by version 3.28 and later
if(CMAKE_VERSION VERSION_LESS 3.28)
get_filename_component(_exe "${CMAKE_CXX_COMPILER}" NAME)
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (_exe STREQUAL "crayCC"))
set(CMAKE_TUNE_DEFAULT "-DFMT_STATIC_THOUSANDS_SEPARATOR")
endif()
else()
if(CMAKE_CXX_COMPILER_ID STREQUAL "CrayClang")
set(CMAKE_TUNE_DEFAULT "-DFMT_STATIC_THOUSANDS_SEPARATOR")
endif()
endif()
# silence nvcc warnings # silence nvcc warnings
if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma") set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma")
@ -209,6 +222,10 @@ endif()
add_executable(lmp ${MAIN_SOURCES}) add_executable(lmp ${MAIN_SOURCES})
target_link_libraries(lmp PRIVATE lammps) target_link_libraries(lmp PRIVATE lammps)
set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY})
# re-export all symbols for plugins
if(PKG_PLUGIN AND (NOT ((CMAKE_SYSTEM_NAME STREQUAL "Windows"))))
set_target_properties(lmp PROPERTIES ENABLE_EXPORTS TRUE)
endif()
install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF) option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
@ -415,6 +432,7 @@ if(BUILD_OMP)
(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") OR (CMAKE_CXX_COMPILER_ID STREQUAL "XLClang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") OR (CMAKE_CXX_COMPILER_ID STREQUAL "XLClang") OR
((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "CrayClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0))) ((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)))
# GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts. # GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts.
# Intel 18.0 was tested to support both, so we switch to OpenMP 4+ from 19.x onward to be safe. # Intel 18.0 was tested to support both, so we switch to OpenMP 4+ from 19.x onward to be safe.
@ -425,6 +443,21 @@ if(BUILD_OMP)
target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=${LAMMPS_OMP_COMPAT_LEVEL}) target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=${LAMMPS_OMP_COMPAT_LEVEL})
target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX) target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX)
target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX) target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX)
# this hack is required to correctly link with OpenMP support when using CrayClang version 15.0.2
# CrayClang is only directly recognized by version 3.28 and later
if(CMAKE_VERSION VERSION_LESS 3.28)
get_filename_component(_exe "${CMAKE_CXX_COMPILER}" NAME)
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (_exe STREQUAL "crayCC"))
set(CMAKE_SHARED_LINKER_FLAGS_${BTYPE} "${CMAKE_SHARED_LINKER_FLAGS_${BTYPE} -fopenmp")
set(CMAKE_STATIC_LINKER_FLAGS_${BTYPE} "${CMAKE_STATIC_LINKER_FLAGS_${BTYPE} -fopenmp")
endif()
else()
if(CMAKE_CXX_COMPILER_ID STREQUAL "CrayClang")
set(CMAKE_SHARED_LINKER_FLAGS_${BTYPE} "${CMAKE_SHARED_LINKER_FLAGS_${BTYPE} -fopenmp")
set(CMAKE_STATIC_LINKER_FLAGS_${BTYPE} "${CMAKE_STATIC_LINKER_FLAGS_${BTYPE} -fopenmp")
endif()
endif()
endif() endif()
# lower C++ standard for fmtlib sources when using Intel classic compiler # lower C++ standard for fmtlib sources when using Intel classic compiler
@ -539,12 +572,12 @@ endforeach()
######################################################################## ########################################################################
# Basic system tests (standard libraries, headers, functions, types) # # Basic system tests (standard libraries, headers, functions, types) #
######################################################################## ########################################################################
foreach(HEADER cmath) if (NOT ((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")))
check_include_file_cxx(${HEADER} FOUND_${HEADER}) check_include_file_cxx(cmath FOUND_CMATH)
if(NOT FOUND_${HEADER}) if(NOT FOUND_CMATH)
message(FATAL_ERROR "Could not find needed header - ${HEADER}") message(FATAL_ERROR "Could not find the required 'cmath' header")
endif(NOT FOUND_${HEADER}) endif(NOT FOUND_CMATH)
endforeach(HEADER) endif()
# make the standard math library overrideable and autodetected (for systems that don't have it) # make the standard math library overrideable and autodetected (for systems that don't have it)
find_library(STANDARD_MATH_LIB m DOC "Standard Math library") find_library(STANDARD_MATH_LIB m DOC "Standard Math library")
@ -971,14 +1004,15 @@ if(PKG_KOKKOS)
endif() endif()
endif() endif()
if(PKG_KSPACE) if(PKG_KSPACE)
if (LMP_HEFFTE) if (FFT_USE_HEFFTE)
message(STATUS "<<< FFT settings >>> message(STATUS "<<< FFT settings >>>
-- Primary FFT lib: heFFTe") -- Primary FFT lib: heFFTe")
if (HEFFTE_BACKEND) if (FFT_HEFFTE_BACKEND)
message(STATUS "heFFTe backend: ${HEFFTE_BACKEND}") message(STATUS "heFFTe backend: ${FFT_HEFFTE_BACKEND}")
else() else()
message(STATUS "heFFTe backend: stock (builtin FFT implementation, tested for corrected but not optimized for production)") message(STATUS "heFFTe backend: stock (builtin FFT implementation, tested for corrected but not optimized for production)")
endif() endif()
message(STATUS "Using distributed FFT algorithms from heFTTe")
if(FFT_SINGLE) if(FFT_SINGLE)
message(STATUS "Using single precision FFTs") message(STATUS "Using single precision FFTs")
else() else()
@ -997,28 +1031,10 @@ if(PKG_KSPACE)
else() else()
message(STATUS "Using non-threaded FFTs") message(STATUS "Using non-threaded FFTs")
endif() endif()
if (FFT_HEFFTE) message(STATUS "Using builtin distributed FFT algorithms")
message(STATUS "Using distributed algorithms from heFTTe")
else()
message(STATUS "Using builtin distributed algorithms")
endif() endif()
if(PKG_KOKKOS) if(PKG_KOKKOS)
if(Kokkos_ENABLE_CUDA) message(STATUS "Kokkos FFT: ${FFT_KOKKOS}")
if(FFT STREQUAL "KISS")
message(STATUS "Kokkos FFT: KISS")
else()
message(STATUS "Kokkos FFT: cuFFT")
endif()
elseif(Kokkos_ENABLE_HIP)
if(FFT STREQUAL "KISS")
message(STATUS "Kokkos FFT: KISS")
else()
message(STATUS "Kokkos FFT: hipFFT")
endif()
else()
message(STATUS "Kokkos FFT: ${FFT}")
endif()
endif()
endif() endif()
endif() endif()
if(BUILD_DOC) if(BUILD_DOC)

View File

@ -1,11 +1,3 @@
if(NOT DEFINED HIP_PATH)
if(NOT DEFINED ENV{HIP_PATH})
message(FATAL_ERROR "HIP support requires HIP_PATH to be defined.\n"
"Either pass the HIP_PATH as a CMake option via -DHIP_PATH=... or set the HIP_PATH environment variable.")
else()
set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to HIP installation")
endif()
endif()
if(NOT DEFINED ROCM_PATH) if(NOT DEFINED ROCM_PATH)
if(NOT DEFINED ENV{ROCM_PATH}) if(NOT DEFINED ENV{ROCM_PATH})
set(ROCM_PATH "/opt/rocm" CACHE PATH "Path to ROCm installation") set(ROCM_PATH "/opt/rocm" CACHE PATH "Path to ROCm installation")
@ -13,4 +5,4 @@ if(NOT DEFINED ROCM_PATH)
set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to ROCm installation") set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to ROCm installation")
endif() endif()
endif() endif()
list(APPEND CMAKE_PREFIX_PATH ${HIP_PATH} ${ROCM_PATH}) list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH})

View File

@ -43,5 +43,5 @@ function(ExternalCMakeProject target url hash basedir cmakedir cmakefile)
"${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt") "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt")
endif() endif()
add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}" add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}"
"${CMAKE_BINARY_DIR}/_deps/${target}-build") "${CMAKE_BINARY_DIR}/_deps/${target}-build" EXCLUDE_FROM_ALL)
endfunction(ExternalCMakeProject) endfunction(ExternalCMakeProject)

View File

@ -1,6 +1,6 @@
message(STATUS "Downloading and building OpenCL loader library") message(STATUS "Downloading and building OpenCL loader library")
set(OPENCL_LOADER_URL "${LAMMPS_THIRDPARTY_URL}/opencl-loader-2022.01.04.tar.gz" CACHE STRING "URL for OpenCL loader tarball") set(OPENCL_LOADER_URL "${LAMMPS_THIRDPARTY_URL}/opencl-loader-2024.02.09.tar.gz" CACHE STRING "URL for OpenCL loader tarball")
set(OPENCL_LOADER_MD5 "8d3a801e87a2c6653bf0e27707063914" CACHE STRING "MD5 checksum of OpenCL loader tarball") set(OPENCL_LOADER_MD5 "f3573cf9daa3558ba46fd5866517f38f" CACHE STRING "MD5 checksum of OpenCL loader tarball")
mark_as_advanced(OPENCL_LOADER_URL) mark_as_advanced(OPENCL_LOADER_URL)
mark_as_advanced(OPENCL_LOADER_MD5) mark_as_advanced(OPENCL_LOADER_MD5)
@ -8,4 +8,3 @@ set(INSTALL_LIBOPENCL OFF CACHE BOOL "" FORCE)
include(ExternalCMakeProject) include(ExternalCMakeProject)
ExternalCMakeProject(opencl_loader ${OPENCL_LOADER_URL} ${OPENCL_LOADER_MD5} opencl-loader . "") ExternalCMakeProject(opencl_loader ${OPENCL_LOADER_URL} ${OPENCL_LOADER_MD5} opencl-loader . "")
add_library(OpenCL::OpenCL ALIAS OpenCL)

View File

@ -1,3 +1,10 @@
# Silence CMake warnings about FindCUDA being obsolete.
# We may need to eventually rewrite this section to use enable_language(CUDA)
if(POLICY CMP0146)
cmake_policy(SET CMP0146 OLD)
endif()
set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU)
set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h
${GPU_SOURCES_DIR}/fix_gpu.h ${GPU_SOURCES_DIR}/fix_gpu.h

View File

@ -111,6 +111,9 @@ if(PKG_KSPACE)
list(APPEND INTEL_SOURCES ${INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) list(APPEND INTEL_SOURCES ${INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp)
RegisterIntegrateStyle(${INTEL_SOURCES_DIR}/verlet_lrt_intel.h) RegisterIntegrateStyle(${INTEL_SOURCES_DIR}/verlet_lrt_intel.h)
endif() endif()
if(PKG_ML-SNAP)
list(APPEND INTEL_SOURCES ${INTEL_SOURCES_DIR}/sna_intel.cpp)
endif()
target_sources(lammps PRIVATE ${INTEL_SOURCES}) target_sources(lammps PRIVATE ${INTEL_SOURCES})
target_include_directories(lammps PRIVATE ${INTEL_SOURCES_DIR}) target_include_directories(lammps PRIVATE ${INTEL_SOURCES_DIR})

View File

@ -45,8 +45,8 @@ if(DOWNLOAD_KOKKOS)
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}") list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}")
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
include(ExternalProject) include(ExternalProject)
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/4.2.00.tar.gz" CACHE STRING "URL for KOKKOS tarball") set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/4.2.01.tar.gz" CACHE STRING "URL for KOKKOS tarball")
set(KOKKOS_MD5 "731647b61a4233f568d583702e9cd6d1" CACHE STRING "MD5 checksum of KOKKOS tarball") set(KOKKOS_MD5 "16b9b09ae947d434dfb58fc5c87c2b76" CACHE STRING "MD5 checksum of KOKKOS tarball")
mark_as_advanced(KOKKOS_URL) mark_as_advanced(KOKKOS_URL)
mark_as_advanced(KOKKOS_MD5) mark_as_advanced(KOKKOS_MD5)
GetFallbackURL(KOKKOS_URL KOKKOS_FALLBACK) GetFallbackURL(KOKKOS_URL KOKKOS_FALLBACK)
@ -71,7 +71,7 @@ if(DOWNLOAD_KOKKOS)
add_dependencies(LAMMPS::KOKKOSCORE kokkos_build) add_dependencies(LAMMPS::KOKKOSCORE kokkos_build)
add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build) add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build)
elseif(EXTERNAL_KOKKOS) elseif(EXTERNAL_KOKKOS)
find_package(Kokkos 4.2.00 REQUIRED CONFIG) find_package(Kokkos 4.2.01 REQUIRED CONFIG)
target_link_libraries(lammps PRIVATE Kokkos::kokkos) target_link_libraries(lammps PRIVATE Kokkos::kokkos)
else() else()
set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)
@ -126,16 +126,36 @@ if(PKG_KSPACE)
list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp
${KOKKOS_PKG_SOURCES_DIR}/grid3d_kokkos.cpp ${KOKKOS_PKG_SOURCES_DIR}/grid3d_kokkos.cpp
${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp) ${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp)
set(FFT_KOKKOS "KISS" CACHE STRING "FFT library for Kokkos-enabled KSPACE package")
set(FFT_KOKKOS_VALUES KISS FFTW3 MKL HIPFFT CUFFT)
set_property(CACHE FFT_KOKKOS PROPERTY STRINGS ${FFT_KOKKOS_VALUES})
validate_option(FFT_KOKKOS FFT_KOKKOS_VALUES)
string(TOUPPER ${FFT_KOKKOS} FFT_KOKKOS)
if(Kokkos_ENABLE_CUDA) if(Kokkos_ENABLE_CUDA)
if(NOT (FFT STREQUAL "KISS")) if(NOT ((FFT_KOKKOS STREQUAL "KISS") OR (FFT_KOKKOS STREQUAL "CUFFT")))
target_compile_definitions(lammps PRIVATE -DFFT_CUFFT) message(FATAL_ERROR "The CUDA backend of Kokkos requires either KISS FFT or CUFFT.")
target_link_libraries(lammps PRIVATE cufft) elseif(FFT_KOKKOS STREQUAL "KISS")
message(WARNING "Using KISS FFT with the CUDA backend of Kokkos may be sub-optimal.")
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_KISS)
elseif(FFT_KOKKOS STREQUAL "CUFFT")
find_library(CUFFT_LIBRARY cufft)
if (CUFFT_LIBRARY STREQUAL "CUFFT_LIBRARY-NOTFOUND")
message(FATAL_ERROR "Required cuFFT library not found. Check your environment or set CUFFT_LIBRARY to its location")
endif()
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_CUFFT)
target_link_libraries(lammps PRIVATE ${CUFFT_LIBRARY})
endif() endif()
elseif(Kokkos_ENABLE_HIP) elseif(Kokkos_ENABLE_HIP)
if(NOT (FFT STREQUAL "KISS")) if(NOT ((FFT_KOKKOS STREQUAL "KISS") OR (FFT_KOKKOS STREQUAL "HIPFFT")))
message(FATAL_ERROR "The HIP backend of Kokkos requires either KISS FFT or HIPFFT.")
elseif(FFT_KOKKOS STREQUAL "KISS")
message(WARNING "Using KISS FFT with the HIP backend of Kokkos may be sub-optimal.")
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_KISS)
elseif(FFT_KOKKOS STREQUAL "HIPFFT")
include(DetectHIPInstallation) include(DetectHIPInstallation)
find_package(hipfft REQUIRED) find_package(hipfft REQUIRED)
target_compile_definitions(lammps PRIVATE -DFFT_HIPFFT) target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_HIPFFT)
target_link_libraries(lammps PRIVATE hip::hipfft) target_link_libraries(lammps PRIVATE hip::hipfft)
endif() endif()
endif() endif()

View File

@ -48,10 +48,15 @@ endif()
option(FFT_USE_HEFFTE "Use heFFTe as the distributed FFT engine, overrides the FFT option." OFF) option(FFT_USE_HEFFTE "Use heFFTe as the distributed FFT engine, overrides the FFT option." OFF)
if(FFT_USE_HEFFTE) if(FFT_USE_HEFFTE)
# if FFT_HEFFTE is enabled, switch the builtin FFT engine with Heffte # if FFT_HEFFTE is enabled, use the heFFTe parallel engine instead of the builtin fftMPI engine
set(FFT_HEFFTE_BACKEND_VALUES FFTW MKL)
set(FFT_HEFFTE_BACKEND "" CACHE STRING "Select heFFTe backend, e.g., FFTW or MKL") # map standard FFT choices to available heFFTe backends: FFTW3 -> FFTW, KISS -> BUILTIN
set(FFT_HEFFTE_BACKEND_VALUES FFTW MKL BUILTIN)
string(REPLACE FFTW3 FFTW FFT_HEFFTE_BACKEND_DEFAULT ${FFT})
string(REPLACE KISS BUILTIN FFT_HEFFTE_BACKEND_DEFAULT ${FFT_HEFFTE_BACKEND_DEFAULT})
set(FFT_HEFFTE_BACKEND "${FFT_HEFFTE_BACKEND_DEFAULT}" CACHE STRING "Select heFFTe backend, e.g., FFTW or MKL")
set_property(CACHE FFT_HEFFTE_BACKEND PROPERTY STRINGS ${FFT_HEFFTE_BACKEND_VALUES}) set_property(CACHE FFT_HEFFTE_BACKEND PROPERTY STRINGS ${FFT_HEFFTE_BACKEND_VALUES})
validate_option(FFT_HEFFTE_BACKEND FFT_HEFFTE_BACKEND_VALUES)
if(FFT_HEFFTE_BACKEND STREQUAL "FFTW") # respect the backend choice, FFTW or MKL if(FFT_HEFFTE_BACKEND STREQUAL "FFTW") # respect the backend choice, FFTW or MKL
set(HEFFTE_COMPONENTS "FFTW") set(HEFFTE_COMPONENTS "FFTW")
@ -60,24 +65,38 @@ if(FFT_USE_HEFFTE)
set(HEFFTE_COMPONENTS "MKL") set(HEFFTE_COMPONENTS "MKL")
set(Heffte_ENABLE_MKL "ON" CACHE BOOL "Enables MKL backend for heFFTe") set(Heffte_ENABLE_MKL "ON" CACHE BOOL "Enables MKL backend for heFFTe")
else() else()
set(HEFFTE_COMPONENTS "BUILTIN")
message(WARNING "FFT_HEFFTE_BACKEND not selected, defaulting to the builtin 'stock' backend, which is intended for testing and is not optimized for production runs") message(WARNING "FFT_HEFFTE_BACKEND not selected, defaulting to the builtin 'stock' backend, which is intended for testing and is not optimized for production runs")
endif() endif()
find_package(Heffte 2.4.0 QUIET COMPONENTS ${HEFFTE_COMPONENTS}) find_package(Heffte 2.4.0 QUIET COMPONENTS ${HEFFTE_COMPONENTS})
if (NOT Heffte_FOUND) # download and build if (NOT Heffte_FOUND) # download and build
if(BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS_WAS_ON YES)
set(BUILD_SHARED_LIBS OFF)
endif()
if(CMAKE_REQUEST_PIC)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
set(Heffte_ENABLE_${FFT_HEFFTE_BACKEND} ON)
include(FetchContent) include(FetchContent)
FetchContent_Declare(HEFFTE_PROJECT # using v2.4.0 FetchContent_Declare(HEFFTE_PROJECT # using v2.4.0
URL "https://github.com/icl-utk-edu/heffte/archive/refs/tags/v2.4.0.tar.gz" URL "https://github.com/icl-utk-edu/heffte/archive/refs/tags/v2.4.0.tar.gz"
URL_HASH SHA256=02310fb4f9688df02f7181667e61c3adb7e38baf79611d80919d47452ff7881d URL_HASH SHA256=02310fb4f9688df02f7181667e61c3adb7e38baf79611d80919d47452ff7881d
) )
FetchContent_Populate(HEFFTE_PROJECT) FetchContent_Populate(HEFFTE_PROJECT)
add_subdirectory(${heffte_project_SOURCE_DIR} ${heffte_project_BINARY_DIR})
set_target_properties(lmp PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set_target_properties(lammps PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
add_library(Heffte::Heffte INTERFACE IMPORTED GLOBAL)
target_link_libraries(Heffte::Heffte INTERFACE Heffte)
endif()
# fixup git hash to show "(unknown)" to avoid compilation failures.
file(READ ${heffte_project_SOURCE_DIR}/include/heffte_config.cmake.h HEFFTE_CFG_FILE_TEXT)
string(REPLACE "@Heffte_GIT_HASH@" "(unknown)" HEFFTE_CFG_FILE_TEXT "${HEFFTE_CFG_FILE_TEXT}")
file(WRITE ${heffte_project_SOURCE_DIR}/include/heffte_config.cmake.h "${HEFFTE_CFG_FILE_TEXT}")
add_subdirectory(${heffte_project_SOURCE_DIR} ${heffte_project_BINARY_DIR} EXCLUDE_FROM_ALL)
add_library(Heffte::Heffte ALIAS Heffte)
if(BUILD_SHARED_LIBS_WAS_ON)
set(BUILD_SHARED_LIBS ON)
endif()
endif()
target_compile_definitions(lammps PRIVATE -DFFT_HEFFTE "-DFFT_HEFFTE_${FFT_HEFFTE_BACKEND}") target_compile_definitions(lammps PRIVATE -DFFT_HEFFTE "-DFFT_HEFFTE_${FFT_HEFFTE_BACKEND}")
target_link_libraries(lammps PRIVATE Heffte::Heffte) target_link_libraries(lammps PRIVATE Heffte::Heffte)
endif() endif()

View File

@ -8,8 +8,8 @@ option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an al
if(DOWNLOAD_MDI) if(DOWNLOAD_MDI)
message(STATUS "MDI download requested - we will build our own") message(STATUS "MDI download requested - we will build our own")
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.16.tar.gz" CACHE STRING "URL for MDI tarball") set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.26.tar.gz" CACHE STRING "URL for MDI tarball")
set(MDI_MD5 "407db44e2d79447ab5c1233af1965f65" CACHE STRING "MD5 checksum for MDI tarball") set(MDI_MD5 "3124bb85259471e2a53a891f04bf697a" CACHE STRING "MD5 checksum for MDI tarball")
mark_as_advanced(MDI_URL) mark_as_advanced(MDI_URL)
mark_as_advanced(MDI_MD5) mark_as_advanced(MDI_MD5)
GetFallbackURL(MDI_URL MDI_FALLBACK) GetFallbackURL(MDI_URL MDI_FALLBACK)

View File

@ -18,7 +18,9 @@ if(DOWNLOAD_QUIP)
set(temp "${temp}F77FLAGS += -fpp -fixed -fPIC\n") set(temp "${temp}F77FLAGS += -fpp -fixed -fPIC\n")
set(temp "${temp}F95_PRE_FILENAME_FLAG = -Tf\n") set(temp "${temp}F95_PRE_FILENAME_FLAG = -Tf\n")
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) elseif(CMAKE_Fortran_COMPILER_ID STREQUAL GNU)
set(temp "${temp}FPP=${CMAKE_Fortran_COMPILER} -E -x f95-cpp-input\nOPTIM=${CMAKE_Fortran_FLAGS_${BTYPE}}\n") # quip library uses GNU fortran extensions. If any more restrictive standards are set, reset them
string(REGEX REPLACE -std=f[0-9]+ -std=gnu _fopt "${CMAKE_Fortran_FLAGS_${BTYPE}}")
set(temp "${temp}FPP=${CMAKE_Fortran_COMPILER} -E -x f95-cpp-input\nOPTIM=${_fopt} -fmax-stack-var-size=6553600\n")
set(temp "${temp}DEFINES += -DGETARG_F2003 -DGETENV_F2003 -DGFORTRAN -DFORTRAN_UNDERSCORE\n") set(temp "${temp}DEFINES += -DGETARG_F2003 -DGETENV_F2003 -DGFORTRAN -DFORTRAN_UNDERSCORE\n")
set(temp "${temp}F95FLAGS += -x f95-cpp-input -ffree-line-length-none -ffree-form -fno-second-underscore -fPIC\n") set(temp "${temp}F95FLAGS += -x f95-cpp-input -ffree-line-length-none -ffree-form -fno-second-underscore -fPIC\n")
set(temp "${temp}F77FLAGS += -x f77-cpp-input -fno-second-underscore -fPIC\n") set(temp "${temp}F77FLAGS += -x f77-cpp-input -fno-second-underscore -fPIC\n")
@ -56,7 +58,7 @@ if(DOWNLOAD_QUIP)
GIT_SUBMODULES "src/fox;src/GAP" GIT_SUBMODULES "src/fox;src/GAP"
PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/quip.config <SOURCE_DIR>/arch/Makefile.lammps PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/quip.config <SOURCE_DIR>/arch/Makefile.lammps
CONFIGURE_COMMAND env QUIP_ARCH=lammps make config CONFIGURE_COMMAND env QUIP_ARCH=lammps make config
BUILD_COMMAND env QUIP_ARCH=lammps make libquip BUILD_COMMAND env QUIP_ARCH=lammps make -j1 libquip
INSTALL_COMMAND "" INSTALL_COMMAND ""
BUILD_IN_SOURCE YES BUILD_IN_SOURCE YES
BUILD_BYPRODUCTS <SOURCE_DIR>/build/lammps/${CMAKE_STATIC_LIBRARY_PREFIX}quip${CMAKE_STATIC_LIBRARY_SUFFIX} BUILD_BYPRODUCTS <SOURCE_DIR>/build/lammps/${CMAKE_STATIC_LIBRARY_PREFIX}quip${CMAKE_STATIC_LIBRARY_SUFFIX}

View File

@ -21,9 +21,9 @@ else()
set(PLUMED_CONFIG_OMP "--disable-openmp") set(PLUMED_CONFIG_OMP "--disable-openmp")
endif() endif()
set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.8.2/plumed-src-2.8.2.tgz" set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.8.3/plumed-src-2.8.3.tgz"
CACHE STRING "URL for PLUMED tarball") CACHE STRING "URL for PLUMED tarball")
set(PLUMED_MD5 "599092b6a0aa6fff992612537ad98994" CACHE STRING "MD5 checksum of PLUMED tarball") set(PLUMED_MD5 "76d23cd394eba9e6530316ed1184e219" CACHE STRING "MD5 checksum of PLUMED tarball")
mark_as_advanced(PLUMED_URL) mark_as_advanced(PLUMED_URL)
mark_as_advanced(PLUMED_MD5) mark_as_advanced(PLUMED_MD5)

View File

@ -9,5 +9,8 @@ set(BUILD_OMP ON CACHE BOOL "" FORCE)
get_filename_component(NVCC_WRAPPER_CMD ${CMAKE_CURRENT_SOURCE_DIR}/../lib/kokkos/bin/nvcc_wrapper ABSOLUTE) get_filename_component(NVCC_WRAPPER_CMD ${CMAKE_CURRENT_SOURCE_DIR}/../lib/kokkos/bin/nvcc_wrapper ABSOLUTE)
set(CMAKE_CXX_COMPILER ${NVCC_WRAPPER_CMD} CACHE FILEPATH "" FORCE) set(CMAKE_CXX_COMPILER ${NVCC_WRAPPER_CMD} CACHE FILEPATH "" FORCE)
# If KSPACE is also enabled, use CUFFT for FFTs
set(FFT_KOKKOS "CUFFT" CACHE STRING "" FORCE)
# hide deprecation warnings temporarily for stable release # hide deprecation warnings temporarily for stable release
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE) set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)

View File

@ -12,6 +12,9 @@ set(BUILD_OMP ON CACHE BOOL "" FORCE)
set(CMAKE_CXX_COMPILER hipcc CACHE STRING "" FORCE) set(CMAKE_CXX_COMPILER hipcc CACHE STRING "" FORCE)
set(CMAKE_TUNE_FLAGS "-munsafe-fp-atomics" CACHE STRING "" FORCE) set(CMAKE_TUNE_FLAGS "-munsafe-fp-atomics" CACHE STRING "" FORCE)
# If KSPACE is also enabled, use CUFFT for FFTs
set(FFT_KOKKOS "HIPFFT" CACHE STRING "" FORCE)
# hide deprecation warnings temporarily for stable release # hide deprecation warnings temporarily for stable release
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE) set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)

View File

@ -100,6 +100,7 @@ html: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst ;\
env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst ;\
env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\
env LC_ALL=C grep -n '\(ref\|doc\)`[^`]' $(RSTDIR)/*.rst ;\
$(PYTHON) $(BUILDDIR)/utils/check-styles.py -s ../src -d src ;\ $(PYTHON) $(BUILDDIR)/utils/check-styles.py -s ../src -d src ;\
echo "############################################" ;\ echo "############################################" ;\
deactivate ;\ deactivate ;\
@ -182,6 +183,7 @@ pdf: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst ;\
env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst ;\
env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\
env LC_ALL=C grep -n '\(ref\|doc\)`[^`]' $(RSTDIR)/*.rst ;\
$(PYTHON) utils/check-styles.py -s ../src -d src ;\ $(PYTHON) utils/check-styles.py -s ../src -d src ;\
echo "############################################" ;\ echo "############################################" ;\
deactivate ;\ deactivate ;\
@ -231,6 +233,7 @@ role_check :
@( env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst && exit 1 || : ) @( env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst && exit 1 || : )
@( env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst && exit 1 || : ) @( env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst && exit 1 || : )
@( env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst && exit 1 || : ) @( env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst && exit 1 || : )
@( env LC_ALL=C grep -n '\(ref\|doc\)`[^`]' $(RSTDIR)/*.rst && exit 1 || : )
link_check : $(VENV) html link_check : $(VENV) html
@(\ @(\

View File

@ -1,7 +1,7 @@
.TH LAMMPS "1" "21 November 2023" "2023-11-21" .TH LAMMPS "1" "7 February 2024" "2024-02-07"
.SH NAME .SH NAME
.B LAMMPS .B LAMMPS
\- Molecular Dynamics Simulator. Version 21 November 2023 \- Molecular Dynamics Simulator. Version 7 February 2024
.SH SYNOPSIS .SH SYNOPSIS
.B lmp .B lmp

View File

@ -877,6 +877,9 @@ Bibliography
**(PLUMED)** **(PLUMED)**
G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014)
**(Pavlov)**
D Pavlov, V Galigerov, D Kolotinskii, V Nikolskiy, V Stegailov, International Journal of High Performance Computing Applications, 38, 34-49 (2024).
**(Paquay)** **(Paquay)**
Paquay and Kusters, Biophys. J., 110, 6, (2016). preprint available at `arXiv:1411.3019 <https://arxiv.org/abs/1411.3019/>`_. Paquay and Kusters, Biophys. J., 110, 6, (2016). preprint available at `arXiv:1411.3019 <https://arxiv.org/abs/1411.3019/>`_.

View File

@ -122,32 +122,39 @@ Code Coverage and Unit Testing (CMake only)
------------------------------------------- -------------------------------------------
The LAMMPS code is subject to multiple levels of automated testing The LAMMPS code is subject to multiple levels of automated testing
during development: integration testing (i.e. whether the code compiles during development:
on various platforms and with a variety of settings), unit testing
(i.e. whether certain individual parts of the code produce the expected - Integration testing (i.e. whether the code compiles
results for given inputs), run testing (whether selected complete input on various platforms and with a variety of compilers and settings),
decks run without crashing for multiple configurations), and regression - Unit testing (i.e. whether certain functions or classes of the code
testing (i.e. whether selected input examples reproduce the same produce the expected results for given inputs),
results over a given number of steps and operations within a given - Run testing (i.e. whether selected input decks can run to completion
error margin). The status of this automated testing can be viewed on without crashing for multiple configurations),
`https://ci.lammps.org <https://ci.lammps.org>`_. - Regression testing (i.e. whether selected input examples reproduce the
same results over a given number of steps and operations within a
given error margin).
The status of this automated testing can be viewed on `https://ci.lammps.org
<https://ci.lammps.org>`_.
The scripts and inputs for integration, run, and regression testing The scripts and inputs for integration, run, and regression testing
are maintained in a are maintained in a
`separate repository <https://github.com/lammps/lammps-testing>`_ `separate repository <https://github.com/lammps/lammps-testing>`_
of the LAMMPS project on GitHub. of the LAMMPS project on GitHub. A few tests are also run as GitHub
Actions and their configuration files are in the ``.github/workflows/``
folder of the LAMMPS git tree.
The unit testing facility is integrated into the CMake build process The unit testing facility is integrated into the CMake build process of
of the LAMMPS source code distribution itself. It can be enabled by the LAMMPS source code distribution itself. It can be enabled by
setting ``-D ENABLE_TESTING=on`` during the CMake configuration step. setting ``-D ENABLE_TESTING=on`` during the CMake configuration step.
It requires the `YAML <https://pyyaml.org/>`_ library and development It requires the `YAML <https://pyyaml.org/>`_ library and matching
headers (if those are not found locally a recent version will be development headers to compile (if those are not found locally a recent
downloaded and compiled along with LAMMPS and the test program) to version of that library will be downloaded and compiled along with
compile and will download and compile a specific recent version of the LAMMPS and the test programs) and will download and compile a specific
`Googletest <https://github.com/google/googletest/>`_ C++ test framework version of the `GoogleTest <https://github.com/google/googletest/>`_ C++
for implementing the tests. test framework that is used to implement the tests.
.. admonition:: Software version requirements for testing .. admonition:: Software version and LAMMPS configuration requirements
:class: note :class: note
The compiler and library version requirements for the testing The compiler and library version requirements for the testing
@ -155,7 +162,7 @@ for implementing the tests.
example the default GNU C++ and Fortran compilers of RHEL/CentOS 7.x example the default GNU C++ and Fortran compilers of RHEL/CentOS 7.x
(version 4.8.x) are not sufficient. The CMake configuration will try (version 4.8.x) are not sufficient. The CMake configuration will try
to detect incompatible versions and either skip incompatible tests or to detect incompatible versions and either skip incompatible tests or
stop with an error. Also the number of tests will depend on stop with an error. Also the number of available tests will depend on
installed LAMMPS packages, development environment, operating system, installed LAMMPS packages, development environment, operating system,
and configuration settings. and configuration settings.
@ -234,12 +241,31 @@ will be skipped if prerequisite features are not available in LAMMPS.
time. Preference is given to parts of the code base that are easy to time. Preference is given to parts of the code base that are easy to
test or commonly used. test or commonly used.
Tests for styles of the same kind of style (e.g. pair styles or bond Tests as shown by the ``ctest`` program are command lines defined in the
styles) are performed with the same test executable using different ``CMakeLists.txt`` files in the ``unittest`` directory tree. A few
input files in YAML format. So to add a test for another style of the tests simply execute LAMMPS with specific command line flags and check
same kind it may be sufficient to add a suitable YAML file. the output to the screen for expected content. A large number of unit
:doc:`Detailed instructions for adding tests <Developer_unittest>` are tests are special tests programs using the `GoogleTest framework
provided in the Programmer Guide part of the manual. <https://github.com/google/googletest/>`_ and linked to the LAMMPS
library that test individual functions or create a LAMMPS class
instance, execute one or more commands and check data inside the LAMMPS
class hierarchy. There are also tests for the C-library, Fortran, and
Python module interfaces to LAMMPS. The Python tests use the Python
"unittest" module in a similar fashion than the others use `GoogleTest`.
These special test programs are structured to perform multiple
individual tests internally and each of those contains several checks
(aka assertions) for internal data being changed as expected.
Tests for force computing or modifying styles (e.g. styles for non-bonded
and bonded interactions and selected fixes) are run by using a more generic
test program that reads its input from files in YAML format. The YAML file
provides the information on how to customized the test program to test
a specific style and - if needed - with specific settings.
To add a test for another, similar style (e.g. a new pair style) it is
usually sufficient to add a suitable YAML file. :doc:`Detailed
instructions for adding tests <Developer_unittest>` are provided in the
Programmer Guide part of the manual. A description of what happens
during the tests is given below.
Unit tests for force styles Unit tests for force styles
^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -44,7 +44,7 @@ require use of an FFT library to compute 1d FFTs. The KISS FFT
library is included with LAMMPS, but other libraries can be faster. library is included with LAMMPS, but other libraries can be faster.
LAMMPS can use them if they are available on your system. LAMMPS can use them if they are available on your system.
.. versionadded:: TBD .. versionadded:: 7Feb2024
Alternatively, LAMMPS can use the `heFFTe Alternatively, LAMMPS can use the `heFFTe
<https://icl-utk-edu.github.io/heffte/>`_ library for the MPI <https://icl-utk-edu.github.io/heffte/>`_ library for the MPI
@ -59,15 +59,19 @@ libraries and better pipelining for packing and communication.
.. code-block:: bash .. code-block:: bash
-D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, else KISS -D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, else KISS
-D FFT_KOKKOS=value # FFTW3 or MKL or KISS or CUFFT or HIPFFT, default is KISS
-D FFT_SINGLE=value # yes or no (default), no = double precision -D FFT_SINGLE=value # yes or no (default), no = double precision
-D FFT_PACK=value # array (default) or pointer or memcpy -D FFT_PACK=value # array (default) or pointer or memcpy
-D FFT_USE_HEFFTE=value # yes or no (default), yes links to heFFTe -D FFT_USE_HEFFTE=value # yes or no (default), yes links to heFFTe
.. note:: .. note::
The values for the FFT variable must be in upper-case. This is When the Kokkos variant of a package is compiled and selected at run time,
an exception to the rule that all CMake variables can be specified the FFT library selected by the FFT_KOKKOS variable applies. Otherwise,
with lower-case values. the FFT library selected by the FFT variable applies.
The same FFT settings apply to both. FFT_KOKKOS must be compatible with the
Kokkos back end - for example, when using the CUDA back end of Kokkos,
you must use either CUFFT or KISS.
Usually these settings are all that is needed. If FFTW3 is Usually these settings are all that is needed. If FFTW3 is
selected, then CMake will try to detect, if threaded FFTW selected, then CMake will try to detect, if threaded FFTW
@ -106,6 +110,8 @@ libraries and better pipelining for packing and communication.
FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS
# default is KISS if not specified # default is KISS if not specified
FFT_INC = -DFFT_KOKKOS_CUFFT # -DFFT_KOKKOS_{FFTW,FFTW3,MKL,CUFFT,HIPFFT,KISS}
# default is KISS if not specified
FFT_INC = -DFFT_SINGLE # do not specify for double precision FFT_INC = -DFFT_SINGLE # do not specify for double precision
FFT_INC = -DFFT_FFTW_THREADS # enable using threaded FFTW3 libraries FFT_INC = -DFFT_FFTW_THREADS # enable using threaded FFTW3 libraries
FFT_INC = -DFFT_MKL_THREADS # enable using threaded FFTs with MKL libraries FFT_INC = -DFFT_MKL_THREADS # enable using threaded FFTs with MKL libraries
@ -116,6 +122,8 @@ libraries and better pipelining for packing and communication.
FFT_INC = -I/usr/local/include FFT_INC = -I/usr/local/include
FFT_PATH = -L/usr/local/lib FFT_PATH = -L/usr/local/lib
FFT_LIB = -lhipfft # hipFFT either precision
FFT_LIB = -lcufft # cuFFT either precision
FFT_LIB = -lfftw3 # FFTW3 double precision FFT_LIB = -lfftw3 # FFTW3 double precision
FFT_LIB = -lfftw3 -lfftw3_omp # FFTW3 double precision with threads (needs -DFFT_FFTW_THREADS) FFT_LIB = -lfftw3 -lfftw3_omp # FFTW3 double precision with threads (needs -DFFT_FFTW_THREADS)
FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision
@ -178,6 +186,11 @@ The Intel MKL math library is part of the Intel compiler suite. It
can be used with the Intel or GNU compiler (see the ``FFT_LIB`` setting can be used with the Intel or GNU compiler (see the ``FFT_LIB`` setting
above). above).
The cuFFT and hipFFT FFT libraries are packaged with NVIDIA's CUDA and
AMD's HIP installations, respectively. These FFT libraries require the
Kokkos acceleration package to be enabled and the Kokkos back end to be
GPU-resident (i.e., HIP or CUDA).
Performing 3d FFTs in parallel can be time-consuming due to data access Performing 3d FFTs in parallel can be time-consuming due to data access
and required communication. This cost can be reduced by performing and required communication. This cost can be reduced by performing
single-precision FFTs instead of double precision. Single precision single-precision FFTs instead of double precision. Single precision
@ -189,11 +202,11 @@ generally less than the difference in precision. Using the
``-DFFT_SINGLE`` setting trades off a little accuracy for reduced memory ``-DFFT_SINGLE`` setting trades off a little accuracy for reduced memory
use and parallel communication costs for transposing 3d FFT data. use and parallel communication costs for transposing 3d FFT data.
When using ``-DFFT_SINGLE`` with FFTW3, you may need to build the FFTW When using ``-DFFT_SINGLE`` with FFTW3, you may need to ensure that
library a second time with support for single-precision. the FFTW3 installation includes support for single-precision.
For FFTW3, do the following, which should produce the additional When compiler FFTW3 from source, you can do the following, which should
library ``libfftw3f.a`` or ``libfftw3f.so``\ . produce the additional libraries ``libfftw3f.a`` and/or ``libfftw3f.so``\ .
.. code-block:: bash .. code-block:: bash

View File

@ -124,7 +124,7 @@ OPT.
* *
* *
* :doc:`charmm (iko) <dihedral_charmm>` * :doc:`charmm (iko) <dihedral_charmm>`
* :doc:`charmmfsw <dihedral_charmm>` * :doc:`charmmfsw (k) <dihedral_charmm>`
* :doc:`class2 (ko) <dihedral_class2>` * :doc:`class2 (ko) <dihedral_class2>`
* :doc:`cosine/shift/exp (o) <dihedral_cosine_shift_exp>` * :doc:`cosine/shift/exp (o) <dihedral_cosine_shift_exp>`
* :doc:`fourier (io) <dihedral_fourier>` * :doc:`fourier (io) <dihedral_fourier>`

View File

@ -61,6 +61,7 @@ OPT.
* :doc:`controller <fix_controller>` * :doc:`controller <fix_controller>`
* :doc:`damping/cundall <fix_damping_cundall>` * :doc:`damping/cundall <fix_damping_cundall>`
* :doc:`deform (k) <fix_deform>` * :doc:`deform (k) <fix_deform>`
* :doc:`deform/pressure <fix_deform_pressure>`
* :doc:`deposit <fix_deposit>` * :doc:`deposit <fix_deposit>`
* :doc:`dpd/energy (k) <fix_dpd_energy>` * :doc:`dpd/energy (k) <fix_dpd_energy>`
* :doc:`drag <fix_drag>` * :doc:`drag <fix_drag>`
@ -262,6 +263,7 @@ OPT.
* :doc:`wall/body/polyhedron <fix_wall_body_polyhedron>` * :doc:`wall/body/polyhedron <fix_wall_body_polyhedron>`
* :doc:`wall/colloid <fix_wall>` * :doc:`wall/colloid <fix_wall>`
* :doc:`wall/ees <fix_wall_ees>` * :doc:`wall/ees <fix_wall_ees>`
* :doc:`wall/flow (k) <fix_wall_flow>`
* :doc:`wall/gran (k) <fix_wall_gran>` * :doc:`wall/gran (k) <fix_wall_gran>`
* :doc:`wall/gran/region <fix_wall_gran_region>` * :doc:`wall/gran/region <fix_wall_gran_region>`
* :doc:`wall/harmonic <fix_wall>` * :doc:`wall/harmonic <fix_wall>`

View File

@ -146,7 +146,7 @@ OPT.
* :doc:`lj/charmm/coul/long/soft (o) <pair_fep_soft>` * :doc:`lj/charmm/coul/long/soft (o) <pair_fep_soft>`
* :doc:`lj/charmm/coul/msm (o) <pair_charmm>` * :doc:`lj/charmm/coul/msm (o) <pair_charmm>`
* :doc:`lj/charmmfsw/coul/charmmfsh <pair_charmm>` * :doc:`lj/charmmfsw/coul/charmmfsh <pair_charmm>`
* :doc:`lj/charmmfsw/coul/long <pair_charmm>` * :doc:`lj/charmmfsw/coul/long (k) <pair_charmm>`
* :doc:`lj/class2 (gko) <pair_class2>` * :doc:`lj/class2 (gko) <pair_class2>`
* :doc:`lj/class2/coul/cut (ko) <pair_class2>` * :doc:`lj/class2/coul/cut (ko) <pair_class2>`
* :doc:`lj/class2/coul/cut/soft <pair_fep_soft>` * :doc:`lj/class2/coul/cut/soft <pair_fep_soft>`
@ -256,6 +256,7 @@ OPT.
* :doc:`rann <pair_rann>` * :doc:`rann <pair_rann>`
* :doc:`reaxff (ko) <pair_reaxff>` * :doc:`reaxff (ko) <pair_reaxff>`
* :doc:`rebo (io) <pair_airebo>` * :doc:`rebo (io) <pair_airebo>`
* :doc:`rebomos (o) <pair_rebomos>`
* :doc:`resquared (go) <pair_resquared>` * :doc:`resquared (go) <pair_resquared>`
* :doc:`saip/metal (t) <pair_saip_metal>` * :doc:`saip/metal (t) <pair_saip_metal>`
* :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>` * :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>`

View File

@ -129,7 +129,7 @@ USER-REAXC.
USER-REAXC package USER-REAXC package
------------------ ------------------
.. deprecated:: TBD .. deprecated:: 7Feb2024
The USER-REAXC package has been renamed to :ref:`REAXFF <PKG-REAXFF>`. The USER-REAXC package has been renamed to :ref:`REAXFF <PKG-REAXFF>`.
In the process also the pair style and related fixes were renamed to use In the process also the pair style and related fixes were renamed to use

View File

@ -18,6 +18,7 @@ Available topics in mostly chronological order are:
- `Setting flags in the constructor`_ - `Setting flags in the constructor`_
- `Rename of pack/unpack_comm() to pack/unpack_forward_comm()`_ - `Rename of pack/unpack_comm() to pack/unpack_forward_comm()`_
- `Use ev_init() to initialize variables derived from eflag and vflag`_ - `Use ev_init() to initialize variables derived from eflag and vflag`_
- `Use utils::count_words() functions instead of atom->count_words()`_
- `Use utils::numeric() functions instead of force->numeric()`_ - `Use utils::numeric() functions instead of force->numeric()`_
- `Use utils::open_potential() function to open potential files`_ - `Use utils::open_potential() function to open potential files`_
- `Use symbolic Atom and AtomVec constants instead of numerical values`_ - `Use symbolic Atom and AtomVec constants instead of numerical values`_
@ -130,6 +131,41 @@ Not applying this change will not cause a compilation error, but
can lead to inconsistent behavior and incorrect tallying of can lead to inconsistent behavior and incorrect tallying of
energy or virial. energy or virial.
Use utils::count_words() functions instead of atom->count_words()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. versionchanged:: 2Jun2020
The "count_words()" functions for parsing text have been moved from the
Atom class to the :doc:`utils namespace <Developer_utils>`. The
"count_words()" function in "utils" uses the Tokenizer class internally
to split a line into words and count them, thus it will not modify the
argument string as the function in the Atoms class did and thus had a
variant using a copy buffer. Unlike the old version, the new version
does not remove comments. For that you can use the
:cpp:func:`utils::trim_comment() function
<LAMMPS_NS::utils::trim_comment>` as shown in the example below.
Old:
.. code-block:: c++
nwords = atom->count_words(line);
int nwords = atom->count_words(buf);
New:
.. code-block:: c++
nwords = utils::count_words(line);
int nwords = utils::count_words(utils::trim_comment(buf));
.. seealso::
:cpp:func:`utils::count_words() <LAMMPS_NS::utils::count_words>`,
:cpp:func:`utils::trim_comments() <LAMMPS_NS::utils::trim_comments>`
Use utils::numeric() functions instead of force->numeric() Use utils::numeric() functions instead of force->numeric()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -137,11 +173,12 @@ Use utils::numeric() functions instead of force->numeric()
The "numeric()" conversion functions (including "inumeric()", The "numeric()" conversion functions (including "inumeric()",
"bnumeric()", and "tnumeric()") have been moved from the Force class to "bnumeric()", and "tnumeric()") have been moved from the Force class to
the utils namespace. Also they take an additional argument that selects the :doc:`utils namespace <Developer_utils>`. Also they take an
whether the ``Error::all()`` or ``Error::one()`` function should be additional argument that selects whether the ``Error::all()`` or
called in case of an error. The former should be used when *all* MPI ``Error::one()`` function should be called in case of an error. The
processes call the conversion function and the latter *must* be used former should be used when *all* MPI processes call the conversion
when they are called from only one or a subset of the MPI processes. function and the latter *must* be used when they are called from only
one or a subset of the MPI processes.
Old: Old:

View File

@ -315,6 +315,10 @@ of the contents of the :f:mod:`LIBLAMMPS` Fortran interface to LAMMPS.
:ftype extract_variable: function :ftype extract_variable: function
:f set_variable: :f:subr:`set_variable` :f set_variable: :f:subr:`set_variable`
:ftype set_variable: subroutine :ftype set_variable: subroutine
:f set_string_variable: :f:subr:`set_set_string_variable`
:ftype set_string_variable: subroutine
:f set_internal_variable: :f:subr:`set_internal_variable`
:ftype set_internal_variable: subroutine
:f gather_atoms: :f:subr:`gather_atoms` :f gather_atoms: :f:subr:`gather_atoms`
:ftype gather_atoms: subroutine :ftype gather_atoms: subroutine
:f gather_atoms_concat: :f:subr:`gather_atoms_concat` :f gather_atoms_concat: :f:subr:`gather_atoms_concat`
@ -1398,7 +1402,28 @@ Procedures Bound to the :f:type:`lammps` Derived Type
Set the value of a string-style variable. Set the value of a string-style variable.
.. versionadded:: 3Nov2022 .. deprecated:: 7Feb2024
This function assigns a new value from the string *str* to the string-style
variable *name*\ . If *name* does not exist or is not a string-style
variable, an error is generated.
.. warning::
This subroutine is deprecated and :f:subr:`set_string_variable`
should be used instead.
:p character(len=*) name: name of the variable
:p character(len=*) str: new value to assign to the variable
:to: :cpp:func:`lammps_set_variable`
--------
.. f:subroutine:: set_string_variable(name, str)
Set the value of a string-style variable.
.. versionadded:: 7Feb2024
This function assigns a new value from the string *str* to the string-style This function assigns a new value from the string *str* to the string-style
variable *name*\ . If *name* does not exist or is not a string-style variable *name*\ . If *name* does not exist or is not a string-style
@ -1406,7 +1431,23 @@ Procedures Bound to the :f:type:`lammps` Derived Type
:p character(len=*) name: name of the variable :p character(len=*) name: name of the variable
:p character(len=*) str: new value to assign to the variable :p character(len=*) str: new value to assign to the variable
:to: :cpp:func:`lammps_set_variable` :to: :cpp:func:`lammps_set_string_variable`
--------
.. f:subroutine:: set_internal_variable(name, val)
Set the value of a internal-style variable.
.. versionadded:: 7Feb2024
This function assigns a new value from the floating-point number *val* to
the internal-style variable *name*\ . If *name* does not exist or is not
an internal-style variable, an error is generated.
:p character(len=*) name: name of the variable
:p read(c_double) val: new value to assign to the variable
:to: :cpp:func:`lammps_set_internal_variable`
-------- --------

View File

@ -349,6 +349,8 @@ Some common LAMMPS specific variables
- when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a`` - when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a``
* - ``FFT`` * - ``FFT``
- select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found) - select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found)
* - ``FFT_KOKKOS``
- select which FFT library to use in Kokkos-enabled styles: ``FFTW3``, ``MKL``, ``HIPFFT``, ``CUFFT``, ``KISS`` (default)
* - ``FFT_SINGLE`` * - ``FFT_SINGLE``
- select whether to use single precision FFTs (default: ``off``) - select whether to use single precision FFTs (default: ``off``)
* - ``WITH_JPEG`` * - ``WITH_JPEG``

View File

@ -45,10 +45,15 @@ atoms, and should be used for granular system instead of the fix style
To model heat conduction, one must add the temperature and heatflow To model heat conduction, one must add the temperature and heatflow
atom variables with: atom variables with:
* :doc:`fix property/atom <fix_property_atom>` * :doc:`fix property/atom <fix_property_atom>`
a temperature integration fix a temperature integration fix
* :doc:`fix heat/flow <fix_heat_flow>` * :doc:`fix heat/flow <fix_heat_flow>`
and a heat conduction option defined in both and a heat conduction option defined in both
* :doc:`pair_style granular <pair_granular>` * :doc:`pair_style granular <pair_granular>`
* :doc:`fix wall/gran <fix_wall_gran>` * :doc:`fix wall/gran <fix_wall_gran>`

View File

@ -52,8 +52,8 @@ JSON
"ke": 2.4962152903997174569 "ke": 2.4962152903997174569
} }
YAML format thermo_style output YAML format thermo_style or dump_style output
=============================== =============================================
Extracting data from log file Extracting data from log file
----------------------------- -----------------------------
@ -112,6 +112,9 @@ of that run:
Number of runs: 2 Number of runs: 2
TotEng = -4.62140097780047 TotEng = -4.62140097780047
Extracting data from dump file
------------------------------
.. versionadded:: 4May2022 .. versionadded:: 4May2022
YAML format output has been added to multiple commands in LAMMPS, YAML format output has been added to multiple commands in LAMMPS,

View File

@ -9,6 +9,8 @@ fixes, or variables in LAMMPS using the following functions:
- :cpp:func:`lammps_extract_variable_datatype` - :cpp:func:`lammps_extract_variable_datatype`
- :cpp:func:`lammps_extract_variable` - :cpp:func:`lammps_extract_variable`
- :cpp:func:`lammps_set_variable` - :cpp:func:`lammps_set_variable`
- :cpp:func:`lammps_set_string_variable`
- :cpp:func:`lammps_set_internal_variable`
- :cpp:func:`lammps_variable_info` - :cpp:func:`lammps_variable_info`
----------------------- -----------------------
@ -38,6 +40,16 @@ fixes, or variables in LAMMPS using the following functions:
----------------------- -----------------------
.. doxygenfunction:: lammps_set_string_variable
:project: progguide
-----------------------
.. doxygenfunction:: lammps_set_internal_variable
:project: progguide
-----------------------
.. doxygenfunction:: lammps_variable_info .. doxygenfunction:: lammps_variable_info
:project: progguide :project: progguide

View File

@ -96,6 +96,39 @@ list all non-conforming lines. By adding the `-f` flag to the command
line, they will modify the flagged files to try to remove the detected line, they will modify the flagged files to try to remove the detected
issues. issues.
Constants (strongly preferred)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Global or per-file constants should be declared as `static constexpr`
variables rather than via the pre-processor with `#define`. The name of
constants should be all uppercase. This has multiple advantages:
- constants are easily identified as such by their all upper case name
- rather than a pure text substitution during pre-processing, `constexpr
variables` have a type associated with them and are processed later in
the parsing process where the syntax checks and type specific
processing (e.g. via overloads) can be applied to them.
- compilers can emit a warning if the constant is not used and thus can
be removed (we regularly check for and remove dead code like this)
- there are no unexpected substitutions and thus confusing syntax errors
when compiling leading to, for instance, conflicts so that LAMMPS
cannot be compiled with certain combinations of packages (this *has*
happened multiple times in the past).
Pre-processor defines should be limited to macros (but consider C++
templates) and conditional compilation. If a per-processor define must
be used, it should be defined at the top of the .cpp file after the
include statements and at all cost it should be avoided to put them into
header files.
Some sets of commonly used constants are provided in the ``MathConst``
and ``EwaldConst`` namespaces and implemented in the files
``math_const.h`` and ``ewald_const.h``, respectively.
There are always exceptions, special cases, and legacy code in LAMMPS,
so please contact the LAMMPS developers if you are not sure.
Placement of braces (strongly preferred) Placement of braces (strongly preferred)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -20,11 +20,28 @@ including Sikandar Mashayak (UIUC), Ray Shan (Sandia), and Dan Ibanez
(Sandia). For more information on developing using Kokkos abstractions (Sandia). For more information on developing using Kokkos abstractions
see the `Kokkos Wiki <https://github.com/kokkos/kokkos/wiki>`_. see the `Kokkos Wiki <https://github.com/kokkos/kokkos/wiki>`_.
Kokkos currently provides support for 4 modes of execution (per MPI .. note::
The Kokkos library is under active development and tracking the
availability of accelerator hardware, so is the KOKKOS package in
LAMMPS. This means that only a certain range of versions of the
Kokkos library are compatible with the KOKKOS package of a certain
range of LAMMPS versions. For that reason LAMMPS comes with a
bundled version of the Kokkos library that has been validated on
multiple platforms and may contain selected back-ported bug fixes
from upstream Kokkos versions. While it is possible to build LAMMPS
with an external version of Kokkos, it is untested and may result in
incorrect execution or crashes.
Kokkos currently provides full support for 4 modes of execution (per MPI
task). These are Serial (MPI-only for CPUs and Intel Phi), OpenMP task). These are Serial (MPI-only for CPUs and Intel Phi), OpenMP
(threading for many-core CPUs and Intel Phi), CUDA (for NVIDIA (threading for many-core CPUs and Intel Phi), CUDA (for NVIDIA GPUs) and
GPUs) and HIP (for AMD GPUs). You choose the mode at build time to HIP (for AMD GPUs). Additional modes (e.g. OpenMP target, Intel data
produce an executable compatible with a specific hardware. center GPUs) are under development. You choose the mode at build time
to produce an executable compatible with a specific hardware.
The following compatibility notes have been last updated for LAMMPS
version 23 November 2023 and Kokkos version 4.2.
.. admonition:: C++17 support .. admonition:: C++17 support
:class: note :class: note
@ -63,13 +80,13 @@ produce an executable compatible with a specific hardware.
LAMMPS command line or by using the command :doc:`package kokkos LAMMPS command line or by using the command :doc:`package kokkos
gpu/aware off <package>` in the input file. gpu/aware off <package>` in the input file.
.. admonition:: AMD GPU support .. admonition:: Intel Data Center GPU support
:class: note :class: note
To build with Kokkos the HIPCC compiler from the AMD ROCm software Support for Kokkos with Intel Data Center GPU accelerators (formerly
version 3.5 or later is required. Supporting this Kokkos mode in known under the code name "Ponte Vecchio") in LAMMPS is still a work
LAMMPS is still work in progress. Please contact the LAMMPS developers in progress. Only a subset of the functionality works correctly.
if you run into problems. Please contact the LAMMPS developers if you run into problems.
Building LAMMPS with the KOKKOS package Building LAMMPS with the KOKKOS package
""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""
@ -292,6 +309,10 @@ one or more nodes, each with two GPUs:
settings. Experimenting with its options can provide a speed-up for settings. Experimenting with its options can provide a speed-up for
specific calculations. For example: specific calculations. For example:
.. code-block:: bash
mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff
.. note:: .. note::
The default binsize for :doc:`atom sorting <atom_modify>` on GPUs The default binsize for :doc:`atom sorting <atom_modify>` on GPUs
@ -302,9 +323,15 @@ one or more nodes, each with two GPUs:
frequent sorting than default (e.g. sorting every 100 time steps frequent sorting than default (e.g. sorting every 100 time steps
instead of 1000) may improve performance. instead of 1000) may improve performance.
.. code-block:: bash .. note::
mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff When running on GPUs with many MPI ranks (tens of thousands and
more), the creation of the atom map (required for molecular systems)
on the GPU can slow down significantly or run out of GPU memory and
thus slow down the whole calculation or cause a crash. You can use
the "-pk kokkos atom/map no" :doc:`command-line switch <Run_options>`
of the :doc:`package kokkos atom/map no <package>` command to create
the atom map on the CPU instead.
.. note:: .. note::
@ -420,11 +447,18 @@ Generally speaking, the following rules of thumb apply:
of using single or mixed precision with the GPU package depends of using single or mixed precision with the GPU package depends
significantly on the hardware in use and the simulated system and pair significantly on the hardware in use and the simulated system and pair
style. style.
* When running on Intel hardware, KOKKOS is not as fast as * When running on Intel Phi hardware, KOKKOS is not as fast as
the INTEL package, which is optimized for x86 hardware (not just the INTEL package, which is optimized for x86 hardware (not just
from Intel) and compilation with the Intel compilers. The INTEL from Intel) and compilation with the Intel compilers. The INTEL
package also can increase the vector length of vector instructions package also can increase the vector length of vector instructions
by switching to single or mixed precision mode. by switching to single or mixed precision mode.
* The KOKKOS package by default assumes that you are using exactly one
MPI rank per GPU. When trying to use multiple MPI ranks per GPU it is
mandatory to enable `CUDA Multi-Process Service (MPS)
<https://docs.nvidia.com/deploy/mps/index.html>`_ to get good
performance. In this case it is better to not use all available
MPI ranks in order to avoid competing with the MPS daemon for
CPU resources.
See the `Benchmark page <https://www.lammps.org/bench.html>`_ of the See the `Benchmark page <https://www.lammps.org/bench.html>`_ of the
LAMMPS website for performance of the KOKKOS package on different LAMMPS website for performance of the KOKKOS package on different

View File

@ -70,7 +70,9 @@ for more info.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`angle_coeff <angle_coeff>` :doc:`angle_coeff <angle_coeff>`, :doc:`pair_style lj/charmm variants <pair_charmm>`,
:doc:`dihedral_style charmm <dihedral_charmm>`,
:doc:`dihedral_style charmmfsw <dihedral_charmm>`, :doc:`fix cmap <fix_cmap>`
Default Default
""""""" """""""

View File

@ -11,7 +11,16 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
angle_style lepton angle_style style args
* style = *lepton*
* args = optional arguments
.. parsed-literal::
args = *auto_offset* or *no_offset*
*auto_offset* = offset the potential energy so that the value at theta0 is 0.0 (default)
*no_offset* = do not offset the potential energy
Examples Examples
"""""""" """"""""
@ -19,6 +28,7 @@ Examples
.. code-block:: LAMMPS .. code-block:: LAMMPS
angle_style lepton angle_style lepton
angle_style lepton no_offset
angle_coeff 1 120.0 "k*theta^2; k=250.0" angle_coeff 1 120.0 "k*theta^2; k=250.0"
angle_coeff 2 90.0 "k2*theta^2 + k3*theta^3 + k4*theta^4; k2=300.0; k3=-100.0; k4=50.0" angle_coeff 2 90.0 "k2*theta^2 + k3*theta^3 + k4*theta^4; k2=300.0; k3=-100.0; k4=50.0"
@ -41,6 +51,13 @@ angle coefficient. For example `"200.0*theta^2"` represents a
U_{angle,i} = K (\theta_i - \theta_0)^2 = K \theta^2 \qquad \theta = \theta_i - \theta_0 U_{angle,i} = K (\theta_i - \theta_0)^2 = K \theta^2 \qquad \theta = \theta_i - \theta_0
.. versionchanged:: 7Feb2024
By default the potential energy U is shifted so that the value U is 0.0
for $theta = theta_0$. This is equivalent to using the optional keyword
*auto_offset*. When using the keyword *no_offset* instead, the
potential energy is not shifted.
The `Lepton library <https://simtk.org/projects/lepton>`_, that the The `Lepton library <https://simtk.org/projects/lepton>`_, that the
*lepton* angle style interfaces with, evaluates this expression string *lepton* angle style interfaces with, evaluates this expression string
at run time to compute the pairwise energy. It also creates an at run time to compute the pairwise energy. It also creates an

View File

@ -49,248 +49,221 @@ Examples
Description Description
""""""""""" """""""""""
Define what style of atoms to use in a simulation. This determines The *atom_style* command selects which per-atom attributes are
what attributes are associated with the atoms. This command must be associated with atoms in a LAMMPS simulation and thus stored and
used before a simulation is setup via a :doc:`read_data <read_data>`, communicated with those atoms as well as read from and stored in data
:doc:`read_restart <read_restart>`, or :doc:`create_box <create_box>` and restart files. Different models (e.g. :doc:`pair styles
command. <pair_style>`) require access to specific per-atom attributes and thus
require a specific atom style. For example, to compute Coulomb
interactions, the atom must have a "charge" (aka "q") attribute.
A number of distinct atom styles exist that combine attributes. Some
atom styles are a superset of other atom styles. Further attributes
may be added to atoms either via using a hybrid style which provides a
union of the attributes of the sub-styles, or via the :doc:`fix
property/atom <fix_property_atom>` command. The *atom_style* command
must be used before a simulation is setup via a :doc:`read_data
<read_data>`, :doc:`read_restart <read_restart>`, or :doc:`create_box
<create_box>` command.
.. note:: .. note::
Many of the atom styles discussed here are only enabled if Many of the atom styles discussed here are only enabled if LAMMPS was
LAMMPS was built with a specific package, as listed below in the built with a specific package, as listed below in the Restrictions
Restrictions section. section.
Once a style is assigned, it cannot be changed, so use a style general Once a style is selected and the simulation box defined, it cannot be
enough to encompass all attributes. E.g. with style *bond*, angular changed but only augmented with the :doc:`fix property/atom
terms cannot be used or added later to the model. It is OK to use a <fix_property_atom>` command. So one should select an atom style
style more general than needed, though it may be slightly inefficient. general enough to encompass all attributes required. E.g. with atom
style *bond*, it is not possible to define angles and use angle styles.
The choice of style affects what quantities are stored by each atom, It is OK to use a style more general than needed, though it may be
what quantities are communicated between processors to enable forces slightly inefficient because it will allocate and communicate
to be computed, and what quantities are listed in the data file read additional unused data.
by the :doc:`read_data <read_data>` command.
These are the additional attributes of each style and the typical Atom style attributes
kinds of physical systems they are used to model. All styles store """""""""""""""""""""
coordinates, velocities, atom IDs and types. See the
The atom style *atomic* has the minimum subset of per-atom attributes
and is also the default setting. It encompasses the following per-atom
attributes (name of the vector or array in the :doc:`Atom class
<Classes_atom>` is given in parenthesis): atom-ID (tag), type (type),
position (x), velocities (v), forces (f), image flags (image), group
membership (mask). Since all atom styles are a superset of atom style
*atomic*\ , they all include these attributes.
This table lists all the available atom styles, which attributes they
provide, which :doc:`package <Packages>` is required to use them, and
what the typical applications are that use them. See the
:doc:`read_data <read_data>`, :doc:`create_atoms <create_atoms>`, and :doc:`read_data <read_data>`, :doc:`create_atoms <create_atoms>`, and
:doc:`set <set>` commands for info on how to set these various :doc:`set <set>` commands for details on how to set these various
quantities. quantities. More information about many of the styles is provided in
the Additional Information section below.
+--------------+-----------------------------------------------------+--------------------------------------+ .. list-table::
| *amoeba* | molecular + charge + 1/5 neighbors | AMOEBA/HIPPO polarized force fields | :header-rows: 1
+--------------+-----------------------------------------------------+--------------------------------------+ :widths: auto
| *angle* | bonds and angles | bead-spring polymers with stiffness |
+--------------+-----------------------------------------------------+--------------------------------------+ * - Atom style
| *atomic* | only the default values | coarse-grain liquids, solids, metals | - Attributes
+--------------+-----------------------------------------------------+--------------------------------------+ - Required package
| *body* | mass, inertia moments, quaternion, angular momentum | arbitrary bodies | - Applications
+--------------+-----------------------------------------------------+--------------------------------------+ * - *amoeba*
| *bond* | bonds | bead-spring polymers | - *full* + "1-5 special neighbor data"
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`AMOEBA <PKG-AMOEBA>`
| *charge* | charge | atomic system with charges | - AMOEBA/HIPPO force fields
+--------------+-----------------------------------------------------+--------------------------------------+ * - *angle*
| *dielectric* | normx normy normz area/patch ed em epsilon curv | system with surface polarization | - *bond* + "angle data"
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`MOLECULE <PKG-MOLECULE>`
| *dipole* | charge and dipole moment | system with dipolar particles | - bead-spring polymers with stiffness
+--------------+-----------------------------------------------------+--------------------------------------+ * - *atomic*
| *dpd* | internal temperature and internal energies | DPD particles | - tag, type, x, v, f, image, mask
+--------------+-----------------------------------------------------+--------------------------------------+ -
| *edpd* | temperature and heat capacity | eDPD particles | - atomic liquids, solids, metals
+--------------+-----------------------------------------------------+--------------------------------------+ * - *body*
| *electron* | charge and spin and eradius | electronic force field | - *atomic* + radius, rmass, angmom, torque, body
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`BODY <PKG-BODY>`
| *ellipsoid* | shape, quaternion, angular momentum | aspherical particles | - arbitrary bodies, see :doc:`body howto <Howto_body>`
+--------------+-----------------------------------------------------+--------------------------------------+ * - *bond*
| *full* | molecular + charge | bio-molecules | - *atomic* + molecule, nspecial, special + "bond data"
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`MOLECULE <PKG-MOLECULE>`
| *line* | end points, angular velocity | rigid bodies | - bead-spring polymers
+--------------+-----------------------------------------------------+--------------------------------------+ * - *bpm/sphere*
| *mdpd* | density | mDPD particles | - *bond* + radius, rmass, omega, torque, quat
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`BPM <PKG-BPM>`
| *molecular* | bonds, angles, dihedrals, impropers | uncharged molecules | - granular bonded particle models, see :doc:`BPM howto <Howto_bpm>`
+--------------+-----------------------------------------------------+--------------------------------------+ * - *charge*
| *oxdna* | nucleotide polarity | coarse-grained DNA and RNA models | - *atomic* + q
+--------------+-----------------------------------------------------+--------------------------------------+ -
| *peri* | mass, volume | mesoscopic Peridynamic models | - atomic systems with charges
+--------------+-----------------------------------------------------+--------------------------------------+ * - *dielectric*
| *smd* | volume, kernel diameter, contact radius, mass | solid and fluid SPH particles | - *full* + mu, area, ed, em, epsilon, curvature, q_scaled
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`DIELECTRIC <PKG-DIELECTRIC>`
| *sph* | rho, esph, cv | SPH particles | - systems with surface polarization
+--------------+-----------------------------------------------------+--------------------------------------+ * - *dipole*
| *sphere* | diameter, mass, angular velocity | granular models | - *charge* + mu
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`DIPOLE <PKG-DIPOLE>`
| *bpm/sphere* | diameter, mass, angular velocity, quaternion | granular bonded particle models (BPM)| - atomic systems with charges and point dipoles
+--------------+-----------------------------------------------------+--------------------------------------+ * - *dpd*
| *spin* | magnetic moment | system with magnetic particles | - *atomic* + rho + "reactive DPD data"
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`DPD-REACT <PKG-DPD-REACT>`
| *tdpd* | chemical concentration | tDPD particles | - reactive DPD
+--------------+-----------------------------------------------------+--------------------------------------+ * - *edpd*
| *template* | template index, template atom | small molecules with fixed topology | - *atomic* + "eDPD data"
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`DPD-MESO <PKG-DPD-MESO>`
| *tri* | corner points, angular momentum | rigid bodies | - Energy conservative DPD (eDPD)
+--------------+-----------------------------------------------------+--------------------------------------+ * - *electron*
| *wavepacket* | charge, spin, eradius, etag, cs_re, cs_im | AWPMD | - *charge* + espin, eradius, ervel, erforce
+--------------+-----------------------------------------------------+--------------------------------------+ - :ref:`EFF <PKG-EFF>`
- Electron force field systems
* - *ellipsoid*
- *atomic* + rmass, angmom, torque, ellipsoid
-
- aspherical particles
* - *full*
- *molecular* + q
- :ref:`MOLECULE <PKG-MOLECULE>`
- molecular force fields
* - *line*
- *atomic* + molecule, radius, rmass, omega, torque, line
-
- 2-d rigid body particles
* - *mdpd*
- *atomic* + rho, drho, vest
- :ref:`DPD-MESO <PKG-DPD-MESO>`
- Many-body DPD (mDPD)
* - *molecular*
- *angle* + "dihedral and improper data"
- :ref:`MOLECULE <PKG-MOLECULE>`
- apolar and uncharged molecules
* - *oxdna*
- *atomic* + id5p
- :ref:`CG-DNA <PKG-CG-DNA>`
- coarse-grained DNA and RNA models
* - *peri*
- *atomic* + rmass, vfrac, s0, x0
- :ref:`PERI <PKG-PERI>`
- mesoscopic Peridynamics models
* - *smd*
- *atomic* + molecule, radius, rmass + "smd data"
- :ref:`MACHDYN <PKG-MACHDYN>`
- Smooth Mach Dynamics models
* - *sph*
- *atomic* + "sph data"
- :ref:`SPH <PKG-SPH>`
- Smoothed particle hydrodynamics models
* - *sphere*
- *atomic* + radius, rmass, omega, torque
-
- finite size spherical particles, e.g. granular models
* - *spin*
- *atomic* + "magnetic moment data"
- :ref:`SPIN <PKG-SPIN>`
- magnetic particles
* - *tdpd*
- *atomic* + cc, cc_flux, vest
- :ref:`DPD-MESO <PKG-DPD-MESO>`
- Transport DPD (tDPD)
* - *template*
- *atomic* + molecule, molindex, molatom
- :ref:`MOLECULE <PKG-MOLECULE>`
- molecular systems where attributes are taken from :doc:`molecule files <molecule>`
* - *tri*
- *sphere* + molecule, angmom, tri
-
- 3-d triangulated rigid body LJ particles
* - *wavepacket*
- *charge* + "wavepacket data"
- :ref:`AWPMD <PKG-AWPMD>`
- Antisymmetrized wave packet MD
.. note:: .. note::
It is possible to add some attributes, such as a molecule ID, to It is possible to add some attributes, such as a molecule ID and
atom styles that do not have them via the :doc:`fix property/atom charge, to atom styles that do not have them built in using the
<fix_property_atom>` command. This command also allows new custom :doc:`fix property/atom <fix_property_atom>` command. This command
attributes consisting of extra integer or floating-point values to also allows new custom-named attributes consisting of extra integer
be added to atoms. See the :doc:`fix property/atom or floating-point values or vectors to be added to atoms. See the
<fix_property_atom>` page for examples of cases where this is :doc:`fix property/atom <fix_property_atom>` page for examples of
useful and details on how to initialize, access, and output the cases where this is useful and details on how to initialize,
custom values. access, and output these custom values.
All of the above styles define point particles, except the *sphere*, ----------
*bpm/sphere*, *ellipsoid*, *electron*, *peri*, *wavepacket*, *line*,
*tri*, and *body* styles, which define finite-size particles. See the
:doc:`Howto spherical <Howto_spherical>` page for an overview of using
finite-size particle models with LAMMPS.
All of the point-particle styles assign mass to particles on a Particle size and mass
per-type basis, using the :doc:`mass <mass>` command, The finite-size """"""""""""""""""""""
particle styles assign mass to individual particles on a per-particle
basis.
For the *sphere* and *bpm/sphere* styles, the particles are spheres All of the atom styles define point particles unless they (1) define
and each stores a per-particle diameter and mass. If the diameter > finite-size spherical particles via the *radius* attribute, or (2)
0.0, the particle is a finite-size sphere. If the diameter = 0.0, it define finite-size aspherical particles (e.g. the *body*, *ellipsoid*,
is a point particle. Note that by use of the *disc* keyword with the *line*, and *tri* styles). Most of these styles can also be used with
:doc:`fix nve/sphere <fix_nve_sphere>`, :doc:`fix nvt/sphere mixtures of point and finite-size particles.
<fix_nvt_sphere>`, :doc:`fix nph/sphere <fix_nph_sphere>`,
:doc:`fix npt/sphere <fix_npt_sphere>` commands for the *sphere* style,
spheres can be effectively treated as 2d discs for a 2d simulation if
desired. See also the :doc:`set density/disc <set>` command. These
styles take an optional 0 or 1 argument. A value of 0 means the
radius of each sphere is constant for the duration of the simulation.
A value of 1 means the radii may vary dynamically during the simulation,
e.g. due to use of the :doc:`fix adapt <fix_adapt>` command.
For the *ellipsoid* style, the particles are ellipsoids and each Note that the *radius* property may need to be provided as a
stores a flag which indicates whether it is a finite-size ellipsoid or *diameter* (e.g. in :doc:`molecule files <molecule>` or :doc:`data
a point particle. If it is an ellipsoid, it also stores a shape files <read_data>`). See the :doc:`Howto spherical <Howto_spherical>`
vector with the 3 diameters of the ellipsoid and a quaternion 4-vector page for an overview of using finite-size spherical and aspherical
with its orientation. particle models with LAMMPS.
For the *dielectric* style, each particle can be either a physical Unless an atom style defines the per-atom *rmass* attribute, particle
particle (e.g. an ion), or an interface particle representing a boundary masses are defined on a per-type basis, using the :doc:`mass <mass>`
element between two regions of different dielectric constant. For command. This means each particle's mass is indexed by its atom
interface particles, in addition to the properties associated with *type*.
atom_style full, each particle also should be assigned a normal unit
vector (defined by normx, normy, normz), an area (area/patch), the
difference and mean of the dielectric constants of two sides of the
interface along the direction of the normal vector (ed and em), the
local dielectric constant at the boundary element (epsilon), and a mean
local curvature (curv). Physical particles must be assigned these
values, as well, but only their local dielectric constants will be used;
see documentation for associated :doc:`pair styles <pair_dielectric>`
and :doc:`fixes <fix_polarize>`. The distinction between the physical
and interface particles is only meaningful when :doc:`fix polarize
<fix_polarize>` commands are applied to the interface particles. This
style is part of the DIELECTRIC package.
For the *dipole* style, a point dipole is defined for each point A few styles define the per-atom *rmass* attribute which can also be
particle. Note that if you wish the particles to be finite-size added using the :doc:`fix property/atom <fix_property_atom>` command.
spheres as in a Stockmayer potential for a dipolar fluid, so that the In this case each particle stores its own mass. Atom styles that have
particles can rotate due to dipole-dipole interactions, then you need a per-atom rmass may define it indirectly through setting particle
to use atom_style hybrid sphere dipole, which will assign both a diameter and density on a per-particle basis. If both per-type mass
diameter and dipole moment to each particle. and per-atom *rmass* are defined (e.g. in a hybrid style), the
per-atom mass will take precedence in any operation which which works
with both flavors of mass.
For the *electron* style, the particles representing electrons are 3d ----------
Gaussians with a specified position and bandwidth or uncertainty in
position, which is represented by the eradius = electron size.
For the *peri* style, the particles are spherical and each stores a Additional information about specific atom styles
per-particle mass and volume. """""""""""""""""""""""""""""""""""""""""""""""""
The *bpm/sphere* style is part of the BPM package.
The *oxdna* style is for coarse-grained nucleotides and stores the
3'-to-5' polarity of the nucleotide strand, which is set through
the bond topology in the data file. The first (second) atom in a
bond definition is understood to point towards the 3'-end (5'-end)
of the strand. Note that this style is part of the CG-DNA package.
The *dpd* style is for dissipative particle dynamics (DPD) particles.
Note that it is part of the DPD-REACT package, and is not for use with
the :doc:`pair_style dpd or dpd/stat <pair_dpd>` commands, which can
simply use atom_style atomic. Atom_style dpd extends DPD particle
properties with internal temperature (dpdTheta), internal conductive
energy (uCond), internal mechanical energy (uMech), and internal
chemical energy (uChem).
The *edpd* style is for energy-conserving dissipative particle
dynamics (eDPD) particles which store a temperature (edpd_temp), and
heat capacity(edpd_cv).
The *mdpd* style is for many-body dissipative particle dynamics (mDPD)
particles which store a density (rho) for considering
density-dependent many-body interactions.
The *tdpd* style is for transport dissipative particle dynamics (tDPD)
particles which store a set of chemical concentration. An integer
"cc_species" is required to specify the number of chemical species
involved in a tDPD system.
The *sph* style is for smoothed particle hydrodynamics (SPH)
particles which store a density (rho), energy (esph), and heat capacity
(cv).
The *smd* style is for a general formulation of Smooth Particle
Hydrodynamics. Both fluids and solids can be modeled. Particles
store the mass and volume of an integration point, a kernel diameter
used for calculating the field variables (e.g. stress and deformation)
and a contact radius for calculating repulsive forces which prevent
individual physical bodies from penetrating each other.
For the *spin* style, a magnetic spin is associated to each atom.
Those spins have a norm (their magnetic moment) and a direction.
The *wavepacket* style is similar to *electron*, but the electrons may
consist of several Gaussian wave packets, summed up with coefficients
cs= (cs_re,cs_im). Each of the wave packets is treated as a separate
particle in LAMMPS, wave packets belonging to the same electron must
have identical *etag* values.
For the *line* style, the particles are idealized line segments and
each stores a per-particle mass and length and orientation (i.e. the
end points of the line segment).
For the *tri* style, the particles are planar triangles and each
stores a per-particle mass and size and orientation (i.e. the corner
points of the triangle).
The *template* style allows molecular topology (bonds,angles,etc) to be
defined via a molecule template using the :doc:`molecule <molecule>`
command. The template stores one or more molecules with a single copy
of the topology info (bonds,angles,etc) of each. Individual atoms
only store a template index and template atom to identify which
molecule and which atom-within-the-molecule they represent. Using the
*template* style instead of the *bond*, *angle*, *molecular* styles
can save memory for systems comprised of a large number of small
molecules, all of a single type (or small number of types). See the
paper by Grime and Voth, in :ref:`(Grime) <Grime>`, for examples of how this
can be advantageous for large-scale coarse-grained systems.
The ``examples/template`` directory has a few demo inputs and examples
showing the use of the *template* atom style versus *molecular*.
.. note::
When using the *template* style with a :doc:`molecule template
<molecule>` that contains multiple molecules, you should ensure the
atom types, bond types, angle_types, etc in all the molecules are
consistent. E.g. if one molecule represents H2O and another CO2,
then you probably do not want each molecule file to define 2 atom
types and a single bond type, because they will conflict with each
other when a mixture system of H2O and CO2 molecules is defined,
e.g. by the :doc:`read_data <read_data>` command. Rather the H2O
molecule should define atom types 1 and 2, and bond type 1. And
the CO2 molecule should define atom types 3 and 4 (or atom types 3
and 2 if a single oxygen type is desired), and bond type 2.
For the *body* style, the particles are arbitrary bodies with internal For the *body* style, the particles are arbitrary bodies with internal
attributes defined by the "style" of the bodies, which is specified by attributes defined by the "style" of the bodies, which is specified by
@ -309,6 +282,148 @@ Note that there may be additional arguments required along with the
*bstyle* specification, in the atom_style body command. These *bstyle* specification, in the atom_style body command. These
arguments are described on the :doc:`Howto body <Howto_body>` doc page. arguments are described on the :doc:`Howto body <Howto_body>` doc page.
For the *dielectric* style, each particle can be either a physical
particle (e.g. an ion), or an interface particle representing a boundary
element between two regions of different dielectric constant. For
interface particles, in addition to the properties associated with
atom_style full, each particle also should be assigned a normal unit
vector (defined by normx, normy, normz), an area (area/patch), the
difference and mean of the dielectric constants of two sides of the
interface along the direction of the normal vector (ed and em), the
local dielectric constant at the boundary element (epsilon), and a mean
local curvature (curv). Physical particles must be assigned these
values, as well, but only their local dielectric constants will be used;
see documentation for associated :doc:`pair styles <pair_dielectric>`
and :doc:`fixes <fix_polarize>`. The distinction between the physical
and interface particles is only meaningful when :doc:`fix polarize
<fix_polarize>` commands are applied to the interface particles. This
style is part of the DIELECTRIC package.
For the *dipole* style, a point dipole vector mu is defined for each
point particle. Note that if you wish the particles to be finite-size
spheres as in a Stockmayer potential for a dipolar fluid, so that the
particles can rotate due to dipole-dipole interactions, then you need
to use the command `atom_style hybrid sphere dipole`, which will
assign both a diameter and dipole moment to each particle. This also
requires using an integrator with a "/sphere" suffix like :doc:`fix
nve/sphere <fix_nve_sphere>` or :doc:`fix nvt/sphere <fix_nvt_sphere>`
and the "update dipole" or "update dlm" parameters to the fix
commands.
The *dpd* style is for reactive dissipative particle dynamics (DPD)
particles. Note that it is part of the DPD-REACT package, and is not
required for use with the :doc:`pair_style dpd or dpd/stat <pair_dpd>`
commands, which only require the attributes from atom_style *atomic*.
Atom_style *dpd* extends DPD particle properties with internal
temperature (dpdTheta), internal conductive energy (uCond), internal
mechanical energy (uMech), and internal chemical energy (uChem).
The *edpd* style is for energy-conserving dissipative particle
dynamics (eDPD) particles which store a temperature (edpd_temp), and
heat capacity (edpd_cv).
For the *electron* style, the particles representing electrons are 3d
Gaussians with a specified position and bandwidth or uncertainty in
position, which is represented by the eradius = electron size.
For the *ellipsoid* style, particles can be ellipsoids which each
stores a shape vector with the 3 diameters of the ellipsoid and a
quaternion 4-vector with its orientation. Each particle stores a flag
in the ellipsoid vector which indicates whether it is an ellipsoid (1)
or a point particle (0).
For the *line* style, particles can be are idealized line segments
which store a per-particle mass and length and orientation (i.e. the
end points of the line segment). Each particle stores a flag in the
line vector which indicates whether it is a line segment (1) or a
point particle (0).
The *mdpd* style is for many-body dissipative particle dynamics (mDPD)
particles which store a density (rho) for considering density-dependent
many-body interactions.
The *oxdna* style is for coarse-grained nucleotides and stores the
3'-to-5' polarity of the nucleotide strand, which is set through
the bond topology in the data file. The first (second) atom in a
bond definition is understood to point towards the 3'-end (5'-end)
of the strand.
For the *peri* style, the particles are spherical and each stores a
per-particle mass and volume.
The *smd* style is for Smooth Particle Mach dynamics. Both fluids and
solids can be modeled. Particles store the mass and volume of an
integration point, a kernel diameter used for calculating the field
variables (e.g. stress and deformation) and a contact radius for
calculating repulsive forces which prevent individual physical bodies
from penetrating each other.
The *sph* style is for smoothed particle hydrodynamics (SPH) particles
which store a density (rho), energy (esph), and heat capacity (cv).
For the *spin* style, a magnetic spin is associated with each atom.
Those spins have a norm (their magnetic moment) and a direction.
The *tdpd* style is for transport dissipative particle dynamics (tDPD)
particles which store a set of chemical concentration. An integer
"cc_species" is required to specify the number of chemical species
involved in a tDPD system.
The *wavepacket* style is similar to the *electron* style, but the
electrons may consist of several Gaussian wave packets, summed up with
coefficients cs= (cs_re,cs_im). Each of the wave packets is treated
as a separate particle in LAMMPS, wave packets belonging to the same
electron must have identical *etag* values.
The *sphere* and *bpm/sphere* styles allow particles to be either point
particles or finite-size particles. If the *radius* attribute is >
0.0, the particle is a finite-size sphere. If the diameter = 0.0, it
is a point particle. Note that by using the *disc* keyword with the
:doc:`fix nve/sphere <fix_nve_sphere>`, :doc:`fix nvt/sphere
<fix_nvt_sphere>`, :doc:`fix nph/sphere <fix_nph_sphere>`, :doc:`fix
npt/sphere <fix_npt_sphere>` commands for the *sphere* style, spheres
can be effectively treated as 2d discs for a 2d simulation if desired.
See also the :doc:`set density/disc <set>` command. These styles also
take an optional 0 or 1 argument. A value of 0 means the radius of
each sphere is constant for the duration of the simulation (this is
the default). A value of 1 means the radii may vary dynamically
during the simulation, e.g. due to use of the :doc:`fix adapt
<fix_adapt>` command.
The *template* style allows molecular topology (bonds,angles,etc) to be
defined via a molecule template using the :doc:`molecule <molecule>`
command. The template stores one or more molecules with a single copy
of the topology info (bonds,angles,etc) of each. Individual atoms only
store a template index and template atom to identify which molecule and
which atom-within-the-molecule they represent. Using the *template*
style instead of the *bond*, *angle*, *molecular* styles can save memory
for systems comprised of a large number of small molecules, all of a
single type (or small number of types). See the paper by Grime and
Voth, in :ref:`(Grime) <Grime>`, for examples of how this can be
advantageous for large-scale coarse-grained systems. The
``examples/template`` directory has a few demo inputs and examples
showing the use of the *template* atom style versus *molecular*.
.. note::
When using the *template* style with a :doc:`molecule template
<molecule>` that contains multiple molecules, you should ensure the
atom types, bond types, angle_types, etc in all the molecules are
consistent. E.g. if one molecule represents H2O and another CO2,
then you probably do not want each molecule file to define 2 atom
types and a single bond type, because they will conflict with each
other when a mixture system of H2O and CO2 molecules is defined,
e.g. by the :doc:`read_data <read_data>` command. Rather the H2O
molecule should define atom types 1 and 2, and bond type 1. And
the CO2 molecule should define atom types 3 and 4 (or atom types 3
and 2 if a single oxygen type is desired), and bond type 2.
For the *tri* style, particles can be planar triangles which each
stores a per-particle mass and size and orientation (i.e. the corner
points of the triangle). Each particle stores a flag in the tri
vector which indicates whether it is a triangle (1) or a point
particle (0).
---------- ----------
Typically, simulations require only a single (non-hybrid) atom style. Typically, simulations require only a single (non-hybrid) atom style.
@ -326,11 +441,12 @@ dipole". When a hybrid style is used, atoms store and communicate the
union of all quantities implied by the individual styles. union of all quantities implied by the individual styles.
When using the *hybrid* style, you cannot combine the *template* style When using the *hybrid* style, you cannot combine the *template* style
with another molecular style that stores bond,angle,etc info on a with another molecular style that stores bond, angle, etc info on a
per-atom basis. per-atom basis.
LAMMPS can be extended with new atom styles as well as new body LAMMPS can be extended with new atom styles as well as new body styles;
styles; see the :doc:`Modify <Modify>` doc page. see the corresponding manual page on :doc:`modifying & extending LAMMPS
<Modify_atom>`.
---------- ----------
@ -346,54 +462,20 @@ This command cannot be used after the simulation box is defined by a
Many of the styles listed above are only enabled if LAMMPS was built Many of the styles listed above are only enabled if LAMMPS was built
with a specific package, as listed below. See the :doc:`Build package with a specific package, as listed below. See the :doc:`Build package
<Build_package>` page for more info. <Build_package>` page for more info. The table above lists which package
is required for individual atom styles.
The *amoeba* style is part of the AMOEBA package.
The *angle*, *bond*, *full*, *molecular*, and *template* styles are
part of the MOLECULE package.
The *line* and *tri* styles are part of the ASPHERE package.
The *body* style is part of the BODY package.
The *dipole* style is part of the DIPOLE package.
The *peri* style is part of the PERI package for Peridynamics.
The *oxdna* style is part of the CG-DNA package for coarse-grained
simulation of DNA and RNA.
The *electron* style is part of the EFF package for :doc:`electronic
force fields <pair_eff>`.
The *dpd* style is part of the DPD-REACT package for dissipative
particle dynamics (DPD).
The *edpd*, *mdpd*, and *tdpd* styles are part of the DPD-MESO package
for energy-conserving dissipative particle dynamics (eDPD), many-body
dissipative particle dynamics (mDPD), and transport dissipative particle
dynamics (tDPD), respectively.
The *sph* style is part of the SPH package for smoothed particle
hydrodynamics (SPH). See `this PDF guide
<PDF/SPH_LAMMPS_userguide.pdf>`_ to using SPH in LAMMPS.
The *spin* style is part of the SPIN package.
The *wavepacket* style is part of the AWPMD package for the
:doc:`antisymmetrized wave packet MD method <pair_awpmd>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`read_data <read_data>`, :doc:`pair_style <pair_style>` :doc:`read_data <read_data>`, :doc:`pair_style <pair_style>`,
:doc:`fix property/atom <fix_property_atom>`, :doc:`set <set>`
Default Default
""""""" """""""
The default atom style is atomic. If atom_style sphere is used its The default atom style is *atomic*. If atom_style *sphere* or
default argument is 0. *bpm/sphere* is used, its default argument is 0.
---------- ----------

View File

@ -11,7 +11,16 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
bond_style lepton bond_style style args
* style = *lepton*
* args = optional arguments
.. parsed-literal::
args = *auto_offset* or *no_offset*
*auto_offset* = offset the potential energy so that the value at r0 is 0.0 (default)
*no_offset* = do not offset the potential energy
Examples Examples
"""""""" """"""""
@ -19,6 +28,7 @@ Examples
.. code-block:: LAMMPS .. code-block:: LAMMPS
bond_style lepton bond_style lepton
bond_style lepton no_offset
bond_coeff 1 1.5 "k*r^2; k=250.0" bond_coeff 1 1.5 "k*r^2; k=250.0"
bond_coeff 2 1.1 "k2*r^2 + k3*r^3 + k4*r^4; k2=300.0; k3=-100.0; k4=50.0" bond_coeff 2 1.1 "k2*r^2 + k3*r^3 + k4*r^4; k2=300.0; k3=-100.0; k4=50.0"
@ -40,6 +50,13 @@ constant *K* of 200.0 energy units:
U_{bond,i} = K (r_i - r_0)^2 = K r^2 \qquad r = r_i - r_0 U_{bond,i} = K (r_i - r_0)^2 = K r^2 \qquad r = r_i - r_0
.. versionchanged:: 7Feb2024
By default the potential energy U is shifted so that he value U is 0.0
for $r = r_0$. This is equivalent to using the optional keyword
*auto_offset*. When using the keyword *no_offset* instead, the
potential energy is not shifted.
The `Lepton library <https://simtk.org/projects/lepton>`_, that the The `Lepton library <https://simtk.org/projects/lepton>`_, that the
*lepton* bond style interfaces with, evaluates this expression string at *lepton* bond style interfaces with, evaluates this expression string at
run time to compute the pairwise energy. It also creates an analytical run time to compute the pairwise energy. It also creates an analytical

View File

@ -204,8 +204,23 @@ angles per atom satisfying the ADF criteria.
Restrictions Restrictions
"""""""""""" """"""""""""
This compute is part of the EXTRA-COMPUTE package. It is only enabled if This compute is part of the EXTRA-COMPUTE package. It is only enabled
LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info. if LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
By default, the ADF is not computed for distances longer than the
largest force cutoff, since the neighbor list creation will only contain
pairs up to that distance (plus neighbor list skin). If you use outer
cutoffs larger than that, you must use :doc:`neighbor style 'bin' or
'nsq' <neighbor>`.
If you want an ADF for a larger outer cutoff, you can also use the
:doc:`rerun <rerun>` command to post-process a dump file, use :doc:`pair
style zero <pair_zero>` and set the force cutoff to be larger in the
rerun script. Note that in the rerun context, the force cutoff is
arbitrary and with pair style zero you are not computing any forces, and
since you are not running dynamics you are not changing the model that
generated the trajectory.
The ADF is not computed for neighbors outside the force cutoff, The ADF is not computed for neighbors outside the force cutoff,
since processors (in parallel) don't know about atom coordinates for since processors (in parallel) don't know about atom coordinates for

View File

@ -102,6 +102,8 @@ This compute is part of the EXTRA-COMPUTE package. It is only enabled
if LAMMPS was built with that package. See the :doc:`Build package if LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info. <Build_package>` page for more info.
This compute requires :doc:`neighbor styles 'bin' or 'nsq' <neighbor>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -107,6 +107,8 @@ This compute is part of the EXTRA-COMPUTE package. It is only enabled
if LAMMPS was built with that package. See the :doc:`Build package if LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info. <Build_package>` page for more info.
This compute requires :doc:`neighbor styles 'bin' or 'nsq' <neighbor>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -106,6 +106,8 @@ Restrictions
This compute is part of the EXTRA-COMPUTE package. It is only enabled if This compute is part of the EXTRA-COMPUTE package. It is only enabled if
LAMMPS was built with that package. LAMMPS was built with that package.
This compute requires :doc:`neighbor styles 'bin' or 'nsq' <neighbor>`.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -64,7 +64,7 @@ tangential force tensor. The contact tensor is calculated as
.. math:: .. math::
C_{ab} = \frac{15}{2} (\phi_{ab} - \mathrm{Tr}(\phi) \delta_{ab}) C_{ab} = \frac{15}{2} (\phi_{ab} - \frac{1}{3} \mathrm{Tr}(\phi) \delta_{ab})
where :math:`a` and :math:`b` are the :math:`x`, :math:`y`, :math:`z` where :math:`a` and :math:`b` are the :math:`x`, :math:`y`, :math:`z`
directions, :math:`\delta_{ab}` is the Kronecker delta function, and directions, :math:`\delta_{ab}` is the Kronecker delta function, and
@ -83,7 +83,7 @@ The branch tensor is calculated as
.. math:: .. math::
B_{ab} = \frac{15}{6 \mathrm{Tr}(D)} (D_{ab} - \mathrm{Tr}(D) \delta_{ab}) B_{ab} = \frac{15}{2\, \mathrm{Tr}(D)} (D_{ab} - \frac{1}{3} \mathrm{Tr}(D) \delta_{ab})
where the tensor :math:`D` is defined as where the tensor :math:`D` is defined as
@ -101,7 +101,7 @@ The normal force fabric tensor is calculated as
.. math:: .. math::
F^n_{ab} = \frac{15}{6\, \mathrm{Tr}(N)} (N_{ab} - \mathrm{Tr}(N) \delta_{ab}) F^n_{ab} = \frac{15}{2\, \mathrm{Tr}(N)} (N_{ab} - \frac{1}{3} \mathrm{Tr}(N) \delta_{ab})
where the tensor :math:`N` is defined as where the tensor :math:`N` is defined as
@ -119,7 +119,7 @@ as
.. math:: .. math::
F^t_{ab} = \frac{15}{9\, \mathrm{Tr}(N)} (T_{ab} - \mathrm{Tr}(T) \delta_{ab}) F^t_{ab} = \frac{5}{\mathrm{Tr}(N)} (T_{ab} - \frac{1}{3} \mathrm{Tr}(T) \delta_{ab})
where the tensor :math:`T` is defined as where the tensor :math:`T` is defined as

View File

@ -36,7 +36,7 @@ Examples
Description Description
""""""""""" """""""""""
.. versionadded:: TBD .. versionadded:: 7Feb2024
This compute calculates a set of quantities related to the atomic This compute calculates a set of quantities related to the atomic
cluster expansion (ACE) descriptors of the atoms in a group. ACE cluster expansion (ACE) descriptors of the atoms in a group. ACE

View File

@ -153,7 +153,8 @@ Related commands
Default Default
""""""" """""""
none By default the compute includes contributions from the keywords:
``ke pair bond angle dihedral improper kspace fix``
---------- ----------

View File

@ -23,8 +23,9 @@ Syntax
spx, spy, spz, sp, fmx, fmy, fmz, spx, spy, spz, sp, fmx, fmy, fmz,
nbonds, nbonds,
radius, diameter, omegax, omegay, omegaz, radius, diameter, omegax, omegay, omegaz,
temperature, heatflow,
angmomx, angmomy, angmomz, angmomx, angmomy, angmomz,
shapex,shapey, shapez, shapex, shapey, shapez,
quatw, quati, quatj, quatk, tqx, tqy, tqz, quatw, quati, quatj, quatk, tqx, tqy, tqz,
end1x, end1y, end1z, end2x, end2y, end2z, end1x, end1y, end1z, end2x, end2y, end2z,
corner1x, corner1y, corner1z, corner1x, corner1y, corner1z,
@ -56,6 +57,8 @@ Syntax
*nbonds* = number of bonds assigned to an atom *nbonds* = number of bonds assigned to an atom
*radius,diameter* = radius,diameter of spherical particle *radius,diameter* = radius,diameter of spherical particle
*omegax,omegay,omegaz* = angular velocity of spherical particle *omegax,omegay,omegaz* = angular velocity of spherical particle
*temperature* = internal temperature of spherical particle
*heatflow* = internal heat flow of spherical particle
*angmomx,angmomy,angmomz* = angular momentum of aspherical particle *angmomx,angmomy,angmomz* = angular momentum of aspherical particle
*shapex,shapey,shapez* = 3 diameters of aspherical particle *shapex,shapey,shapez* = 3 diameters of aspherical particle
*quatw,quati,quatj,quatk* = quaternion components for aspherical or body particles *quatw,quati,quatj,quatk* = quaternion components for aspherical or body particles

View File

@ -32,7 +32,7 @@ Examples
Description Description
""""""""""" """""""""""
.. versionadded:: TBD .. versionadded:: 7Feb2024
Define a compute that identifies rattlers in a system. Rattlers are often Define a compute that identifies rattlers in a system. Rattlers are often
identified in granular or glassy packings as under-coordinated atoms that identified in granular or glassy packings as under-coordinated atoms that

View File

@ -176,22 +176,29 @@ also numbers :math:`\ge 0.0`.
Restrictions Restrictions
"""""""""""" """"""""""""
The RDF is not computed for distances longer than the force cutoff, By default, the RDF is not computed for distances longer than the
since processors (in parallel) do not know about atom coordinates for largest force cutoff, since the neighbor list creation will only contain
atoms further away than that distance. If you want an RDF for larger pairs up to that distance (plus neighbor list skin). This distance can
distances, you can use the :doc:`rerun <rerun>` command to post-process be increased using the *cutoff* keyword but this keyword is only valid
a dump file and set the cutoff for the potential to be longer in the with :doc:`neighbor styles 'bin' and 'nsq' <neighbor>`.
If you want an RDF for larger distances, you can also use the
:doc:`rerun <rerun>` command to post-process a dump file, use :doc:`pair
style zero <pair_zero>` and set the force cutoff to be longer in the
rerun script. Note that in the rerun context, the force cutoff is rerun script. Note that in the rerun context, the force cutoff is
arbitrary, since you are not running dynamics and thus are not changing arbitrary and with pair style zero you are not computing any forces, and
your model. The definition of :math:`g(r)` used by LAMMPS is only appropriate you are not running dynamics you are not changing the model that
for characterizing atoms that are uniformly distributed throughout the generated the trajectory.
simulation cell. In such cases, the coordination number is still
correct and meaningful. As an example, if a large simulation cell The definition of :math:`g(r)` used by LAMMPS is only appropriate for
contains only one atom of type *itypeN* and one of *jtypeN*, then :math:`g(r)` characterizing atoms that are uniformly distributed throughout the
will register an arbitrarily large spike at whatever distance they simulation cell. In such cases, the coordination number is still correct
happen to be at, and zero everywhere else. and meaningful. As an example, if a large simulation cell contains only
The function :math:`\text{coord}(r)` will show a step one atom of type *itypeN* and one of *jtypeN*, then :math:`g(r)` will
change from zero to one at the location of the spike in :math:`g(r)`. register an arbitrarily large spike at whatever distance they happen to
be at, and zero everywhere else. The function :math:`\text{coord}(r)`
will show a step change from zero to one at the location of the spike in
:math:`g(r)`.
.. note:: .. note::

View File

@ -40,7 +40,7 @@ Examples
Description Description
""""""""""" """""""""""
.. versionadded:: TBD .. versionadded:: 7Feb2024
Define a computation that extracts bond information computed by the ReaxFF Define a computation that extracts bond information computed by the ReaxFF
potential specified by :doc:`pair_style reaxff <pair_reaxff>`. potential specified by :doc:`pair_style reaxff <pair_reaxff>`.

View File

@ -56,8 +56,9 @@ Examples
compute 1 all reduce sum c_force compute 1 all reduce sum c_force
compute 1 all reduce/region subbox sum c_force compute 1 all reduce/region subbox sum c_force
compute 2 all reduce min c_press[2] f_ave v_myKE compute 2 all reduce min c_press[2] f_ave v_myKE
compute 2 all reduce min c_press[*] f_ave v_myKE compute 2 all reduce min c_press[*] f_ave v_myKE inputs peratom
compute 3 fluid reduce max c_index[1] c_index[2] c_dist replace 1 3 replace 2 3 compute 3 fluid reduce max c_index[1] c_index[2] c_dist replace 1 3 replace 2 3
compute 4 all reduce max c_bond inputs local
Description Description
""""""""""" """""""""""

View File

@ -32,7 +32,7 @@ Examples
Description Description
""""""""""" """""""""""
.. versionadded:: TBD .. versionadded:: 7Feb2024
Define a computation that performs the Supervised Learning Crystal Define a computation that performs the Supervised Learning Crystal
Structure Analysis (SL-CSA) from :ref:`(Lafourcade) <Lafourcade2023_1>` Structure Analysis (SL-CSA) from :ref:`(Lafourcade) <Lafourcade2023_1>`

View File

@ -289,7 +289,8 @@ Related commands
Default Default
""""""" """""""
none By default the compute includes contributions from the keywords:
``ke pair bond angle dihedral improper kspace fix``
---------- ----------

View File

@ -132,10 +132,13 @@ size does not change in time, and axis-aligned planes.
The method only works with two-body pair interactions, because it The method only works with two-body pair interactions, because it
requires the class method ``Pair::single()`` to be implemented, which is requires the class method ``Pair::single()`` to be implemented, which is
not possible for manybody potentials. In particular, compute not possible for manybody potentials. In particular, compute
*stress/mop/profile* and *stress/mop* do not work with more than two-body pair *stress/mop/profile* and *stress/mop* do not work with more than two-body
interactions, long range (kspace) interactions and pair interactions, long range (kspace) interactions and
improper intramolecular interactions. improper intramolecular interactions.
The impact of fixes that affect the stress (e.g. fix langevin) is
also not included in the stress computed here.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -268,6 +268,12 @@ molecule can be specified in the molecule file. See the
required to be in this file are the coordinates and types of atoms in required to be in this file are the coordinates and types of atoms in
the molecule. the molecule.
.. note::
If you are using the *mol* keyword in combination with the
:doc:`atom style template <atom_style>` command, they must use
the same molecule template-ID.
Using a lattice to add molecules, e.g. via the *box* or *region* or Using a lattice to add molecules, e.g. via the *box* or *region* or
*single* styles, is exactly the same as adding atoms on lattice *single* styles, is exactly the same as adding atoms on lattice
points, except that entire molecules are added at each point, i.e. on points, except that entire molecules are added at each point, i.e. on
@ -536,6 +542,11 @@ command.
A rotation vector specified for a single molecule must be in A rotation vector specified for a single molecule must be in
the z-direction for a 2d model. the z-direction for a 2d model.
For :doc:`molecule templates <molecule>` that are created from multiple
files, i.e. contain multiple molecule *sets*, only the first set is
used. To create multiple molecules the files currently need to be
merged and different molecule IDs assigned with a Molecules section.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -3,6 +3,7 @@
.. index:: dihedral_style charmm/kk .. index:: dihedral_style charmm/kk
.. index:: dihedral_style charmm/omp .. index:: dihedral_style charmm/omp
.. index:: dihedral_style charmmfsw .. index:: dihedral_style charmmfsw
.. index:: dihedral_style charmmfsw/kk
dihedral_style charmm command dihedral_style charmm command
============================= =============================
@ -12,6 +13,8 @@ Accelerator Variants: *charmm/intel*, *charmm/kk*, *charmm/omp*
dihedral_style charmmfsw command dihedral_style charmmfsw command
================================ ================================
Accelerator Variants: *charmmfsw/kk*
Syntax Syntax
"""""" """"""
@ -144,7 +147,9 @@ for more info.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`dihedral_coeff <dihedral_coeff>` :doc:`dihedral_coeff <dihedral_coeff>`,
:doc:`pair_style lj/charmm variants <pair_charmm>`,
:doc:`angle_style charmm <angle_charmm>`, :doc:`fix cmap <fix_cmap>`
Default Default
""""""" """""""

View File

@ -104,7 +104,6 @@ Syntax
q, mux, muy, muz, mu, q, mux, muy, muz, mu,
radius, diameter, omegax, omegay, omegaz, radius, diameter, omegax, omegay, omegaz,
angmomx, angmomy, angmomz, tqx, tqy, tqz, angmomx, angmomy, angmomz, tqx, tqy, tqz,
heatflow, temperature,
c_ID, c_ID[I], f_ID, f_ID[I], v_name, c_ID, c_ID[I], f_ID, f_ID[I], v_name,
i_name, d_name, i2_name[I], d2_name[I] i_name, d_name, i2_name[I], d2_name[I]
@ -131,8 +130,6 @@ Syntax
omegax,omegay,omegaz = angular velocity of spherical particle omegax,omegay,omegaz = angular velocity of spherical particle
angmomx,angmomy,angmomz = angular momentum of aspherical particle angmomx,angmomy,angmomz = angular momentum of aspherical particle
tqx,tqy,tqz = torque on finite-size particles tqx,tqy,tqz = torque on finite-size particles
heatflow = rate of heat flow into particle
temperature = temperature of particle
c_ID = per-atom vector calculated by a compute with ID c_ID = per-atom vector calculated by a compute with ID
c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below) c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
f_ID = per-atom vector calculated by a fix with ID f_ID = per-atom vector calculated by a fix with ID

View File

@ -226,6 +226,7 @@ accelerated styles exist.
* :doc:`controller <fix_controller>` - apply control loop feedback mechanism * :doc:`controller <fix_controller>` - apply control loop feedback mechanism
* :doc:`damping/cundall <fix_damping_cundall>` - Cundall non-viscous damping for granular simulations * :doc:`damping/cundall <fix_damping_cundall>` - Cundall non-viscous damping for granular simulations
* :doc:`deform <fix_deform>` - change the simulation box size/shape * :doc:`deform <fix_deform>` - change the simulation box size/shape
* :doc:`deform/pressure <fix_deform_pressure>` - change the simulation box size/shape with additional loading conditions
* :doc:`deposit <fix_deposit>` - add new atoms above a surface * :doc:`deposit <fix_deposit>` - add new atoms above a surface
* :doc:`dpd/energy <fix_dpd_energy>` - constant energy dissipative particle dynamics * :doc:`dpd/energy <fix_dpd_energy>` - constant energy dissipative particle dynamics
* :doc:`drag <fix_drag>` - drag atoms towards a defined coordinate * :doc:`drag <fix_drag>` - drag atoms towards a defined coordinate
@ -427,6 +428,7 @@ accelerated styles exist.
* :doc:`wall/body/polyhedron <fix_wall_body_polyhedron>` - time integration for body particles of style :doc:`rounded/polyhedron <Howto_body>` * :doc:`wall/body/polyhedron <fix_wall_body_polyhedron>` - time integration for body particles of style :doc:`rounded/polyhedron <Howto_body>`
* :doc:`wall/colloid <fix_wall>` - Lennard-Jones wall interacting with finite-size particles * :doc:`wall/colloid <fix_wall>` - Lennard-Jones wall interacting with finite-size particles
* :doc:`wall/ees <fix_wall_ees>` - wall for ellipsoidal particles * :doc:`wall/ees <fix_wall_ees>` - wall for ellipsoidal particles
* :doc:`wall/flow <fix_wall_flow>` - flow boundary conditions
* :doc:`wall/gran <fix_wall_gran>` - frictional wall(s) for granular simulations * :doc:`wall/gran <fix_wall_gran>` - frictional wall(s) for granular simulations
* :doc:`wall/gran/region <fix_wall_gran_region>` - :doc:`fix wall/region <fix_wall_region>` equivalent for use with granular particles * :doc:`wall/gran/region <fix_wall_gran_region>` - :doc:`fix wall/region <fix_wall_region>` equivalent for use with granular particles
* :doc:`wall/harmonic <fix_wall>` - harmonic spring wall * :doc:`wall/harmonic <fix_wall>` - harmonic spring wall

View File

@ -14,15 +14,15 @@ Syntax
* balance = style name of this fix command * balance = style name of this fix command
* Nfreq = perform dynamic load balancing every this many steps * Nfreq = perform dynamic load balancing every this many steps
* thresh = imbalance threshold that must be exceeded to perform a re-balance * thresh = imbalance threshold that must be exceeded to perform a re-balance
* style = *shift* or *rcb* * style = *shift* or *rcb* or *report*
.. parsed-literal:: .. parsed-literal::
shift args = dimstr Niter stopthresh *shift* args = dimstr Niter stopthresh
dimstr = sequence of letters containing *x* or *y* or *z*, each not more than once dimstr = sequence of letters containing *x* or *y* or *z*, each not more than once
Niter = # of times to iterate within each dimension of dimstr sequence Niter = # of times to iterate within each dimension of dimstr sequence
stopthresh = stop balancing when this imbalance threshold is reached stopthresh = stop balancing when this imbalance threshold is reached
*rcb* args = none *rcb* args = none
*report* args = none
* zero or more keyword/arg pairs may be appended * zero or more keyword/arg pairs may be appended
* keyword = *weight* or *out* * keyword = *weight* or *out*
@ -70,6 +70,13 @@ re-balancing is performed periodically during the simulation. To
perform "static" balancing, before or between runs, see the perform "static" balancing, before or between runs, see the
:doc:`balance <balance>` command. :doc:`balance <balance>` command.
.. versionadded:: TBD
The *report* balance style only computes the load imbalance but
does not attempt any re-balancing. This way the load imbalance
information can be used otherwise, for instance for stopping a
run with :doc:`fix halt <fix_halt>`.
Load-balancing is typically most useful if the particles in the Load-balancing is typically most useful if the particles in the
simulation box have a spatially-varying density distribution or simulation box have a spatially-varying density distribution or
where the computational cost varies significantly between different where the computational cost varies significantly between different

View File

@ -253,11 +253,11 @@ built with that package. See the :doc:`Build package <Build_package>`
page for more info. page for more info.
The :doc:`atom_style <atom_style>`, used must contain the charge The :doc:`atom_style <atom_style>`, used must contain the charge
property, for example, the style could be *charge* or *full*. Only property and have per atom type masses, for example, the style could be
usable for 3D simulations. Atoms specified as free ions cannot be part *charge* or *full*. Only usable for 3D simulations. Atoms specified as
of rigid bodies or molecules and cannot have bonding interactions. The free ions cannot be part of rigid bodies or molecules and cannot have
scheme is limited to integer charges, any atoms with non-integer charges bonding interactions. The scheme is limited to integer charges, any
will not be considered by the fix. atoms with non-integer charges will not be considered by the fix.
All interaction potentials used must be continuous, otherwise the MD All interaction potentials used must be continuous, otherwise the MD
integration and the particle exchange MC moves do not correspond to the integration and the particle exchange MC moves do not correspond to the

View File

@ -4,6 +4,9 @@
fix deform command fix deform command
================== ==================
:doc:`fix deform/pressure <fix_deform_pressure>` command
========================================================
Accelerator Variants: *deform/kk* Accelerator Variants: *deform/kk*
Syntax Syntax
@ -11,18 +14,18 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
fix ID group-ID deform N parameter args ... keyword value ... fix ID group-ID fix_style N parameter style args ... keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* deform = style name of this fix command * fix_style = *deform* or *deform/pressure*
* N = perform box deformation every this many timesteps * N = perform box deformation every this many timesteps
* one or more parameter/arg pairs may be appended * one or more parameter/style/args sequences of arguments may be appended
.. parsed-literal:: .. parsed-literal::
parameter = *x* or *y* or *z* or *xy* or *xz* or *yz* parameter = *x* or *y* or *z* or *xy* or *xz* or *yz*
*x*, *y*, *z* args = style value(s) *x*, *y*, *z* args = style value(s)
style = *final* or *delta* or *scale* or *vel* or *erate* or *trate* or *volume* or *wiggle* or *variable* style = *final* or *delta* or *scale* or *vel* or *erate* or *trate* or *volume* or *wiggle* or *variable* or *pressure* or *pressure/mean*
*final* values = lo hi *final* values = lo hi
lo hi = box boundaries at end of run (distance units) lo hi = box boundaries at end of run (distance units)
*delta* values = dlo dhi *delta* values = dlo dhi
@ -43,8 +46,15 @@ Syntax
*variable* values = v_name1 v_name2 *variable* values = v_name1 v_name2
v_name1 = variable with name1 for box length change as function of time v_name1 = variable with name1 for box length change as function of time
v_name2 = variable with name2 for change rate as function of time v_name2 = variable with name2 for change rate as function of time
*pressure* values = target gain (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
*pressure/mean* values = target gain (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
*xy*, *xz*, *yz* args = style value *xy*, *xz*, *yz* args = style value
style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable*
*final* value = tilt *final* value = tilt
tilt = tilt factor at end of run (distance units) tilt = tilt factor at end of run (distance units)
*delta* value = dtilt *delta* value = dtilt
@ -62,9 +72,12 @@ Syntax
*variable* values = v_name1 v_name2 *variable* values = v_name1 v_name2
v_name1 = variable with name1 for tilt change as function of time v_name1 = variable with name1 for tilt change as function of time
v_name2 = variable with name2 for change rate as function of time v_name2 = variable with name2 for change rate as function of time
*pressure* values = target gain (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
* zero or more keyword/value pairs may be appended * zero or more keyword/value pairs may be appended
* keyword = *remap* or *flip* or *units* * keyword = *remap* or *flip* or *units* or *couple* or *vol/balance/p* or *max/rate* or *normalize/pressure*
.. parsed-literal:: .. parsed-literal::
@ -77,6 +90,15 @@ Syntax
*units* value = *lattice* or *box* *units* value = *lattice* or *box*
lattice = distances are defined in lattice units lattice = distances are defined in lattice units
box = distances are defined in simulation box units box = distances are defined in simulation box units
*couple* value = *none* or *xyz* or *xy* or *yz* or *xz* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
couple pressure values of various dimensions
*vol/balance/p* value = *yes* or *no* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
Modifies the behavior of the *volume* option to try and balance pressures
*max/rate* value = *rate* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
rate = maximum strain rate for pressure control
*normalize/pressure* value = *yes* or *no* (ONLY available in :doc:`fix deform/pressure <fix_deform_pressure>` command)
Modifies pressure controls such that the deviation in pressure is normalized by the target pressure
Examples Examples
"""""""" """"""""
@ -88,6 +110,8 @@ Examples
fix 1 all deform 1 xy erate 0.001 remap v fix 1 all deform 1 xy erate 0.001 remap v
fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.0 fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.0
See examples for :doc:`fix deform/pressure <fix_deform_pressure>` on its doc page
Description Description
""""""""""" """""""""""
@ -95,29 +119,46 @@ Change the volume and/or shape of the simulation box during a dynamics
run. Orthogonal simulation boxes have 3 adjustable parameters run. Orthogonal simulation boxes have 3 adjustable parameters
(x,y,z). Triclinic (non-orthogonal) simulation boxes have 6 (x,y,z). Triclinic (non-orthogonal) simulation boxes have 6
adjustable parameters (x,y,z,xy,xz,yz). Any or all of them can be adjustable parameters (x,y,z,xy,xz,yz). Any or all of them can be
adjusted independently and simultaneously by this command. adjusted independently and simultaneously.
This fix can be used to perform non-equilibrium MD (NEMD) simulations The fix deform command allows use of all the arguments listed above,
of a continuously strained system. See the :doc:`fix nvt/sllod <fix_nvt_sllod>` and :doc:`compute temp/deform <compute_temp_deform>` commands for more details. Note except those flagged as available ONLY for the :doc:`fix
that simulation of a continuously extended system (extensional flow) deform/pressure <fix_deform_pressure>` command, which are
can be modeled using the :ref:`UEF package <PKG-UEF>` and its :doc:`fix commands <fix_nh_uef>`. pressure-based controls. The fix deform/pressure command allows use
of all the arguments listed above.
The rest of this doc page explains the options common to both
commands. The :doc:`fix deform/pressure <fix_deform_pressure>` doc
page explains the options available ONLY with the fix deform/pressure
command. Note that a simulation can define only a single deformation
command: fix deform or fix deform/pressure.
Both these fixes can be used to perform non-equilibrium MD (NEMD)
simulations of a continuously strained system. See the :doc:`fix
nvt/sllod <fix_nvt_sllod>` and :doc:`compute temp/deform
<compute_temp_deform>` commands for more details. Note that
simulation of a continuously extended system (extensional flow) can be
modeled using the :ref:`UEF package <PKG-UEF>` and its :doc:`fix
commands <fix_nh_uef>`.
For the *x*, *y*, *z* parameters, the associated dimension cannot be For the *x*, *y*, *z* parameters, the associated dimension cannot be
shrink-wrapped. For the *xy*, *yz*, *xz* parameters, the associated shrink-wrapped. For the *xy*, *yz*, *xz* parameters, the associated
second dimension cannot be shrink-wrapped. Dimensions not varied by this second dimension cannot be shrink-wrapped. Dimensions not varied by
command can be periodic or non-periodic. Dimensions corresponding to this command can be periodic or non-periodic. Dimensions
unspecified parameters can also be controlled by a :doc:`fix npt <fix_nh>` or :doc:`fix nph <fix_nh>` command. corresponding to unspecified parameters can also be controlled by a
:doc:`fix npt <fix_nh>` or :doc:`fix nph <fix_nh>` command.
The size and shape of the simulation box at the beginning of the The size and shape of the simulation box at the beginning of the
simulation run were either specified by the simulation run were either specified by the :doc:`create_box
:doc:`create_box <create_box>` or :doc:`read_data <read_data>` or <create_box>` or :doc:`read_data <read_data>` or :doc:`read_restart
:doc:`read_restart <read_restart>` command used to setup the simulation <read_restart>` command used to setup the simulation initially if it
initially if it is the first run, or they are the values from the end is the first run, or they are the values from the end of the previous
of the previous run. The :doc:`create_box <create_box>`, :doc:`read data <read_data>`, and :doc:`read_restart <read_restart>` commands run. The :doc:`create_box <create_box>`, :doc:`read data
specify whether the simulation box is orthogonal or non-orthogonal <read_data>`, and :doc:`read_restart <read_restart>` commands specify
(triclinic) and explain the meaning of the xy,xz,yz tilt factors. If whether the simulation box is orthogonal or non-orthogonal (triclinic)
fix deform changes the xy,xz,yz tilt factors, then the simulation box and explain the meaning of the xy,xz,yz tilt factors. If fix deform
must be triclinic, even if its initial tilt factors are 0.0. changes the xy,xz,yz tilt factors, then the simulation box must be
triclinic, even if its initial tilt factors are 0.0.
As described below, the desired simulation box size and shape at the As described below, the desired simulation box size and shape at the
end of the run are determined by the parameters of the fix deform end of the run are determined by the parameters of the fix deform
@ -258,21 +299,22 @@ of the units keyword below.
The *variable* style changes the specified box length dimension by The *variable* style changes the specified box length dimension by
evaluating a variable, which presumably is a function of time. The evaluating a variable, which presumably is a function of time. The
variable with *name1* must be an :doc:`equal-style variable <variable>` variable with *name1* must be an :doc:`equal-style variable
and should calculate a change in box length in units of distance. <variable>` and should calculate a change in box length in units of
Note that this distance is in box units, not lattice units; see the distance. Note that this distance is in box units, not lattice units;
discussion of the *units* keyword below. The formula associated with see the discussion of the *units* keyword below. The formula
variable *name1* can reference the current timestep. Note that it associated with variable *name1* can reference the current timestep.
should return the "change" in box length, not the absolute box length. Note that it should return the "change" in box length, not the
This means it should evaluate to 0.0 when invoked on the initial absolute box length. This means it should evaluate to 0.0 when
timestep of the run following the definition of fix deform. It should invoked on the initial timestep of the run following the definition of
evaluate to a value > 0.0 to dilate the box at future times, or a fix deform. It should evaluate to a value > 0.0 to dilate the box at
value < 0.0 to compress the box. future times, or a value < 0.0 to compress the box.
The variable *name2* must also be an :doc:`equal-style variable <variable>` and should calculate the rate of box length The variable *name2* must also be an :doc:`equal-style variable
change, in units of distance/time, i.e. the time-derivative of the <variable>` and should calculate the rate of box length change, in
*name1* variable. This quantity is used internally by LAMMPS to reset units of distance/time, i.e. the time-derivative of the *name1*
atom velocities when they cross periodic boundaries. It is computed variable. This quantity is used internally by LAMMPS to reset atom
velocities when they cross periodic boundaries. It is computed
internally for the other styles, but you must provide it when using an internally for the other styles, but you must provide it when using an
arbitrary variable. arbitrary variable.
@ -414,12 +456,13 @@ can reference the current timestep. Note that it should return the
should evaluate to 0.0 when invoked on the initial timestep of the run should evaluate to 0.0 when invoked on the initial timestep of the run
following the definition of fix deform. following the definition of fix deform.
The variable *name2* must also be an :doc:`equal-style variable <variable>` and should calculate the rate of tilt change, The variable *name2* must also be an :doc:`equal-style variable
in units of distance/time, i.e. the time-derivative of the *name1* <variable>` and should calculate the rate of tilt change, in units of
variable. This quantity is used internally by LAMMPS to reset atom distance/time, i.e. the time-derivative of the *name1* variable. This
velocities when they cross periodic boundaries. It is computed quantity is used internally by LAMMPS to reset atom velocities when
internally for the other styles, but you must provide it when using an they cross periodic boundaries. It is computed internally for the
arbitrary variable. other styles, but you must provide it when using an arbitrary
variable.
Here is an example of using the *variable* style to perform the same Here is an example of using the *variable* style to perform the same
box deformation as the *wiggle* style formula listed above, where we box deformation as the *wiggle* style formula listed above, where we
@ -510,33 +553,40 @@ box without explicit remapping of their coordinates.
.. note:: .. note::
For non-equilibrium MD (NEMD) simulations using "remap v" it is For non-equilibrium MD (NEMD) simulations using "remap v" it is
usually desirable that the fluid (or flowing material, e.g. granular usually desirable that the fluid (or flowing material,
particles) stream with a velocity profile consistent with the e.g. granular particles) stream with a velocity profile consistent
deforming box. As mentioned above, using a thermostat such as :doc:`fix nvt/sllod <fix_nvt_sllod>` or :doc:`fix lavgevin <fix_langevin>` with the deforming box. As mentioned above, using a thermostat
(with a bias provided by :doc:`compute temp/deform <compute_temp_deform>`), will typically accomplish such as :doc:`fix nvt/sllod <fix_nvt_sllod>` or :doc:`fix lavgevin
that. If you do not use a thermostat, then there is no driving force <fix_langevin>` (with a bias provided by :doc:`compute temp/deform
pushing the atoms to flow in a manner consistent with the deforming <compute_temp_deform>`), will typically accomplish that. If you do
box. E.g. for a shearing system the box deformation velocity may vary not use a thermostat, then there is no driving force pushing the
atoms to flow in a manner consistent with the deforming box.
E.g. for a shearing system the box deformation velocity may vary
from 0 at the bottom to 10 at the top of the box. But the stream from 0 at the bottom to 10 at the top of the box. But the stream
velocity profile of the atoms may vary from -5 at the bottom to +5 at velocity profile of the atoms may vary from -5 at the bottom to +5
the top. You can monitor these effects using the :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`compute temp/deform <compute_temp_deform>`, and :doc:`compute temp/profile <compute_temp_profile>` commands. One way to induce at the top. You can monitor these effects using the :doc:`fix
atoms to stream consistent with the box deformation is to give them an ave/chunk <fix_ave_chunk>`, :doc:`compute temp/deform
<compute_temp_deform>`, and :doc:`compute temp/profile
<compute_temp_profile>` commands. One way to induce atoms to
stream consistent with the box deformation is to give them an
initial velocity profile, via the :doc:`velocity ramp <velocity>` initial velocity profile, via the :doc:`velocity ramp <velocity>`
command, that matches the box deformation rate. This also typically command, that matches the box deformation rate. This also
helps the system come to equilibrium more quickly, even if a typically helps the system come to equilibrium more quickly, even
thermostat is used. if a thermostat is used.
.. note:: .. note::
If a :doc:`fix rigid <fix_rigid>` is defined for rigid bodies, and If a :doc:`fix rigid <fix_rigid>` is defined for rigid bodies, and
*remap* is set to *x*, then the center-of-mass coordinates of rigid *remap* is set to *x*, then the center-of-mass coordinates of rigid
bodies will be remapped to the changing simulation box. This will be bodies will be remapped to the changing simulation box. This will
done regardless of whether atoms in the rigid bodies are in the fix be done regardless of whether atoms in the rigid bodies are in the
deform group or not. The velocity of the centers of mass are not fix deform group or not. The velocity of the centers of mass are
remapped even if *remap* is set to *v*, since :doc:`fix nvt/sllod <fix_nvt_sllod>` does not currently do anything special not remapped even if *remap* is set to *v*, since :doc:`fix
nvt/sllod <fix_nvt_sllod>` does not currently do anything special
for rigid particles. If you wish to perform a NEMD simulation of for rigid particles. If you wish to perform a NEMD simulation of
rigid particles, you can either thermostat them independently or rigid particles, you can either thermostat them independently or
include a background fluid and thermostat the fluid via :doc:`fix nvt/sllod <fix_nvt_sllod>`. include a background fluid and thermostat the fluid via :doc:`fix
nvt/sllod <fix_nvt_sllod>`.
The *flip* keyword allows the tilt factors for a triclinic box to The *flip* keyword allows the tilt factors for a triclinic box to
exceed half the distance of the parallel box length, as discussed exceed half the distance of the parallel box length, as discussed
@ -568,7 +618,8 @@ command if you want to include lattice spacings in a variable formula.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This fix will restore the initial box settings from :doc:`binary restart files <restart>`, which allows the fix to be properly continue This fix will restore the initial box settings from :doc:`binary
restart files <restart>`, which allows the fix to be properly continue
deformation, when using the start/stop options of the :doc:`run <run>` deformation, when using the start/stop options of the :doc:`run <run>`
command. None of the :doc:`fix_modify <fix_modify>` options are command. None of the :doc:`fix_modify <fix_modify>` options are
relevant to this fix. No global or per-atom quantities are stored by relevant to this fix. No global or per-atom quantities are stored by
@ -586,12 +637,14 @@ Restrictions
You cannot apply x, y, or z deformations to a dimension that is You cannot apply x, y, or z deformations to a dimension that is
shrink-wrapped via the :doc:`boundary <boundary>` command. shrink-wrapped via the :doc:`boundary <boundary>` command.
You cannot apply xy, yz, or xz deformations to a second dimension (y in You cannot apply xy, yz, or xz deformations to a second dimension (y
xy) that is shrink-wrapped via the :doc:`boundary <boundary>` command. in xy) that is shrink-wrapped via the :doc:`boundary <boundary>`
command.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`fix deform/pressure <fix_deform_pressure>`,
:doc:`change_box <change_box>` :doc:`change_box <change_box>`
Default Default

View File

@ -0,0 +1,319 @@
.. index:: fix deform/pressure
fix deform/pressure command
===========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID deform/pressure N parameter style args ... keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* deform/pressure = style name of this fix command
* N = perform box deformation every this many timesteps
* one or more parameter/arg sequences may be appended
.. parsed-literal::
parameter = *x* or *y* or *z* or *xy* or *xz* or *yz* or *box*
*x*, *y*, *z* args = style value(s)
style = *final* or *delta* or *scale* or *vel* or *erate* or *trate* or *volume* or *wiggle* or *variable* or *pressure* or *pressure/mean*
*pressure* values = target gain
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
*pressure/mean* values = target gain
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
NOTE: All other styles are documented by the :doc:`fix deform <fix_deform>` command
*xy*, *xz*, *yz* args = style value
style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable* or *pressure*
*pressure* values = target gain
target = target pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
NOTE: All other styles are documented by the :doc:`fix deform <fix_deform>` command
*box* = style value
style = *volume* or *pressure*
*volume* value = none = isotropically adjust system to preserve volume of system
*pressure* values = target gain
target = target mean pressure (pressure units)
gain = proportional gain constant (1/(time * pressure) or 1/time units)
* zero or more keyword/value pairs may be appended
* keyword = *remap* or *flip* or *units* or *couple* or *vol/balance/p* or *max/rate* or *normalize/pressure*
.. parsed-literal::
*couple* value = *none* or *xyz* or *xy* or *yz* or *xz*
couple pressure values of various dimensions
*vol/balance/p* value = *yes* or *no*
Modifies the behavior of the *volume* option to try and balance pressures
*max/rate* value = *rate*
rate = maximum strain rate for pressure control
*normalize/pressure* value = *yes* or *no*
Modifies pressure controls such that the deviation in pressure is normalized by the target pressure
NOTE: All other keywords are documented by the :doc:`fix deform <fix_deform>` command
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all deform/pressure 1 x pressure 2.0 0.1 normalize/pressure yes max/rate 0.001
fix 1 all deform/pressure 1 x trate 0.1 y volume z volume vol/balance/p yes
fix 1 all deform/pressure 1 x trate 0.1 y pressure/mean 0.0 1.0 z pressure/mean 0.0 1.0
Description
"""""""""""
.. versionadded:: TBD
This fix is an extension of the :doc:`fix deform <fix_deform>`
command, which allows all of its options to be used as well as new
pressure-based controls implemented by this command.
All arguments described on the :doc:`fix deform <fix_deform>` doc page
also apply to this fix unless otherwise noted below. The rest of this
doc page explains the arguments specific to this fix. Note that a
simulation can define only a single deformation command: fix deform or
fix deform/pressure.
----------
For the *x*, *y*, and *z* parameters, this is the meaning of the
styles and values provided by this fix.
The *pressure* style adjusts a dimension's box length to control the
corresponding component of the pressure tensor. This option attempts to
maintain a specified target pressure using a linear controller where the
box length :math:`L` evolves according to the equation
.. parsed-literal::
\frac{d L(t)}{dt} = L(t) k (P_t - P)
where :math:`k` is a proportional gain constant, :math:`P_t` is the target
pressure, and :math:`P` is the current pressure along that dimension. This
approach is similar to the method used to control the pressure by
:doc:`fix press/berendsen <fix_press_berendsen>`. The target pressure
accepts either a constant numeric value or a LAMMPS :ref:`variable <variable>`.
Notably, this variable can be a function of time or other components of
the pressure tensor. By default, :math:`k` has units of 1/(time * pressure)
although this will change if the *normalize/pressure* option is set as
:ref:`discussed below <deform_normalize>`. There is no proven method
to choosing an appropriate value of :math:`k` as it will depend on the
specific details of a simulation. Testing different values is recommended.
By default, there is no limit on the resulting strain rate in any dimension.
A maximum limit can be applied using the :ref:`max/rate <deform_max_rate>`
option. Akin to :doc:`fix nh <fix_nh>`, pressures in different dimensions
can be coupled using the :ref:`couple <deform_couple>` option. This means
the instantaneous pressure along coupled dimensions are averaged and the box
strains identically along the coupled dimensions.
The *pressure/mean* style changes a dimension's box length to maintain
a constant mean pressure defined as the trace of the pressure tensor.
This option has identical arguments to the *pressure* style and a similar
functional equation, except the current and target pressures refer to the
mean trace of the pressure tensor. All options for the *pressure* style
also apply to the *pressure/mean* style except for the
:ref:`couple <deform_couple>` option.
Note that while this style can be identical to coupled *pressure* styles,
it is generally not the same. For instance in 2D, a coupled *pressure*
style in the *x* and *y* dimensions would be equivalent to using the
*pressure/mean* style with identical settings in each dimension. However,
it would not be the same if settings (e.g. gain constants) were used in
the *x* and *y* dimensions or if the *pressure/mean* command was only applied
along one dimension.
----------
For the *xy*, *xz*, and *yz* parameters, this is the meaning of the
styles and values provided by this fix. Note that changing the
tilt factors of a triclinic box does not change its volume.
The *pressure* style adjusts a tilt factor to control the corresponding
off-diagonal component of the pressure tensor. This option attempts to
maintain a specified target value using a linear controller where the
tilt factor T evolves according to the equation
.. parsed-literal::
\frac{d T(t)}{dt} = L(t) k (P - P_t)
where :math:`k` is a proportional gain constant, :math:`P_t` is the
target pressure, :math:`P` is the current pressure, and :math:`L` is
the perpendicular box length. The target pressure accepts either a
constant numeric value or a LAMMPS :ref:`variable
<variable>`. Notably, this variable can be a function of time or other
components of the pressure tensor. By default, :math:`k` has units of
1/(time * pressure) although this will change if the
*normalize/pessure* option is set as :ref:`discussed below
<deform_normalize>`. There is no proven method to choosing an
appropriate value of :math:`k` as it will depend on the specific
details of a simulation and testing different values is
recommended. One can also apply a maximum limit to the magnitude of
the applied strain using the :ref:`max/rate <deform_max_rate>` option.
----------
The *box* parameter provides an additional control over the *x*, *y*,
and *z* box lengths by isotropically dilating or contracting the box
to either maintain a fixed mean pressure or volume. This isotropic
scaling is applied after the box is deformed by the above *x*, *y*,
*z*, *xy*, *xz*, and *yz* styles, acting as a second deformation
step. This parameter will change the overall strain rate in the *x*,
*y*, or *z* dimensions. This parameter can only be used in
combination with the *x*, *y*, or *z* commands: *vel*, *erate*,
*trate*, *pressure*, or *wiggle*. This is the meaning of its styles
and values.
The *volume* style isotropically scales box lengths to maintain a constant
box volume in response to deformation from other parameters. This style
may be useful in scenarios where one wants to apply a constant deviatoric
pressure using *pressure* styles in the *x*, *y*, and *z* dimensions (
deforming the shape of the box), while maintaining a constant volume.
The *pressure* style isotropically scales box lengths in an attempt to
maintain a target mean pressure (the trace of the pressure tensor) of the
system. This is accomplished by isotropically scaling all box lengths
:math:`L` by an additional factor of :math:`k (P_t - P_m)` where :math:`k`
is the proportional gain constant, :math:`P_t` is the target pressure, and
:math:`P_m` is the current mean pressure. This style may be useful in
scenarios where one wants to apply a constant deviatoric strain rate
using various strain-based styles (e.g. *trate*) along the *x*, *y*, and *z*
dimensions (deforming the shape of the box), while maintaining a mean pressure.
----------
The optional keywords provided by this fix are described below.
.. _deform_normalize:
The *normalize/pressure* keyword changes how box dimensions evolve when
using the *pressure* or *pressure/mean* deformation styles. If the
*deform/normalize* value is set to *yes*, then the deviation from the
target pressure is normalized by the absolute value of the target
pressure such that the proportional gain constant scales a percentage
error and has units of 1/time. If the target pressure is ever zero, this
will produce an error unless the *max/rate* keyword is defined,
described below, which will cap the divergence.
.. _deform_max_rate:
The *max/rate* keyword sets an upper threshold, *rate*, that limits the
maximum magnitude of the instantaneous strain rate applied in any dimension.
This keyword only applies to the *pressure* and *pressure/mean* options. If
a pressure-controlled rate is used for both *box* and either *x*, *y*, or
*z*, then this threshold will apply separately to each individual controller
such that the cumulative strain rate on a box dimension may be up to twice
the value of *rate*.
.. _deform_couple:
The *couple* keyword allows two or three of the diagonal components of
the pressure tensor to be "coupled" together for the *pressure* option.
The value specified with the keyword determines which are coupled. For
example, *xz* means the *Pxx* and *Pzz* components of the stress tensor
are coupled. *Xyz* means all 3 diagonal components are coupled. Coupling
means two things: the instantaneous stress will be computed as an average
of the corresponding diagonal components, and the coupled box dimensions
will be changed together in lockstep, meaning coupled dimensions will be
dilated or contracted by the same percentage every timestep. If a *pressure*
style is defined for more than one coupled dimension, the target pressures
and gain constants must be identical. Alternatively, if a *pressure*
style is only defined for one of the coupled dimensions, its settings are
copied to other dimensions with undefined styles. *Couple xyz* can be used
for a 2d simulation; the *z* dimension is simply ignored.
.. _deform_balance:
The *vol/balance/p* keyword modifies the behavior of the *volume* style when
applied to two of the *x*, *y*, and *z* dimensions. Instead of straining
the two dimensions in lockstep, the two dimensions are allowed to
separately dilate or contract in a manner to maintain a constant
volume while simultaneously trying to keep the pressure along each
dimension equal using a method described in :ref:`(Huang2014) <Huang2014>`.
----------
If any pressure controls are used, this fix computes a temperature and
pressure each timestep. To do this, the fix creates its own computes
of style "temp" and "pressure", as if these commands had been issued:
.. code-block:: LAMMPS
compute fix-ID_temp group-ID temp
compute fix-ID_press group-ID pressure fix-ID_temp
See the :doc:`compute temp <compute_temp>` and :doc:`compute pressure
<compute_pressure>` commands for details. Note that the IDs of the
new computes are the fix-ID + underscore + "temp" or fix_ID
+ underscore + "press", and the group for the new computes is the same
as the fix group.
Note that these are NOT the computes used by thermodynamic output (see
the :doc:`thermo_style <thermo_style>` command) with ID =
*thermo_temp* and *thermo_press*. This means you can change the
attributes of this fix's temperature or pressure via the
:doc:`compute_modify <compute_modify>` command or print this
temperature or pressure during thermodynamic output via the
:doc:`thermo_style custom <thermo_style>` command using the
appropriate compute-ID. It also means that changing attributes of
*thermo_temp* or *thermo_press* will have no effect on this fix.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This fix will restore the initial box settings from :doc:`binary
restart files <restart>`, which allows the fix to be properly continue
deformation, when using the start/stop options of the :doc:`run <run>`
command. No global or per-atom quantities are stored by this fix for
access by various :doc:`output commands <Howto_output>`.
If any pressure controls are used, the :doc:`fix_modify <fix_modify>`
*temp* and *press* options are supported by this fix, unlike in
:doc:`fix deform <fix_deform>`. You can use them to assign a
:doc:`compute <compute>` you have defined to this fix which will be
used in its temperature and pressure calculations. If you do this,
note that the kinetic energy derived from the compute temperature
should be consistent with the virial term computed using all atoms for
the pressure. LAMMPS will warn you if you choose to compute
temperature on a subset of atoms.
This fix can perform deformation over multiple runs, using the *start*
and *stop* keywords of the :doc:`run <run>` command. See the
:doc:`run <run>` command for details of how to do this.
This fix is not invoked during :doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
You cannot apply x, y, or z deformations to a dimension that is
shrink-wrapped via the :doc:`boundary <boundary>` command.
You cannot apply xy, yz, or xz deformations to a second dimension (y
in xy) that is shrink-wrapped via the :doc:`boundary <boundary>`
command.
Related commands
""""""""""""""""
:doc:`fix deform <fix_deform>`, :doc:`change_box <change_box>`
Default
"""""""
The option defaults are normalize/pressure = no.
----------
.. _Huang2014:
**(Huang2014)** X. Huang, "Exploring critical-state behavior using DEM",
Doctoral dissertation, Imperial College. (2014). https://doi.org/10.25560/25316

View File

@ -45,7 +45,7 @@ Syntax
rng_v = integer used to initialize random number generator rng_v = integer used to initialize random number generator
* zero or more keyword/value pairs may be appended * zero or more keyword/value pairs may be appended
* keyword = *algo* or *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv* * keyword = *algo* or *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv* or *qtotal* or *eta*
.. parsed-literal:: .. parsed-literal::
@ -68,6 +68,10 @@ Syntax
filename = file from which to read elastance matrix filename = file from which to read elastance matrix
*read_inv* value = filename *read_inv* value = filename
filename = file from which to read inverted matrix filename = file from which to read inverted matrix
*qtotal* value = number or *v_* equal-style variable
add overall potential so that all electrode charges add up to *qtotal*
*eta* value = d_propname
d_propname = a custom double vector defined via fix property/atom
Examples Examples
"""""""" """"""""
@ -249,6 +253,26 @@ be enabled if any electrode particle has the same type as any
electrolyte particle (which would be unusual in a typical simulation) electrolyte particle (which would be unusual in a typical simulation)
and the fix will issue an error in that case. and the fix will issue an error in that case.
.. versionadded:: TBD
The keyword *qtotal* causes *fix electrode/conp* and *fix electrode/thermo*
to add an overall potential to all electrodes so that the total charge on
the electrodes is a specified amount (which may be an equal-style variable).
For example, if a user wanted to simulate a solution of excess cations
such that the total electrolyte charge is +2, setting *qtotal -2* would cause
the total electrode charge to be -2, so that the simulation box remains overall
electroneutral. Since *fix electrode/conq* constrains the total charges of
individual electrodes, and since *symm on* constrains the total charge of all
electrodes to be zero, either option is incompatible with the *qtotal* keyword
(even if *qtotal* is set to zero).
.. versionadded:: TBD
The keyword *eta* takes the name of a custom double vector defined via fix
property/atom. The values will be used instead of the standard eta value. The
property/atom fix must be for vector of double values and use the *ghost on*
option.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""

View File

@ -440,8 +440,11 @@ This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the :doc:`Build package <Build_package>` built with that package. See the :doc:`Build package <Build_package>`
doc page for more info. doc page for more info.
This fix style requires an :doc:`atom style <atom_style>` with per atom
type masses.
Do not set "neigh_modify once yes" or else this fix will never be Do not set "neigh_modify once yes" or else this fix will never be
called. Reneighboring is required. called. Reneighboring is **required**.
Only usable for 3D simulations. Only usable for 3D simulations.

View File

@ -8,33 +8,44 @@ Syntax
.. code-block:: LAMMPS .. code-block:: LAMMPS
fix ID group-ID indent K keyword values ... fix ID group-ID indent K gstyle args keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command * ID, group-ID are documented in :doc:`fix <fix>` command
* indent = style name of this fix command * indent = style name of this fix command
* K = force constant for indenter surface (force/distance\^2 units) * K = force constant for indenter surface (force/distance\^2 units)
* one or more keyword/value pairs may be appended * gstyle = *sphere* or *cylinder* or *cone* or *plane*
* keyword = *sphere* or *cylinder* or *plane* or *side* or *units*
.. parsed-literal:: .. parsed-literal::
*sphere* args = x y z R *sphere* args = x y z R
x,y,z = position of center of indenter (distance units) x, y, z = position of center of indenter (distance units)
R = sphere radius of indenter (distance units) R = sphere radius of indenter (distance units)
any of x,y,z,R can be a variable (see below) any of x, y, z, R can be a variable (see below)
*cylinder* args = dim c1 c2 R *cylinder* args = dim c1 c2 R
dim = *x* or *y* or *z* = axis of cylinder dim = *x* or *y* or *z* = axis of cylinder
c1,c2 = coords of cylinder axis in other 2 dimensions (distance units) c1, c2 = coords of cylinder axis in other 2 dimensions (distance units)
R = cylinder radius of indenter (distance units) R = cylinder radius of indenter (distance units)
any of c1,c2,R can be a variable (see below) any of c1,c2,R can be a variable (see below)
*cone* args = dim c1 c2 radlo radhi lo hi
dim = *x* or *y* or *z* = axis of cone
c1, c2 = coords of cone axis in other 2 dimensions (distance units)
radlo,radhi = cone radii at lo and hi end (distance units)
lo,hi = bounds of cone in dim (distance units)
any of c1, c2, radlo, radhi, lo, hi can be a variable (see below)
*plane* args = dim pos side *plane* args = dim pos side
dim = *x* or *y* or *z* = plane perpendicular to this dimension dim = *x* or *y* or *z* = plane perpendicular to this dimension
pos = position of plane in dimension x, y, or z (distance units) pos = position of plane in dimension x, y, or z (distance units)
pos can be a variable (see below) pos can be a variable (see below)
side = *lo* or *hi* side = *lo* or *hi*
* zero or more keyword/value pairs may be appended
* keyword = *side* or *units*
.. parsed-literal::
*side* value = *in* or *out* *side* value = *in* or *out*
*in* = the indenter acts on particles inside the sphere or cylinder *in* = the indenter acts on particles inside the sphere or cylinder or cone
*out* = the indenter acts on particles outside the sphere or cylinder *out* = the indenter acts on particles outside the sphere or cylinder or cone
*units* value = *lattice* or *box* *units* value = *lattice* or *box*
lattice = the geometry is defined in lattice units lattice = the geometry is defined in lattice units
box = the geometry is defined in simulation box units box = the geometry is defined in simulation box units
@ -53,12 +64,12 @@ Description
Insert an indenter within a simulation box. The indenter repels all Insert an indenter within a simulation box. The indenter repels all
atoms in the group that touch it, so it can be used to push into a atoms in the group that touch it, so it can be used to push into a
material or as an obstacle in a flow. Or it can be used as a material or as an obstacle in a flow. Alternatively, it can be used as a
constraining wall around a simulation; see the discussion of the constraining wall around a simulation; see the discussion of the
*side* keyword below. *side* keyword below.
The indenter can either be spherical or cylindrical or planar. You The *gstyle* geometry of the indenter can either be a sphere, a
must set one of those 3 keywords. cylinder, a cone, or a plane.
A spherical indenter exerts a force of magnitude A spherical indenter exerts a force of magnitude
@ -75,15 +86,20 @@ A cylindrical indenter exerts the same force, except that *r* is the
distance from the atom to the center axis of the cylinder. The distance from the atom to the center axis of the cylinder. The
cylinder extends infinitely along its axis. cylinder extends infinitely along its axis.
Spherical and cylindrical indenters account for periodic boundaries in A conical indenter is similar to a cylindrical indenter except that it
two ways. First, the center point of a spherical indenter (x,y,z) or has a finite length (between *lo* and *hi*), and that two different
axis of a cylindrical indenter (c1,c2) is remapped back into the radii (one at each end, *radlo* and *radhi*) can be defined.
simulation box, if the box is periodic in a particular dimension.
This occurs every timestep if the indenter geometry is specified with Spherical, cylindrical, and conical indenters account for periodic
a variable (see below), e.g. it is moving over time. Second, the boundaries in two ways. First, the center point of a spherical
calculation of distance to the indenter center or axis accounts for indenter (x,y,z) or axis of a cylindrical/conical indenter (c1,c2) is
periodic boundaries. Both of these mean that an indenter can remapped back into the simulation box, if the box is periodic in a
effectively move through and straddle one or more periodic boundaries. particular dimension. This occurs every timestep if the indenter
geometry is specified with a variable (see below), e.g. it is moving
over time. Second, the calculation of distance to the indenter center
or axis accounts for periodic boundaries. Both of these mean that an
indenter can effectively move through and straddle one or more
periodic boundaries.
A planar indenter is really an axis-aligned infinite-extent wall A planar indenter is really an axis-aligned infinite-extent wall
exerting the same force on atoms in the system, where *R* is the exerting the same force on atoms in the system, where *R* is the
@ -97,9 +113,13 @@ is specified as *hi*\ .
Any of the 4 quantities defining a spherical indenter's geometry can Any of the 4 quantities defining a spherical indenter's geometry can
be specified as an equal-style :doc:`variable <variable>`, namely *x*, be specified as an equal-style :doc:`variable <variable>`, namely *x*,
*y*, *z*, or *R*\ . Similarly, for a cylindrical indenter, any of *c1*, *y*, *z*, or *R*\ . For a cylindrical indenter, any of the 3
*c2*, or *R*, can be a variable. For a planar indenter, *pos* can be quantities *c1*, *c2*, or *R*, can be a variable. For a conical
a variable. If the value is a variable, it should be specified as indenter, any of the 6 quantities *c1*, *c2*, *radlo*, *radhi*, *lo*,
or *hi* can be a variable. For a planar indenter, the single value
*pos* can be a variable.
If any of these values is a variable, it should be specified as
v_name, where name is the variable name. In this case, the variable v_name, where name is the variable name. In this case, the variable
will be evaluated each timestep, and its value used to define the will be evaluated each timestep, and its value used to define the
indenter geometry. indenter geometry.
@ -110,7 +130,8 @@ command keywords for the simulation box parameters and timestep and
elapsed time. Thus it is easy to specify indenter properties that elapsed time. Thus it is easy to specify indenter properties that
change as a function of time or span consecutive runs in a continuous change as a function of time or span consecutive runs in a continuous
fashion. For the latter, see the *start* and *stop* keywords of the fashion. For the latter, see the *start* and *stop* keywords of the
:doc:`run <run>` command and the *elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for details. :doc:`run <run>` command and the *elaplong* keyword of
:doc:`thermo_style custom <thermo_style>` for details.
For example, if a spherical indenter's x-position is specified as v_x, For example, if a spherical indenter's x-position is specified as v_x,
then this variable definition will keep it's center at a relative then this variable definition will keep it's center at a relative
@ -141,12 +162,13 @@ rate.
If the *side* keyword is specified as *out*, which is the default, If the *side* keyword is specified as *out*, which is the default,
then particles outside the indenter are pushed away from its outer then particles outside the indenter are pushed away from its outer
surface, as described above. This only applies to spherical or surface, as described above. This only applies to spherical,
cylindrical indenters. If the *side* keyword is specified as *in*, cylindrical, and conical indenters. If the *side* keyword is
the action of the indenter is reversed. Particles inside the indenter specified as *in*, the action of the indenter is reversed. Particles
are pushed away from its inner surface. In other words, the indenter inside the indenter are pushed away from its inner surface. In other
is now a containing wall that traps the particles inside it. If the words, the indenter is now a containing wall that traps the particles
radius shrinks over time, it will squeeze the particles. inside it. If the radius shrinks over time, it will squeeze the
particles.
The *units* keyword determines the meaning of the distance units used The *units* keyword determines the meaning of the distance units used
to define the indenter geometry. A *box* value selects standard to define the indenter geometry. A *box* value selects standard
@ -166,10 +188,10 @@ lattice spacings in a variable formula.
The force constant *K* is not affected by the *units* keyword. It is The force constant *K* is not affected by the *units* keyword. It is
always in force/distance\^2 units where force and distance are defined always in force/distance\^2 units where force and distance are defined
by the :doc:`units <units>` command. If you wish K to be scaled by the by the :doc:`units <units>` command. If you wish K to be scaled by
lattice spacing, you can define K with a variable whose formula the lattice spacing, you can define K with a variable whose formula
contains *xlat*, *ylat*, *zlat* keywords of the contains *xlat*, *ylat*, *zlat* keywords of the :doc:`thermo_style
:doc:`thermo_style <thermo_style>` command, e.g. <thermo_style>` command, e.g.
.. code-block:: LAMMPS .. code-block:: LAMMPS

View File

@ -109,7 +109,7 @@ Note that in this case the specified *Kspring* is in
force/distance units. force/distance units.
With a value of *ideal*, the spring force is computed as suggested in With a value of *ideal*, the spring force is computed as suggested in
ref`(WeinanE) <WeinanE>` :ref:`(WeinanE) <WeinanE>`
.. math:: .. math::
@ -120,18 +120,18 @@ and :math:`RD_{ideal}` is the ideal *RD* for which all the images are
equally spaced. I.e. :math:`RD_{ideal} = (i-1) \cdot meanDist` when the equally spaced. I.e. :math:`RD_{ideal} = (i-1) \cdot meanDist` when the
climbing replica is off, where *i* is the replica number). The climbing replica is off, where *i* is the replica number). The
*meanDist* is the average distance between replicas. Note that in this *meanDist* is the average distance between replicas. Note that in this
case the specified *Kspring* is in force units. When the climbing replica case the specified *Kspring* is in force units. When the climbing
is on, :math:`RD_{ideal}` and :math:`meanDist` are calculated separately replica is on, :math:`RD_{ideal}` and :math:`meanDist` are calculated
each side of the climbing image. Note that the *ideal* form of nudging separately each side of the climbing image. Note that the *ideal* form
can often be more effective at keeping the replicas equally spaced before of nudging can often be more effective at keeping the replicas equally
climbing, then equally spaced either side of the climbing image whilst spaced before climbing, then equally spaced either side of the climbing
climbing. image whilst climbing.
With a value of *equal* the spring force is computed as for *ideal* With a value of *equal* the spring force is computed as for *ideal* when
when the climbing replica is off, promoting equidistance. When the climbing the climbing replica is off, promoting equidistance. When the climbing
replica is on, the spring force is computed to promote equidistant replica is on, the spring force is computed to promote equidistant
absolute differences in energy, rather than distance, each side of absolute differences in energy, rather than distance, each side of the
the climbing image: climbing image:
.. math:: .. math::
@ -143,23 +143,22 @@ where *ED* is the cumulative sum of absolute energy differences:
ED = \sum_{i<N} \left|E(R_{i+1}) - E(R_i)\right|, ED = \sum_{i<N} \left|E(R_{i+1}) - E(R_i)\right|,
*meanEdist* is the average absolute energy difference between *meanEdist* is the average absolute energy difference between replicas
replicas up to the climbing image or from the climbing image up to the climbing image or from the climbing image to the final image,
to the final image, for images before or after the climbing for images before or after the climbing image
image respectively. :math:`ED_{ideal}` is the corresponding respectively. :math:`ED_{ideal}` is the corresponding cumulative sum of
cumulative sum of average absolute energy differences in average absolute energy differences in each case, in close analogy to
each case, in close analogy to *ideal*. This form of nudging *ideal*. This form of nudging is to aid schemes which integrate forces
is to aid schemes which integrate forces along, or near to, along, or near to, NEB pathways such as :doc:`fix_pafi <fix_pafi>`.
NEB pathways such as :doc:`fix_pafi <fix_pafi>`.
---------- ----------
The keyword *perp* specifies if and how a perpendicular nudging force The keyword *perp* specifies if and how a perpendicular nudging force is
is computed. It adds a spring force perpendicular to the path in computed. It adds a spring force perpendicular to the path in order to
order to prevent the path from becoming too strongly kinked. It can prevent the path from becoming too strongly kinked. It can
significantly improve the convergence of the NEB calculation when the significantly improve the convergence of the NEB calculation when the
resolution is poor. I.e. when few replicas are used; see resolution is poor. I.e. when few replicas are used; see :ref:`(Maras)
:ref:`(Maras) <Maras1>` for details. <Maras1>` for details.
The perpendicular spring force is given by The perpendicular spring force is given by
@ -181,10 +180,10 @@ force is added.
By default, no additional forces act on the first and last replicas By default, no additional forces act on the first and last replicas
during the NEB relaxation, so these replicas simply relax toward their during the NEB relaxation, so these replicas simply relax toward their
respective local minima. By using the key word *end*, additional respective local minima. By using the key word *end*, additional forces
forces can be applied to the first and/or last replicas, to enable can be applied to the first and/or last replicas, to enable them to
them to relax toward a MEP while constraining their energy E to the relax toward a MEP while constraining their energy E to the target
target energy ETarget. energy ETarget.
If :math:`E_{Target} > E`, the interatomic force :math:`F_i` for the If :math:`E_{Target} > E`, the interatomic force :math:`F_i` for the
specified replica becomes: specified replica becomes:
@ -197,33 +196,33 @@ specified replica becomes:
The "spring" constant on the difference in energies is the specified The "spring" constant on the difference in energies is the specified
*Kspring3* value. *Kspring3* value.
When *estyle* is specified as *first*, the force is applied to the When *estyle* is specified as *first*, the force is applied to the first
first replica. When *estyle* is specified as *last*, the force is replica. When *estyle* is specified as *last*, the force is applied to
applied to the last replica. Note that the *end* keyword can be used the last replica. Note that the *end* keyword can be used twice to add
twice to add forces to both the first and last replicas. forces to both the first and last replicas.
For both these *estyle* settings, the target energy *ETarget* is set For both these *estyle* settings, the target energy *ETarget* is set
to the initial energy of the replica (at the start of the NEB to the initial energy of the replica (at the start of the NEB
calculation). calculation).
If the *estyle* is specified as *last/efirst* or *last/efirst/middle*, If the *estyle* is specified as *last/efirst* or *last/efirst/middle*,
force is applied to the last replica, but the target energy *ETarget* force is applied to the last replica, but the target energy *ETarget* is
is continuously set to the energy of the first replica, as it evolves continuously set to the energy of the first replica, as it evolves
during the NEB relaxation. during the NEB relaxation.
The difference between these two *estyle* options is as follows. When The difference between these two *estyle* options is as follows. When
*estyle* is specified as *last/efirst*, no change is made to the *estyle* is specified as *last/efirst*, no change is made to the
inter-replica force applied to the intermediate replicas (neither inter-replica force applied to the intermediate replicas (neither first
first or last). If the initial path is too far from the MEP, an or last). If the initial path is too far from the MEP, an intermediate
intermediate replica may relax "faster" and reach a lower energy than replica may relax "faster" and reach a lower energy than the last
the last replica. In this case the intermediate replica will be replica. In this case the intermediate replica will be relaxing toward
relaxing toward its own local minima. This behavior can be prevented its own local minima. This behavior can be prevented by specifying
by specifying *estyle* as *last/efirst/middle* which will alter the *estyle* as *last/efirst/middle* which will alter the inter-replica
inter-replica force applied to intermediate replicas by removing the force applied to intermediate replicas by removing the contribution of
contribution of the gradient to the inter-replica force. This will the gradient to the inter-replica force. This will only be done if a
only be done if a particular intermediate replica has a lower energy particular intermediate replica has a lower energy than the first
than the first replica. This should effectively prevent the replica. This should effectively prevent the intermediate replicas from
intermediate replicas from over-relaxing. over-relaxing.
After converging a NEB calculation using an *estyle* of After converging a NEB calculation using an *estyle* of
*last/efirst/middle*, you should check that all intermediate replicas *last/efirst/middle*, you should check that all intermediate replicas
@ -237,9 +236,10 @@ target energy.
Restart, fix_modify, output, run start/stop, minimize info Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options No information about this fix is written to :doc:`binary restart files
are relevant to this fix. No global or per-atom quantities are stored <restart>`. None of the :doc:`fix_modify <fix_modify>` options are
by this fix for access by various :doc:`output commands <Howto_output>`. relevant to this fix. No global or per-atom quantities are stored by
this fix for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. the :doc:`run <run>` command.

View File

@ -44,7 +44,7 @@ Examples
Description Description
""""""""""" """""""""""
.. versionadded:: TBD .. versionadded:: 7Feb2024
This fix computes different metrics of the nonaffine displacement of This fix computes different metrics of the nonaffine displacement of
particles. The first metric, *d2min* calculates the :math:`D^2_\mathrm{min}` particles. The first metric, *d2min* calculates the :math:`D^2_\mathrm{min}`
@ -86,8 +86,8 @@ Both of these methods require defining a reference state. With the *fixed* refer
style, the user picks a specific timestep *nstep* at which particle positions are saved. style, the user picks a specific timestep *nstep* at which particle positions are saved.
If peratom data is accessed from this compute prior to this timestep, it will simply be If peratom data is accessed from this compute prior to this timestep, it will simply be
zeroed. The *update* reference style implies the reference state will be updated every zeroed. The *update* reference style implies the reference state will be updated every
*nstep* timesteps. The *offset* reference only applies to the *d2min* metric and will *nstep* timesteps. The *offset* reference will update the reference state *nstep*
update the reference state *nstep* timesteps before a multiple of *nevery* timesteps. timesteps before a multiple of *nevery* timesteps.
---------- ----------

View File

@ -22,6 +22,8 @@ Syntax
*mol* = molecule IDs *mol* = molecule IDs
*q* = charge *q* = charge
*rmass* = per-atom mass *rmass* = per-atom mass
*temperature* = internal temperature of atom
*heatflow* = internal heat flow of atom
i_name = new integer vector referenced by name i_name = new integer vector referenced by name
d_name = new floating-point vector referenced by name d_name = new floating-point vector referenced by name
i2_name = new integer array referenced by name i2_name = new integer array referenced by name
@ -59,14 +61,18 @@ these properties for each atom in the system when a data file is read.
This fix augments the set of per-atom properties with new custom This fix augments the set of per-atom properties with new custom
ones. This can be useful in several scenarios. ones. This can be useful in several scenarios.
If the atom style does not define molecule IDs, per-atom charge, or If the atom style does not define molecule IDs, per-atom charge,
per-atom mass, they can be added using the *mol*\ , *q* or *rmass* per-atom mass, internal temperature, or internal heat flow, they can
be added using the *mol*\ , *q*, *rmass*, *temperature*, or *heatflow*
keywords. This could be useful to define "molecules" to use as rigid keywords. This could be useful to define "molecules" to use as rigid
bodies with the :doc:`fix rigid <fix_rigid>` command, or to carry bodies with the :doc:`fix rigid <fix_rigid>` command, or to carry
around an extra flag with atoms (stored as a molecule ID) that can be around an extra flag with atoms (stored as a molecule ID) that can be
used by various commands like :doc:`compute chunk/atom used by various commands like :doc:`compute chunk/atom
<compute_chunk_atom>` to group atoms without having to use the group <compute_chunk_atom>` to group atoms without having to use the group
command (which is limited to a total of 32 groups including *all*\ ). command (which is limited to a total of 32 groups including *all*\ ).
For finite-size particles, an internal temperature and heat flow can
be used to model heat conduction as in the
:doc:`GRANULAR package <Howto_granular>`.
Another application is to use the *rmass* flag in order to have Another application is to use the *rmass* flag in order to have
per-atom masses instead of per-type masses. This could be used to per-atom masses instead of per-type masses. This could be used to
@ -85,9 +91,10 @@ properties that are not needed such as bond lists, which incurs some
overhead when there are no bonds. overhead when there are no bonds.
In the future, we may add additional existing per-atom properties to In the future, we may add additional existing per-atom properties to
fix property/atom, similar to *mol*\ , *q* or *rmass*\ , which fix property/atom, similar to *mol*\ , *q*, *rmass*\ , *temperature*\ ,
"turn-on" specific properties defined by some atom styles, so they can or *heatflow* which "turn-on" specific properties defined by some atom
be easily used by atom styles that do not define them. styles, so they can be easily used by atom styles that do not define
them.
More generally, the *i_name* and *d_name* options allow one or more More generally, the *i_name* and *d_name* options allow one or more
new custom per-atom vectors to be defined. Likewise the *i2_name* and new custom per-atom vectors to be defined. Likewise the *i2_name* and

View File

@ -155,6 +155,9 @@ This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the :doc:`Build package <Build_package>` built with that package. See the :doc:`Build package <Build_package>`
page for more info. page for more info.
This fix style requires an :doc:`atom style <atom_style>` with per atom
type masses.
At present the fix provides optimized subroutines for EAM type At present the fix provides optimized subroutines for EAM type
potentials (see above) that calculate potential energy changes due to potentials (see above) that calculate potential energy changes due to
*local* atom type swaps very efficiently. Other potentials are *local* atom type swaps very efficiently. Other potentials are

View File

@ -96,11 +96,11 @@ each processor, which is acceptable when the overall grid is reasonably
small. For larger grids you should use fix *ttm/grid* instead. small. For larger grids you should use fix *ttm/grid* instead.
Fix *ttm/mod* adds options to account for external heat sources (e.g. at Fix *ttm/mod* adds options to account for external heat sources (e.g. at
a surface) and for specifying parameters that allow the electronic a surface) and for specifying parameters that allow the electronic heat
heat capacity to depend strongly on electronic temperature. It is capacity to depend strongly on electronic temperature. It is more
more expensive computationally than fix *ttm* because it treats the expensive computationally than fix *ttm* because it treats the thermal
thermal diffusion equation as non-linear. More details on fix *ttm/mod* diffusion equation as non-linear. More details on fix *ttm/mod* are
are given below. given below.
Heat transfer between the electronic and atomic subsystems is carried Heat transfer between the electronic and atomic subsystems is carried
out via an inhomogeneous Langevin thermostat. Only atoms in the fix out via an inhomogeneous Langevin thermostat. Only atoms in the fix
@ -303,15 +303,15 @@ The current fix ttm/mod implementation allows TTM simulations with a
vacuum. The vacuum region is defined as the grid cells with zero vacuum. The vacuum region is defined as the grid cells with zero
electronic temperature. The numerical scheme does not allow energy electronic temperature. The numerical scheme does not allow energy
exchange with such cells. Since the material can expand to previously exchange with such cells. Since the material can expand to previously
unoccupied region in some simulations, the vacuum border can be unoccupied region in some simulations, the vacuum border can be allowed
allowed to move. It is controlled by the *surface_movement* parameter to move. It is controlled by the *surface_movement* parameter in the
in the *init_file*. If it is set to 1, then "vacuum" cells can be *init_file*. If it is set to 1, then "vacuum" cells can be changed to
changed to "electron-filled" cells with the temperature *T_e_min* if "electron-filled" cells with the temperature *T_e_min* if atoms move
atoms move into them (currently only implemented for the case of into them (currently only implemented for the case of 1-dimensional
1-dimensional motion of flat surface normal to the X axis). The motion of a flat surface normal to the X axis). The initial locations of
initial borders of vacuum can be set in the *init_file* via *lsurface* the interfaces of the electron density to the vacuum can be set in the
and *rsurface* parameters. In this case, electronic pressure gradient *init_file* via *lsurface* and *rsurface* parameters. In this case,
is calculated as electronic pressure gradient is calculated as
.. math:: .. math::

175
doc/src/fix_wall_flow.rst Normal file
View File

@ -0,0 +1,175 @@
.. index:: fix wall/flow
.. index:: fix wall/flow/kk
fix wall/flow command
=====================
Accelerator Variants: *wall/flow/kk*
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID wall/flow axis vflow T seed N coords ... keyword value
* ID, group-ID are documented in :doc:`fix <fix>` command
* wall/flow = style name of this fix command
* axis = flow axis (*x*, *y*, or *z*)
* vflow = generated flow velocity in *axis* direction (velocity units)
* T = flow temperature (temperature units)
* seed = random seed for stochasticity (positive integer)
* N = number of walls
* coords = list of N wall positions along the *axis* direction in ascending order (distance units)
* zero or more keyword/value pairs may be appended
* keyword = *units*
.. parsed-literal::
*units* value = *lattice* or *box*
*lattice* = wall positions are defined in lattice units
*box* = the wall positions are defined in simulation box units
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all wall/flow x 0.4 1.5 593894 4 2.0 4.0 6.0 8.0
Description
"""""""""""
.. versionadded:: TBD
This fix implements flow boundary conditions (FBC) introduced in
:ref:`(Pavlov1) <fbc-Pavlov1>` and :ref:`(Pavlov2) <fbc-Pavlov2>`.
The goal is to generate a stationary flow with a shifted Maxwell
velocity distribution:
.. math::
f_a(v_a) \propto \exp{\left(-\frac{m (v_a-v_{\text{flow}})^2}{2 kB T}\right)}
where :math:`v_a` is the component of velocity along the specified
*axis* argument (a = x,y,z), :math:`v_{\text{flow}}` is the flow
velocity specified as the *vflow* argument, *T* is the specified flow
temperature, *m* is the particle mass, and *kB* is the Boltzmann
constant.
This is achieved by defining a series of *N* transparent walls along
the flow *axis* direction. Each wall is at the specified position
listed in the *coords* argument. Note that an additional transparent
wall is defined by the code at the boundary of the (periodic)
simulation domain in the *axis* direction. So there are effectively
N+1 walls.
Each time a particle in the specified group passes through one of the
transparent walls, its velocity is re-assigned. Particles not in the
group do not interact with the wall. This can be used, for example, to
add obstacles composed of atoms, or to simulate a solution of complex
molecules in a one-atom liquid (note that the fix has been tested for
one-atom systems only).
Conceptually, the velocity re-assignment represents creation of a new
particle within the system with simultaneous removal of the particle
which passed through the wall. The velocity components in directions
parallel to the wall are re-assigned according to the standard Maxwell
velocity distribution for the specified temperature *T*. The velocity
component perpendicular to the wall is re-assigned according to the
shifted Maxwell distribution defined above:
.. math::
f_{\text{a generated}}(v_a) \propto v_a f_a(v_a)
It can be shown that for an ideal-gas scenario this procedure makes
the velocity distribution of particles between walls exactly as
desired.
Since in most cases simulated systems are not an ideal gas, multiple
walls can be defined, since a single wall may not be sufficient for
maintaining a stationary flow without "congestion" which can manifest
itself as regions in the flow with increased particle density located
upstream from static obstacles.
For the same reason, the actual temperature and velocity of the
generated flow may differ from what is requested. The degree of
discrepancy is determined by how different from an ideal gas the
simulated system is. Therefore, a calibration procedure may be
required for such a system as described in :ref:`(Pavlov)
<fbc-Pavlov2>`.
Note that the interactions between particles on different sides of a
transparent wall are not disabled or neglected. Likewise particle
positions are not altered by the velocity reassignment. This removes
the need to modify the force field to work correctly in cases when a
particle is close to a wall.
For example, if particle positions were uniformly redistributed across
the surface of a wall, two particles could end up too close to each
other, potentially causing the simulation to explode. However due to
this compromise, some collective phenomena such as regions with
increased/decreased density or collective movements are not fully
removed when particles cross a wall. This unwanted consequence can
also be potentially mitigated by using more multiple walls.
.. note::
When the specified flow has a high velocity, a lost atoms error can
occur (see :doc:`error messages <Errors_messages>`). If this
happens, you should ensure the checks for neighbor list rebuilds,
set via the :doc:`neigh_modify <neigh_modify>` command, are as
conservative as possible (every timestep if needed). Those are the
default settings.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files
<restart>`.
None of the :doc:`fix_modify <fix_modify>` options are relevant to
this fix.
No global or per-atom quantities are stored by this fix for access by
various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command.
This fix is not invoked during :doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
Fix *wall_flow* is part of the EXTRA-FIX package. It is only enabled
if LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Flow boundary conditions should not be used with rigid bodies such as
those defined by a "fix rigid" command.
This fix can only be used with periodic boundary conditions along the
flow axis. The size of the box in this direction must not change. Also,
the fix is designed to work only in an orthogonal simulation box.
Related commands
""""""""""""""""
:doc:`fix wall/reflect <fix_wall>` command
Default
"""""""
The default for the units keyword is lattice.
----------
.. _fbc-Pavlov1:
**(Pavlov1)** Pavlov, Kolotinskii, Stegailov, "GPU-Based Molecular Dynamics of Turbulent Liquid Flows with OpenMM", Proceedings of PPAM-2022, LNCS (Springer), vol. 13826, pp. 346-358 (2023)
.. _fbc-Pavlov2:
**(Pavlov2)** Pavlov, Galigerov, Kolotinskii, Nikolskiy, Stegailov, "GPU-based Molecular Dynamics of Fluid Flows: Reaching for Turbulence", Int. J. High Perf. Comp. Appl., (2024)

View File

@ -195,8 +195,11 @@ doc page for more info.
Do not set "neigh_modify once yes" or else this fix will never be Do not set "neigh_modify once yes" or else this fix will never be
called. Reneighboring is **required**. called. Reneighboring is **required**.
Can be run in parallel, but aspects of the GCMC part will not scale well This fix style requires an :doc:`atom style <atom_style>` with per atom
in parallel. Only usable for 3D simulations. type masses.
Can be run in parallel, but some aspects of the insertion procedure
will not scale well in parallel. Only usable for 3D simulations.
Related commands Related commands

View File

@ -10,7 +10,7 @@ Syntax
info args info args
* args = one or more of the following keywords: *out*, *all*, *system*, *memory*, *communication*, *computes*, *dumps*, *fixes*, *groups*, *regions*, *variables*, *coeffs*, *styles*, *time*, *accelerator*, or *configuration* * args = one or more of the following keywords: *out*, *all*, *system*, *memory*, *communication*, *computes*, *dumps*, *fixes*, *groups*, *regions*, *variables*, *coeffs*, *styles*, *time*, *accelerator*, *fft* or *configuration*
* *out* values = *screen*, *log*, *append* filename, *overwrite* filename * *out* values = *screen*, *log*, *append* filename, *overwrite* filename
* *styles* values = *all*, *angle*, *atom*, *bond*, *compute*, *command*, *dump*, *dihedral*, *fix*, *improper*, *integrate*, *kspace*, *minimize*, *pair*, *region* * *styles* values = *all*, *angle*, *atom*, *bond*, *compute*, *command*, *dump*, *dihedral*, *fix*, *improper*, *integrate*, *kspace*, *minimize*, *pair*, *region*
@ -92,6 +92,13 @@ The *accelerator* category prints out information about compile time
settings of included accelerator support for the GPU, KOKKOS, INTEL, settings of included accelerator support for the GPU, KOKKOS, INTEL,
and OPENMP packages. and OPENMP packages.
.. versionadded:: 7Feb2024
The *fft* category prints out information about the included 3d-FFT
support. This lists the 3d-FFT engine, FFT precision, FFT library
used by the FFT engine. If the KOKKOS package is included, the settings
used for the KOKKOS package are displayed as well.
The *styles* category prints the list of styles available in the The *styles* category prints the list of styles available in the
current LAMMPS binary. It supports one of the following options current LAMMPS binary. It supports one of the following options
to control which category of styles is printed out: to control which category of styles is printed out:

View File

@ -450,7 +450,10 @@ relative RMS error.
For the KOKKOS package, the *pppm/kk* style performs charge For the KOKKOS package, the *pppm/kk* style performs charge
assignment and force interpolation calculations, along with the FFTs assignment and force interpolation calculations, along with the FFTs
themselves, on the GPU or (optionally) threaded on the CPU when themselves, on the GPU or (optionally) threaded on the CPU when
using OpenMP and FFTW3. using OpenMP and FFTW3. The specific FFT library is selected using
the FFT_KOKKOS CMake parameter. See the
:doc:`Build settings <Build_settings>` doc page for how to select a
3rd-party FFT library.
---------- ----------

View File

@ -126,14 +126,50 @@ molecule (header keyword = inertia).
Format of a molecule file Format of a molecule file
""""""""""""""""""""""""" """""""""""""""""""""""""
The format of an individual molecule file is similar but The format of an individual molecule file looks similar but is
(not identical) to the data file read by the :doc:`read_data <read_data>` different than that of a data file read by the :doc:`read_data <read_data>`
commands, and is as follows. commands. Here is a simple example for a TIP3P water molecule:
.. code-block::
# Water molecule. TIP3P geometry
# header section:
3 atoms
2 bonds
1 angles
# body section:
Coords
1 0.00000 -0.06556 0.00000
2 0.75695 0.52032 0.00000
3 -0.75695 0.52032 0.00000
Types
1 1 # O
2 2 # H
3 2 # H
Charges
1 -0.834
2 0.417
3 0.417
Bonds
1 1 1 2
2 1 1 3
Angles
1 1 2 1 3
A molecule file has a header and a body. The header appears first. The A molecule file has a header and a body. The header appears first. The
first line of the header and thus of the molecule file is *always* skipped; first line of the header and thus of the molecule file is *always*
it typically contains a description of the file or a comment from the software skipped; it typically contains a description of the file or a comment
that created the file. from the software that created the file.
Then lines are read one line at a time. Lines can have a trailing Then lines are read one line at a time. Lines can have a trailing
comment starting with '#' that is ignored. There *must* be at least one comment starting with '#' that is ignored. There *must* be at least one
@ -158,25 +194,62 @@ appear if the value(s) are different than the default, except when
defining a *body* particle, which requires setting the number of defining a *body* particle, which requires setting the number of
*atoms* to 1, and setting the *inertia* in a specific section (see below). *atoms* to 1, and setting the *inertia* in a specific section (see below).
* N *atoms* = # of atoms N in molecule, default = 0 .. list-table::
* Nb *bonds* = # of bonds Nb in molecule, default = 0 :header-rows: 1
* Na *angles* = # of angles Na in molecule, default = 0 :widths: auto
* Nd *dihedrals* = # of dihedrals Nd in molecule, default = 0
* Ni *impropers* = # of impropers Ni in molecule, default = 0
* Nf *fragments* = # of fragments Nf in molecule, default = 0
* Ninteger Ndouble *body* = # of integer and floating-point values
in body particle, default = 0
* Mtotal *mass* = total mass of molecule
* Xc Yc Zc *com* = coordinates of center-of-mass of molecule
* Ixx Iyy Izz Ixy Ixz Iyz *inertia* = 6 components of inertia tensor of molecule
For *mass*, *com*, and *inertia*, the default is for LAMMPS to * - Number(s)
calculate this quantity itself if needed, assuming the molecules - Keyword
consist of a set of point particles or finite-size particles (with a - Meaning
non-zero diameter) that do not overlap. If finite-size particles in - Default Value
the molecule do overlap, LAMMPS will not account for the overlap * - N
effects when calculating any of these 3 quantities, so you should - atoms
pre-compute them yourself and list the values in the file. - # of atoms N in molecule
- 0
* - Nb
- bonds
- # of bonds Nb in molecule
- 0
* - Na
- angles
- # of angles Na in molecule
- 0
* - Nd
- dihedrals
- # of dihedrals Nd in molecule
- 0
* - Ni
- impropers
- # of impropers Ni in molecule
- 0
* - Nf
- fragments
- # of fragments Nf in molecule
- 0
* - Ninteger Ndouble
- body
- # of integer and floating-point values in body particle
- 0
* - Mtotal
- mass
- total mass of molecule
- computed
* - Xc Yc Zc
- com
- coordinates of center-of-mass of molecule
- computed
* - Ixx Iyy Izz Ixy Ixz Iyz
- inertia
- 6 components of inertia tensor of molecule
- computed
For *mass*, *com*, and *inertia*, the default is for LAMMPS to calculate
this quantity itself if needed, assuming the molecules consist of a set
of point particles or finite-size particles (with a non-zero diameter)
that do **not** overlap. If finite-size particles in the molecule
**do** overlap, LAMMPS will not account for the overlap effects when
calculating any of these 3 quantities, so you should pre-compute them
yourself and list the values in the file.
The mass and center-of-mass coordinates (Xc,Yc,Zc) are The mass and center-of-mass coordinates (Xc,Yc,Zc) are
self-explanatory. The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) self-explanatory. The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz)
@ -188,7 +261,7 @@ internally.
These are the allowed section keywords for the body of the file. These are the allowed section keywords for the body of the file.
* *Coords, Types, Molecules, Fragments, Charges, Diameters, Masses* = atom-property sections * *Coords, Types, Molecules, Fragments, Charges, Diameters, Dipoles, Masses* = atom-property sections
* *Bonds, Angles, Dihedrals, Impropers* = molecular topology sections * *Bonds, Angles, Dihedrals, Impropers* = molecular topology sections
* *Special Bond Counts, Special Bonds* = special neighbor info * *Special Bond Counts, Special Bonds* = special neighbor info
* *Shake Flags, Shake Atoms, Shake Bond Types* = SHAKE info * *Shake Flags, Shake Atoms, Shake Bond Types* = SHAKE info
@ -303,6 +376,21 @@ not listed, the default diameter of each atom in the molecule is 1.0.
---------- ----------
.. versionadded:: 7Feb2024
*Dipoles* section:
* one line per atom
* line syntax: ID mux muy muz
* mux,muy,muz = x-, y-, and z-component of point dipole vector of atom
This section is only allowed for :doc:`atom styles <atom_style>` that
support particles with point dipoles, e.g. atom_style dipole. If not
listed, the default dipole component of each atom in the molecule is set
to 0.0.
----------
*Masses* section: *Masses* section:
* one line per atom * one line per atom

View File

@ -10,7 +10,7 @@ Syntax
neb etol ftol N1 N2 Nevery file-style arg keyword values neb etol ftol N1 N2 Nevery file-style arg keyword values
* etol = stopping tolerance for energy (energy units) * etol = stopping tolerance for energy (dimensionless)
* ftol = stopping tolerance for force (force units) * ftol = stopping tolerance for force (force units)
* N1 = max # of iterations (timesteps) to run initial NEB * N1 = max # of iterations (timesteps) to run initial NEB
* N2 = max # of iterations (timesteps) to run barrier-climbing NEB * N2 = max # of iterations (timesteps) to run barrier-climbing NEB
@ -89,10 +89,11 @@ potentials, and the starting configuration when the neb command is
issued should be the same for every replica. issued should be the same for every replica.
In a NEB calculation each replica is connected to other replicas by In a NEB calculation each replica is connected to other replicas by
inter-replica nudging forces. These forces are imposed by the :doc:`fix neb <fix_neb>` command, which must be used in conjunction with the inter-replica nudging forces. These forces are imposed by the
neb command. The group used to define the fix neb command defines the :doc:`fix neb <fix_neb>` command, which must be used in conjunction
NEB atoms which are the only ones that inter-replica springs are with the neb command. The group used to define the fix neb command
applied to. If the group does not include all atoms, then non-NEB defines the NEB atoms which are the only ones that inter-replica springs
are applied to. If the group does not include all atoms, then non-NEB
atoms have no inter-replica springs and the forces they feel and their atoms have no inter-replica springs and the forces they feel and their
motion is computed in the usual way due only to other atoms within motion is computed in the usual way due only to other atoms within
their replica. Conceptually, the non-NEB atoms provide a background their replica. Conceptually, the non-NEB atoms provide a background
@ -445,7 +446,7 @@ Related commands
"""""""""""""""" """"""""""""""""
:doc:`prd <prd>`, :doc:`temper <temper>`, :doc:`fix langevin <fix_langevin>`, :doc:`prd <prd>`, :doc:`temper <temper>`, :doc:`fix langevin <fix_langevin>`,
:doc:`fix viscous <fix_viscous>` :doc:`fix viscous <fix_viscous>`, :doc:`fix neb <fix_neb>`
Default Default
""""""" """""""

View File

@ -74,7 +74,7 @@ Syntax
*no_affinity* values = none *no_affinity* values = none
*kokkos* args = keyword value ... *kokkos* args = keyword value ...
zero or more keyword/value pairs may be appended zero or more keyword/value pairs may be appended
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *neigh/transpose* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* or *comm/pair/forward* or *comm/fix/forward* or *comm/reverse* or *comm/pair/reverse* or *sort* or *gpu/aware* or *pair/only* keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *neigh/transpose* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* or *comm/pair/forward* or *comm/fix/forward* or *comm/reverse* or *comm/pair/reverse* or *sort* or *atom/map* or *gpu/aware* or *pair/only*
*neigh* value = *full* or *half* *neigh* value = *full* or *half*
full = full neighbor list full = full neighbor list
half = half neighbor list built in thread-safe manner half = half neighbor list built in thread-safe manner
@ -108,6 +108,9 @@ Syntax
*sort* value = *no* or *device* *sort* value = *no* or *device*
*no* = perform atom sorting in non-KOKKOS mode *no* = perform atom sorting in non-KOKKOS mode
*device* = perform atom sorting on device (e.g. on GPU) *device* = perform atom sorting on device (e.g. on GPU)
*atom/map* value = *no* or *device*
*no* = build atom map in non-KOKKOS mode
*device* = build atom map on device (e.g. on GPU)
*gpu/aware* = *off* or *on* *gpu/aware* = *off* or *on*
*off* = do not use GPU-aware MPI *off* = do not use GPU-aware MPI
*on* = use GPU-aware MPI (default) *on* = use GPU-aware MPI (default)
@ -566,15 +569,19 @@ performing the exchange pack/unpack on the host CPU can give speedup
since it reduces the number of CUDA kernel launches. since it reduces the number of CUDA kernel launches.
The *sort* keyword determines whether the host or device performs atom The *sort* keyword determines whether the host or device performs atom
sorting, see the :doc:`atom_modify sort <atom_modify>` command. The sorting, see the :doc:`atom_modify sort <atom_modify>` command. The value
value options for the *sort* keyword are *no* or *device* similar to the options for the *sort* keyword are *no* or *device* similar to the *comm*
*comm* keywords above. If a value of *host* is used it will be keywords above. If a value of *host* is used it will be automatically be
automatically be changed to *no* since the *sort* keyword does not changed to *no* since the *sort* keyword does not support *host* mode. Not
support *host* mode. The value of *no* will also always be used when all fix styles with extra atom data support *device* mode and in that case
running on the CPU, i.e. setting the value to *device* will have no a warning will be given and atom sorting will run in *no* mode instead.
effect if the simulation is running on the CPU. Not all fix styles with
extra atom data support *device* mode and in that case a warning will be .. versionadded:: TBD
given and atom sorting will run in *no* mode instead.
The *atom/map* keyword determines whether the host or device builds the
atom_map, see the :doc:`atom_modify map <atom_modify>` command. The
value options for the *atom/map* keyword are identical to the *sort*
keyword above.
The *gpu/aware* keyword chooses whether GPU-aware MPI will be used. When The *gpu/aware* keyword chooses whether GPU-aware MPI will be used. When
this keyword is set to *on*, buffers in GPU memory are passed directly this keyword is set to *on*, buffers in GPU memory are passed directly
@ -593,12 +600,13 @@ for OpenMPI 1.8 (or later versions), Mvapich2 1.9 (or later) when the
Spectrum MPI when the "-gpu" flag is used. Spectrum MPI when the "-gpu" flag is used.
The *pair/only* keyword can change how the KOKKOS suffix "kk" is applied The *pair/only* keyword can change how the KOKKOS suffix "kk" is applied
when using an accelerator device. By default device acceleration is when using an accelerator device. By default device acceleration is always
always used for all available styles. With *pair/only* set to *on* the used for all available styles. With *pair/only* set to *on* the suffix
suffix setting will choose device acceleration only for pair styles and setting will choose device acceleration only for pair styles and run all
run all other force computations on the host CPU. other force computations on the host CPU. The *comm* flags, along with the
The *comm* flags will also automatically be changed to *no*\ . This can *sort* and *atom/map* keywords will also automatically be changed to *no*\ .
result in better performance for certain configurations and system sizes. This can result in better performance for certain configurations and
system sizes.
---------- ----------
@ -684,18 +692,18 @@ Restrictions
This command cannot be used after the simulation box is defined by a This command cannot be used after the simulation box is defined by a
:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command. :doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
The gpu style of this command can only be invoked if LAMMPS was built The *gpu* style of this command can only be invoked if LAMMPS was built
with the GPU package. See the :doc:`Build package <Build_package>` doc with the GPU package. See the :doc:`Build package <Build_package>` doc
page for more info. page for more info.
The intel style of this command can only be invoked if LAMMPS was The *intel* style of this command can only be invoked if LAMMPS was
built with the INTEL package. See the :doc:`Build package <Build_package>` page for more info. built with the INTEL package. See the :doc:`Build package <Build_package>` page for more info.
The kk style of this command can only be invoked if LAMMPS was built The *kokkos* style of this command can only be invoked if LAMMPS was built
with the KOKKOS package. See the :doc:`Build package <Build_package>` with the KOKKOS package. See the :doc:`Build package <Build_package>`
doc page for more info. doc page for more info.
The omp style of this command can only be invoked if LAMMPS was built The *omp* style of this command can only be invoked if LAMMPS was built
with the OPENMP package. See the :doc:`Build package <Build_package>` with the OPENMP package. See the :doc:`Build package <Build_package>`
doc page for more info. doc page for more info.
@ -704,19 +712,27 @@ Related commands
:doc:`suffix <suffix>`, :doc:`-pk command-line switch <Run_options>` :doc:`suffix <suffix>`, :doc:`-pk command-line switch <Run_options>`
Default Defaults
""""""" """"""""
For the GPU package, the default is Ngpu = 0 and the option defaults are neigh For the GPU package, the default parameters and settings are:
= yes, newton = off, binsize = 0.0, split = 1.0, gpuID = 0 to Ngpu-1, tpa = 1,
omp = 0, and platform=-1. These settings are made automatically if the "-sf
gpu" :doc:`command-line switch <Run_options>` is used. If it is not used, you
must invoke the package gpu command in your input script or via the "-pk gpu"
:doc:`command-line switch <Run_options>`.
For the INTEL package, the default is Nphi = 1 and the option defaults are omp .. parsed-literal::
= 0, mode = mixed, lrt = no, balance = -1, tpc = 4, tptask = 240, pppm_table =
yes. The default ghost option is determined by the pair style being used. Ngpu = 0, neigh = yes, newton = off, binsize = 0.0, split = 1.0, gpuID = 0 to Ngpu-1, tpa = 1, omp = 0, platform=-1.
These settings are made automatically if the "-sf gpu"
:doc:`command-line switch <Run_options>` is used. If it is not used,
you must invoke the package gpu command in your input script or via the
"-pk gpu" :doc:`command-line switch <Run_options>`.
For the INTEL package, the default parameters and settings are:
.. parsed-literal::
Nphi = 1, omp = 0, mode = mixed, lrt = no, balance = -1, tpc = 4, tptask = 240, pppm_table = yes
The default ghost option is determined by the pair style being used.
This value is output to the screen in the offload report at the end of each This value is output to the screen in the offload report at the end of each
run. Note that all of these settings, except "omp" and "mode", are ignored if run. Note that all of these settings, except "omp" and "mode", are ignored if
LAMMPS was not built with Xeon Phi co-processor support. These settings are LAMMPS was not built with Xeon Phi co-processor support. These settings are
@ -724,20 +740,35 @@ made automatically if the "-sf intel" :doc:`command-line switch <Run_options>`
is used. If it is not used, you must invoke the package intel command in your is used. If it is not used, you must invoke the package intel command in your
input script or via the "-pk intel" :doc:`command-line switch <Run_options>`. input script or via the "-pk intel" :doc:`command-line switch <Run_options>`.
For the KOKKOS package, the option defaults for GPUs are neigh = full, For the KOKKOS package when using GPUs, the option defaults are:
neigh/qeq = full, newton = off, binsize for GPUs = 2x LAMMPS default value,
comm = device, sort = device, neigh/transpose = off, gpu/aware = on. When
LAMMPS can safely detect that GPU-aware MPI is not available, the default value
of gpu/aware becomes "off". For CPUs or Xeon Phis, the option defaults are
neigh = half, neigh/qeq = half, newton = on, binsize = 0.0, comm = no, and sort
= no. For GPUs, option neigh/thread = on when there are 16k atoms or less on an MPI
rank, otherwise it is "off". These settings are made automatically by the
required "-k on" :doc:`command-line switch <Run_options>`. You can change them
by using the package kokkos command in your input script or via the :doc:`-pk
kokkos command-line switch <Run_options>`.
For the OMP package, the default is Nthreads = 0 and the option defaults are .. parsed-literal::
neigh = yes. These settings are made automatically if the "-sf omp"
:doc:`command-line switch <Run_options>` is used. If it is not used, you must neigh = full, neigh/qeq = full, newton = off, binsize = 2x LAMMPS default value, comm = device, sort = device, atom/map = device, neigh/transpose = off, gpu/aware = on
invoke the package omp command in your input script or via the "-pk omp"
:doc:`command-line switch <Run_options>`. For GPUs, option neigh/thread = on when there are 16k atoms or less on
an MPI rank, otherwise it is "off". When LAMMPS can safely detect that
GPU-aware MPI is not available, the default value of gpu/aware becomes
"off".
For the KOKKOS package when using CPUs or Xeon Phis, the option defaults are:
.. parsed-literal::
neigh = half, neigh/qeq = half, newton = on, binsize = 0.0, comm = no, sort = no, atom/map = no
These settings are made automatically by
the required "-k on" :doc:`command-line switch <Run_options>`. You can
change them by using the package kokkos command in your input script or
via the :doc:`-pk kokkos command-line switch <Run_options>`.
For the OMP package, the defaults are
.. parsed-literal::
Nthreads = 0, neigh = yes
These settings are made automatically if the "-sf omp"
:doc:`command-line switch <Run_options>` is used. If it is not used,
you must invoke the package omp command in your input script or via the
"-pk omp" :doc:`command-line switch <Run_options>`.

View File

@ -156,7 +156,7 @@ pair_coeff command:
The first 2 arguments must be \* \* so as to span all LAMMPS atom types. The first 2 arguments must be \* \* so as to span all LAMMPS atom types.
The first three C arguments map LAMMPS atom types 1,2,3 to the C The first three C arguments map LAMMPS atom types 1,2,3 to the C
element in the AIREBO file. The final H argument maps LAMMPS atom element in the AIREBO file. The final H argument maps LAMMPS atom
type 4 to the H element in the SW file. If a mapping value is type 4 to the H element in the AIREBO file. If a mapping value is
specified as NULL, the mapping is not performed. This can be used specified as NULL, the mapping is not performed. This can be used
when a *airebo* potential is used as part of the *hybrid* pair style. when a *airebo* potential is used as part of the *hybrid* pair style.
The NULL values are placeholders for atom types that will be used with The NULL values are placeholders for atom types that will be used with
@ -222,12 +222,12 @@ enabled if LAMMPS was built with that package. See the :doc:`Build package <Bui
These pair potentials require the :doc:`newton <newton>` setting to be These pair potentials require the :doc:`newton <newton>` setting to be
"on" for pair interactions. "on" for pair interactions.
The CH.airebo and CH.airebo-m potential files provided with LAMMPS The CH.airebo and CH.airebo-m potential files provided with LAMMPS (see
(see the potentials directory) are parameterized for metal :doc:`units <units>`. the potentials directory) are parameterized for metal :doc:`units
You can use the AIREBO, AIREBO-M or REBO potential with any LAMMPS units, <units>`. You can use the pair styles with *any* LAMMPS units, but you
but you would need to create your own AIREBO or AIREBO-M potential file would need to create your own AIREBO or AIREBO-M potential file with
with coefficients listed in the appropriate units, if your simulation coefficients listed in the appropriate units, if your simulation does
does not use "metal" units. not use "metal" units.
The pair styles provided here **only** support potential files parameterized The pair styles provided here **only** support potential files parameterized
for the elements carbon and hydrogen (designated with "C" and "H" in the for the elements carbon and hydrogen (designated with "C" and "H" in the

View File

@ -16,6 +16,7 @@
.. index:: pair_style lj/charmm/coul/msm/omp .. index:: pair_style lj/charmm/coul/msm/omp
.. index:: pair_style lj/charmmfsw/coul/charmmfsh .. index:: pair_style lj/charmmfsw/coul/charmmfsh
.. index:: pair_style lj/charmmfsw/coul/long .. index:: pair_style lj/charmmfsw/coul/long
.. index:: pair_style lj/charmmfsw/coul/long/kk
pair_style lj/charmm/coul/charmm command pair_style lj/charmm/coul/charmm command
======================================== ========================================
@ -43,6 +44,8 @@ pair_style lj/charmmfsw/coul/charmmfsh command
pair_style lj/charmmfsw/coul/long command pair_style lj/charmmfsw/coul/long command
========================================= =========================================
Accelerator Variants: *lj/charmmfsw/coul/long/kk*
Syntax Syntax
"""""" """"""
@ -281,7 +284,9 @@ page for more info.
Related commands Related commands
"""""""""""""""" """"""""""""""""
:doc:`pair_coeff <pair_coeff>` :doc:`pair_coeff <pair_coeff>`, :doc:`angle_style charmm <angle_charmm>`,
:doc:`dihedral_style charmm <dihedral_charmm>`,
:doc:`dihedral_style charmmfsw <dihedral_charmm>`, :doc:`fix cmap <fix_cmap>`
Default Default
""""""" """""""

View File

@ -138,8 +138,12 @@ This pair style can only be used via the *pair* keyword of the
Restrictions Restrictions
"""""""""""" """"""""""""
This style is part of the MC package. It is only enabled if LAMMPS This pair style is part of the MC package. It is only enabled if LAMMPS
was built with that package. See the :doc:`Build package <Build_package>` page for more info. was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
This pair style requires an :doc:`atom style <atom_style>` with per
atom type masses.
Related commands Related commands
"""""""""""""""" """"""""""""""""

View File

@ -72,7 +72,7 @@ interactions between particles which depend on the distance and have a
cutoff. The potential function must be provided as an expression string cutoff. The potential function must be provided as an expression string
using "r" as the distance variable. With pair style *lepton/coul* one using "r" as the distance variable. With pair style *lepton/coul* one
may additionally reference the charges of the two atoms of the pair with may additionally reference the charges of the two atoms of the pair with
"qi" and "qj", respectively. With pair style *lepton/coul* one may "qi" and "qj", respectively. With pair style *lepton/sphere* one may
instead reference the radii of the two atoms of the pair with "radi" and instead reference the radii of the two atoms of the pair with "radi" and
"radj", respectively; this is half of the diameter that can be set in "radj", respectively; this is half of the diameter that can be set in
:doc:`data files <read_data>` or the :doc:`set command <set>`. :doc:`data files <read_data>` or the :doc:`set command <set>`.
@ -166,8 +166,8 @@ mixing. Thus, expressions for *all* I,J pairs must be specified
explicitly. explicitly.
Only pair style *lepton* supports the :doc:`pair_modify shift <pair_modify>` Only pair style *lepton* supports the :doc:`pair_modify shift <pair_modify>`
option for shifting the energy of the pair interaction so that it is option for shifting the potential energy of the pair interaction so that
0 at the cutoff, pair styles *lepton/coul* and *lepton/sphere* do *not*. it is 0 at the cutoff, pair styles *lepton/coul* and *lepton/sphere* do *not*.
The :doc:`pair_modify table <pair_modify>` options are not relevant for The :doc:`pair_modify table <pair_modify>` options are not relevant for
the these pair styles. the these pair styles.

View File

@ -427,8 +427,8 @@ package. They are only enabled if LAMMPS was built with that package.
See the :doc:`Build package <Build_package>` page for more info. See the :doc:`Build package <Build_package>` page for more info.
The maximum number of elements, that can be read from the MEAM library The maximum number of elements, that can be read from the MEAM library
file, is determined at compile time. The default is 5. If you need file, is determined at compile time. The default is 8. If you need
support for more elements, you have to change the the constant 'maxelt' support for more elements, you have to change the the constant 'MAXELT'
at the beginning of the file ``src/MEAM/meam.h`` and update/recompile at the beginning of the file ``src/MEAM/meam.h`` and update/recompile
LAMMPS. There is no limit on the number of atoms types. LAMMPS. There is no limit on the number of atoms types.

150
doc/src/pair_rebomos.rst Normal file
View File

@ -0,0 +1,150 @@
.. index:: pair_style rebomos
.. index:: pair_style rebomos/omp
pair_style rebomos command
==========================
Accelerator Variants: *rebomos/omp*
Syntax
""""""
.. code-block:: LAMMPS
pair_style rebomos
* rebomos = name of this pair style
Examples
""""""""
.. code-block:: LAMMPS
pair_style rebomos
pair_coeff * * ../potentials/MoS.rebomos Mo S
Example input scripts available: examples/threebody/
Description
"""""""""""
.. versionadded:: TBD
The *rebomos* pair style computes the interactions between molybdenum
and sulfur atoms :ref:`(Stewart) <Stewart>` utilizing an adaptive
interatomic reactive empirical bond order potential that is similar in
form to the AIREBO potential :ref:`(Stuart) <Stuart2>`. The potential
is based on an earlier parameterizations for :math:`\text{MoS}_2`
developed by :ref:`(Liang) <Liang>`.
The REBOMoS potential consists of two terms:
.. math::
E & = \frac{1}{2} \sum_i \sum_{j \neq i}
\left[ E^{\text{REBO}}_{ij} + E^{\text{LJ}}_{ij} \right] \\
The :math:`E^{\text{REBO}}` term describes the covalently bonded
interactions between Mo and S atoms while the :math:`E^{\text{LJ}}` term
describes longer range dispersion forces between layers. A cubic spline
function is applied to smoothly switch between covalent bonding at short
distances to dispersion interactions at longer distances. This allows
the model to capture bond formation and breaking events which may occur
between adjacent MoS2 layers, edges, defects, and more.
----------
Only a single pair_coeff command is used with the *rebomos* pair style
which specifies an REBOMoS potential file with parameters for Mo and S.
These are mapped to LAMMPS atom types by specifying N additional
arguments after the filename in the pair_coeff command, where N is the
number of LAMMPS atom types:
* filename
* :math:`N` element names = mapping of REBOMoS elements to atom types
See the :doc:`pair_coeff <pair_coeff>` page for alternate ways
to specify the path for the potential file.
As an example, if your LAMMPS simulation has three atom types and you want
the first two to be Mo, and the third to be S, you would use the following
pair_coeff command:
.. code-block:: LAMMPS
pair_coeff * * MoS.rebomos Mo Mo S
The first 2 arguments must be \* \* so as to span all LAMMPS atom types.
The first two Mo arguments map LAMMPS atom types 1 and 2 to the Mo
element in the REBOMoS file. The final S argument maps LAMMPS atom type
3 to the S element in the REBOMoS file. If a mapping value is specified
as NULL, the mapping is not performed. This can be used when a
*rebomos* potential is used as part of the *hybrid* pair style. The
NULL values are placeholders for atom types that will be used with other
potentials.
----------
.. include:: accel_styles.rst
----------
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This pair style does not support the :doc:`pair_modify <pair_modify>`
mix, shift, table, and tail options.
This pair style does not write their information to :doc:`binary restart
files <restart>`, since it is stored in potential files. Thus, you need
to re-specify the pair_style and pair_coeff commands in an input script
that reads a restart file.
This pair styles can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. It does not support the
*inner*, *middle*, *outer* keywords.
Restrictions
""""""""""""
This pair style is part of the MANYBODY package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
These pair potentials require the :doc:`newton <newton>` setting to be
"on" for pair interactions.
The MoS.rebomos potential file provided with LAMMPS (see the potentials
directory) is parameterized for metal :doc:`units <units>`. You can use
the *rebomos* pair style with any LAMMPS units setting, but you would
need to create your own REBOMoS potential file with coefficients listed
in the appropriate units.
The pair style provided here **only** supports potential files parameterized
for the elements molybdenum and sulfur (designated with "Mo" and "S" in the
*pair_coeff* command. Using potential files for other elements will trigger
an error.
Related commands
""""""""""""""""
:doc:`pair_coeff <pair_coeff>`, :doc:`pair style rebo <pair_airebo>`
Default
"""""""
none
----------
.. _Stewart:
**(Steward)** Stewart, Spearot, Modelling Simul. Mater. Sci. Eng. 21, 045003, (2013).
.. _Stuart2:
**(Stuart)** Stuart, Tutein, Harrison, J Chem Phys, 112, 6472-6486, (2000).
.. _Liang:
**(Liang)** Liang, Phillpot, Sinnott Phys. Rev. B79 245110, (2009), Erratum: Phys. Rev. B85 199903(E), (2012)

View File

@ -333,6 +333,7 @@ accelerated styles exist.
* :doc:`rann <pair_rann>` - * :doc:`rann <pair_rann>` -
* :doc:`reaxff <pair_reaxff>` - ReaxFF potential * :doc:`reaxff <pair_reaxff>` - ReaxFF potential
* :doc:`rebo <pair_airebo>` - second generation REBO potential of Brenner * :doc:`rebo <pair_airebo>` - second generation REBO potential of Brenner
* :doc:`rebomos <pair_rebomos>` - REBOMoS potential for MoS2
* :doc:`resquared <pair_resquared>` - Everaers RE-Squared ellipsoidal potential * :doc:`resquared <pair_resquared>` - Everaers RE-Squared ellipsoidal potential
* :doc:`saip/metal <pair_saip_metal>` - interlayer potential for hetero-junctions formed with hexagonal 2D materials and metal surfaces * :doc:`saip/metal <pair_saip_metal>` - interlayer potential for hetero-junctions formed with hexagonal 2D materials and metal surfaces
* :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>` - smoothed dissipative particle dynamics for water at isothermal conditions * :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>` - smoothed dissipative particle dynamics for water at isothermal conditions

View File

@ -25,6 +25,8 @@ Syntax
*numa* params = none *numa* params = none
*custom* params = infile *custom* params = infile
infile = file containing grid layout infile = file containing grid layout
*numa_nodes* arg = Nn
Nn = number of numa domains per node
*map* arg = *cart* or *cart/reorder* or *xyz* or *xzy* or *yxz* or *yzx* or *zxy* or *zyx* *map* arg = *cart* or *cart/reorder* or *xyz* or *xzy* or *yxz* or *yzx* or *zxy* or *zyx*
cart = use MPI_Cart() methods to map processors to 3d grid with reorder = 0 cart = use MPI_Cart() methods to map processors to 3d grid with reorder = 0
cart/reorder = use MPI_Cart() methods to map processors to 3d grid with reorder = 1 cart/reorder = use MPI_Cart() methods to map processors to 3d grid with reorder = 1
@ -159,24 +161,28 @@ surface-to-volume ratio of each processor's subdomain.
The *numa* style operates similar to the *twolevel* keyword except The *numa* style operates similar to the *twolevel* keyword except
that it auto-detects which cores are running on which nodes. that it auto-detects which cores are running on which nodes.
Currently, it does this in only 2 levels, but it may be extended in It will also subdivide the cores into numa domains. Currently, the
the future to account for socket topology and other non-uniform memory number of numa domains is not autodetected and must be specified using
access (NUMA) costs. It also uses a different algorithm than the the *numa_nodes* keyword; otherwise, the default value is used. The
*twolevel* keyword for doing the two-level factorization of the *numa* style uses a different algorithm than the *twolevel* keyword for
simulation box into a 3d processor grid to minimize off-node doing the two-level factorization of the simulation box into a 3d
communication, and it does its own MPI-based mapping of nodes and processor grid to minimize off-node communication and communication
across numa domains. It does its own MPI-based mapping of nodes and
cores to the regular 3d grid. Thus it may produce a different layout cores to the regular 3d grid. Thus it may produce a different layout
of the processors than the *twolevel* options. of the processors than the *twolevel* options.
The *numa* style will give an error if the number of MPI processes is The *numa* style will give an error if the number of MPI processes is
not divisible by the number of cores used per node, or any of the Px not divisible by the number of cores used per node, or any of the Px
or Py of Pz values is greater than 1. or Py or Pz values is greater than 1.
.. note:: .. note::
Unlike the *twolevel* style, the *numa* style does not require Unlike the *twolevel* style, the *numa* style does not require
any particular ordering of MPI ranks i norder to work correctly. This any particular ordering of MPI ranks in order to work correctly. This
is because it auto-detects which processes are running on which nodes. is because it auto-detects which processes are running on which nodes.
However, it assumes that the lowest ranks are in the first numa
domain, and so forth. MPI rank orderings that do not preserve this
property might result in more intranode communication between CPUs.
The *custom* style uses the file *infile* to define both the 3d The *custom* style uses the file *infile* to define both the 3d
factorization and the mapping of processors to the grid. factorization and the mapping of processors to the grid.
@ -207,6 +213,14 @@ any order, but no processor ID should appear more than once.
---------- ----------
The *numa_nodes* keyword is used to specifiy the number of numa domains
per node. It is currently only used by the *numa* style for two-level
factorization to reduce the amount of MPI communications between CPUs.
A good setting for this will typically be equal to the number of CPU
sockets per node.
----------
The *map* keyword affects how the P processor IDs (from 0 to P-1) are The *map* keyword affects how the P processor IDs (from 0 to P-1) are
mapped to the 3d grid of processors. It is only used by the mapped to the 3d grid of processors. It is only used by the
*onelevel* and *twolevel* grid settings. *onelevel* and *twolevel* grid settings.
@ -356,5 +370,5 @@ Related commands
Default Default
""""""" """""""
The option defaults are Px Py Pz = \* \* \*, grid = onelevel, and map = The option defaults are Px Py Pz = \* \* \*, grid = onelevel, map =
cart. cart, and numa_nodes = 2.

View File

@ -706,7 +706,7 @@ library. Ceil() is the smallest integer not less than its argument.
Floor() if the largest integer not greater than its argument. Round() Floor() if the largest integer not greater than its argument. Round()
is the nearest integer to its argument. is the nearest integer to its argument.
.. versionadded:: TBD .. versionadded:: 7Feb2024
The ternary(x,y,z) function is the equivalent of the ternary operator The ternary(x,y,z) function is the equivalent of the ternary operator
(? and :) in C or C++. It takes 3 arguments. The first argument is a (? and :) in C or C++. It takes 3 arguments. The first argument is a
@ -1155,7 +1155,7 @@ variable by using the :doc:`compute property/atom
Custom atom properties Custom atom properties
---------------------- ----------------------
.. versionadded:: TBD .. versionadded:: 7Feb2024
Custom atom properties refer to per-atom integer and floating point Custom atom properties refer to per-atom integer and floating point
vectors or arrays that have been added via the :doc:`fix property/atom vectors or arrays that have been added via the :doc:`fix property/atom

View File

@ -125,6 +125,7 @@ antisymmetry
anton anton
Antonelli Antonelli
api api
apolar
Apoorva Apoorva
Appl Appl
Appshaw Appshaw
@ -799,6 +800,7 @@ dlabel
dlambda dlambda
DLAMMPS DLAMMPS
dll dll
dlm
dlopen dlopen
dm dm
dmax dmax
@ -1016,6 +1018,7 @@ Ercolessi
Erdmann Erdmann
erf erf
erfc erfc
erforce
Erhart Erhart
erorate erorate
erose erose
@ -1767,6 +1770,7 @@ Kolafa
Kollman Kollman
kolmogorov kolmogorov
Kolmogorov Kolmogorov
Kolotinskii
Kondor Kondor
konglt konglt
Koning Koning
@ -2236,8 +2240,10 @@ Mohd
Mohles Mohles
mol mol
Mol Mol
molatom
molfile molfile
Molfile Molfile
molindex
MolPairStyle MolPairStyle
moltemplate moltemplate
momb momb
@ -2261,6 +2267,7 @@ morris
Morriss Morriss
morse morse
Morteza Morteza
MoS
Mosayebi Mosayebi
Moseler Moseler
Moskalev Moskalev
@ -2570,6 +2577,7 @@ ns
Ns Ns
Nsample Nsample
Nskip Nskip
nspecial
Nspecies Nspecies
nsq nsq
Nstart Nstart
@ -2768,6 +2776,7 @@ PEigenDense
Peng Peng
peptide peptide
peratom peratom
Perf
Pergamon Pergamon
pergrid pergrid
peri peri
@ -3064,6 +3073,7 @@ reaxff
ReaxFF ReaxFF
REAXFF REAXFF
rebo rebo
rebomos
recurse recurse
recursing recursing
Ree Ree
@ -3591,6 +3601,7 @@ tesselation
tesselations tesselations
Tetot Tetot
tex tex
textrm
tfac tfac
tfmc tfmc
tfMC tfMC
@ -3791,6 +3802,7 @@ unimodal
uninstall uninstall
unitarg unitarg
unitless unitless
unittest
Universite Universite
unix unix
unmaintained unmaintained
@ -3877,7 +3889,10 @@ Verlet
versa versa
Verstraelen Verstraelen
ves ves
vf
vflag vflag
vflow
vfrac
vhi vhi
vibrational vibrational
Vij Vij

View File

@ -7,7 +7,7 @@ dimension 2
# read in clusters of rigid bodies # read in clusters of rigid bodies
fix molprop all property/atom mol fix molprop all property/atom mol ghost yes
read_data data.dimer fix molprop NULL Molecules read_data data.dimer fix molprop NULL Molecules
set type 1 mass 1.0 set type 1 mass 1.0
@ -101,4 +101,4 @@ thermo 1000
#dump 1 all image 1000 image.*.jpg type type zoom 1.6 #dump 1 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2 #dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 100000 run 10000

View File

@ -7,7 +7,7 @@ dimension 2
# read in clusters of rigid bodies # read in clusters of rigid bodies
fix molprop all property/atom mol fix molprop all property/atom mol ghost yes
read_data data.dimer fix molprop NULL Molecules read_data data.dimer fix molprop NULL Molecules
set type 1 mass 1.0 set type 1 mass 1.0
@ -102,4 +102,4 @@ thermo 1000
#dump 1 all image 500 image.*.jpg type type zoom 1.6 #dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2 #dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 50000 run 25000

View File

@ -1,286 +0,0 @@
LAMMPS (1 Feb 2014)
# SRD diffusion demo - dimer particles
units lj
atom_style sphere
atom_modify map array first big
dimension 2
# read in clusters of rigid bodies
fix molprop all property/atom mol
read_data data.dimer fix molprop NULL Molecules
orthogonal box = (-9.34165 -9.34165 -0.5) to (9.34165 9.34165 0.5)
4 by 2 by 1 MPI processor grid
reading atoms ...
200 atoms
set type 1 mass 1.0
200 settings made for mass
group big type 1
200 atoms in group big
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style soft 1.12
pair_coeff 1 1 0.0
pair_coeff 2 2 0.0 0.0
pair_coeff 1 2 0.0 0.0
variable prefactor equal ramp(0,60)
fix soft all adapt 1 pair soft a * * v_prefactor
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 all enforce2d
#dump 1 all atom 10 dump.dimer.equil
thermo 100
run 1000
Memory usage per processor = 3.1029 Mbytes
Step Temp E_pair E_mol TotEng Press
0 3.4028231 0 0 0.83369167 -0.55065517
100 9.5167872 2.392105 0 4.7237178 2.8319556
200 13.564465 3.0352634 0 6.3585572 3.6388732
300 13.133051 4.3835112 0 7.6011086 4.060051
400 14.584346 5.5141254 0 9.0872901 4.4231056
500 15.331515 6.6554832 0 10.411704 4.847642
600 16.953755 7.4794317 0 11.633102 5.2020696
700 16.503256 8.8572339 0 12.900532 5.6694613
800 17.006131 9.877343 0 14.043845 5.5483363
900 17.305927 11.081594 0 15.321546 6.2908201
1000 18.122491 12.126462 0 16.566472 5.7536055
Loop time of 0.185949 on 8 procs for 1000 steps with 200 atoms
Pair time (%) = 0.00187448 (1.00806)
Neigh time (%) = 0.000561714 (0.30208)
Comm time (%) = 0.0652371 (35.0833)
Outpt time (%) = 0.00209856 (1.12857)
Other time (%) = 0.116177 (62.4779)
Nlocal: 25 ave 30 max 20 min
Histogram: 1 0 1 1 0 0 3 1 0 1
Nghost: 28.375 ave 36 max 22 min
Histogram: 1 0 1 2 1 0 2 0 0 1
Neighs: 33.125 ave 45 max 22 min
Histogram: 1 0 2 1 0 1 1 0 1 1
Total # of neighbors = 265
Ave neighs/atom = 1.325
Neighbor list builds = 99
Dangerous builds = 96
#undump 1
unfix soft
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 85.0
Lattice spacing in x,y,z = 0.108465 0.108465 0.108465
create_atoms 2 region plane
Created 29929 atoms
set type 2 mass 0.1
29929 settings made for mass
group small type 2
29929 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.5
delete_atoms overlap 0.5 small big
Deleted 12759 atoms, new total = 17370
# SRD run
reset_timestep 0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 search 0.2 collision slip inside ignore overlap yes
fix 3 all enforce2d
# diagnostics
compute tbig big temp/sphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp f_2[8] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:439)
thermo 1000
#dump 1 all atom 1000 dump.dimer
#dump 1 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 100000
SRD info:
SRD/big particles = 17170 200
big particle diameter max/min = 1 1
SRD temperature & lamda = 1 0.0632456
SRD max distance & max velocity = 0.252982 12.6491
SRD grid counts: 75 75 1
SRD grid size: request, actual (xyz) = 0.25, 0.249111 0.249111 1
SRD per actual grid cell = 5.5499
SRD viscosity = 0.235551
big/SRD mass density ratio = 0.142367
# of rescaled SRD velocities = 0
ave/max small velocity = 4.20347 7.72323
ave/max big velocity = 2.64047 6.60911
Memory usage per processor = 7.0395 Mbytes
Step Temp 2[8] TotEng pebig ebig Press 2[1] 2[2] 2[3] 2[4] 2[5] 2[6] 2[7] 2[8] 2[9] 2[10] 2[11] 2[12]
0 6.9744766 0 0.30175295 21.011259 26.207244 2.7219331 0 0 0 0 0 0 0 0 0 0 0 0
1000 1.1941672 3369 0.24718395 20.578272 21.467926 9.8944086 13658 56 56 2 664 40320 5625 3369 1.1358997 0 4 0
2000 1.3247909 3390 0.24717547 20.48022 21.467189 6.5341926 13389 48 48 3 1988 40320 5625 3390 1.1814916 0 144 0
3000 1.386904 3355 0.24769415 20.478993 21.512237 6.1207029 13507 45 45 0 2871 40320 5625 3355 1.1657697 0 144 0
4000 1.1567347 3376 0.24573733 20.48052 21.342287 3.5540965 13475 46 46 0 3731 40320 5625 3376 1.1485984 0 144 0
5000 1.2565155 3376 0.24620928 20.447172 21.383276 2.5808161 13267 55 55 0 4559 40320 5625 3376 1.1778096 0 144 0
6000 1.1489985 3375 0.24520477 20.440031 21.296035 7.8204262 13362 59 59 0 5354 40320 5625 3375 1.1530517 0 144 0
7000 1.1608248 3399 0.24587989 20.489854 21.354669 7.9622779 13333 59 59 2 6254 40320 5625 3399 1.1809325 0 144 0
8000 1.1749441 3374 0.24700359 20.576929 21.452262 6.7498405 13495 64 64 0 7134 40320 5625 3374 1.1445035 0 144 0
9000 1.1285085 3405 0.24536183 20.468936 21.309675 5.8959937 13333 60 60 0 8008 40320 5625 3405 1.162836 0 144 0
10000 1.1462675 3425 0.24564758 20.480523 21.334492 7.0047543 13487 45 45 0 8967 40320 5625 3425 1.1881074 0 144 0
11000 1.2854766 3388 0.246088 20.415062 21.372742 7.8508136 13491 60 60 1 9833 40320 5625 3388 1.1698514 0 144 0
12000 1.2926536 3360 0.24602616 20.404345 21.367372 7.9286141 13142 64 64 1 11029 40320 5625 3360 1.1658039 0 161 0
13000 1.2289767 3412 0.24595657 20.44574 21.361328 2.2809592 13162 56 56 1 12018 40320 5625 3412 1.1665531 0 161 0
14000 1.3518235 3380 0.24629055 20.383226 21.390334 8.0062608 13310 59 59 7 13146 40320 5625 3380 1.1733296 0 161 0
15000 1.2971143 3355 0.24671134 20.46053 21.42688 9.7871945 12967 60 60 3 14084 40320 5625 3355 1.1703643 0 161 0
16000 1.4160948 3384 0.2478594 20.471598 21.526589 7.3141215 13123 56 56 1 14929 40320 5625 3384 1.1666782 0 161 0
17000 1.3172038 3391 0.247377 20.503375 21.484692 6.1541908 12957 54 54 0 15778 40320 5625 3391 1.1639931 0 161 0
18000 0.98748293 3369 0.2443499 20.486114 21.221789 4.0981146 13355 50 50 1 17031 40320 5625 3369 1.2083414 0 192 0
19000 1.4619261 3367 0.24867817 20.508564 21.597699 11.68547 13519 58 58 0 18334 40320 5625 3367 1.1667505 0 192 0
20000 1.44087 3391 0.24747923 20.420123 21.493571 4.0409936 13594 67 67 0 19303 40320 5625 3391 1.1869387 0 192 0
21000 1.1155365 3377 0.24474418 20.424957 21.256032 8.4985692 13423 52 52 0 20245 40320 5625 3377 1.1726608 0 192 0
22000 1.2045785 3382 0.24466159 20.351448 21.248859 7.0518674 13271 62 62 0 21128 40320 5625 3382 1.1658557 0 192 0
23000 1.2634616 3378 0.24571326 20.398918 21.340197 6.8382109 13246 61 61 1 22067 40320 5625 3378 1.170196 0 192 0
24000 1.365723 3375 0.24749053 20.477089 21.494552 5.9584152 13017 46 46 1 23017 40320 5625 3375 1.1841192 0 192 0
25000 1.1421045 3367 0.24497142 20.4249 21.275768 10.381661 13049 66 66 1 23907 40320 5625 3367 1.1856767 0 192 0
26000 1.4008939 3340 0.24678624 20.389719 21.433385 7.3799658 12971 53 53 5 24850 40320 5625 3340 1.1713233 0 192 0
27000 1.1835022 3379 0.24522732 20.416284 21.297993 7.2251705 12717 46 46 1 25723 40320 5625 3379 1.1798333 0 192 0
28000 1.0496668 3398 0.24461816 20.463086 21.245087 6.5485338 13385 60 60 0 26990 40320 5625 3398 1.1765205 0 192 0
29000 1.1779927 3453 0.24501083 20.401586 21.27919 4.8540048 13157 77 77 2 28023 40320 5625 3453 1.1741595 0 192 0
30000 1.2277637 3375 0.24554215 20.410652 21.325336 10.087705 12939 72 72 1 28855 40320 5625 3375 1.1627414 0 192 0
31000 1.1575066 3397 0.24504213 20.419566 21.281909 6.4849648 12977 66 66 0 29745 40320 5625 3397 1.1575018 0 192 0
32000 1.1752733 3381 0.2451073 20.41199 21.287569 7.2784509 12971 48 48 0 30561 40320 5625 3381 1.1790395 0 192 0
33000 1.1743895 3370 0.24485514 20.390748 21.265669 9.084299 12810 64 64 0 31342 40320 5625 3370 1.1429061 0 192 0
34000 1.2975876 3377 0.24608262 20.405573 21.372276 10.624304 12610 60 60 1 32140 40320 5625 3377 1.1685718 0 192 0
35000 1.7701252 3356 0.2497356 20.370794 21.689537 7.107766 12983 45 45 8 33862 40320 5625 3356 1.1720964 0 242 0
36000 1.2711521 3393 0.24675748 20.483878 21.430887 8.7087273 13175 60 60 0 34920 40320 5625 3393 1.1796212 0 242 0
37000 1.1140649 3373 0.24450996 20.405711 21.23569 8.0025138 12964 50 50 1 35770 40320 5625 3373 1.1772234 0 242 0
38000 1.3128798 3379 0.24583813 20.372946 21.351041 5.0554655 12939 56 56 1 36679 40320 5625 3379 1.1702949 0 242 0
39000 1.2093703 3365 0.24536578 20.409037 21.310018 5.6243735 12873 62 62 3 37511 40320 5625 3365 1.1751064 0 242 0
40000 1.2095402 3365 0.24485106 20.364207 21.265315 3.9565189 12876 54 54 1 38503 40320 5625 3365 1.1637516 0 242 0
41000 1.1146238 3350 0.24476111 20.427107 21.257502 6.5033046 12656 53 53 0 39313 40320 5625 3350 1.1553197 0 242 0
42000 1.2302245 3370 0.24452048 20.320087 21.236604 10.7363 12676 52 52 1 40108 40320 5625 3370 1.1492163 0 242 0
43000 1.2749689 3404 0.24511103 20.338041 21.287893 9.18604 13057 72 72 1 41014 40320 5625 3404 1.1572511 0 242 0
44000 1.1989211 3385 0.24450633 20.342179 21.235375 7.6714085 13086 52 53 1 41840 40320 5625 3385 1.1530041 0 242 0
45000 1.6465972 3370 0.249994 20.485264 21.711979 7.4908607 12894 58 58 7 43545 40320 5625 3370 1.1978571 0 361 0
46000 1.3082316 3412 0.24665637 20.447473 21.422106 8.9900563 13136 53 53 4 44510 40320 5625 3412 1.1686573 0 361 0
47000 1.2163258 3355 0.24493724 20.366636 21.272799 6.9309438 13020 56 56 0 45414 40320 5625 3355 1.1620943 0 361 0
48000 1.349966 3362 0.24683156 20.431596 21.437321 8.8527164 13044 64 64 1 46260 40320 5625 3362 1.1683452 0 361 0
49000 1.3903769 3347 0.24726403 20.439051 21.474881 5.9250552 13103 58 59 2 49229 40320 5625 3347 1.1924538 0 578 0
50000 1.2737918 3349 0.24563843 20.384723 21.333698 7.2419874 12892 41 41 1 50225 40320 5625 3349 1.1803233 0 578 0
51000 1.2229799 3355 0.24504936 20.371417 21.282537 8.5556146 12912 63 63 0 51096 40320 5625 3355 1.1333843 0 578 0
52000 1.2326547 3386 0.24596384 20.443632 21.361959 6.1757404 12790 66 66 1 52114 40320 5625 3386 1.1685608 0 578 0
53000 1.3695441 3389 0.24696147 20.428294 21.448604 8.7464732 12997 60 60 1 53115 40320 5625 3389 1.1631228 0 578 0
54000 1.0711204 3400 0.24322154 20.325806 21.12379 8.7228921 13005 56 56 0 53913 40320 5625 3400 1.1250986 0 578 0
55000 1.3412565 3360 0.24617922 20.381429 21.380665 6.9489559 12960 46 46 0 55249 40320 5625 3360 1.176467 0 578 0
56000 1.3910761 3355 0.2467942 20.397725 21.434077 6.6762734 12966 65 65 2 56653 40320 5625 3355 1.1715559 0 578 0
57000 1.1177307 3388 0.24424738 20.380176 21.212885 5.5073089 13153 62 62 1 57550 40320 5625 3388 1.1576307 0 578 0
58000 1.3136279 3365 0.24661231 20.439627 21.418279 9.1390284 12799 52 52 1 58366 40320 5625 3365 1.159026 0 578 0
59000 1.2667621 3374 0.24556104 20.383238 21.326976 3.4246418 13127 54 54 1 59170 40320 5625 3374 1.1461442 0 578 0
60000 1.1903121 3326 0.24492127 20.384629 21.271412 6.9439977 13078 47 47 2 60105 40320 5625 3326 1.1665886 0 578 0
61000 1.209313 3362 0.2455341 20.423699 21.324637 9.1212002 13225 61 61 4 61358 40320 5625 3362 1.1725894 0 578 0
62000 1.1720074 3366 0.24476301 20.384522 21.257667 7.7592884 13187 53 54 2 62257 40320 5625 3366 1.1599665 0 578 0
63000 1.2155508 3386 0.24486685 20.361101 21.266686 5.7864126 13090 42 42 0 63137 40320 5625 3386 1.1724234 0 578 0
64000 1.1967326 3379 0.2451834 20.402613 21.294179 4.8815049 13033 48 48 4 64152 40320 5625 3379 1.1818756 0 578 0
65000 1.1732378 3386 0.24500733 20.404824 21.278887 11.381026 12998 59 59 0 65071 40320 5625 3386 1.1625543 0 578 0
66000 1.1960739 3385 0.24407516 20.306852 21.197927 12.17249 12994 61 61 0 65941 40320 5625 3385 1.1826516 0 578 0
67000 1.3468331 3366 0.24657491 20.41164 21.415031 7.8115623 12894 62 62 1 66788 40320 5625 3366 1.1750424 0 578 0
68000 1.0742924 3369 0.24347736 20.345661 21.146009 9.5240252 13065 68 68 2 67665 40320 5625 3369 1.1561575 0 578 0
69000 1.1411254 3380 0.2450544 20.432836 21.282975 8.0392218 13134 49 49 1 68471 40320 5625 3380 1.1405485 0 578 0
70000 1.1585312 3388 0.24435206 20.358871 21.221977 7.5303626 13113 59 59 0 69320 40320 5625 3388 1.1726416 0 578 0
71000 1.3418857 3382 0.24598802 20.364355 21.36406 9.2840877 13265 68 68 0 70522 40320 5625 3382 1.1696767 0 578 0
72000 1.1547857 3388 0.24328952 20.26938 21.129695 7.9643121 13270 50 50 1 71384 40320 5625 3388 1.1647353 0 578 0
73000 1.1114283 3385 0.24397276 20.36102 21.189034 13.168935 13110 62 62 0 72335 40320 5625 3385 1.1625358 0 578 0
74000 1.6120075 3370 0.25009739 20.520013 21.720959 12.065782 12902 51 51 9 73743 40320 5625 3370 1.1873738 0 578 0
75000 1.3271087 3353 0.24600453 20.376798 21.365493 7.5902315 13076 51 51 1 74746 40320 5625 3353 1.1706259 0 578 0
76000 1.1908626 3386 0.2451628 20.405197 21.292389 6.8084086 13124 58 58 1 75702 40320 5625 3386 1.1765809 0 578 0
77000 1.042536 3391 0.24320847 20.345966 21.122655 6.4883579 12846 57 57 0 76930 40320 5625 3391 1.1769829 0 578 0
78000 1.3791243 3355 0.24628683 20.362563 21.390011 9.2397346 12897 56 56 12 78068 40320 5625 3355 1.1905167 0 578 0
79000 1.2058397 3391 0.2453076 20.406614 21.304965 9.7949819 13020 51 51 1 79065 40320 5625 3391 1.1777257 0 578 0
80000 1.0634737 3383 0.24440921 20.434652 21.22694 7.5296946 12973 61 61 2 80029 40320 5625 3383 1.1648017 0 578 0
81000 1.3768966 3373 0.24730623 20.452758 21.478546 7.1508584 13297 56 56 1 81172 40320 5625 3373 1.1740603 0 578 0
82000 1.3348382 3375 0.24680945 20.440946 21.4354 9.3251946 12822 56 56 2 82447 40320 5625 3375 1.1573749 0 578 0
83000 1.2042501 3393 0.24484972 20.368032 21.265198 7.5283729 12990 51 51 0 83344 40320 5625 3393 1.1833162 0 578 0
84000 1.1985223 3405 0.24537841 20.418216 21.311115 7.848856 13189 60 60 0 84147 40320 5625 3405 1.173911 0 578 0
85000 1.1811593 3391 0.24418657 20.32764 21.207604 8.3169438 13303 51 51 0 85022 40320 5625 3391 1.1586027 0 578 0
86000 1.2595689 3385 0.24556774 20.389179 21.327558 8.3808674 12966 56 56 1 85962 40320 5625 3385 1.1617838 0 578 0
87000 1.1419322 3356 0.24399697 20.340397 21.191137 6.8911116 13166 63 63 0 86753 40320 5625 3356 1.1729274 0 578 0
88000 1.275219 3380 0.24586129 20.403015 21.353053 6.838563 12963 56 56 0 87729 40320 5625 3380 1.1511968 0 578 0
89000 1.2794858 3366 0.24507826 20.33183 21.285047 9.3370019 12889 64 64 1 88575 40320 5625 3366 1.1660311 0 578 0
90000 1.0549593 3402 0.24289618 20.309589 21.095533 4.9944605 13076 59 59 1 89560 40320 5625 3402 1.1744335 0 578 0
91000 1.214812 3402 0.24442304 20.323106 21.228141 7.5681019 13229 44 44 1 90440 40320 5625 3402 1.1696689 0 578 0
92000 1.2019714 3374 0.24469176 20.356011 21.25148 7.6728432 13331 64 64 2 91243 40320 5625 3374 1.1678246 0 578 0
93000 1.0964004 3364 0.24364709 20.343931 21.16075 5.9650235 13086 55 55 0 92088 40320 5625 3364 1.1570838 0 578 0
94000 1.1722133 3393 0.24332541 20.259513 21.132812 7.1743779 13206 66 66 0 92858 40320 5625 3393 1.154328 0 578 0
95000 1.2413711 3373 0.24549874 20.396744 21.321566 8.131371 12967 61 61 1 93789 40320 5625 3373 1.1635681 0 578 0
96000 1.1702409 3363 0.24528289 20.430989 21.302819 11.399295 12776 63 63 0 94571 40320 5625 3363 1.1367365 0 578 0
97000 1.0696537 3368 0.242673 20.279258 21.07615 8.537175 13054 55 55 0 95403 40320 5625 3368 1.1648141 0 578 0
98000 1.1635952 3369 0.24486659 20.399785 21.266664 8.6714443 12750 70 70 0 96296 40320 5625 3369 1.1686272 0 578 0
99000 1.1286255 3397 0.24343772 20.30174 21.142566 6.7153212 12810 44 45 1 97021 40320 5625 3397 1.137818 0 578 0
100000 1.2847818 3367 0.24509282 20.329149 21.286312 8.7486629 13260 64 64 0 97855 40320 5625 3367 1.1597138 0 578 0
Loop time of 20.8136 on 8 procs for 100000 steps with 17370 atoms
Pair time (%) = 0.322913 (1.55145)
Neigh time (%) = 1.11753 (5.36921)
Comm time (%) = 1.72335 (8.27991)
Outpt time (%) = 0.00594518 (0.0285638)
Other time (%) = 17.6439 (84.7709)
Nlocal: 2171.25 ave 2428 max 1747 min
Histogram: 1 0 0 0 1 1 2 1 0 2
Nghost: 61.25 ave 69 max 54 min
Histogram: 1 1 0 1 1 1 0 2 0 1
Neighs: 175.625 ave 225 max 132 min
Histogram: 1 1 1 1 1 0 1 0 0 2
Total # of neighbors = 1405
Ave neighs/atom = 0.0808866
Neighbor list builds = 5156
Dangerous builds = 1
Please see the log.cite file for references relevant to this simulation

View File

@ -1,237 +0,0 @@
LAMMPS (1 Feb 2014)
# SRD viscosity demo - dimer particles
units lj
atom_style sphere
atom_modify map array first big
dimension 2
# read in clusters of rigid bodies
fix molprop all property/atom mol
read_data data.dimer fix molprop NULL Molecules
orthogonal box = (-9.34165 -9.34165 -0.5) to (9.34165 9.34165 0.5)
4 by 2 by 1 MPI processor grid
reading atoms ...
200 atoms
set type 1 mass 1.0
200 settings made for mass
group big type 1
200 atoms in group big
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style soft 1.12
pair_coeff 1 1 0.0
pair_coeff 2 2 0.0 0.0
pair_coeff 1 2 0.0 0.0
variable prefactor equal ramp(0,60)
fix soft all adapt 1 pair soft a * * v_prefactor
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 all enforce2d
#dump 1 all atom 10 dump.dimer.equil
thermo 100
run 1000
Memory usage per processor = 3.1029 Mbytes
Step Temp E_pair E_mol TotEng Press
0 3.4028231 0 0 0.83369167 -0.55065517
100 9.5167872 2.392105 0 4.7237178 2.8319556
200 13.564465 3.0352634 0 6.3585572 3.6388732
300 13.133051 4.3835112 0 7.6011086 4.060051
400 14.584346 5.5141254 0 9.0872901 4.4231056
500 15.331515 6.6554832 0 10.411704 4.847642
600 16.953755 7.4794317 0 11.633102 5.2020696
700 16.503256 8.8572339 0 12.900532 5.6694613
800 17.006131 9.877343 0 14.043845 5.5483363
900 17.305927 11.081594 0 15.321546 6.2908201
1000 18.122491 12.126462 0 16.566472 5.7536055
Loop time of 0.0603173 on 8 procs for 1000 steps with 200 atoms
Pair time (%) = 0.00182396 (3.02395)
Neigh time (%) = 0.000557959 (0.92504)
Comm time (%) = 0.0127766 (21.1823)
Outpt time (%) = 0.000280827 (0.465583)
Other time (%) = 0.0448779 (74.4031)
Nlocal: 25 ave 30 max 20 min
Histogram: 1 0 1 1 0 0 3 1 0 1
Nghost: 28.375 ave 36 max 22 min
Histogram: 1 0 1 2 1 0 2 0 0 1
Neighs: 33.125 ave 45 max 22 min
Histogram: 1 0 2 1 0 1 1 0 1 1
Total # of neighbors = 265
Ave neighs/atom = 1.325
Neighbor list builds = 99
Dangerous builds = 96
#undump 1
unfix soft
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 85.0
Lattice spacing in x,y,z = 0.108465 0.108465 0.108465
create_atoms 2 region plane
Created 29929 atoms
set type 2 mass 0.1
29929 settings made for mass
group small type 2
29929 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.5
delete_atoms overlap 0.5 small big
Deleted 12759 atoms, new total = 17370
# SRD run
reset_timestep 0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 search 0.2 collision slip inside ignore overlap yes
fix 3 small viscosity 10 x y 50
fix 4 all enforce2d
# diagnostics
compute tbig big temp/sphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp f_2[8] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:439)
thermo 1000
#dump 1 all atom 500 dump.dimer.mp
#dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 50000
SRD info:
SRD/big particles = 17170 200
big particle diameter max/min = 1 1
SRD temperature & lamda = 1 0.0632456
SRD max distance & max velocity = 0.252982 12.6491
SRD grid counts: 75 75 1
SRD grid size: request, actual (xyz) = 0.25, 0.249111 0.249111 1
SRD per actual grid cell = 5.5499
SRD viscosity = 0.235551
big/SRD mass density ratio = 0.142367
# of rescaled SRD velocities = 0
ave/max small velocity = 4.20347 7.72323
ave/max big velocity = 2.64047 6.60911
Memory usage per processor = 7.0395 Mbytes
Step Temp 2[8] TotEng pebig ebig Press 2[1] 2[2] 2[3] 2[4] 2[5] 2[6] 2[7] 2[8] 2[9] 2[10] 2[11] 2[12]
0 6.9744766 0 0.30175295 21.011259 26.207244 2.7219331 0 0 0 0 0 0 0 0 0 0 0 0
1000 1.906187 3319 0.25279446 20.53509 21.955199 9.3471734 14560 77 77 9 6051 40320 5625 3319 1.2073941 0 1062 0
2000 1.6009081 3420 0.25060769 20.572601 21.765278 12.835365 13521 63 63 1 7515 40320 5625 3420 1.1621445 0 1062 0
3000 1.8288965 3342 0.25195284 20.519576 21.882104 7.1720562 13550 62 62 1 8561 40320 5625 3342 1.1411375 0 1062 0
4000 1.8940522 3383 0.25185767 20.462769 21.873838 7.3011842 13210 55 55 0 9536 40320 5625 3383 1.1541274 0 1062 0
5000 1.7848964 3377 0.25063675 20.438054 21.767801 5.7235852 13258 60 60 1 10628 40320 5625 3377 1.1401366 0 1062 0
6000 2.0436442 3393 0.2528503 20.437534 21.960048 4.3266887 13369 65 65 1 11693 40320 5625 3393 1.1363335 0 1062 0
7000 2.0248598 3377 0.25304247 20.468218 21.976738 9.1535003 13126 69 69 2 12819 40320 5625 3377 1.1556137 0 1062 0
8000 1.9627172 3397 0.25201977 20.425693 21.887917 7.9563872 13216 58 58 3 14113 40320 5625 3397 1.144738 0 1062 0
9000 2.4805409 3385 0.25688024 20.462046 22.310049 6.0178529 13031 42 42 1 15329 40320 5625 3385 1.1667813 0 1062 0
10000 2.534712 3377 0.25802283 20.520922 22.409283 5.8494568 12804 49 50 1 16835 40320 5625 3377 1.1559636 0 1062 0
11000 2.4295377 3368 0.25671703 20.485869 22.295874 7.0797587 13097 56 56 2 18180 40320 5625 3368 1.1634145 0 1062 0
12000 2.5699389 3377 0.25784825 20.479516 22.39412 10.440503 13263 63 63 5 19848 40320 5625 3377 1.1714081 0 1062 0
13000 2.5416625 3359 0.25893582 20.595038 22.488576 6.823793 12926 57 57 1 21307 40320 5625 3359 1.1478982 0 1062 0
14000 2.9400702 3353 0.26140738 20.512878 22.703231 10.592709 12848 67 67 0 22782 40320 5625 3353 1.1642018 0 1062 0
15000 2.7315042 3364 0.26050572 20.589951 22.624922 7.6633608 12640 49 49 0 24273 40320 5625 3364 1.1532394 0 1062 0
16000 2.7176527 3389 0.25840703 20.418 22.442651 8.0150175 13019 59 59 1 25970 40320 5625 3389 1.1555937 0 1062 0
17000 2.883266 3355 0.26040537 20.468173 22.616206 6.053208 12916 54 54 1 27532 40320 5625 3355 1.1363169 0 1062 0
18000 2.8072496 3369 0.26013039 20.500924 22.592325 5.7179969 12989 45 45 0 29011 40320 5625 3369 1.1341799 0 1062 0
19000 2.8007066 3372 0.2602809 20.51887 22.605396 8.9063895 12817 59 59 1 30504 40320 5625 3372 1.1253001 0 1062 0
20000 3.0147455 3352 0.26233709 20.537991 22.783977 10.01786 13099 63 63 2 32100 40320 5625 3352 1.1263738 0 1062 0
21000 2.5502874 3354 0.25762968 20.475174 22.375138 7.4525361 12917 55 55 3 33904 40320 5625 3354 1.1432482 0 1062 0
22000 2.5643661 3357 0.25754499 20.45733 22.367782 9.5567227 12893 58 58 0 35500 40320 5625 3357 1.1309581 0 1062 0
23000 2.8451307 3387 0.26090715 20.540164 22.659786 7.8308779 12735 65 65 2 37080 40320 5625 3387 1.1666359 0 1062 0
24000 2.6241046 3341 0.25916876 20.553849 22.508807 9.7905794 12815 54 54 1 38864 40320 5625 3341 1.1422596 0 1062 0
25000 2.6054468 3374 0.25897446 20.550874 22.491932 9.4099539 13094 59 59 4 40505 40320 5625 3374 1.1887482 0 1062 0
26000 3.1370949 3356 0.26301193 20.50545 22.842586 9.930938 12785 59 59 0 42126 40320 5625 3356 1.1539158 0 1062 0
27000 2.757373 3361 0.26029623 20.552484 22.606727 7.4336931 12687 59 59 2 43728 40320 5625 3361 1.1408006 0 1062 0
28000 2.9939441 3393 0.26250984 20.568491 22.79898 9.201853 12802 66 66 0 45174 40320 5625 3393 1.1429688 0 1062 0
29000 3.1611971 3376 0.26252235 20.444974 22.800066 8.2146139 13042 48 48 0 46696 40320 5625 3376 1.1370708 0 1062 0
30000 2.2624796 3374 0.25475303 20.439753 22.125301 9.3304907 13249 53 53 1 48164 40320 5625 3374 1.1062325 0 1062 0
31000 2.6864602 3393 0.2607928 20.648442 22.649855 7.6108593 13028 58 58 0 49556 40320 5625 3393 1.1154125 0 1062 0
32000 2.8404087 3377 0.26037369 20.497351 22.613455 6.9017135 13055 63 63 1 51004 40320 5625 3377 1.1320087 0 1062 0
33000 2.8467378 3365 0.26095982 20.543541 22.664361 7.194747 13306 58 58 0 52481 40320 5625 3365 1.1312548 0 1062 0
34000 3.0833296 3382 0.26259198 20.509033 22.806114 7.44833 12988 59 60 1 54049 40320 5625 3382 1.1447344 0 1062 0
35000 3.1068536 3382 0.26441995 20.650266 22.964872 9.3804156 13139 54 54 0 55749 40320 5625 3382 1.1272861 0 1062 0
36000 2.6998442 3369 0.25864735 20.452138 22.463522 6.3327985 13317 52 52 0 57348 40320 5625 3369 1.1312386 0 1062 0
37000 2.600171 3376 0.25882039 20.541424 22.478551 9.3909788 12841 57 57 0 58880 40320 5625 3376 1.1319429 0 1062 0
38000 2.3962821 3367 0.25728672 20.560122 22.345352 7.4364329 13039 66 66 0 60627 40320 5625 3367 1.1468141 0 1062 0
39000 2.8548804 3422 0.26044489 20.492753 22.619638 6.0832552 13249 50 50 0 62327 40320 5625 3422 1.1442726 0 1062 0
40000 2.7721124 3375 0.25927374 20.452701 22.517924 10.368128 13197 55 55 1 63903 40320 5625 3375 1.140807 0 1062 0
41000 3.0463159 3378 0.26123216 20.418508 22.688013 10.179554 13030 64 64 0 65629 40320 5625 3378 1.1277894 0 1062 0
42000 2.9625288 3388 0.26205988 20.552817 22.759901 8.8326646 12958 64 64 0 67242 40320 5625 3388 1.159201 0 1062 0
43000 2.7524867 3347 0.2592403 20.464417 22.51502 10.30221 12815 65 65 2 68734 40320 5625 3347 1.1444123 0 1062 0
44000 2.8779981 3354 0.26009923 20.44551 22.589618 12.127509 12743 67 67 3 70309 40320 5625 3354 1.1467915 0 1062 0
45000 2.7833999 3365 0.25968205 20.479753 22.553386 8.6942365 12909 46 47 0 71846 40320 5625 3365 1.1480348 0 1062 0
46000 2.6564678 3370 0.25935897 20.546258 22.525327 9.2618375 12923 61 61 1 73491 40320 5625 3370 1.1528284 0 1062 0
47000 2.821625 3414 0.25999655 20.47859 22.5807 7.5359036 12861 55 55 2 75201 40320 5625 3414 1.1395745 0 1062 0
48000 2.9301623 3351 0.26139433 20.519127 22.702098 9.5177842 13037 49 49 2 76819 40320 5625 3351 1.1472505 0 1062 0
49000 2.528824 3390 0.25834586 20.553364 22.437338 8.953785 13127 49 49 0 78450 40320 5625 3390 1.1495903 0 1062 0
50000 3.0054471 3375 0.261046 20.432787 22.671845 7.9749959 13089 56 56 2 80717 40320 5625 3375 1.1574724 0 1062 0
Loop time of 10.5055 on 8 procs for 50000 steps with 17370 atoms
Pair time (%) = 0.156617 (1.49081)
Neigh time (%) = 0.556925 (5.30126)
Comm time (%) = 0.902042 (8.58637)
Outpt time (%) = 0.00305247 (0.0290559)
Other time (%) = 8.88688 (84.5925)
Nlocal: 2171.25 ave 2567 max 1849 min
Histogram: 2 0 0 1 1 2 1 0 0 1
Nghost: 62.625 ave 71 max 57 min
Histogram: 2 0 1 0 2 2 0 0 0 1
Neighs: 168.25 ave 232 max 120 min
Histogram: 1 0 1 2 2 1 0 0 0 1
Total # of neighbors = 1346
Ave neighs/atom = 0.0774899
Neighbor list builds = 2599
Dangerous builds = 17
Please see the log.cite file for references relevant to this simulation

View File

@ -0,0 +1,312 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD diffusion demo - dimer particles
units lj
atom_style sphere
atom_modify map array first big
dimension 2
# read in clusters of rigid bodies
fix molprop all property/atom mol ghost yes
read_data data.dimer fix molprop NULL Molecules
Reading data file ...
orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
1 by 1 by 1 MPI processor grid
reading atoms ...
200 atoms
read_data CPU = 0.001 seconds
set type 1 mass 1.0
Setting atom values ...
200 settings made for mass
group big type 1
200 atoms in group big
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style soft 1.12
pair_coeff 1 1 0.0
pair_coeff 2 2 0.0 0.0
pair_coeff 1 2 0.0 0.0
variable prefactor equal ramp(0,60)
fix soft all adapt 1 pair soft a * * v_prefactor
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 all enforce2d
#dump 1 all atom 10 dump.dimer.equil
thermo 100
run 1000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42
ghost atom cutoff = 1.42
binsize = 0.71, bins = 27 27 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.557 | 5.557 | 5.557 Mbytes
Step Temp E_pair E_mol TotEng Press
0 3.4028231 0 0 0.83369167 -0.55065517
100 9.5167872 2.392105 0 4.7237178 2.8319556
200 13.564465 3.0352634 0 6.3585572 3.6388732
300 13.133051 4.3835112 0 7.6011086 4.060051
400 14.576837 5.5141059 0 9.0854309 4.422762
500 15.227825 6.6472106 0 10.378028 4.8598912
600 16.93219 7.454865 0 11.603251 5.2908894
700 16.573769 8.7323442 0 12.792918 5.3544684
800 17.482599 9.7221047 0 14.005341 5.6200973
900 18.548144 10.739353 0 15.283649 4.7817995
1000 18.068079 12.058417 0 16.485096 6.5773091
Loop time of 0.0511113 on 1 procs for 1000 steps with 200 atoms
Performance: 8452141.519 tau/day, 19565.142 timesteps/s, 3.913 Matom-step/s
99.6% 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.0095507 | 0.0095507 | 0.0095507 | 0.0 | 18.69
Neigh | 0.0042239 | 0.0042239 | 0.0042239 | 0.0 | 8.26
Comm | 0.002203 | 0.002203 | 0.002203 | 0.0 | 4.31
Output | 8.8531e-05 | 8.8531e-05 | 8.8531e-05 | 0.0 | 0.17
Modify | 0.03336 | 0.03336 | 0.03336 | 0.0 | 65.27
Other | | 0.001685 | | | 3.30
Nlocal: 200 ave 200 max 200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 64 ave 64 max 64 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 275 ave 275 max 275 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 275
Ave neighs/atom = 1.375
Neighbor list builds = 193
Dangerous builds = 0
#undump 1
unfix soft
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 85.0
Lattice spacing in x,y,z = 0.10846523 0.10846523 0.10846523
create_atoms 2 region plane
Created 29929 atoms
using lattice units in orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
create_atoms CPU = 0.007 seconds
set type 2 mass 0.1
Setting atom values ...
29929 settings made for mass
group small type 2
29929 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.5
delete_atoms overlap 0.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 14 14 1
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 12776 atoms, new total = 17353
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 search 0.2 collision slip inside ignore overlap yes
fix 3 all enforce2d
# diagnostics
compute tbig big temp/sphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp f_2[8] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all atom 1000 dump.dimer
#dump 1 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 17153 200
big particle diameter max/min = 1 1
SRD temperature & lamda = 1 0.063245553
SRD max distance & max velocity = 0.25298221 12.649111
SRD grid counts: 75 75 1
SRD grid size: request, actual (xyz) = 0.25, 0.24911072 0.24911072 1
SRD per actual grid cell = 5.544404
SRD viscosity = 0.23553122
big/SRD mass density ratio = 0.14250828
# of rescaled SRD velocities = 0
ave/max small velocity = 4.191188 7.6900178
ave/max big velocity = 2.6813242 7.1846104
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 18.683304, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 26.77 | 26.77 | 26.77 Mbytes
Step Temp f_2[8] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 6.8392143 0 0.297476 20.71529 25.810505 4.0555741 0 0 0 0 0 0 0 0 0 0 0 0
1000 1.2285566 3375 0.24673495 20.492683 21.407958 5.237464 13477 54 54 1 652 16900 5625 3375 1.1653557 0 15 0
2000 1.3561011 3395 0.24763991 20.476182 21.486477 9.2878509 13435 67 67 0 1504 16900 5625 3395 1.1651182 0 15 0
3000 1.2445369 3352 0.24713723 20.515681 21.442861 8.0289529 13186 62 63 2 2379 16900 5625 3352 1.1746721 0 15 0
4000 1.1058201 3389 0.24596239 20.51709 21.340926 10.003266 13466 66 66 0 3264 16900 5625 3389 1.1671415 0 15 0
5000 1.0584198 3407 0.24539623 20.503281 21.291804 9.1119405 13254 64 64 0 4189 16900 5625 3407 1.1687685 0 15 0
6000 1.3335611 3360 0.24737788 20.470239 21.463742 8.6885126 13281 62 62 1 5031 16900 5625 3360 1.1568996 0 15 0
7000 1.1384759 3401 0.24570869 20.47075 21.318914 9.1801119 13059 47 47 1 5878 16900 5625 3401 1.182474 0 15 0
8000 1.2982334 3397 0.24667224 20.435333 21.402517 6.5904007 13405 56 56 0 6729 16900 5625 3397 1.169017 0 24 0
9000 1.0456752 3381 0.24504517 20.482316 21.261344 10.497413 13205 81 81 2 7706 16900 5625 3381 1.1694675 0 24 0
10000 1.2222547 3394 0.24653264 20.479825 21.390405 8.7495888 13296 68 68 1 8581 16900 5625 3394 1.1613437 0 24 0
Loop time of 7.18514 on 1 procs for 10000 steps with 17353 atoms
Performance: 120248.165 tau/day, 1391.761 timesteps/s, 24.151 Matom-step/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.14497 | 0.14497 | 0.14497 | 0.0 | 2.02
Neigh | 0.031835 | 0.031835 | 0.031835 | 0.0 | 0.44
Comm | 0.094201 | 0.094201 | 0.094201 | 0.0 | 1.31
Output | 0.00082765 | 0.00082765 | 0.00082765 | 0.0 | 0.01
Modify | 6.8507 | 6.8507 | 6.8507 | 0.0 | 95.35
Other | | 0.06259 | | | 0.87
Nlocal: 17353 ave 17353 max 17353 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 128 ave 128 max 128 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1334 ave 1334 max 1334 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1334
Ave neighs/atom = 0.076874316
Neighbor list builds = 500
Dangerous builds = 0
Total wall time: 0:00:07

View File

@ -0,0 +1,312 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD diffusion demo - dimer particles
units lj
atom_style sphere
atom_modify map array first big
dimension 2
# read in clusters of rigid bodies
fix molprop all property/atom mol ghost yes
read_data data.dimer fix molprop NULL Molecules
Reading data file ...
orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
2 by 2 by 1 MPI processor grid
reading atoms ...
200 atoms
read_data CPU = 0.001 seconds
set type 1 mass 1.0
Setting atom values ...
200 settings made for mass
group big type 1
200 atoms in group big
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style soft 1.12
pair_coeff 1 1 0.0
pair_coeff 2 2 0.0 0.0
pair_coeff 1 2 0.0 0.0
variable prefactor equal ramp(0,60)
fix soft all adapt 1 pair soft a * * v_prefactor
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 all enforce2d
#dump 1 all atom 10 dump.dimer.equil
thermo 100
run 1000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42
ghost atom cutoff = 1.42
binsize = 0.71, bins = 27 27 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.553 | 5.553 | 5.553 Mbytes
Step Temp E_pair E_mol TotEng Press
0 3.4028231 0 0 0.83369167 -0.55065517
100 9.5167872 2.392105 0 4.7237178 2.8319556
200 13.564465 3.0352634 0 6.3585572 3.6388732
300 13.133051 4.3835112 0 7.6011086 4.060051
400 14.576837 5.5141059 0 9.0854309 4.422762
500 15.227825 6.6472106 0 10.378028 4.8598912
600 16.93219 7.454865 0 11.603251 5.2908894
700 16.573769 8.7323442 0 12.792918 5.3544684
800 17.482599 9.7221047 0 14.005341 5.6200973
900 18.548144 10.739353 0 15.283649 4.7817995
1000 18.068079 12.058417 0 16.485096 6.5773093
Loop time of 0.0424792 on 4 procs for 1000 steps with 200 atoms
Performance: 10169676.521 tau/day, 23540.918 timesteps/s, 4.708 Matom-step/s
98.0% 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.0022758 | 0.0023448 | 0.002442 | 0.1 | 5.52
Neigh | 0.0011082 | 0.0011236 | 0.0011582 | 0.1 | 2.64
Comm | 0.0099484 | 0.010092 | 0.010247 | 0.1 | 23.76
Output | 9.551e-05 | 0.00010604 | 0.00013381 | 0.0 | 0.25
Modify | 0.026025 | 0.026222 | 0.026405 | 0.1 | 61.73
Other | | 0.00259 | | | 6.10
Nlocal: 50 ave 55 max 47 min
Histogram: 2 0 0 0 0 1 0 0 0 1
Nghost: 33.75 ave 38 max 32 min
Histogram: 2 1 0 0 0 0 0 0 0 1
Neighs: 68.75 ave 77 max 64 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Total # of neighbors = 275
Ave neighs/atom = 1.375
Neighbor list builds = 193
Dangerous builds = 0
#undump 1
unfix soft
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 85.0
Lattice spacing in x,y,z = 0.10846523 0.10846523 0.10846523
create_atoms 2 region plane
Created 29929 atoms
using lattice units in orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
create_atoms CPU = 0.002 seconds
set type 2 mass 0.1
Setting atom values ...
29929 settings made for mass
group small type 2
29929 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.5
delete_atoms overlap 0.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 14 14 1
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 12776 atoms, new total = 17353
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 search 0.2 collision slip inside ignore overlap yes
fix 3 all enforce2d
# diagnostics
compute tbig big temp/sphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp f_2[8] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all atom 1000 dump.dimer
#dump 1 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 17153 200
big particle diameter max/min = 1 1
SRD temperature & lamda = 1 0.063245553
SRD max distance & max velocity = 0.25298221 12.649111
SRD grid counts: 75 75 1
SRD grid size: request, actual (xyz) = 0.25, 0.24911072 0.24911072 1
SRD per actual grid cell = 5.544404
SRD viscosity = 0.23553122
big/SRD mass density ratio = 0.14250828
# of rescaled SRD velocities = 0
ave/max small velocity = 4.191188 7.6900178
ave/max big velocity = 2.6813242 7.1846103
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 18.683304, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 13.2 | 13.21 | 13.22 Mbytes
Step Temp f_2[8] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 6.8392143 0 0.297476 20.71529 25.810505 4.0555746 0 0 0 0 0 0 0 0 0 0 0 0
1000 1.1648085 3389 0.24643931 20.514525 21.382307 5.5927686 13390 59 59 0 1015 28224 5625 3389 1.1513276 0 111 0
2000 1.1870311 3385 0.24701637 20.548037 21.432375 5.9269821 13271 57 57 2 1878 28224 5625 3385 1.1619099 0 111 0
3000 1.1362839 3365 0.24577276 20.477942 21.324474 5.1621045 13244 59 60 1 2778 28224 5625 3365 1.1807679 0 111 0
4000 1.3023748 3390 0.24679509 20.442907 21.413176 5.6127077 13413 65 65 1 3705 28224 5625 3390 1.1726946 0 111 0
5000 1.195496 3387 0.2458055 20.43667 21.327314 6.1843476 13248 51 51 1 4638 28224 5625 3387 1.1730279 0 111 0
6000 1.2389419 3387 0.24546635 20.374876 21.297888 5.5909826 13184 54 54 1 5494 28224 5625 3387 1.1859134 0 111 0
7000 1.2068912 3378 0.24564722 20.414447 21.313581 8.5604547 13188 57 57 1 6428 28224 5625 3378 1.1499181 0 111 0
8000 1.1014154 3374 0.24514746 20.449665 21.270219 7.3483529 13179 63 63 0 7591 28224 5625 3374 1.1769322 0 121 0
9000 1.356464 3388 0.24749513 20.463349 21.473915 7.6809833 13138 50 50 2 8485 28224 5625 3388 1.1448659 0 121 0
10000 1.1632951 3402 0.24560819 20.44354 21.310195 9.5738599 13323 64 67 0 9304 28224 5625 3402 1.1550136 0 121 0
Loop time of 2.47185 on 4 procs for 10000 steps with 17353 atoms
Performance: 349536.432 tau/day, 4045.561 timesteps/s, 70.203 Matom-step/s
99.4% 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.037524 | 0.039903 | 0.042215 | 1.1 | 1.61
Neigh | 0.01053 | 0.010805 | 0.011068 | 0.2 | 0.44
Comm | 0.14536 | 0.14822 | 0.15102 | 0.6 | 6.00
Output | 0.00051847 | 0.00054674 | 0.0006272 | 0.0 | 0.02
Modify | 2.2276 | 2.2334 | 2.2381 | 0.3 | 90.35
Other | | 0.03895 | | | 1.58
Nlocal: 4338.25 ave 4488 max 4277 min
Histogram: 2 1 0 0 0 0 0 0 0 1
Nghost: 76.75 ave 85 max 69 min
Histogram: 2 0 0 0 0 0 0 0 1 1
Neighs: 331.25 ave 355 max 306 min
Histogram: 1 0 0 1 0 0 1 0 0 1
Total # of neighbors = 1325
Ave neighs/atom = 0.076355673
Neighbor list builds = 507
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -0,0 +1,328 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD viscosity demo - dimer particles
units lj
atom_style sphere
atom_modify map array first big
dimension 2
# read in clusters of rigid bodies
fix molprop all property/atom mol ghost yes
read_data data.dimer fix molprop NULL Molecules
Reading data file ...
orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
1 by 1 by 1 MPI processor grid
reading atoms ...
200 atoms
read_data CPU = 0.001 seconds
set type 1 mass 1.0
Setting atom values ...
200 settings made for mass
group big type 1
200 atoms in group big
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style soft 1.12
pair_coeff 1 1 0.0
pair_coeff 2 2 0.0 0.0
pair_coeff 1 2 0.0 0.0
variable prefactor equal ramp(0,60)
fix soft all adapt 1 pair soft a * * v_prefactor
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 all enforce2d
#dump 1 all atom 10 dump.dimer.equil
thermo 100
run 1000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42
ghost atom cutoff = 1.42
binsize = 0.71, bins = 27 27 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.557 | 5.557 | 5.557 Mbytes
Step Temp E_pair E_mol TotEng Press
0 3.4028231 0 0 0.83369167 -0.55065517
100 9.5167872 2.392105 0 4.7237178 2.8319556
200 13.564465 3.0352634 0 6.3585572 3.6388732
300 13.133051 4.3835112 0 7.6011086 4.060051
400 14.576837 5.5141059 0 9.0854309 4.422762
500 15.227825 6.6472106 0 10.378028 4.8598912
600 16.93219 7.454865 0 11.603251 5.2908894
700 16.573769 8.7323442 0 12.792918 5.3544684
800 17.482599 9.7221047 0 14.005341 5.6200973
900 18.548144 10.739353 0 15.283649 4.7817995
1000 18.068079 12.058417 0 16.485096 6.5773091
Loop time of 0.0502552 on 1 procs for 1000 steps with 200 atoms
Performance: 8596132.389 tau/day, 19898.455 timesteps/s, 3.980 Matom-step/s
99.4% 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.0095071 | 0.0095071 | 0.0095071 | 0.0 | 18.92
Neigh | 0.0042809 | 0.0042809 | 0.0042809 | 0.0 | 8.52
Comm | 0.0022049 | 0.0022049 | 0.0022049 | 0.0 | 4.39
Output | 0.0001259 | 0.0001259 | 0.0001259 | 0.0 | 0.25
Modify | 0.032467 | 0.032467 | 0.032467 | 0.0 | 64.60
Other | | 0.00167 | | | 3.32
Nlocal: 200 ave 200 max 200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 64 ave 64 max 64 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 275 ave 275 max 275 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 275
Ave neighs/atom = 1.375
Neighbor list builds = 193
Dangerous builds = 0
#undump 1
unfix soft
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 85.0
Lattice spacing in x,y,z = 0.10846523 0.10846523 0.10846523
create_atoms 2 region plane
Created 29929 atoms
using lattice units in orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
create_atoms CPU = 0.006 seconds
set type 2 mass 0.1
Setting atom values ...
29929 settings made for mass
group small type 2
29929 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.5
delete_atoms overlap 0.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 14 14 1
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 12776 atoms, new total = 17353
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 search 0.2 collision slip inside ignore overlap yes
fix 3 small viscosity 10 x y 50
fix 4 all enforce2d
# diagnostics
compute tbig big temp/sphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp f_2[8] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all atom 500 dump.dimer.mp
#dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 25000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 17153 200
big particle diameter max/min = 1 1
SRD temperature & lamda = 1 0.063245553
SRD max distance & max velocity = 0.25298221 12.649111
SRD grid counts: 75 75 1
SRD grid size: request, actual (xyz) = 0.25, 0.24911072 0.24911072 1
SRD per actual grid cell = 5.544404
SRD viscosity = 0.23553122
big/SRD mass density ratio = 0.14250828
# of rescaled SRD velocities = 0
ave/max small velocity = 4.191188 7.6900178
ave/max big velocity = 2.6813242 7.1846104
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 18.683304, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 26.77 | 26.77 | 26.77 Mbytes
Step Temp f_2[8] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 6.8392143 0 0.297476 20.71529 25.810505 4.0555741 0 0 0 0 0 0 0 0 0 0 0 0
1000 1.3421139 3394 0.24797209 20.515424 21.515299 5.9986227 13474 52 52 1 704 16900 5625 3394 1.1328453 0 14 0
2000 1.3372296 3366 0.24694513 20.429958 21.426194 9.640193 13302 74 74 0 1516 16900 5625 3366 1.1634167 0 14 0
3000 1.4022742 3360 0.24799552 20.472637 21.517331 5.9446731 13483 47 47 0 2989 16900 5625 3360 1.1774442 0 217 0
4000 1.6325677 3376 0.25066282 20.532497 21.74876 6.9698781 13206 61 61 2 4198 16900 5625 3376 1.1749717 0 217 0
5000 2.0992887 3391 0.25484065 20.547279 22.111249 10.648531 13414 62 69 1 6389 16900 5625 3391 1.1862903 0 412 0
6000 1.7584548 3388 0.25126127 20.490636 21.800684 8.68036 13456 58 58 0 7672 16900 5625 3388 1.1553986 0 412 0
7000 2.2384486 3343 0.25650382 20.58791 22.255554 12.008146 13187 59 59 0 8879 16900 5625 3343 1.1728994 0 412 0
8000 2.4981644 3380 0.25734806 20.467672 22.328804 6.7156077 13383 51 51 0 10085 16900 5625 3380 1.156205 0 412 0
9000 2.4321991 3384 0.25838085 20.606426 22.418415 9.9820399 12847 55 55 0 11445 16900 5625 3384 1.156145 0 412 0
10000 2.2560205 3387 0.25541566 20.480404 22.161139 10.87418 13022 66 66 0 12863 16900 5625 3387 1.1559136 0 412 0
11000 2.2321955 3378 0.25533735 20.491359 22.154345 8.510825 13175 70 70 1 14273 16900 5625 3378 1.1470284 0 412 0
12000 2.2715125 3377 0.25469529 20.40636 22.098637 9.0604601 13146 68 68 0 15742 16900 5625 3377 1.171755 0 412 0
13000 2.3766974 3364 0.25667348 20.499635 22.270275 10.766786 12829 60 60 1 17214 16900 5625 3364 1.130354 0 412 0
14000 2.5659704 3347 0.25802994 20.47632 22.387967 8.2568074 13090 66 66 1 18767 16900 5625 3347 1.1609852 0 412 0
15000 2.3235671 3400 0.25603152 20.483517 22.214574 5.4785711 13389 50 50 0 20173 16900 5625 3400 1.149754 0 412 0
16000 2.6335413 3373 0.25956137 20.558854 22.520843 4.7121947 13027 58 58 1 21668 16900 5625 3373 1.1308267 0 412 0
17000 2.5603168 3410 0.25744829 20.430065 22.337501 6.1898616 13218 51 51 1 23170 16900 5625 3410 1.1285699 0 412 0
18000 2.7801428 3362 0.26002524 20.489884 22.56109 8.9919312 13002 57 57 3 24829 16900 5625 3362 1.1610153 0 412 0
19000 2.7869738 3364 0.26033026 20.51126 22.587555 9.6539159 13085 46 46 0 26476 16900 5625 3364 1.1431913 0 412 0
20000 2.678182 3383 0.2586317 20.444934 22.44018 7.3468277 12939 42 42 0 27992 16900 5625 3383 1.143534 0 412 0
21000 2.8094503 3375 0.26088069 20.542272 22.635313 8.2257869 13449 52 52 0 29570 16900 5625 3375 1.1375499 0 412 0
22000 3.2220363 3377 0.26464914 20.561866 22.962283 6.6329375 13178 65 65 6 31203 16900 5625 3377 1.1683184 0 412 0
23000 3.2268368 3339 0.26414495 20.514543 22.918536 4.6879815 12589 51 51 0 32929 16900 5625 3339 1.1378613 0 412 0
24000 2.6062461 3380 0.25967238 20.588821 22.530474 10.036449 12745 53 54 0 34460 16900 5625 3380 1.1396017 0 412 0
25000 3.2519674 3373 0.26376614 20.462953 22.885669 7.7592712 12856 52 52 1 36172 16900 5625 3373 1.1858891 0 412 0
Loop time of 20.7208 on 1 procs for 25000 steps with 17353 atoms
Performance: 104243.242 tau/day, 1206.519 timesteps/s, 20.937 Matom-step/s
99.7% 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.39343 | 0.39343 | 0.39343 | 0.0 | 1.90
Neigh | 0.09039 | 0.09039 | 0.09039 | 0.0 | 0.44
Comm | 0.26483 | 0.26483 | 0.26483 | 0.0 | 1.28
Output | 0.0021023 | 0.0021023 | 0.0021023 | 0.0 | 0.01
Modify | 19.785 | 19.785 | 19.785 | 0.0 | 95.49
Other | | 0.1847 | | | 0.89
Nlocal: 17353 ave 17353 max 17353 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 146 ave 146 max 146 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1326 ave 1326 max 1326 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1326
Ave neighs/atom = 0.0764133
Neighbor list builds = 1290
Dangerous builds = 0
Total wall time: 0:00:21

View File

@ -0,0 +1,328 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD viscosity demo - dimer particles
units lj
atom_style sphere
atom_modify map array first big
dimension 2
# read in clusters of rigid bodies
fix molprop all property/atom mol ghost yes
read_data data.dimer fix molprop NULL Molecules
Reading data file ...
orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
2 by 2 by 1 MPI processor grid
reading atoms ...
200 atoms
read_data CPU = 0.001 seconds
set type 1 mass 1.0
Setting atom values ...
200 settings made for mass
group big type 1
200 atoms in group big
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style soft 1.12
pair_coeff 1 1 0.0
pair_coeff 2 2 0.0 0.0
pair_coeff 1 2 0.0 0.0
variable prefactor equal ramp(0,60)
fix soft all adapt 1 pair soft a * * v_prefactor
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 all enforce2d
#dump 1 all atom 10 dump.dimer.equil
thermo 100
run 1000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.42
ghost atom cutoff = 1.42
binsize = 0.71, bins = 27 27 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair soft, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.553 | 5.553 | 5.553 Mbytes
Step Temp E_pair E_mol TotEng Press
0 3.4028231 0 0 0.83369167 -0.55065517
100 9.5167872 2.392105 0 4.7237178 2.8319556
200 13.564465 3.0352634 0 6.3585572 3.6388732
300 13.133051 4.3835112 0 7.6011086 4.060051
400 14.576837 5.5141059 0 9.0854309 4.422762
500 15.227825 6.6472106 0 10.378028 4.8598912
600 16.93219 7.454865 0 11.603251 5.2908894
700 16.573769 8.7323442 0 12.792918 5.3544684
800 17.482599 9.7221047 0 14.005341 5.6200973
900 18.548144 10.739353 0 15.283649 4.7817995
1000 18.068079 12.058417 0 16.485096 6.5773093
Loop time of 0.0421376 on 4 procs for 1000 steps with 200 atoms
Performance: 10252121.014 tau/day, 23731.762 timesteps/s, 4.746 Matom-step/s
99.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.002222 | 0.0023177 | 0.0024199 | 0.2 | 5.50
Neigh | 0.0010943 | 0.0011428 | 0.001174 | 0.1 | 2.71
Comm | 0.0097533 | 0.009878 | 0.010001 | 0.1 | 23.44
Output | 9.4323e-05 | 0.0001028 | 0.00012783 | 0.0 | 0.24
Modify | 0.02557 | 0.026225 | 0.026638 | 0.3 | 62.24
Other | | 0.002471 | | | 5.86
Nlocal: 50 ave 55 max 47 min
Histogram: 2 0 0 0 0 1 0 0 0 1
Nghost: 33.75 ave 38 max 32 min
Histogram: 2 1 0 0 0 0 0 0 0 1
Neighs: 68.75 ave 77 max 64 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Total # of neighbors = 275
Ave neighs/atom = 1.375
Neighbor list builds = 193
Dangerous builds = 0
#undump 1
unfix soft
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 85.0
Lattice spacing in x,y,z = 0.10846523 0.10846523 0.10846523
create_atoms 2 region plane
Created 29929 atoms
using lattice units in orthogonal box = (-9.341652 -9.341652 -0.5) to (9.341652 9.341652 0.5)
create_atoms CPU = 0.002 seconds
set type 2 mass 0.1
Setting atom values ...
29929 settings made for mass
group small type 2
29929 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.5
delete_atoms overlap 0.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 14 14 1
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 12776 atoms, new total = 17353
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 200 atoms
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 search 0.2 collision slip inside ignore overlap yes
fix 3 small viscosity 10 x y 50
fix 4 all enforce2d
# diagnostics
compute tbig big temp/sphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp f_2[8] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all atom 500 dump.dimer.mp
#dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 25000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 17153 200
big particle diameter max/min = 1 1
SRD temperature & lamda = 1 0.063245553
SRD max distance & max velocity = 0.25298221 12.649111
SRD grid counts: 75 75 1
SRD grid size: request, actual (xyz) = 0.25, 0.24911072 0.24911072 1
SRD per actual grid cell = 5.544404
SRD viscosity = 0.23553122
big/SRD mass density ratio = 0.14250828
# of rescaled SRD velocities = 0
ave/max small velocity = 4.191188 7.6900178
ave/max big velocity = 2.6813242 7.1846103
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 18.683304, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 13.2 | 13.21 | 13.22 Mbytes
Step Temp f_2[8] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 6.8392143 0 0.297476 20.71529 25.810505 4.0555746 0 0 0 0 0 0 0 0 0 0 0 0
1000 1.2739082 3360 0.24704957 20.486195 21.435256 3.6693454 13497 46 46 2 816 28224 5625 3360 1.1564821 0 54 0
2000 1.3843858 3380 0.24759985 20.451634 21.483001 5.2299666 13363 70 70 0 1671 28224 5625 3380 1.170199 0 54 0
3000 1.3942166 3373 0.24823326 20.499268 21.537959 7.7943821 13214 59 59 2 2600 28224 5625 3373 1.1539593 0 54 0
4000 1.6387342 3366 0.24966206 20.441071 21.661928 4.3859226 13280 49 49 2 3568 28224 5625 3366 1.176006 0 54 0
5000 1.8677297 3388 0.25278915 20.541792 21.933251 5.9053775 13238 68 68 2 4553 28224 5625 3388 1.1728833 0 54 0
6000 1.8884914 3372 0.25216944 20.472555 21.879481 7.5864922 13142 62 62 1 5645 28224 5625 3372 1.1733967 0 54 0
7000 2.0575519 3387 0.25374609 20.483403 22.016279 6.9842803 13101 41 41 0 6805 28224 5625 3387 1.1503024 0 54 0
8000 1.9800593 3373 0.252975 20.474232 21.949376 8.3493951 13176 63 64 1 8166 28224 5625 3373 1.1621339 0 67 0
9000 2.2288114 3403 0.25526729 20.487802 22.148267 6.7676677 12866 61 61 1 9360 28224 5625 3403 1.1446891 0 67 0
10000 2.4854456 3339 0.25713924 20.45903 22.310687 9.3781009 12692 65 65 1 10680 28224 5625 3339 1.1417733 0 67 0
11000 2.5850677 3335 0.25820147 20.476975 22.402851 9.9421534 12954 70 70 2 11964 28224 5625 3335 1.1497985 0 67 0
12000 2.5087529 3358 0.25746572 20.469992 22.339013 9.9566718 12959 58 58 0 13462 28224 5625 3358 1.1365643 0 98 0
13000 2.5480838 3371 0.25761214 20.453395 22.351717 8.6628089 13142 54 54 3 14985 28224 5625 3371 1.1510123 0 98 0
14000 2.946645 3384 0.26176446 20.516743 22.711994 8.5668798 12579 53 53 0 16336 28224 5625 3384 1.1546089 0 98 0
15000 4.025292 3338 0.27188564 20.591315 23.590157 9.8722859 12824 50 50 15 18115 28224 5625 3338 1.164518 0 122 0
16000 2.2744945 3376 0.25598709 20.516221 22.21072 9.1890215 13020 52 52 0 19689 28224 5625 3376 1.1439385 0 122 0
17000 2.3857021 3353 0.25662954 20.489114 22.266462 10.24809 12776 51 51 0 21158 28224 5625 3353 1.1435041 0 122 0
18000 2.9678193 3330 0.26255063 20.56918 22.780206 8.6799225 12810 49 49 2 23066 28224 5625 3330 1.1567395 0 133 0
19000 2.7464034 3368 0.2613984 20.634162 22.680232 9.5420188 12746 47 47 3 24675 28224 5625 3368 1.1426658 0 133 0
20000 2.8228684 3367 0.26137363 20.575046 22.678083 8.0865322 12886 51 51 0 26119 28224 5625 3367 1.1484398 0 133 0
21000 2.8903033 3389 0.26173565 20.556218 22.709494 11.038294 13152 41 41 1 27685 28224 5625 3389 1.1398936 0 133 0
22000 2.8279828 3331 0.26058759 20.503035 22.609882 8.3647396 12895 57 57 1 29333 28224 5625 3331 1.1551348 0 133 0
23000 2.9320035 3376 0.26178899 20.529779 22.714121 7.1841698 13077 54 54 1 30908 28224 5625 3376 1.1453809 0 133 0
24000 2.8508425 3366 0.26104722 20.525884 22.649762 10.680819 13019 58 58 4 32831 28224 5625 3366 1.1391852 0 154 0
25000 2.7878254 3333 0.25961 20.448132 22.525062 11.149479 12960 57 57 1 34494 28224 5625 3333 1.172964 0 154 0
Loop time of 6.5335 on 4 procs for 25000 steps with 17353 atoms
Performance: 330603.792 tau/day, 3826.433 timesteps/s, 66.400 Matom-step/s
99.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 | 0.097519 | 0.10401 | 0.10744 | 1.2 | 1.59
Neigh | 0.027038 | 0.028067 | 0.028678 | 0.4 | 0.43
Comm | 0.39354 | 0.39697 | 0.40246 | 0.6 | 6.08
Output | 0.0013442 | 0.0014045 | 0.0015827 | 0.3 | 0.02
Modify | 5.8667 | 5.8905 | 5.9143 | 0.8 | 90.16
Other | | 0.1126 | | | 1.72
Nlocal: 4338.25 ave 4476 max 4199 min
Histogram: 1 1 0 0 0 0 0 0 1 1
Nghost: 78.5 ave 83 max 75 min
Histogram: 1 0 1 0 0 1 0 0 0 1
Neighs: 328 ave 352 max 309 min
Histogram: 1 0 0 2 0 0 0 0 0 1
Total # of neighbors = 1312
Ave neighs/atom = 0.075606523
Neighbor list builds = 1274
Dangerous builds = 0
Total wall time: 0:00:06

View File

@ -116,4 +116,4 @@ thermo 1000
#dump 2 all image 1000 image.*.jpg type type zoom 1.6 #dump 2 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 6 adiam 1 1 adiam 2 0.2 #dump_modify 2 pad 6 adiam 1 1 adiam 2 0.2
run 100000 run 10000

View File

@ -117,4 +117,4 @@ thermo 1000
#dump 1 all image 500 image.*.jpg type type zoom 1.6 #dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2 #dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 50000 run 10000

View File

@ -1,190 +0,0 @@
LAMMPS (1 Feb 2014)
# SRD diffusion demo - ellipsoids
units lj
atom_style ellipsoid
atom_modify first big
dimension 2
# create big ellipsoidal particles
lattice sq 0.14
Lattice spacing in x,y,z = 2.67261 2.67261 2.67261
region box block 0 10 0 10 -0.5 0.5
create_box 2 box
Created orthogonal box = (0 0 -1.33631) to (26.7261 26.7261 1.33631)
4 by 2 by 1 MPI processor grid
create_atoms 1 region box
Created 100 atoms
set type 1 mass 1.0
100 settings made for mass
set type 1 shape 3.0 1.0 1.0
100 settings made for shape
group big type 1
100 atoms in group big
set group big quat/random 29898
100 settings made for quat/random
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
fix 1 big nve/asphere
fix 2 all enforce2d
compute rot big temp/asphere
#dump 1 all custom 10 dump.ellipsoid.equil id type x y z # quatw quati quatj quatk
thermo_style custom step temp c_rot epair etotal press
thermo 100
run 1000
Memory usage per processor = 3.31932 Mbytes
Step Temp rot E_pair TotEng Press
0 1.44 0.95677852 2.7038078 4.1294078 10.518912
100 2.5524145 2.801098 -0.37027046 2.1566199 0.84703874
200 2.6266386 2.7938164 -0.35322565 2.2471465 1.004886
300 2.9987557 2.9499545 -0.58917376 2.3795944 0.73081788
400 2.8557446 2.8208128 -0.39904801 2.4281391 0.91808964
500 2.4399047 2.8255746 -0.40056447 2.0149412 1.0538908
600 2.854258 2.9166789 -0.53424483 2.2914706 0.8117508
700 2.9593679 2.8231211 -0.40051714 2.5292571 1.1630889
800 2.7632971 2.9060854 -0.52075339 2.2149107 0.77106814
900 2.9905601 2.8869672 -0.49099457 2.4696599 0.69616725
1000 2.8470146 2.9004954 -0.51281252 2.305732 0.68820531
Loop time of 0.0485955 on 8 procs for 1000 steps with 100 atoms
Pair time (%) = 0.0201517 (41.4682)
Neigh time (%) = 0.000492364 (1.01319)
Comm time (%) = 0.0191883 (39.4858)
Outpt time (%) = 0.000273198 (0.562188)
Other time (%) = 0.00848994 (17.4706)
Nlocal: 12.5 ave 16 max 8 min
Histogram: 1 1 0 0 0 3 0 0 1 2
Nghost: 34.125 ave 42 max 28 min
Histogram: 1 0 2 2 0 1 0 1 0 1
Neighs: 46.125 ave 65 max 20 min
Histogram: 1 0 1 0 1 2 0 0 1 2
Total # of neighbors = 369
Ave neighs/atom = 3.69
Neighbor list builds = 174
Dangerous builds = 0
#undump 1
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 120.0
Lattice spacing in x,y,z = 0.0912871 0.0912871 0.0912871
create_atoms 2 region plane
Created 85849 atoms
set type 2 mass 0.01
85849 settings made for mass
group small type 2
85849 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 2.0
neigh_modify one 10000
delete_atoms overlap 1.6 small big
Deleted 71060 atoms, new total = 14889
# SRD run
reset_timestep 0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0005
fix 1 big nve/asphere
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 collision noslip search 0.2 inside ignore exact no bounce 50
fix 3 all enforce2d
# diagnostics
compute tbig big temp/asphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp c_rot f_2[9] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:439)
thermo 1000
#dump 1 all custom 1000 dump.ellipsoid id type x y z # quatw quati quatj quatk
#dump 1 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 100000
SRD info:
SRD/big particles = 14789 100
big particle diameter max/min = 3 1
SRD temperature & lamda = 1 0.1
SRD max distance & max velocity = 0.4 40
SRD grid counts: 107 107 1
SRD grid size: request, actual (xyz) = 0.25, 0.249777 0.249777 2.67261
SRD per actual grid cell = 1.92757
SRD viscosity = 0.688101
big/SRD mass density ratio = 1.37367
# of rescaled SRD velocities = 0
ave/max small velocity = 13.3093 24.3359
ave/max big velocity = 2.08028 5.05671
Memory usage per processor = 10.9077 Mbytes
Step Temp rot 2[9] TotEng pebig ebig Press 2[1] 2[2] 2[3] 2[4] 2[5] 2[6] 2[7] 2[8] 2[9] 2[10] 2[11] 2[12]
0 2.9004954 2.9004954 0 0.025582146 -0.51281252 3.8089257 0.89865242 0 0 0 0 0 0 0 0 0 0 0 0
1000 3.3106106 3.3106106 1.0635866 0.029956176 -0.47263474 4.4601751 1.8111247 14000 35 160 0 224946 98040 11449 4182 1.0635866 1047 50 0
2000 2.2814487 2.2814487 1.2237286 0.017972589 -0.72341981 2.6759388 1.3454977 15318 47 276 0 528340 98040 11449 4136 1.2237286 2383 50 0
3000 4.2476485 4.2476485 1.2992612 0.038526442 -0.59279435 5.7362019 1.6896403 16506 63 410 0 830594 98040 11449 4172 1.2992612 3834 50 0
4000 2.4798681 2.4798681 1.3453264 0.022837826 -0.29467953 3.4003239 2.0765724 17201 51 403 0 1185573 98040 11449 4233 1.3453264 5456 50 0
5000 3.0852629 3.0852629 1.3915904 0.02760985 -0.48621111 4.1108305 1.2676357 17540 61 591 0 1594856 98040 11449 4306 1.3915904 7419 50 0
6000 6.7201122 6.7201122 1.3649223 0.064627842 -0.39052776 9.6224394 2.5524159 17997 59 564 0 2010250 98040 11449 4213 1.3649223 9280 50 0
7000 2.720343 2.720343 1.3909677 0.024282471 -0.43789405 3.6154171 1.5288376 17922 64 342 0 2392388 98040 11449 4228 1.3909677 10947 50 0
8000 1.9181626 1.9181626 1.3514483 0.014305579 -0.72810462 2.1299577 0.89423917 18188 42 260 0 2751626 98040 11449 4236 1.3514483 12556 50 0
9000 2.9090186 2.9090186 1.3688847 0.02558926 -0.52445278 3.8099849 1.1756318 18536 63 440 0 3112508 98040 11449 4227 1.3688847 14164 50 0
10000 1.9647403 1.9647403 1.3979066 0.015375037 -0.63827389 2.2891892 0.65597214 18817 60 466 0 3501352 98040 11449 4257 1.3979066 16016 50 0
11000 1.9989051 1.9989051 1.3872043 0.016191243 -0.56765443 2.4107142 0.80582429 18756 58 767 0 3856028 98040 11449 4254 1.3872043 17611 50 0
12000 1.7538755 1.7538755 1.4594883 0.013930543 -0.53915598 2.0741185 1.0563875 18602 58 335 0 4248666 98040 11449 4251 1.4594883 19350 50 0
13000 13.730871 13.730871 1.4864545 0.13447802 -0.43656501 20.022433 3.6701166 19144 74 681 0 4708523 98040 11449 4104 1.4864545 21589 50 0
14000 5.1078782 5.1078782 1.3637807 0.049721182 -0.20775172 7.4029868 2.559935 18494 65 713 0 5139143 98040 11449 4167 1.3637807 23555 50 0
15000 2.5843962 2.5843962 1.3450247 0.022294373 -0.53134114 3.3194092 1.1069147 18489 52 260 0 5489252 98040 11449 4262 1.3450247 25209 50 0
ERROR: Lost atoms: original 14889 current 14819 (../thermo.cpp:392)

View File

@ -1,247 +0,0 @@
LAMMPS (1 Feb 2014)
# SRD viscosity demo - ellipsoids
units lj
atom_style ellipsoid
atom_modify first big
dimension 2
# create big ellipsoidal particles
lattice sq 0.14
Lattice spacing in x,y,z = 2.67261 2.67261 2.67261
region box block 0 10 0 10 -0.5 0.5
create_box 2 box
Created orthogonal box = (0 0 -1.33631) to (26.7261 26.7261 1.33631)
4 by 2 by 1 MPI processor grid
create_atoms 1 region box
Created 100 atoms
set type 1 mass 1.0
100 settings made for mass
set type 1 shape 3.0 1.0 1.0
100 settings made for shape
group big type 1
100 atoms in group big
set group big quat/random 29898
100 settings made for quat/random
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
fix 1 big nve/asphere
fix 2 all enforce2d
compute rot big temp/asphere
#dump 1 all custom 10 dump.ellipsoid.equil id type x y z # quatw quati quatj quatk
thermo_style custom step temp c_rot epair etotal press
thermo 100
run 1000
Memory usage per processor = 3.31932 Mbytes
Step Temp rot E_pair TotEng Press
0 1.44 0.95677852 2.7038078 4.1294078 10.518912
100 2.5524145 2.801098 -0.37027046 2.1566199 0.84703874
200 2.6266386 2.7938164 -0.35322565 2.2471465 1.004886
300 2.9987557 2.9499545 -0.58917376 2.3795944 0.73081788
400 2.8557446 2.8208128 -0.39904801 2.4281391 0.91808964
500 2.4399047 2.8255746 -0.40056447 2.0149412 1.0538908
600 2.854258 2.9166789 -0.53424483 2.2914706 0.8117508
700 2.9593679 2.8231211 -0.40051714 2.5292571 1.1630889
800 2.7632971 2.9060854 -0.52075339 2.2149107 0.77106814
900 2.9905601 2.8869672 -0.49099457 2.4696599 0.69616725
1000 2.8470146 2.9004954 -0.51281252 2.305732 0.68820531
Loop time of 0.0581853 on 8 procs for 1000 steps with 100 atoms
Pair time (%) = 0.0202803 (34.8546)
Neigh time (%) = 0.000480682 (0.826122)
Comm time (%) = 0.0264942 (45.5342)
Outpt time (%) = 0.000326395 (0.560958)
Other time (%) = 0.0106037 (18.2241)
Nlocal: 12.5 ave 16 max 8 min
Histogram: 1 1 0 0 0 3 0 0 1 2
Nghost: 34.125 ave 42 max 28 min
Histogram: 1 0 2 2 0 1 0 1 0 1
Neighs: 46.125 ave 65 max 20 min
Histogram: 1 0 1 0 1 2 0 0 1 2
Total # of neighbors = 369
Ave neighs/atom = 3.69
Neighbor list builds = 174
Dangerous builds = 0
#undump 1
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 120.0
Lattice spacing in x,y,z = 0.0912871 0.0912871 0.0912871
create_atoms 2 region plane
Created 85849 atoms
set type 2 mass 0.01
85849 settings made for mass
group small type 2
85849 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 2.0
neigh_modify one 10000
delete_atoms overlap 1.6 small big
Deleted 71060 atoms, new total = 14889
# SRD run
reset_timestep 0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0005
fix 1 big nve/asphere
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 collision noslip search 0.2 inside ignore exact no bounce 50
fix 3 small viscosity 20 x y 50
fix 4 all enforce2d
# diagnostics
compute tbig big temp/asphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp c_rot f_2[9] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:439)
thermo 1000
#dump 1 all custom 500 dump.ellipsoid.mp id type x y z # quatw quati quatj quatk
#dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 50000
SRD info:
SRD/big particles = 14789 100
big particle diameter max/min = 3 1
SRD temperature & lamda = 1 0.1
SRD max distance & max velocity = 0.4 40
SRD grid counts: 107 107 1
SRD grid size: request, actual (xyz) = 0.25, 0.249777 0.249777 2.67261
SRD per actual grid cell = 1.92757
SRD viscosity = 0.688101
big/SRD mass density ratio = 1.37367
# of rescaled SRD velocities = 0
ave/max small velocity = 13.3093 24.3359
ave/max big velocity = 2.08028 5.05671
Memory usage per processor = 10.9077 Mbytes
Step Temp rot 2[9] TotEng pebig ebig Press 2[1] 2[2] 2[3] 2[4] 2[5] 2[6] 2[7] 2[8] 2[9] 2[10] 2[11] 2[12]
0 2.9004954 2.9004954 0 0.025582146 -0.51281252 3.8089257 0.89865242 0 0 0 0 0 0 0 0 0 0 0 0
1000 3.1663129 3.1663129 1.0612788 0.028825811 -0.42593131 4.291875 1.8917479 14347 45 319 0 247730 98040 11449 4128 1.0612788 1160 50 0
2000 2.3854865 2.3854865 1.2711805 0.019550917 -0.6434388 2.910936 1.4342405 15199 41 151 0 526468 98040 11449 4191 1.2711805 2321 50 0
3000 2.6796789 2.6796789 1.2494843 0.023573743 -0.48282696 3.5098946 1.6090734 16441 52 230 0 827117 98040 11449 4203 1.2494843 3659 50 0
4000 2.7945661 2.7945661 1.3021617 0.024256529 -0.5523488 3.6115547 1.2702377 16935 52 474 0 1127934 98040 11449 4215 1.3021617 4966 50 0
5000 2.7061959 2.7061959 1.338483 0.023736966 -0.498035 3.5341969 1.2801942 17578 49 277 0 1435089 98040 11449 4261 1.338483 6351 50 0
6000 3.2698703 3.2698703 1.3285507 0.029840303 -0.42918398 4.4429227 1.4528039 17882 63 228 0 1776449 98040 11449 4252 1.3285507 7935 50 0
7000 3.9340641 3.9340641 1.3823898 0.035368008 -0.59581277 5.2659427 1.1321242 18069 49 462 0 2090062 98040 11449 4265 1.3823898 9343 50 0
8000 3.6037728 3.6037728 1.4150583 0.032400676 -0.54548483 4.8241367 1.2091317 18275 56 369 0 2486575 98040 11449 4229 1.4150583 11121 50 0
9000 105.15275 105.15275 1.3630934 1.0504642 -0.27397996 156.40361 23.278069 18139 107 732 0 2861341 98040 11449 4217 1.3630934 12781 50 0
10000 3.5224307 3.5224307 1.3897056 0.0324883 -0.4112387 4.837183 1.6093705 19100 61 347 0 3248400 98040 11449 4204 1.3897056 14424 50 0
11000 4.1949959 4.1949959 1.421272 0.03853305 -0.51335814 5.7371858 1.3586332 18670 52 590 0 3722041 98040 11449 4263 1.421272 16373 50 0
12000 3.1692742 3.1692742 1.3999982 0.028463927 -0.48422456 4.237994 1.1713046 18787 61 323 0 4117517 98040 11449 4202 1.3999982 18125 50 0
13000 3.5868757 3.5868757 1.3193021 0.032298734 -0.53548629 4.8089585 1.0664078 18572 67 224 0 4417636 98040 11449 4277 1.3193021 19546 50 0
14000 3.708681 3.708681 1.317797 0.033355183 -0.55968141 4.9662533 1.3959088 18284 67 207 0 4675359 98040 11449 4253 1.317797 20631 50 0
15000 3.7410393 3.7410393 1.4017441 0.033377852 -0.60452027 4.9696283 1.2506767 18385 51 189 0 4956150 98040 11449 4275 1.4017441 21763 50 0
16000 5.3298522 5.3298522 1.3456075 0.049673767 -0.54555257 7.3959272 1.841432 18693 63 549 0 5301393 98040 11449 4196 1.3456075 23216 50 0
17000 3.7425275 3.7425275 1.321554 0.036608704 -0.12569607 5.4506699 2.3767421 18377 68 526 0 5637038 98040 11449 4261 1.321554 24829 50 0
18000 6.1904009 6.1904009 1.3905006 0.05857936 -0.50181651 8.7218809 1.7936734 18422 63 522 0 6049781 98040 11449 4280 1.3905006 26646 50 0
19000 3.1770374 3.1770374 1.3694174 0.028096405 -0.55051202 4.1832737 0.98036773 18342 54 343 0 6383253 98040 11449 4239 1.3694174 28038 50 0
20000 3.5793112 3.5793112 1.3160294 0.031413769 -0.65597761 4.677196 1.0713128 18739 60 272 0 6692090 98040 11449 4262 1.3160294 29389 50 0
21000 3.2300481 3.2300481 1.3407923 0.027955254 -0.65051393 4.1622578 0.89783071 18582 55 456 0 6999361 98040 11449 4237 1.3407923 30653 50 0
22000 3.5879886 3.5879886 1.3790201 0.031692391 -0.6274228 4.7186802 0.97752405 18768 63 552 0 7350833 98040 11449 4308 1.3790201 32120 50 0
23000 3.5666316 3.5666316 1.4123826 0.031275136 -0.6577261 4.656555 0.99950405 18864 49 231 0 7741276 98040 11449 4265 1.4123826 33939 50 0
24000 3.7306353 3.7306353 1.3854831 0.032426295 -0.7306956 4.827951 0.93575015 18488 63 552 0 8096740 98040 11449 4238 1.3854831 35503 50 0
25000 4.2971901 4.2971901 1.4207289 0.038358698 -0.69158669 5.7112265 1.0308127 18922 58 430 0 8518804 98040 11449 4254 1.4207289 37429 50 0
26000 9.514164 9.514164 1.4209186 0.09200552 -0.47740255 13.698702 2.4102159 18934 63 570 0 8931705 98040 11449 4233 1.4209186 39132 50 0
27000 3.9153535 3.9153535 1.3814961 0.036650525 -0.37698007 5.4568967 1.4531475 19153 65 553 0 9277922 98040 11449 4299 1.3814961 40660 50 0
28000 3.6560048 3.6560048 1.3520603 0.033100525 -0.51910991 4.9283372 1.3474705 19529 59 447 0 9642607 98040 11449 4278 1.3520603 42335 50 0
29000 14.835118 14.835118 1.3981622 0.14535835 -0.4619207 21.642405 3.6917556 19265 52 102 0 9937354 98040 11449 4224 1.3981622 43664 50 0
30000 5.3595251 5.3595251 1.3636194 0.050893845 -0.40810785 7.5775845 1.7023989 19065 43 131 0 10261222 98040 11449 4170 1.3636194 45193 50 0
31000 5.1821698 5.1821698 1.3180039 0.049074014 -0.41480304 7.30663 1.6943582 19142 58 282 0 10584027 98040 11449 4228 1.3180039 46636 50 0
32000 4.3056534 4.3056534 1.3508467 0.040670309 -0.36002116 6.0554024 1.7875405 19065 36 284 0 10933981 98040 11449 4286 1.3508467 48240 50 0
33000 3.8277999 3.8277999 1.3770405 0.034411971 -0.57982354 5.1235984 1.1046562 18838 71 729 0 11329901 98040 11449 4257 1.3770405 50046 50 0
34000 4.6562056 4.6562056 1.3938501 0.043777831 -0.41966518 6.5180812 1.3815841 18914 61 269 0 11758952 98040 11449 4221 1.3938501 51773 50 0
35000 3.4251492 3.4251492 1.3813031 0.031876928 -0.35731644 4.7461558 1.4152845 18838 60 283 0 12159425 98040 11449 4238 1.3813031 53477 50 0
36000 4.2565688 4.2565688 1.3474871 0.039214915 -0.5035788 5.8387088 1.1222014 18765 56 240 0 12568711 98040 11449 4249 1.3474871 55170 50 0
37000 5.3745505 5.3745505 1.4215553 0.053606226 -0.02664916 7.981431 2.8011643 19103 58 504 0 12941065 98040 11449 4270 1.4215553 56743 50 0
38000 4.0346121 4.0346121 1.4354472 0.036753623 -0.53932498 5.472247 1.1475792 18829 62 623 0 13351480 98040 11449 4226 1.4354472 58443 50 0
39000 4.0471971 4.0471971 1.417888 0.037884509 -0.3896991 5.6406246 1.3824278 19047 70 579 0 13752101 98040 11449 4219 1.417888 60208 50 0
40000 4.1611575 4.1611575 1.3712048 0.039505792 -0.31810741 5.8820173 1.6615204 18811 65 378 0 14143802 98040 11449 4313 1.3712048 61793 50 0
41000 4.852673 4.852673 1.3719985 0.044831688 -0.5554927 6.67499 1.2744313 18899 53 414 0 14505662 98040 11449 4274 1.3719985 63358 50 0
42000 4.8338875 4.8338875 1.3595624 0.045465888 -0.43307636 6.7694161 1.6297026 18708 46 360 0 14839866 98040 11449 4224 1.3595624 64895 50 0
43000 5.0243115 5.0243115 1.4371431 0.047111836 -0.47174292 7.0144813 1.5899963 18704 55 291 0 15195383 98040 11449 4209 1.4371431 66440 50 0
44000 7.2748224 7.2748224 1.3693754 0.069498669 -0.49182853 10.347657 1.9007074 18751 73 423 0 15572639 98040 11449 4253 1.3693754 68148 50 0
45000 5.4888002 5.4888002 1.3501677 0.050885254 -0.60200685 7.5763055 1.2841374 18662 51 314 0 15972088 98040 11449 4227 1.3501677 69998 50 0
46000 3.2144774 3.2144774 1.3342547 0.028194354 -0.59171403 4.1978573 0.9459541 18948 50 534 0 16308430 98040 11449 4253 1.3342547 71549 50 0
47000 4.0640905 4.0640905 1.3473081 0.036715084 -0.58898597 5.4665088 1.2043249 19188 57 236 0 16670321 98040 11449 4239 1.3473081 73216 50 0
48000 3.7843815 3.7843815 1.3413467 0.034360184 -0.52284075 5.1158877 1.1195984 19477 57 283 0 17000588 98040 11449 4307 1.3413467 74662 50 0
49000 4.3042567 4.3042567 1.354248 0.039635615 -0.51199566 5.9013468 1.410884 19628 68 456 0 17319627 98040 11449 4277 1.354248 75983 50 0
50000 4.015575 4.015575 1.3058373 0.036258162 -0.58472888 5.3984778 0.84500807 19257 63 416 0 17675269 98040 11449 4254 1.3058373 77468 50 0
Loop time of 11.9502 on 8 procs for 50000 steps with 14889 atoms
Pair time (%) = 1.09132 (9.13222)
Neigh time (%) = 0.959464 (8.02883)
Comm time (%) = 1.19057 (9.96277)
Outpt time (%) = 0.00310364 (0.0259714)
Other time (%) = 8.70577 (72.8502)
Nlocal: 1861.12 ave 1979 max 1606 min
Histogram: 1 0 0 0 1 1 1 0 0 4
Nghost: 35 ave 39 max 32 min
Histogram: 1 0 2 0 3 1 0 0 0 1
Neighs: 46 ave 61 max 31 min
Histogram: 1 1 0 1 1 0 2 0 1 1
Total # of neighbors = 368
Ave neighs/atom = 0.0247162
Neighbor list builds = 2624
Dangerous builds = 0
Please see the log.cite file for references relevant to this simulation

View File

@ -0,0 +1,346 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD diffusion demo - ellipsoids
units lj
atom_style ellipsoid
atom_modify first big
dimension 2
# create big ellipsoidal particles
lattice sq 0.14
Lattice spacing in x,y,z = 2.6726124 2.6726124 2.6726124
region box block 0 10 0 10 -0.5 0.5
create_box 2 box
Created orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
1 by 1 by 1 MPI processor grid
create_atoms 1 region box
Created 100 atoms
using lattice units in orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
create_atoms CPU = 0.000 seconds
set type 1 mass 1.0
Setting atom values ...
100 settings made for mass
set type 1 shape 3.0 1.0 1.0
Setting atom values ...
100 settings made for shape
group big type 1
100 atoms in group big
set group big quat/random 29898
Setting atom values ...
100 settings made for quat/random
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
fix 1 big nve/asphere
fix 2 all enforce2d
compute rot big temp/asphere
compute 0 all property/atom quatw quati quatj quatk shapex shapey shapez
#dump 1 all custom 10 dump.ellipsoid.equil id type x y z c_0[*]
#dump_modify 1 colname c_0[1] quatw colname c_0[2] quati colname c_0[3] quatj colname c_0[4] quatk # colname c_0[5] shapex colname c_0[6] shapey colname c_0[7] shapez
thermo_style custom step temp c_rot epair etotal press
thermo 100
run 1000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- pair gayberne command: doi:10.1063/1.3058435
@Article{Brown09,
author = {W. M. Brown and M. K. Petersen and S. J. Plimpton and G. S. Grest},
title = {Liquid Crystal Nanodroplets in Solution},
journal = {J.~Chem.\ Phys.},
year = 2009,
volume = 130,
number = 4,
pages = {044901}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 2.15, bins = 13 13 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair gayberne, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.611 | 4.611 | 4.611 Mbytes
Step Temp c_rot E_pair TotEng Press
0 1.44 0.95677852 2.7038078 4.1294078 10.518912
100 2.5524145 2.801098 -0.37027046 2.1566199 0.84703874
200 2.6266386 2.7938164 -0.35322565 2.2471465 1.004886
300 2.9987557 2.9499545 -0.58917376 2.3795944 0.73081788
400 2.8557446 2.8208128 -0.39904801 2.4281391 0.91808964
500 2.4399047 2.8255746 -0.40056447 2.0149412 1.0538908
600 2.854258 2.9166789 -0.53424483 2.2914706 0.8117508
700 2.9593679 2.8231211 -0.40051715 2.5292571 1.1630889
800 2.7632972 2.9060854 -0.52075351 2.2149107 0.7710678
900 2.9905597 2.8869667 -0.49099378 2.4696603 0.69616841
1000 2.8470138 2.9005012 -0.51282088 2.3057228 0.68817567
Loop time of 0.192737 on 1 procs for 1000 steps with 100 atoms
Performance: 2241395.423 tau/day, 5188.415 timesteps/s, 518.842 katom-step/s
99.4% 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.17225 | 0.17225 | 0.17225 | 0.0 | 89.37
Neigh | 0.0025287 | 0.0025287 | 0.0025287 | 0.0 | 1.31
Comm | 0.0023396 | 0.0023396 | 0.0023396 | 0.0 | 1.21
Output | 0.00025405 | 0.00025405 | 0.00025405 | 0.0 | 0.13
Modify | 0.013955 | 0.013955 | 0.013955 | 0.0 | 7.24
Other | | 0.001413 | | | 0.73
Nlocal: 100 ave 100 max 100 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 77 ave 77 max 77 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 369 ave 369 max 369 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 369
Ave neighs/atom = 3.69
Neighbor list builds = 174
Dangerous builds = 0
#undump 1
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 120.0
Lattice spacing in x,y,z = 0.091287093 0.091287093 0.091287093
create_atoms 2 region plane
Created 85849 atoms
using lattice units in orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
create_atoms CPU = 0.015 seconds
set type 2 mass 0.01
Setting atom values ...
85849 settings made for mass
group small type 2
85849 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 2.0
neigh_modify one 10000
delete_atoms overlap 1.6 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 10000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 20 20 2
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 71060 atoms, new total = 14889
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0005
fix 1 big nve/asphere
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 collision noslip search 0.2 inside ignore exact no bounce 50
fix 3 all enforce2d
# diagnostics
compute tbig big temp/asphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp c_rot f_2[9] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all custom 1000 dump.ellipsoid id type x y z c_0[*]
#dump_modify 1 colname c_0[1] quatw colname c_0[2] quati colname c_0[3] quatj colname c_0[4] quatk # colname c_0[5] shapex colname c_0[6] shapey colname c_0[7] shapez
#dump 2 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 6 adiam 1 1 adiam 2 0.2
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 14789 100
big particle diameter max/min = 3 1
SRD temperature & lamda = 1 0.1
SRD max distance & max velocity = 0.4 40
SRD grid counts: 107 107 1
SRD grid size: request, actual (xyz) = 0.25, 0.24977686 0.24977686 2.6726124
SRD per actual grid cell = 1.9275711
SRD viscosity = 0.68810145
big/SRD mass density ratio = 1.3736715
# of rescaled SRD velocities = 0
ave/max small velocity = 13.30933 24.335888
ave/max big velocity = 2.0802836 5.05672
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 10000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 26.726124, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair gayberne, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 43.23 | 43.23 | 43.23 Mbytes
Step Temp c_rot f_2[9] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 2.9005012 2.9005012 0 0.025582147 -0.51282088 3.8089259 0.8986241 0 0 0 0 0 0 0 0 0 0 0 0
1000 2.1884096 2.1884096 0.81792923 0.016786763 -0.7613492 2.4993811 1.1765894 13834 35 35 0 241 38416 11449 4172 0.81792923 16 50 0
2000 1.2708697 1.2708697 0.90821156 0.0069438942 -0.8597194 1.0338764 0.9801188 14658 35 35 0 372 38416 11449 4281 0.90821156 16 50 0
3000 1.1130928 1.1130928 0.9590586 0.0052557024 -0.8759868 0.78252152 0.70461705 15267 28 28 0 519 38416 11449 4292 0.9590586 16 50 0
4000 0.8649005 0.8649005 0.9947477 0.0026217985 -0.89834217 0.39035958 0.77420962 15681 36 36 0 698 38416 11449 4339 0.9947477 16 50 0
5000 1.1743692 1.1743692 0.98116608 0.0069116456 -0.72073526 1.0290749 0.8829165 15974 37 37 0 881 38416 11449 4328 0.98116608 16 50 0
6000 1.0190814 1.0190814 1.0138428 0.0048088112 -0.80244733 0.7159839 0.79743882 16092 36 36 0 1090 38416 11449 4319 1.0138428 16 50 0
7000 1.0824823 1.0824823 1.0415165 0.0049127988 -0.88143205 0.73146661 0.48157537 16178 46 46 0 1328 38416 11449 4370 1.0415165 23 50 0
8000 1.0482457 1.0482457 1.0336952 0.0051802902 -0.79059275 0.7712934 0.75744414 16622 33 33 0 1579 38416 11449 4340 1.0336952 24 50 0
9000 0.98889815 0.98889815 1.0126005 0.00397567 -0.88152073 0.59193751 0.52056685 16877 41 41 0 1811 38416 11449 4370 1.0126005 27 50 0
10000 0.96559538 0.96559538 1.0234124 0.0045683795 -0.7585511 0.68018602 0.70666049 16833 32 32 0 2038 38416 11449 4330 1.0234124 27 50 0
Loop time of 9.04639 on 1 procs for 10000 steps with 14889 atoms
Performance: 47753.873 tau/day, 1105.414 timesteps/s, 16.459 Matom-step/s
99.7% 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.862 | 1.862 | 1.862 | 0.0 | 20.58
Neigh | 0.018395 | 0.018395 | 0.018395 | 0.0 | 0.20
Comm | 0.060502 | 0.060502 | 0.060502 | 0.0 | 0.67
Output | 0.00092704 | 0.00092704 | 0.00092704 | 0.0 | 0.01
Modify | 7.0482 | 7.0482 | 7.0482 | 0.0 | 77.91
Other | | 0.05636 | | | 0.62
Nlocal: 14889 ave 14889 max 14889 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 79 ave 79 max 79 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 416 ave 416 max 416 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 416
Ave neighs/atom = 0.02794009
Neighbor list builds = 500
Dangerous builds = 0
Total wall time: 0:00:11

View File

@ -0,0 +1,346 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD diffusion demo - ellipsoids
units lj
atom_style ellipsoid
atom_modify first big
dimension 2
# create big ellipsoidal particles
lattice sq 0.14
Lattice spacing in x,y,z = 2.6726124 2.6726124 2.6726124
region box block 0 10 0 10 -0.5 0.5
create_box 2 box
Created orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
2 by 2 by 1 MPI processor grid
create_atoms 1 region box
Created 100 atoms
using lattice units in orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
create_atoms CPU = 0.001 seconds
set type 1 mass 1.0
Setting atom values ...
100 settings made for mass
set type 1 shape 3.0 1.0 1.0
Setting atom values ...
100 settings made for shape
group big type 1
100 atoms in group big
set group big quat/random 29898
Setting atom values ...
100 settings made for quat/random
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
fix 1 big nve/asphere
fix 2 all enforce2d
compute rot big temp/asphere
compute 0 all property/atom quatw quati quatj quatk shapex shapey shapez
#dump 1 all custom 10 dump.ellipsoid.equil id type x y z c_0[*]
#dump_modify 1 colname c_0[1] quatw colname c_0[2] quati colname c_0[3] quatj colname c_0[4] quatk # colname c_0[5] shapex colname c_0[6] shapey colname c_0[7] shapez
thermo_style custom step temp c_rot epair etotal press
thermo 100
run 1000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- pair gayberne command: doi:10.1063/1.3058435
@Article{Brown09,
author = {W. M. Brown and M. K. Petersen and S. J. Plimpton and G. S. Grest},
title = {Liquid Crystal Nanodroplets in Solution},
journal = {J.~Chem.\ Phys.},
year = 2009,
volume = 130,
number = 4,
pages = {044901}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 2.15, bins = 13 13 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair gayberne, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.61 | 4.61 | 4.61 Mbytes
Step Temp c_rot E_pair TotEng Press
0 1.44 0.95677852 2.7038078 4.1294078 10.518912
100 2.5524145 2.801098 -0.37027046 2.1566199 0.84703874
200 2.6266386 2.7938164 -0.35322565 2.2471465 1.004886
300 2.9987557 2.9499545 -0.58917376 2.3795944 0.73081788
400 2.8557446 2.8208128 -0.39904801 2.4281391 0.91808964
500 2.4399047 2.8255746 -0.40056447 2.0149412 1.0538908
600 2.854258 2.9166789 -0.53424483 2.2914706 0.8117508
700 2.9593679 2.8231211 -0.40051715 2.5292571 1.1630889
800 2.7632972 2.9060855 -0.52075354 2.2149107 0.77106773
900 2.9905599 2.8869667 -0.49099386 2.4696604 0.69616823
1000 2.8470131 2.9005016 -0.51282147 2.3057215 0.68817329
Loop time of 0.0666302 on 4 procs for 1000 steps with 100 atoms
Performance: 6483542.632 tau/day, 15008.201 timesteps/s, 1.501 Matom-step/s
99.0% 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.039208 | 0.042833 | 0.045871 | 1.2 | 64.29
Neigh | 0.00065929 | 0.00071982 | 0.00076852 | 0.0 | 1.08
Comm | 0.013998 | 0.017169 | 0.02087 | 1.9 | 25.77
Output | 0.00018817 | 0.00020663 | 0.00025962 | 0.0 | 0.31
Modify | 0.0035046 | 0.0035933 | 0.003701 | 0.1 | 5.39
Other | | 0.002109 | | | 3.16
Nlocal: 25 ave 27 max 24 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Nghost: 42.25 ave 45 max 38 min
Histogram: 1 0 0 0 0 0 0 2 0 1
Neighs: 92.25 ave 104 max 85 min
Histogram: 1 0 1 1 0 0 0 0 0 1
Total # of neighbors = 369
Ave neighs/atom = 3.69
Neighbor list builds = 174
Dangerous builds = 0
#undump 1
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 120.0
Lattice spacing in x,y,z = 0.091287093 0.091287093 0.091287093
create_atoms 2 region plane
Created 85849 atoms
using lattice units in orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
create_atoms CPU = 0.004 seconds
set type 2 mass 0.01
Setting atom values ...
85849 settings made for mass
group small type 2
85849 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 2.0
neigh_modify one 10000
delete_atoms overlap 1.6 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 10000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 20 20 2
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 71060 atoms, new total = 14889
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0005
fix 1 big nve/asphere
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 collision noslip search 0.2 inside ignore exact no bounce 50
fix 3 all enforce2d
# diagnostics
compute tbig big temp/asphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp c_rot f_2[9] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all custom 1000 dump.ellipsoid id type x y z c_0[*]
#dump_modify 1 colname c_0[1] quatw colname c_0[2] quati colname c_0[3] quatj colname c_0[4] quatk # colname c_0[5] shapex colname c_0[6] shapey colname c_0[7] shapez
#dump 2 all image 1000 image.*.jpg type type zoom 1.6
#dump_modify 2 pad 6 adiam 1 1 adiam 2 0.2
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 14789 100
big particle diameter max/min = 3 1
SRD temperature & lamda = 1 0.1
SRD max distance & max velocity = 0.4 40
SRD grid counts: 107 107 1
SRD grid size: request, actual (xyz) = 0.25, 0.24977686 0.24977686 2.6726124
SRD per actual grid cell = 1.9275711
SRD viscosity = 0.68810145
big/SRD mass density ratio = 1.3736715
# of rescaled SRD velocities = 0
ave/max small velocity = 13.30933 24.335888
ave/max big velocity = 2.080284 5.0567191
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 10000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 26.726124, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair gayberne, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 16.89 | 16.9 | 16.91 Mbytes
Step Temp c_rot f_2[9] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 2.9005016 2.9005016 0 0.025582147 -0.51282147 3.8089259 0.89862191 0 0 0 0 0 0 0 0 0 0 0 0
1000 2.7138279 2.7138279 0.82437872 0.023781703 -0.50274582 3.5408578 1.6816604 13758 32 34 0 274 66564 11449 4238 0.82437872 24 50 0
2000 1.3183118 1.3183118 0.91362053 0.0077748292 -0.80669023 1.1575943 1.1678425 14118 23 23 0 414 66564 11449 4269 0.91362053 24 50 0
3000 1.3117991 1.3117991 0.96889539 0.0065133847 -0.98480276 0.96977785 0.51801823 14675 35 36 0 588 66564 11449 4291 0.96889539 26 50 0
4000 1.1034132 1.1034132 0.95899765 0.0042496304 -1.0113582 0.63272747 0.6382343 15146 38 38 0 776 66564 11449 4309 0.95899765 26 50 0
5000 1.0814177 1.0814177 1.0037423 0.0047549676 -0.90334518 0.70796713 0.76138491 15275 40 40 0 973 66564 11449 4285 1.0037423 26 50 0
6000 1.0515425 1.0515425 0.98728204 0.0041039749 -0.95575757 0.61104083 0.61253791 15685 34 34 0 1205 66564 11449 4328 0.98728204 26 50 0
7000 0.96229389 0.96229389 1.0146054 0.0031968892 -0.95783307 0.47598483 0.4469161 15944 43 43 0 1412 66564 11449 4391 1.0146054 27 50 0
8000 0.98798058 0.98798058 0.99692702 0.0037348841 -0.91600418 0.55608689 0.50558822 16250 43 43 0 1637 66564 11449 4330 0.99692702 27 50 0
9000 1.0120554 1.0120554 1.0099521 0.0039518454 -0.91957229 0.58839026 0.4092229 16367 43 44 0 1899 66564 11449 4309 1.0099521 27 50 0
10000 1.104152 1.104152 0.9993147 0.0053713858 -0.84544079 0.79974564 0.5119979 16331 50 50 0 2108 66564 11449 4353 0.9993147 27 50 0
Loop time of 2.95619 on 4 procs for 10000 steps with 14889 atoms
Performance: 146134.205 tau/day, 3382.736 timesteps/s, 50.366 Matom-step/s
99.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.48773 | 0.52727 | 0.62879 | 8.1 | 17.84
Neigh | 0.0070094 | 0.0072204 | 0.0076255 | 0.3 | 0.24
Comm | 0.12898 | 0.22553 | 0.265 | 11.8 | 7.63
Output | 0.0005957 | 0.00064777 | 0.00075264 | 0.0 | 0.02
Modify | 2.1317 | 2.1512 | 2.166 | 0.9 | 72.77
Other | | 0.04427 | | | 1.50
Nlocal: 3722.25 ave 3968 max 3389 min
Histogram: 1 0 0 0 1 0 0 0 1 1
Nghost: 39.75 ave 44 max 35 min
Histogram: 1 0 0 0 1 0 1 0 0 1
Neighs: 101 ave 125 max 86 min
Histogram: 1 0 1 1 0 0 0 0 0 1
Total # of neighbors = 404
Ave neighs/atom = 0.027134126
Neighbor list builds = 500
Dangerous builds = 0
Total wall time: 0:00:03

View File

@ -0,0 +1,347 @@
LAMMPS (21 Nov 2023 - Development - patch_21Nov2023-665-g17f869bf5e)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# SRD viscosity demo - ellipsoids
units lj
atom_style ellipsoid
atom_modify first big
dimension 2
# create big ellipsoidal particles
lattice sq 0.14
Lattice spacing in x,y,z = 2.6726124 2.6726124 2.6726124
region box block 0 10 0 10 -0.5 0.5
create_box 2 box
Created orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
1 by 1 by 1 MPI processor grid
create_atoms 1 region box
Created 100 atoms
using lattice units in orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
create_atoms CPU = 0.000 seconds
set type 1 mass 1.0
Setting atom values ...
100 settings made for mass
set type 1 shape 3.0 1.0 1.0
Setting atom values ...
100 settings made for shape
group big type 1
100 atoms in group big
set group big quat/random 29898
Setting atom values ...
100 settings made for quat/random
velocity big create 1.44 87287 loop geom
# equilibrate big particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
fix 1 big nve/asphere
fix 2 all enforce2d
compute rot big temp/asphere
compute 0 all property/atom quatw quati quatj quatk shapex shapey shapez
#dump 1 all custom 10 dump.ellipsoid.equil id type x y z c_0[*]
#dump_modify 1 colname c_0[1] quatw colname c_0[2] quati colname c_0[3] quatj colname c_0[4] quatk # colname c_0[5] shapex colname c_0[6] shapey colname c_0[7] shapez
thermo_style custom step temp c_rot epair etotal press
thermo 100
run 1000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- pair gayberne command: doi:10.1063/1.3058435
@Article{Brown09,
author = {W. M. Brown and M. K. Petersen and S. J. Plimpton and G. S. Grest},
title = {Liquid Crystal Nanodroplets in Solution},
journal = {J.~Chem.\ Phys.},
year = 2009,
volume = 130,
number = 4,
pages = {044901}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 2.15, bins = 13 13 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair gayberne, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.611 | 4.611 | 4.611 Mbytes
Step Temp c_rot E_pair TotEng Press
0 1.44 0.95677852 2.7038078 4.1294078 10.518912
100 2.5524145 2.801098 -0.37027046 2.1566199 0.84703874
200 2.6266386 2.7938164 -0.35322565 2.2471465 1.004886
300 2.9987557 2.9499545 -0.58917376 2.3795944 0.73081788
400 2.8557446 2.8208128 -0.39904801 2.4281391 0.91808964
500 2.4399047 2.8255746 -0.40056447 2.0149412 1.0538908
600 2.854258 2.9166789 -0.53424483 2.2914706 0.8117508
700 2.9593679 2.8231211 -0.40051715 2.5292571 1.1630889
800 2.7632972 2.9060854 -0.52075351 2.2149107 0.7710678
900 2.9905597 2.8869667 -0.49099378 2.4696603 0.69616841
1000 2.8470138 2.9005012 -0.51282088 2.3057228 0.68817567
Loop time of 0.192844 on 1 procs for 1000 steps with 100 atoms
Performance: 2240155.241 tau/day, 5185.545 timesteps/s, 518.554 katom-step/s
99.7% 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.17225 | 0.17225 | 0.17225 | 0.0 | 89.32
Neigh | 0.0025614 | 0.0025614 | 0.0025614 | 0.0 | 1.33
Comm | 0.0024746 | 0.0024746 | 0.0024746 | 0.0 | 1.28
Output | 0.0001406 | 0.0001406 | 0.0001406 | 0.0 | 0.07
Modify | 0.014112 | 0.014112 | 0.014112 | 0.0 | 7.32
Other | | 0.001306 | | | 0.68
Nlocal: 100 ave 100 max 100 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 77 ave 77 max 77 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 369 ave 369 max 369 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 369
Ave neighs/atom = 3.69
Neighbor list builds = 174
Dangerous builds = 0
#undump 1
unfix 1
unfix 2
# add small particles as hi density lattice
region plane block INF INF INF INF -0.001 0.001 units box
lattice sq 120.0
Lattice spacing in x,y,z = 0.091287093 0.091287093 0.091287093
create_atoms 2 region plane
Created 85849 atoms
using lattice units in orthogonal box = (0 0 -1.3363062) to (26.726124 26.726124 1.3363062)
create_atoms CPU = 0.015 seconds
set type 2 mass 0.01
Setting atom values ...
85849 settings made for mass
group small type 2
85849 atoms in group small
velocity small create 1.0 593849 loop geom
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 2.0
neigh_modify one 10000
delete_atoms overlap 1.6 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 10000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 20 20 2
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:312)
Deleted 71060 atoms, new total = 14889
# SRD run
reset_timestep 0
neighbor 0.3 multi
neigh_modify delay 0 every 1 check yes
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style gayberne 1.0 3.0 1.0 4.0
pair_coeff 1 1 1.0 1.0 1 1 1 1 1 1
pair_coeff 1 2 1.0 1.0 1 1 1 1 1 1 0.0
pair_coeff 2 2 1.0 1.0 1 1 1 1 1 1 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0005
fix 1 big nve/asphere
fix 2 small srd 20 big 1.0 0.25 49894 shift yes 54979 collision noslip search 0.2 inside ignore exact no bounce 50
fix 3 small viscosity 20 x y 50
fix 4 all enforce2d
# diagnostics
compute tbig big temp/asphere
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
thermo_style custom step temp c_rot f_2[9] etotal v_pebig v_ebig press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:530)
thermo 1000
#dump 1 all custom 500 dump.ellipsoid id type x y z c_0[*]
#dump_modify 1 colname c_0[1] quatw colname c_0[2] quati colname c_0[3] quatj colname c_0[4] quatk # colname c_0[5] shapex colname c_0[6] shapey colname c_0[7] shapez
#dump 1 all image 500 image.*.jpg type type zoom 1.6
#dump_modify 1 pad 6 adiam 1 1 adiam 2 0.2
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
SRD info:
SRD/big particles = 14789 100
big particle diameter max/min = 3 1
SRD temperature & lamda = 1 0.1
SRD max distance & max velocity = 0.4 40
SRD grid counts: 107 107 1
SRD grid size: request, actual (xyz) = 0.25, 0.24977686 0.24977686 2.6726124
SRD per actual grid cell = 1.9275711
SRD viscosity = 0.68810145
big/SRD mass density ratio = 1.3736715
# of rescaled SRD velocities = 0
ave/max small velocity = 13.30933 24.335888
ave/max big velocity = 2.0802836 5.05672
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 10000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 26.726124, bins = 1 1 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair gayberne, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 43.23 | 43.23 | 43.23 Mbytes
Step Temp c_rot f_2[9] TotEng v_pebig v_ebig Press f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] f_2[6] f_2[7] f_2[8] f_2[9] f_2[10] f_2[11] f_2[12]
0 2.9005012 2.9005012 0 0.025582147 -0.51282088 3.8089259 0.8986241 0 0 0 0 0 0 0 0 0 0 0 0
1000 2.3102693 2.3102693 0.82371999 0.019779507 -0.49733043 2.9449709 1.9807143 13954 30 30 0 277 38416 11449 4255 0.82371999 15 50 0
2000 1.5312119 1.5312119 0.90846884 0.008532096 -1.011162 1.2703438 0.58038663 14523 37 37 0 439 38416 11449 4257 0.90846884 20 50 0
3000 1.3603443 1.3603443 0.95241399 0.0085403252 -0.75534393 1.271569 1.2262133 14864 34 35 0 599 38416 11449 4287 0.95241399 20 50 0
4000 2.2408861 2.2408861 0.99089404 0.016876315 -0.82620566 2.5127146 1.2664088 15457 35 35 0 809 38416 11449 4272 0.99089404 21 50 0
5000 1.7110067 1.7110067 0.99729333 0.011146301 -0.88982716 1.6595728 0.97334407 15555 36 36 0 1026 38416 11449 4324 0.99729333 24 50 0
6000 1.684666 1.684666 1.0235606 0.009751253 -1.0582882 1.4518641 0.62435255 15752 45 46 0 1256 38416 11449 4303 1.0235606 24 50 0
7000 2.1142261 2.1142261 1.0160206 0.014786886 -0.94857757 2.2016194 0.7761903 16144 30 30 0 1492 38416 11449 4401 1.0160206 27 50 0
8000 2.5622926 2.5622926 1.0125365 0.019933518 -0.84991443 2.9679015 0.93716383 16302 43 43 0 1720 38416 11449 4346 1.0125365 27 50 0
9000 2.6593623 2.6593623 1.0110535 0.020725053 -0.87669675 3.0857531 0.97818336 16856 44 44 0 2000 38416 11449 4298 1.0110535 30 50 0
10000 2.7567851 2.7567851 1.0379053 0.021598993 -0.8917358 3.2158741 0.74950846 16770 50 53 0 2284 38416 11449 4316 1.0379053 30 50 0
Loop time of 9.02679 on 1 procs for 10000 steps with 14889 atoms
Performance: 47857.551 tau/day, 1107.814 timesteps/s, 16.494 Matom-step/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.8454 | 1.8454 | 1.8454 | 0.0 | 20.44
Neigh | 0.018708 | 0.018708 | 0.018708 | 0.0 | 0.21
Comm | 0.059853 | 0.059853 | 0.059853 | 0.0 | 0.66
Output | 0.00081453 | 0.00081453 | 0.00081453 | 0.0 | 0.01
Modify | 7.0469 | 7.0469 | 7.0469 | 0.0 | 78.07
Other | | 0.05507 | | | 0.61
Nlocal: 14889 ave 14889 max 14889 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 75 ave 75 max 75 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 382 ave 382 max 382 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 382
Ave neighs/atom = 0.025656525
Neighbor list builds = 500
Dangerous builds = 0
Total wall time: 0:00:11

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